Skip to content

Commit f9119b5

Browse files
committed
fixed superfluos http headers, fixed overtime calculation
1 parent 67a06c3 commit f9119b5

File tree

8 files changed

+88
-20
lines changed

8 files changed

+88
-20
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## v0.5.6
4+
5+
### Bugfix
6+
7+
- Superfluous HTTP header error
8+
- fixed overtime calculation across years
9+
10+
---
11+
312
## v0.5.5
413

514
### Features

Taskfile.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ tasks:
3636
deps: [css, gen, winres]
3737
cmds:
3838
- go build -ldflags "-w -s -H=windowsgui" .
39+
build-debug:
40+
desc: Run the application
41+
deps: [css, gen, winres]
42+
cmds:
43+
- go build -ldflags "-H=windowsgui" .
3944
release:
4045
desc: Tag commit and push to remote
4146
cmds:

internal/components/components.templ

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"time"
1111
)
1212

13-
var version string = "v0.5.5"
13+
var version string = "v0.5.6"
1414

1515
func yearSelectList() []int {
1616
currentYear := time.Now().Year()

internal/database/client.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,16 @@ func GetRecordsForDate(date time.Time) []Timeframe {
275275
return timeframes
276276
}
277277

278+
func GetRecordsUntilDay(day time.Time) []Timeframe {
279+
statement := "SELECT * FROM timeframes WHERE date<=date(?);"
280+
timeframes, err := getTimeframes(statement, day.Format("2006-01-02"))
281+
if err != nil {
282+
log.Printf("error GetRecordsForDate: %v", err)
283+
return []Timeframe{}
284+
}
285+
return timeframes
286+
}
287+
278288
func GetRecordsForProjectAndMonth(year int, month int, projectid int) []Timeframe {
279289
statement := "SELECT * FROM timeframes WHERE year=? AND month=? AND projectid=?"
280290
timeframes, err := getTimeframes(statement, year, month, projectid)
@@ -628,6 +638,34 @@ func GetLocationDaysForYear(year time.Time) []LocationDays {
628638
return locationDays
629639
}
630640

641+
func GetYears() []int {
642+
var years []int
643+
statement, err := DB.Prepare("SELECT DISTINCT year FROM timeframes")
644+
if err != nil {
645+
log.Printf("could not prepare statement GetYears: %v", err)
646+
return []int{}
647+
}
648+
defer statement.Close()
649+
650+
rows, err := statement.Query()
651+
if err != nil {
652+
log.Printf("could not query database GetYears: %v", err)
653+
return []int{}
654+
}
655+
defer rows.Close()
656+
657+
for rows.Next() {
658+
var year int
659+
err = rows.Scan(&year)
660+
if err != nil {
661+
log.Printf("could not scan rows GetYears: %v", err)
662+
return []int{}
663+
}
664+
years = append(years, year)
665+
}
666+
return years
667+
}
668+
631669
func GetVersion() {
632670
var version string
633671
err = DB.QueryRow("SELECT SQLITE_VERSION()").Scan(&version)

internal/handlers/handler_helpers.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -237,25 +237,40 @@ func GetProjectsHoursOverview(month time.Time) []database.ProjectHoursLocationsD
237237
}
238238

239239
func GetOvertimeHoursUntilDay(year time.Time, day time.Time) database.ProjectHours {
240-
projects := database.GetProjects()
240+
//projects := database.GetProjects()
241241
total, err := time.ParseDuration("0s")
242242
if err != nil {
243243
log.Println(err)
244244
}
245-
for _, project := range projects {
246-
records := database.GetRecordsForProjectAndYearUntilToday(year, day, project.ID)
247-
duration := workTotalForRecords(records)
248-
total += duration
249-
}
245+
//for _, project := range projects {
246+
//records := database.GetRecordsForProjectAndYearUntilToday(year, day, project.ID)
247+
records := database.GetRecordsUntilDay(day)
248+
duration := workTotalForRecords(records)
249+
total += duration
250+
//}
250251
workTotalTarget, err := time.ParseDuration(viper.GetString("worktime_per_week"))
251252
if err != nil {
252253
log.Println(err)
253254
}
255+
// TODO: Consider overtime offset only once
256+
// TODO: Consider hours from previous year
257+
// TODO: Write Work Hours per Day into Records? Extra days table?
254258
offsetOvertime, err := time.ParseDuration(viper.GetString("offset_overtime"))
255259
if err != nil {
256260
log.Println(err)
257261
}
258-
overTimeHours := offsetOvertime.Hours() + total.Hours() - float64(GetWorkDaysUntilDay(year, day))*workTotalTarget.Hours()/5
262+
263+
// Calculate work days
264+
years := database.GetYears()
265+
workdays := 0
266+
for _, yearDB := range years {
267+
if yearDB <= year.Year() {
268+
year_as_time, _ := time.Parse("2006", fmt.Sprintf("%d", yearDB))
269+
workdays += GetWorkDaysForYearUntilDay(year_as_time, day)
270+
}
271+
}
272+
273+
overTimeHours := offsetOvertime.Hours() + total.Hours() - float64(workdays)*workTotalTarget.Hours()/5
259274
return database.ProjectHours{
260275
Project: database.Project{Activity: "", Details: "", Name: "Overtime"},
261276
Hours: fmt.Sprintf("%.2f", overTimeHours),
@@ -272,13 +287,14 @@ func GetWorkDays(month time.Time) int {
272287
}
273288
}
274289

275-
func GetWorkDaysUntilDay(year time.Time, day time.Time) int {
290+
// If year is smaller than year of day, work days for whole year are returned
291+
func GetWorkDaysForYearUntilDay(year time.Time, day time.Time) int {
276292
startOfYear, err := time.Parse("2006-01-02", fmt.Sprintf("%d-01-01", year.Year()))
277293
if err != nil {
278294
log.Println(err)
279295
}
280296
var endDate time.Time
281-
if year.Year() < time.Now().Year() {
297+
if year.Year() < day.Year() {
282298
endDate, err = time.Parse("2006-01-02", fmt.Sprintf("%d-12-31", year.Year()))
283299
if err != nil {
284300
log.Println(err)

internal/handlers/handlers.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func HomePage(w http.ResponseWriter, r *http.Request) {
4747
workDeltaWeek(workTotalWeek(activeDate), activeDate), GetOvertimeHoursUntilDay(activeDate, activeDate))
4848
err := component.Render(r.Context(), w)
4949
if err != nil {
50-
w.WriteHeader(http.StatusInternalServerError)
50+
//w.WriteHeader(http.StatusInternalServerError)
5151
log.Printf("error render homepage: %v", err)
5252
}
5353
}
@@ -62,7 +62,7 @@ func RecordsPageHandler(w http.ResponseWriter, r *http.Request) {
6262
workDeltaWeek(workTotalWeek(activeDate), activeDate), GetOvertimeHoursUntilDay(activeDate, activeDate))
6363
err := component.Render(r.Context(), w)
6464
if err != nil {
65-
w.WriteHeader(http.StatusInternalServerError)
65+
//w.WriteHeader(http.StatusInternalServerError)
6666
log.Printf("error render records: %v", err)
6767
}
6868
}
@@ -88,7 +88,7 @@ func RecordsPageDateChangeHandler(w http.ResponseWriter, r *http.Request) {
8888
workDeltaWeek(workTotalWeek(activeDate), activeDate), GetOvertimeHoursUntilDay(activeDate, activeDate))
8989
err = component.Render(r.Context(), w)
9090
if err != nil {
91-
w.WriteHeader(http.StatusInternalServerError)
91+
//w.WriteHeader(http.StatusInternalServerError)
9292
log.Printf("error render records: %v", err)
9393
return
9494
}
@@ -101,7 +101,7 @@ func RecordsHandler(w http.ResponseWriter, r *http.Request) {
101101
)
102102
err := component.Render(r.Context(), w)
103103
if err != nil {
104-
w.WriteHeader(http.StatusInternalServerError)
104+
//w.WriteHeader(http.StatusInternalServerError)
105105
log.Printf("error render records: %v", err)
106106
return
107107
}
@@ -110,7 +110,7 @@ func RecordsHandler(w http.ResponseWriter, r *http.Request) {
110110
func ProjectsHandler(w http.ResponseWriter, r *http.Request) {
111111
err := components.Projects(database.GetProjects()).Render(r.Context(), w)
112112
if err != nil {
113-
w.WriteHeader(http.StatusInternalServerError)
113+
//w.WriteHeader(http.StatusInternalServerError)
114114
log.Printf("error render projects: %v", err)
115115
return
116116
}
@@ -126,7 +126,7 @@ func MonthlySummaryHandler(w http.ResponseWriter, r *http.Request) {
126126
)
127127
err := component.Render(r.Context(), w)
128128
if err != nil {
129-
w.WriteHeader(http.StatusInternalServerError)
129+
//w.WriteHeader(http.StatusInternalServerError)
130130
log.Printf("error render monthly summary: %v", err)
131131
return
132132
}
@@ -153,7 +153,7 @@ func YearlySummaryHandler(w http.ResponseWriter, r *http.Request) {
153153
)
154154
err := component.Render(r.Context(), w)
155155
if err != nil {
156-
w.WriteHeader(http.StatusInternalServerError)
156+
//w.WriteHeader(http.StatusInternalServerError)
157157
log.Printf("error render yearly summary: %v", err)
158158
return
159159
}

internal/handlers/handlers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ func TestGetWorkDays(t *testing.T) {
1717
func TestGetWorkDaysUntilDay(t *testing.T) {
1818
HandlerInit()
1919
fmt.Println("Today:", time.Now().String())
20-
fmt.Println("Days:", GetWorkDaysUntilDay(time.Now(), time.Now()))
20+
fmt.Println("Days:", GetWorkDaysForYearUntilDay(time.Now(), time.Now()))
2121
}

main_windows.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ func getlanternSysTray() {
111111

112112
go func() {
113113
<-mQuitOrig.ClickedCh
114-
fmt.Println("Requesting quit")
114+
log.Println("Requesting quit")
115115
systray.Quit()
116-
fmt.Println("Finished quitting")
116+
log.Println("Finished quitting")
117117
}()
118118

119119
go func() {

0 commit comments

Comments
 (0)