|
|
|
@@ -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)
|
|
|
|
|
|
|
|
overtime = workVirtual - u.ArbeitszeitProWocheFrac(0.2)
|
|
|
|
|
|
|
|
|
|
|
|
if day.Type() != models.DayTypeHoliday {
|
|
|
|
if day.Type() == models.DayTypeHoliday {
|
|
|
|
overtime = workVirtual - u.ArbeitszeitProWocheFrac(0.2)
|
|
|
|
// 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
|
|
|
|
|