dev/finalFixes #81

Merged
tom_trgr merged 14 commits from dev/finalFixes into main 2026-03-01 10:11:45 +01:00
3 changed files with 24 additions and 45 deletions
Showing only changes of commit 23896e4f08 - Show all commits

View File

@@ -21,7 +21,7 @@ import (
const DE_DATE string = "02.01.2006" const DE_DATE string = "02.01.2006"
const FILE_YEAR_MONTH string = "2006_01" 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) { func PDFCreateController(w http.ResponseWriter, r *http.Request) {
helper.RequiresLogin(Session, w, r) helper.RequiresLogin(Session, w, r)
@@ -99,9 +99,11 @@ func convertDaysToTypst(days []models.IWorkDay, u models.User, weekbase models.W
var thisTypstDay typstDay var thisTypstDay typstDay
workVirtual, pause, overtime := day.GetTimes(u, weekbase, true) workVirtual, pause, overtime := day.GetTimes(u, weekbase, true)
if day.Type() != models.DayTypeHoliday {
overtime = workVirtual - u.ArbeitszeitProWocheFrac(0.2) overtime = workVirtual - u.ArbeitszeitProWocheFrac(0.2)
if day.Type() == models.DayTypeHoliday {
// workVirtual = 0
overtime = 0
} }
thisTypstDay.Date = day.Date().Format(DE_DATE) thisTypstDay.Date = day.Date().Format(DE_DATE)
thisTypstDay.Worktime = helper.FormatDurationFill(workVirtual, true) 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) { func createEmployeReport(employee models.User, startDate, endDate time.Time) (typstData, error) {
publicHolidays, _ := models.GetHolidaysFromTo(startDate, endDate) // publicHolidays, _ := models.GetHolidaysFromTo(startDate, endDate)
targetHoursThisMonth := employee.ArbeitszeitProWocheFrac(.2) * time.Duration(helper.GetWorkingDays(startDate, endDate)-len(publicHolidays)) targetHoursThisMonth := employee.ArbeitszeitProWocheFrac(.2) * time.Duration(helper.GetWorkingDays(startDate, endDate)) //-len(publicHolidays)
daysThisMonth := helper.GenerateDateRange(startDate, endDate) mondaysThisMonth := helper.GetMondays(helper.GenerateDateRange(startDate, endDate), false)
mondaysThisMonth := helper.GetMondays(daysThisMonth, false)
var weeks []models.WorkWeek var weeks []models.WorkWeek
var workHours, kurzarbeitHours time.Duration var workHours, kurzarbeitHours time.Duration
for _, monday := range mondaysThisMonth { for _, monday := range mondaysThisMonth {
var week models.WorkWeek var week models.WorkWeek
if monday.After(startDate) { 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) week = models.NewWorkWeek(employee, startDate, monday.Add(6*24*time.Hour), true)
} }
workHours += week.WorktimeVirtual workHours += week.WorktimeVirtual
kurzarbeitHours += week.WorktimeVirtual - week.Worktime kurzarbeitHours += week.Kurzarbeit
weeks = append(weeks, week) weeks = append(weeks, week)
} }
monthOvertime := workHours - targetHoursThisMonth
totalOvertime, err := employee.GetReportedOvertime(endDate)
var typstDays []typstDay var typstDays []typstDay
for _, week := range weeks { for _, week := range weeks {
weekTypstDays, err := convertDaysToTypst(week.Days, employee, week.WeekBase) 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...) 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 { if err != nil {
slog.Error("Cannot retrieve total Overtime", "Error", err) slog.Error("Cannot retrieve total Overtime", "Error", err)
} }
@@ -239,10 +214,10 @@ func createEmployeReport(employee models.User, startDate, endDate time.Time) (ty
metadata := typstMetadata{ metadata := typstMetadata{
EmployeeName: fmt.Sprintf("%s %s", employee.Vorname, employee.Name), EmployeeName: fmt.Sprintf("%s %s", employee.Vorname, employee.Name),
TimeRange: fmt.Sprintf("%s - %s", startDate.Format(DE_DATE), endDate.Format(DE_DATE)), 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), WorkTime: helper.FormatDurationFill(workHours, true),
Kurzarbeit: helper.FormatDurationFill(kurzarbeitHours, 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"), 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 return typstData{Meta: metadata, Days: typstDays, FileName: fmt.Sprintf("%s_%s.pdf", startDate.Format(FILE_YEAR_MONTH), employee.Name)}, nil

View File

@@ -119,8 +119,6 @@ func (p *PublicHoliday) RequiresAction() bool {
} }
func (p *PublicHoliday) GetWorktime(u User, base WorktimeBase, includeKurzarbeit bool) time.Duration { func (p *PublicHoliday) GetWorktime(u User, base WorktimeBase, includeKurzarbeit bool) time.Duration {
return 0
switch base { switch base {
case WorktimeBaseDay: case WorktimeBaseDay:
return u.ArbeitszeitProTagFrac(float32(p.worktime) / 100) return u.ArbeitszeitProTagFrac(float32(p.worktime) / 100)

View File

@@ -31,6 +31,7 @@ type WorkWeek struct {
Overtime time.Duration Overtime time.Duration
Status WeekStatus Status WeekStatus
WeekBase WorktimeBase WeekBase WorktimeBase
Kurzarbeit time.Duration
} }
type WeekStatus int8 type WeekStatus int8
@@ -72,8 +73,13 @@ func (w *WorkWeek) PopulateWithDays(worktime time.Duration, overtime time.Durati
} }
for _, day := range w.Days { for _, day := range w.Days {
w.Worktime += day.GetWorktime(w.User, w.WeekBase, false) dWorkTime := day.GetWorktime(w.User, w.WeekBase, false)
w.WorktimeVirtual += day.GetWorktime(w.User, w.WeekBase, true) 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("Calculated Worktime", "Day", day.ToString(), "worktime", w.Worktime.String())
} }
slog.Debug("Got worktime for user", "worktime", w.Worktime.String(), "virtualWorkTime", w.WorktimeVirtual.String()) slog.Debug("Got worktime for user", "worktime", w.Worktime.String(), "virtualWorkTime", w.WorktimeVirtual.String())