package templates // this file has all the templates for the team/report page import ( "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "fmt" "strconv" "time" ) templ ReportPage(weeks []models.WorkWeek, userWeek models.WorkWeek) { @BasePage() @headerComponent()

Eigene Abrechnung

@workWeekComponent(userWeek, false) if len(weeks) > 0 {

Abrechnung Mitarbeiter

} for _, week := range weeks { @workWeekComponent(week, true) }
} templ workWeekComponent(week models.WorkWeek, onlyAccept bool) { {{ year, kw := week.WeekStart.ISOWeek() progress := (float32(week.WorktimeVirtual.Hours()) / week.User.ArbeitszeitPerWoche) * 100 }}
if !onlyAccept {
@weekPicker(week.WeekStart)
}

{ week.User.Vorname } { week.User.Name }

if !onlyAccept {
@statusCheckMark(week.CheckStatus(), models.WeekStatusSent) Gesendet @statusCheckMark(week.CheckStatus(), models.WeekStatusAccepted) Akzeptiert
}
@timeGaugeComponent(int8(progress), false)

Arbeitszeit: { fmt.Sprintf("%s", helper.FormatDuration(week.Worktime)) }

Überstunden: { fmt.Sprintf("%s", helper.FormatDurationFill(week.Overtime, true)) }

for _, day := range week.Days { @defaultWeekDayComponent(week.User, day) }
if onlyAccept {

Woche: { fmt.Sprintf("%02d-%d", kw, year) }

} else {
@weekPicker(week.WeekStart)
}
{{ week.CheckStatus() method := "accept" if !onlyAccept { method = "send" } }} if onlyAccept { if week.Status == models.WeekStatusDifferences {

Unterschiedliche Arbeitszeit zwischen Abrechnung und individuellen Buchungen

} } else { switch { case week.RequiresAction():

bitte zuerst Buchungen anpassen

case time.Since(week.WeekStart) < 24*7*time.Hour:

Die Woche kann erst am nächsten Montag gesendet werden!

case week.Status == models.WeekStatusNone:

an Vorgesetzten senden

case week.Status == models.WeekStatusSent:

an Vorgesetzten gesendet

case week.Status == models.WeekStatusAccepted:

vom Vorgesetzten bestätigt

} }
} templ defaultWeekDayComponent(u models.User, day models.IWorkDay) {
@timeGaugeComponent(day.GetDayProgress(u), false)

{ day.Date().Format("02.01.2006") }

{{ work, pause, _ := day.GetTimes(u, models.WorktimeBaseDay, false) }} if day.IsWorkDay() || day.GetDayProgress(u) < 100 {
{ helper.FormatDuration(work) } { helper.FormatDuration(pause) }
} @weekDayTypeSwitcher(day)
} templ weekDayTypeSwitcher(day models.IWorkDay) { switch day.Type() { case models.DayTypeWorkday: {{ workDay, _ := day.(*models.WorkDay) }} @workDayWeekComponent(workDay) case models.DayTypeCompound: for _, c := range day.(*models.CompoundDay).DayParts { @weekDayTypeSwitcher(c) } default:
{ day.ToString() }
} } templ weekPicker(weekStart time.Time) { {{ year, kw := weekStart.ISOWeek() }}

KW { fmt.Sprintf("%02d, %d", kw, year) }

} templ workDayWeekComponent(workDay *models.WorkDay) { if !workDay.RequiresAction() {
switch { case !workDay.TimeFrom.Equal(workDay.TimeTo): { workDay.TimeFrom.Format("15:04") } - { workDay.TimeTo.Format("15:04") } default:

Keine Anwesenheit

}
} else {

Bitte anpassen

} }