package endpoints import ( "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "arbeitszeitmessung/templates" "log" "net/http" "time" ) type typstMetadata struct { ISOWeek string `json:"iso-week"` EmployeeName string `json:"employee-name"` WorkTime string `json:"worktime"` Overtime string `json:"overtime"` OvertimeTotal string `json:"overtime-total"` } type typstDayPart struct { BookingFrom string `json:"booking-from"` BookingTo string `json:"booking-to"` WorkType string `json:"worktype"` IsWorkDay bool `json:"is-workday"` } type typstDay struct { Date string `json:"date"` DayParts []typstDayPart `json:"day-parts"` Worktime string `json:"worktime"` Pausetime string `json:"pausetime"` Overtime string `json:"overtime"` } func ConvertDaysToTypst(days []models.IWorkDay, u models.User) ([]typstDay, error) { var typstDays []typstDay for _, day := range days { var typstDay typstDay var typstDayParts []typstDayPart work, pause, overtime := day.GetAllWorkTimesVirtual(u) typstDay.Date = day.Date().Format("01.02.2006") typstDay.Worktime = helper.FormatDuration(work) typstDay.Pausetime = helper.FormatDuration(pause) typstDay.Overtime = helper.FormatDuration(overtime) if day.IsWorkDay() { workDay, _ := day.(*models.WorkDay) for i := 0; i < len(workDay.Bookings); i += 2 { var typstDayPart typstDayPart typstDayPart.BookingFrom = workDay.Bookings[i].Timestamp.Format("15:04") typstDayPart.BookingTo = workDay.Bookings[i+1].Timestamp.Format("15:04") typstDayPart.WorkType = workDay.Bookings[i].BookingType.Name typstDayPart.IsWorkDay = true typstDayParts = append(typstDayParts, typstDayPart) } } else { absentDay, _ := day.(*models.Absence) typstDayParts = append(typstDayParts, typstDayPart{IsWorkDay: false, WorkType: absentDay.AbwesenheitTyp.Name}) } typstDay.DayParts = typstDayParts typstDays = append(typstDays, typstDay) } return typstDays, nil } func PDFHandler(w http.ResponseWriter, r *http.Request) { helper.RequiresLogin(Session, w, r) startDate, err := parseTimestamp(r, "start_date", time.Now().Format("2006-01-02")) if err != nil { log.Println("Error parsing 'start_date' time", err) http.Error(w, "Timestamp 'start_date' cannot be parsed!", http.StatusBadRequest) return } if startDate.Day() > 1 { startDate = startDate.AddDate(0, 0, -(startDate.Day() - 1)) } endDate := startDate.AddDate(0, 1, -1) user, err := models.GetUserFromSession(Session, r.Context()) if err != nil { log.Println("Error getting user!") } //TODO: only accepted weeks weeks := models.GetDays(user, startDate, endDate, false) var aggregatedOvertime, aggregatedWorkTime time.Duration for _, day := range weeks { aggregatedOvertime += day.TimeOvertimeReal(user) aggregatedWorkTime += day.TimeWorkVirtual(user) } // log.Printf("Using Dates: %s - %s\n", startDate.String(), endDate.String()) templates.PDFReportEmploye(user, aggregatedOvertime, aggregatedWorkTime, weeks, startDate, endDate).Render(r.Context(), w) }