diff --git a/Backend/endpoints/pdf-create.go b/Backend/endpoints/pdf-create.go index 01efb09..6682409 100644 --- a/Backend/endpoints/pdf-create.go +++ b/Backend/endpoints/pdf-create.go @@ -21,7 +21,7 @@ import ( const DE_DATE string = "02.01.2006" const FILE_YEAR_MONTH string = "2006_01" -const PDF_DIRECTORY = "/home/tom/Code/arbeitszeitmessung/Backend/doc" +var PDF_DIRECTORY = helper.GetEnv("PDF_PATH", "/doc/") // TODO func PDFCreateController(w http.ResponseWriter, r *http.Request) { helper.RequiresLogin(Session, w, r) @@ -99,9 +99,11 @@ func convertDaysToTypst(days []models.IWorkDay, u models.User, weekbase models.W var thisTypstDay typstDay workVirtual, pause, overtime := day.GetTimes(u, weekbase, true) + overtime = workVirtual - u.ArbeitszeitProWocheFrac(0.2) - if day.Type() != models.DayTypeHoliday { - overtime = workVirtual - u.ArbeitszeitProWocheFrac(0.2) + if day.Type() == models.DayTypeHoliday { + // workVirtual = 0 + overtime = 0 } thisTypstDay.Date = day.Date().Format(DE_DATE) thisTypstDay.Worktime = helper.FormatDurationFill(workVirtual, true) @@ -173,13 +175,13 @@ func createReports(employes []models.User, startDate time.Time) []typstData { } func createEmployeReport(employee models.User, startDate, endDate time.Time) (typstData, error) { - publicHolidays, _ := models.GetHolidaysFromTo(startDate, endDate) - targetHoursThisMonth := employee.ArbeitszeitProWocheFrac(.2) * time.Duration(helper.GetWorkingDays(startDate, endDate)-len(publicHolidays)) - daysThisMonth := helper.GenerateDateRange(startDate, endDate) - mondaysThisMonth := helper.GetMondays(daysThisMonth, false) + // publicHolidays, _ := models.GetHolidaysFromTo(startDate, endDate) + targetHoursThisMonth := employee.ArbeitszeitProWocheFrac(.2) * time.Duration(helper.GetWorkingDays(startDate, endDate)) //-len(publicHolidays) + mondaysThisMonth := helper.GetMondays(helper.GenerateDateRange(startDate, endDate), false) var weeks []models.WorkWeek var workHours, kurzarbeitHours time.Duration + for _, monday := range mondaysThisMonth { var week models.WorkWeek if monday.After(startDate) { @@ -188,9 +190,13 @@ func createEmployeReport(employee models.User, startDate, endDate time.Time) (ty week = models.NewWorkWeek(employee, startDate, monday.Add(6*24*time.Hour), true) } workHours += week.WorktimeVirtual - kurzarbeitHours += week.WorktimeVirtual - week.Worktime + kurzarbeitHours += week.Kurzarbeit weeks = append(weeks, week) } + + monthOvertime := workHours - targetHoursThisMonth + totalOvertime, err := employee.GetReportedOvertime(endDate) + var typstDays []typstDay for _, week := range weeks { weekTypstDays, err := convertDaysToTypst(week.Days, employee, week.WeekBase) @@ -201,37 +207,6 @@ func createEmployeReport(employee models.User, startDate, endDate time.Time) (ty typstDays = append(typstDays, weekTypstDays...) } - slog.Info("Weeks for the month", "week len", len(weeks), "week", weeks) - // workDaysThisMonth := models.GetDays(employee, startDate, endDate.AddDate(0, 0, 1), false) - - // var weekbase models.WorktimeBase - // if lenWorkDays(workDaysThisMonth) == helper.GetWorkingDays(startDate, endDate) { - // weekbase = models.WorktimeBaseWeek - // } else { - // weekbase = models.WorktimeBaseDay - // } - - // slog.Debug("Baseline Working hours", "targetHours", targetHoursThisMonth.Hours(), "days", helper.GetWorkingDays(startDate, endDate), "workdays", lenWorkDays(workDaysThisMonth)) - - // var workHours, kurzarbeitHours time.Duration - // for _, day := range workDaysThisMonth { - // tmpvirtualHours := day.GetWorktime(employee, weekbase, true) - // tmpactualHours := day.GetWorktime(employee, weekbase, false) - // if day.IsKurzArbeit() && tmpvirtualHours > tmpactualHours { - // slog.Debug("Adding kurzarbeit to workday", "day", day.Date()) - // kurzarbeitHours += tmpvirtualHours - tmpactualHours - // } - // workHours += tmpvirtualHours - // } - worktimeBalance := workHours - targetHoursThisMonth - - // typstDays, err := convertDaysToTypst(workDaysThisMonth, employee, weekbase) - // if err != nil { - // slog.Warn("Failed to convert to days", slog.Any("error", err)) - // return typstData{}, err - // } - - totalOvertime, err := employee.GetReportedOvertime(endDate) if err != nil { slog.Error("Cannot retrieve total Overtime", "Error", err) } @@ -239,10 +214,10 @@ func createEmployeReport(employee models.User, startDate, endDate time.Time) (ty metadata := typstMetadata{ EmployeeName: fmt.Sprintf("%s %s", employee.Vorname, employee.Name), TimeRange: fmt.Sprintf("%s - %s", startDate.Format(DE_DATE), endDate.Format(DE_DATE)), - Overtime: helper.FormatDurationFill(worktimeBalance, true), + Overtime: helper.FormatDurationFill(monthOvertime, true), WorkTime: helper.FormatDurationFill(workHours, true), Kurzarbeit: helper.FormatDurationFill(kurzarbeitHours, true), - OvertimeTotal: helper.FormatDurationFill(totalOvertime+worktimeBalance, true), + OvertimeTotal: helper.FormatDurationFill(totalOvertime+monthOvertime, true), CurrentTimestamp: time.Now().Format("02.01.2006 - 15:04 Uhr"), } return typstData{Meta: metadata, Days: typstDays, FileName: fmt.Sprintf("%s_%s.pdf", startDate.Format(FILE_YEAR_MONTH), employee.Name)}, nil diff --git a/Backend/models/publicHoliday.go b/Backend/models/publicHoliday.go index d4fb0d1..bc1b11d 100644 --- a/Backend/models/publicHoliday.go +++ b/Backend/models/publicHoliday.go @@ -119,8 +119,6 @@ func (p *PublicHoliday) RequiresAction() bool { } func (p *PublicHoliday) GetWorktime(u User, base WorktimeBase, includeKurzarbeit bool) time.Duration { - return 0 - switch base { case WorktimeBaseDay: return u.ArbeitszeitProTagFrac(float32(p.worktime) / 100) diff --git a/Backend/models/workWeek.go b/Backend/models/workWeek.go index ba32fba..5a4ab18 100644 --- a/Backend/models/workWeek.go +++ b/Backend/models/workWeek.go @@ -31,6 +31,7 @@ type WorkWeek struct { Overtime time.Duration Status WeekStatus WeekBase WorktimeBase + Kurzarbeit time.Duration } type WeekStatus int8 @@ -72,8 +73,13 @@ func (w *WorkWeek) PopulateWithDays(worktime time.Duration, overtime time.Durati } for _, day := range w.Days { - w.Worktime += day.GetWorktime(w.User, w.WeekBase, false) - w.WorktimeVirtual += day.GetWorktime(w.User, w.WeekBase, true) + dWorkTime := day.GetWorktime(w.User, w.WeekBase, false) + dWorkTimeVirtual := day.GetWorktime(w.User, w.WeekBase, true) + if dWorkTime < dWorkTimeVirtual { + w.Kurzarbeit += dWorkTimeVirtual - dWorkTime + } + w.Worktime += dWorkTime + w.WorktimeVirtual += dWorkTimeVirtual slog.Debug("Calculated Worktime", "Day", day.ToString(), "worktime", w.Worktime.String()) } slog.Debug("Got worktime for user", "worktime", w.Worktime.String(), "virtualWorkTime", w.WorktimeVirtual.String())