diff --git a/Backend/endpoints/pdf.go b/Backend/endpoints/pdf.go
index 0e47fcd..bc73be9 100644
--- a/Backend/endpoints/pdf.go
+++ b/Backend/endpoints/pdf.go
@@ -11,7 +11,7 @@ import (
func PDFHandler(w http.ResponseWriter, r *http.Request) {
helper.RequiresLogin(Session, w, r)
- startDate, err := time.Parse("2006-01-02", "2025-08-01")
+ startDate, err := time.Parse("2006-01-02", "2025-09-01")
if err != nil {
log.Println("Error")
}
@@ -22,7 +22,7 @@ func PDFHandler(w http.ResponseWriter, r *http.Request) {
log.Println("Error getting user!")
}
- weeks := models.GetWorkDays(user.CardUID, startDate, endDate)
+ weeks := models.GetWorkDays(user, startDate, endDate)
log.Printf("Using Dates: %s - %s\n", startDate.String(), endDate.String())
templates.PDFReportEmploye(user, weeks, startDate, endDate).Render(r.Context(), w)
diff --git a/Backend/endpoints/time.go b/Backend/endpoints/time.go
index 93b2b74..bc03c3f 100644
--- a/Backend/endpoints/time.go
+++ b/Backend/endpoints/time.go
@@ -66,7 +66,7 @@ func getBookings(w http.ResponseWriter, r *http.Request) {
}
tsTo = tsTo.AddDate(0, 0, 1) // so that today is inside
- workDays := models.GetWorkDays(user.CardUID, tsFrom, tsTo)
+ workDays := models.GetWorkDays(user, tsFrom, tsTo)
sort.Slice(workDays, func(i, j int) bool {
return workDays[i].Day.After(workDays[j].Day)
})
@@ -182,82 +182,3 @@ func createAbsence(absenceType int, user models.User, loc *time.Location, r *htt
return
}
}
-
-func getBookingsAPI(w http.ResponseWriter, r *http.Request) {
- _user_pn := r.URL.Query().Get("personal_nummer")
- user_pn, err := strconv.Atoi(_user_pn)
- if err != nil {
- log.Println("No personal numver found!")
- http.Error(w, "No personal number found", http.StatusBadRequest)
- return
- }
-
- user, err := models.GetUserByPersonalNr(user_pn)
- if err != nil {
- log.Println("No user found with the given personal number!")
- http.Error(w, "No user found", http.StatusNotFound)
- return
- }
-
- // TODO add config for timeoffset
- tsFrom, err := parseTimestamp(r, "time_from", time.Now().AddDate(0, -1, 0).Format("2006-01-02"))
- if err != nil {
- log.Println("Error parsing 'from' time", err)
- http.Error(w, "Timestamp 'from' cannot be parsed!", http.StatusBadRequest)
- return
- }
- tsTo, err := parseTimestamp(r, "time_to", time.Now().Format("2006-01-02"))
- if err != nil {
- log.Println("Error parsing 'to' time", err)
- http.Error(w, "Timestamp 'to' cannot be parsed!", http.StatusBadRequest)
- return
- }
- tsTo = tsTo.AddDate(0, 0, 1) // so that today is inside
-
- bookings, err := (*models.Booking).GetBookingsGrouped(nil, user.CardUID, tsFrom, tsTo)
- if err != nil {
- log.Println("Error getting bookings: ", err)
- http.Error(w, "Internal Server Error", http.StatusInternalServerError)
- return
- }
- w.Header().Set("Content-Type", "application/json")
- json.NewEncoder(w).Encode(bookings)
-}
-
-// Updates a booking form the given json body
-func updateBookingAPI(w http.ResponseWriter, r *http.Request) {
- _booking_id := r.URL.Query().Get("counter_id")
- if _booking_id == "" {
- http.Error(w, "Missing bookingID query parameter", http.StatusBadRequest)
- return
- }
- booking_id, err := strconv.Atoi(_booking_id)
- if err != nil {
- http.Error(w, "Invalid bookingID query parameter", http.StatusBadRequest)
- return
- }
- bookingDB, err := (*models.Booking).GetBookingById(nil, booking_id)
- if err != nil {
- log.Println("Error getting booking: ", err)
- http.Error(w, "Internal Server Error", http.StatusInternalServerError)
- return
- }
- var booking models.Booking
- dec := json.NewDecoder(r.Body)
- dec.DisallowUnknownFields()
- err = dec.Decode(&booking)
- if err != nil {
- log.Println("Error parsing booking: ", err)
- http.Error(w, "Internal Server Error", http.StatusInternalServerError)
- return
- }
- if booking.CounterId != 0 && booking.CounterId != bookingDB.CounterId {
- log.Println("Booking Ids do not match")
- http.Error(w, "Booking Ids do not match", http.StatusBadRequest)
- return
- }
- bookingDB.Update(booking)
- bookingDB.Save()
- w.Header().Set("Content-Type", "application/json")
- json.NewEncoder(w).Encode(bookingDB)
-}
diff --git a/Backend/go.mod b/Backend/go.mod
index 2472dc8..b993a01 100644
--- a/Backend/go.mod
+++ b/Backend/go.mod
@@ -17,4 +17,5 @@ require (
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
go.uber.org/atomic v1.7.0 // indirect
+ golang.org/x/sys v0.36.0 // indirect
)
diff --git a/Backend/go.sum b/Backend/go.sum
index 82a9cc4..6c7522d 100644
--- a/Backend/go.sum
+++ b/Backend/go.sum
@@ -68,7 +68,7 @@ go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt3
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
-golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
+golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/Backend/helper/time.go b/Backend/helper/time.go
index 0bd5551..046ad64 100644
--- a/Backend/helper/time.go
+++ b/Backend/helper/time.go
@@ -25,8 +25,12 @@ func GetKW(t time.Time) int {
return kw
}
-// Converts duration to string
func FormatDuration(d time.Duration) string {
+ return FormatDurationFill(d, false)
+}
+
+// Converts duration to string
+func FormatDurationFill(d time.Duration, fill bool) string {
hours := int(d.Abs().Hours())
minutes := int(d.Abs().Minutes()) % 60
sign := ""
@@ -41,6 +45,13 @@ func FormatDuration(d time.Duration) string {
case minutes > 0:
return fmt.Sprintf("%s%dmin", sign, minutes)
default:
+ if fill {
+ return "0min"
+ }
return ""
}
}
+
+func IsSameDate(a, b time.Time) bool {
+ return a.Truncate(24 * time.Hour).Equal(b.Truncate(24 * time.Hour))
+}
diff --git a/Backend/models/absence.go b/Backend/models/absence.go
index bda305e..08919f4 100644
--- a/Backend/models/absence.go
+++ b/Backend/models/absence.go
@@ -9,7 +9,7 @@ import (
type AbsenceType struct {
Id int8
Name string
- WorkTime float32
+ WorkTime int8
}
type Absence struct {
diff --git a/Backend/models/booking.go b/Backend/models/booking.go
index ba758f8..7b4d356 100644
--- a/Backend/models/booking.go
+++ b/Backend/models/booking.go
@@ -7,7 +7,6 @@ import (
"fmt"
"log"
"net/url"
- "sort"
"strconv"
"time"
)
@@ -163,37 +162,6 @@ func (b *Booking) GetBookingsByCardID(card_uid string, tsFrom time.Time, tsTo ti
return bookings, nil
}
-func (b *Booking) GetBookingsGrouped(card_uid string, tsFrom time.Time, tsTo time.Time) ([]WorkDay, error) {
- var grouped = make(map[string][]Booking)
- bookings, err := b.GetBookingsByCardID(card_uid, tsFrom, tsTo)
- if err != nil {
- log.Println("Failed to get bookings", err)
- return []WorkDay{}, nil
- }
- for _, booking := range bookings {
- day := booking.Timestamp.Truncate(24 * time.Hour)
- key := day.Format("2006-01-02")
- grouped[key] = append(grouped[key], booking)
- }
-
- var result []WorkDay
- for key, bookings := range grouped {
- day, _ := time.Parse("2006-01-02", key)
- sort.Slice(bookings, func(i, j int) bool {
- return bookings[i].Timestamp.Before(bookings[j].Timestamp)
- })
- workDay := WorkDay{Day: day, Bookings: bookings}
- workDay.getWorkTime()
- result = append(result, workDay)
- }
-
- sort.Slice(result, func(i, j int) bool {
- return result[i].Day.After(result[j].Day)
- })
-
- return result, nil
-}
-
func (b Booking) Save() {
qStr, err := DB.Prepare((`UPDATE "anwesenheit" SET "card_uid" = $2, "geraet_id" = $3, "check_in_out" = $4, "timestamp" = $5 WHERE "counter_id" = $1;`))
if err != nil {
diff --git a/Backend/models/db_test.go b/Backend/models/db_test.go
index be272c5..b2afa0f 100644
--- a/Backend/models/db_test.go
+++ b/Backend/models/db_test.go
@@ -22,6 +22,9 @@ type DBFixture struct {
func SetupDBFixture(t *testing.T) *DBFixture {
t.Helper()
+ if helper.GetEnv("TEST_SQL", "false") != "true" {
+ t.Skip("Skipping Test because TEST_SQL is not 'true'!")
+ }
dbHost := helper.GetEnv("POSTGRES_HOST", "localhost")
dbPort := helper.GetEnv("POSTGRES_PORT", "5433")
diff --git a/Backend/models/user.go b/Backend/models/user.go
index 016d683..b7002d2 100644
--- a/Backend/models/user.go
+++ b/Backend/models/user.go
@@ -198,17 +198,6 @@ func (u *User) IsTeamLeader() bool {
return len(team) > 0
}
-func (u *User) GetWeek(tsFrom time.Time) WorkWeek {
- var bookings []WorkDay
- weekStart := tsFrom.AddDate(0, 0, -1*int(tsFrom.Local().Weekday())-1)
- bookings, err := (*Booking).GetBookingsGrouped(nil, u.CardUID, weekStart, time.Now())
- if err != nil {
- log.Println("Error fetching bookings!")
- return WorkWeek{WorkDays: bookings}
- }
- return WorkWeek{WorkDays: bookings}
-}
-
// gets the first week, that needs to be submitted
func (u *User) GetNextWeek() WorkWeek {
var week WorkWeek
diff --git a/Backend/models/workWeek.go b/Backend/models/workWeek.go
index cb473d2..fb7d6a7 100644
--- a/Backend/models/workWeek.go
+++ b/Backend/models/workWeek.go
@@ -45,7 +45,7 @@ func NewWorkWeek(user User, tsMonday time.Time, populate bool) WorkWeek {
}
func (w *WorkWeek) PopulateWithBookings(worktime time.Duration, overtime time.Duration) {
- w.WorkDays = GetWorkDays(w.User.CardUID, w.WeekStart, w.WeekStart.Add(7*24*time.Hour))
+ w.WorkDays = GetWorkDays(w.User, w.WeekStart, w.WeekStart.Add(7*24*time.Hour))
if absences, err := GetAbsencesByCardUID(w.User.CardUID, w.WeekStart, w.WeekStart.Add(7*24*time.Hour)); err == nil {
w.Absences = absences
} else {
@@ -108,10 +108,11 @@ func (w *WorkWeek) aggregateWorkTime() time.Duration {
for _, day := range w.WorkDays {
workTime += day.workTime
}
- for _, absences := range w.Absences {
- absenceWorkTime := absences.AbwesenheitTyp.WorkTime - (absences.AbwesenheitTyp.WorkTime - w.User.ArbeitszeitPerTag) // workTime Equivalent of Absence is capped at user Worktime per Day
- workTime += time.Duration(absenceWorkTime * float32(time.Hour)).Round(time.Minute)
- }
+ // for _, absence := range w.Absences {
+ // log.Println(absence)
+ // absenceWorkTime := float32(8) // := absences.AbwesenheitTyp.WorkTime - (absences.AbwesenheitTyp.WorkTime - w.User.ArbeitszeitPerTag) // workTime Equivalent of Absence is capped at user Worktime per Day
+ // workTime += time.Duration(absenceWorkTime * float32(time.Hour)).Round(time.Minute)
+ // }
return workTime
}
diff --git a/Backend/models/workWeek_test.go b/Backend/models/workWeek_test.go
index b94dd04..cd78cef 100644
--- a/Backend/models/workWeek_test.go
+++ b/Backend/models/workWeek_test.go
@@ -28,6 +28,7 @@ func TestNewWorkWeekNoPopulate(t *testing.T) {
}
func TestCheckStatus(t *testing.T) {
+ SetupDBFixture(t)
testWeek := SetupWorkWeekFixture(t)
testCases := []struct {
name string
diff --git a/Backend/static/css/styles.css b/Backend/static/css/styles.css
index 93e47a6..bd88eca 100644
--- a/Backend/static/css/styles.css
+++ b/Backend/static/css/styles.css
@@ -198,12 +198,12 @@
.col-span-3 {
grid-column: span 3 / span 3;
}
+ .col-span-5 {
+ grid-column: span 5 / span 5;
+ }
.col-span-6 {
grid-column: span 6 / span 6;
}
- .col-span-7 {
- grid-column: span 7 / span 7;
- }
.col-span-full {
grid-column: 1 / -1;
}
@@ -367,17 +367,17 @@
.resize {
resize: both;
}
+ .auto-rows-min {
+ grid-auto-rows: min-content;
+ }
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-5 {
grid-template-columns: repeat(5, minmax(0, 1fr));
}
- .grid-cols-\[auto_1fr_1fr_1fr_1fr_1fr\] {
- grid-template-columns: auto 1fr 1fr 1fr 1fr 1fr;
- }
- .grid-cols-\[auto_1fr_1fr_1fr_1fr_1fr_1fr\] {
- grid-template-columns: auto 1fr 1fr 1fr 1fr 1fr 1fr;
+ .grid-cols-\[3fr_2fr_2fr_2fr_3fr_3fr_3fr\] {
+ grid-template-columns: 3fr 2fr 2fr 2fr 3fr 3fr 3fr;
}
.grid-cols-subgrid {
grid-template-columns: subgrid;
@@ -432,6 +432,11 @@
border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
}
}
+ .divide-neutral-300 {
+ :where(& > :not(:last-child)) {
+ border-color: var(--color-neutral-300);
+ }
+ }
.justify-self-end {
justify-self: flex-end;
}
@@ -448,6 +453,14 @@
border-style: var(--tw-border-style);
border-width: 1px;
}
+ .border-r-0 {
+ border-right-style: var(--tw-border-style);
+ border-right-width: 0px;
+ }
+ .border-b-0 {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 0px;
+ }
.border-neutral-200 {
border-color: var(--color-neutral-200);
}
@@ -481,9 +494,6 @@
.mask-repeat {
mask-repeat: repeat;
}
- .p-0 {
- padding: calc(var(--spacing) * 0);
- }
.p-1 {
padding: calc(var(--spacing) * 1);
}
@@ -493,9 +503,6 @@
.p-8 {
padding: calc(var(--spacing) * 8);
}
- .px-2 {
- padding-inline: calc(var(--spacing) * 2);
- }
.px-3 {
padding-inline: calc(var(--spacing) * 3);
}
@@ -530,6 +537,9 @@
.text-accent {
color: var(--color-accent);
}
+ .text-neutral-300 {
+ color: var(--color-neutral-300);
+ }
.text-neutral-500 {
color: var(--color-neutral-500);
}
@@ -572,6 +582,16 @@
--tw-duration: 300ms;
transition-duration: 300ms;
}
+ .\*\:p-2 {
+ :is(& > *) {
+ padding: calc(var(--spacing) * 2);
+ }
+ }
+ .\*\:text-center {
+ :is(& > *) {
+ text-align: center;
+ }
+ }
.group-hover\:text-black {
&:is(:where(.group):hover *) {
@media (hover: hover) {
diff --git a/Backend/templates/headerComponent_templ.go b/Backend/templates/headerComponent_templ.go
index 44846c8..8e59160 100644
--- a/Backend/templates/headerComponent_templ.go
+++ b/Backend/templates/headerComponent_templ.go
@@ -1,6 +1,6 @@
// Code generated by templ - DO NOT EDIT.
-// templ: version: v0.3.833
+// templ: version: v0.3.943
package templates
//lint:file-ignore SA4006 This context is only used if a nested component is present.
diff --git a/Backend/templates/pages_templ.go b/Backend/templates/pages_templ.go
index c0d73e3..d546e65 100644
--- a/Backend/templates/pages_templ.go
+++ b/Backend/templates/pages_templ.go
@@ -1,6 +1,6 @@
// Code generated by templ - DO NOT EDIT.
-// templ: version: v0.3.833
+// templ: version: v0.3.943
package templates
//lint:file-ignore SA4006 This context is only used if a nested component is present.
diff --git a/Backend/templates/pdf.templ b/Backend/templates/pdf.templ
index 2aacb05..8ffe9cc 100644
--- a/Backend/templates/pdf.templ
+++ b/Backend/templates/pdf.templ
@@ -1,14 +1,15 @@
package templates
import (
- "arbeitszeitmessung/models"
"arbeitszeitmessung/helper"
+ "arbeitszeitmessung/models"
"time"
)
templ PDFReportEmploye(e models.User, workDays []models.WorkDay, tsStart time.Time, tsEnd time.Time) {
{{
_, kw := tsStart.ISOWeek()
+ noBorder := ""
}}
@Base()
Arbeitszeit: Überstunden: { kw } Kommen Gehen Arbeitsart Stunden gesamt Pause Überstunden { kw } Kommen Gehen Arbeitsart Stunden Pause Überstunden Wochenende Wochenende { day.Day.Format("02.01.2006") } { day.Day.Format("02.01.2006") } { day.Bookings[bookingI].Timestamp.Format("15:04") } { day.Bookings[bookingI+1].Timestamp.Format("15:04") } { day.Bookings[bookingI].BookingType.Name } { day.Bookings[bookingI].Timestamp.Format("15:04") } { day.Bookings[bookingI+1].Timestamp.Format("15:04") } { day.Bookings[bookingI].BookingType.Name } { day.Absence.AbwesenheitTyp.Name } { work } { pause } { helper.FormatDuration(day.CalcOvertime(e)) } { helper.FormatDurationFill(d, true) } Arbeitszeit: Überstunden: ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, " Arbeitszeit: Überstunden: ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var4 string
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(kw)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 22, Col: 34}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 23, Col: 19}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " Kommen Gehen Arbeitsart Stunden gesamt Pause Überstunden Kommen Gehen Arbeitsart Stunden Pause Überstunden Wochenende Wochenende ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var5 string
- templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(day.Day.Format("02.01.2006"))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 33, Col: 61}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
+ var templ_7745c5c3_Var5 = []any{noBorder}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var5...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var6 string
- templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(day.Bookings[bookingI].Timestamp.Format("15:04"))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 37, Col: 82}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var7 string
- templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(day.Bookings[bookingI+1].Timestamp.Format("15:04"))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 38, Col: 84}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var8 string
- templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(day.Bookings[bookingI].BookingType.Name)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 39, Col: 73}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var7 string
+ templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(day.Day.Format("02.01.2006"))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 39, Col: 56}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var10 string
- templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(pause)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 44, Col: 39}
+ for bookingI := 0; bookingI < len(day.Bookings); bookingI += 2 {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var10 string
+ templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(day.Bookings[bookingI].Timestamp.Format("15:04"))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 43, Col: 59}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var11 string
+ templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(day.Bookings[bookingI+1].Timestamp.Format("15:04"))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 44, Col: 61}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var12 string
+ templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(day.Bookings[bookingI].BookingType.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 45, Col: 50}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var13 string
+ templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(day.Absence.AbwesenheitTyp.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 48, Col: 64}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, " ")
+ work, pause, overtime := day.GetAllWorkTimes(e)
+ templ_7745c5c3_Err = ColorDuration(work, noBorder).Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var11 string
- templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatDuration(day.CalcOvertime(e)))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 45, Col: 76}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, " ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var17 string + templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatDurationFill(d, true)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/pdf.templ`, Line: 67, Col: 71} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/Backend/templates/teamComponents_templ.go b/Backend/templates/teamComponents_templ.go index 9dd6ee3..239425d 100644 --- a/Backend/templates/teamComponents_templ.go +++ b/Backend/templates/teamComponents_templ.go @@ -1,6 +1,6 @@ // Code generated by templ - DO NOT EDIT. -// templ: version: v0.3.833 +// templ: version: v0.3.943 package templates //lint:file-ignore SA4006 This context is only used if a nested component is present. diff --git a/Backend/templates/timeComponents_templ.go b/Backend/templates/timeComponents_templ.go index aca6f54..47896fd 100644 --- a/Backend/templates/timeComponents_templ.go +++ b/Backend/templates/timeComponents_templ.go @@ -1,6 +1,6 @@ // Code generated by templ - DO NOT EDIT. -// templ: version: v0.3.833 +// templ: version: v0.3.943 package templates //lint:file-ignore SA4006 This context is only used if a nested component is present.