From 55b36e5e62fd82129d38d8b7353793e8d73aecd5 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 9 Nov 2025 23:22:49 +0100 Subject: [PATCH] fix: fix while deleting timeentries for whole week old entries have not been deleted, before new entries have been added. This has been fixed. Also manual entries by administrators are know protected and can only be deleted by an administrator. --- backend/database.go | 16 ++++++++++++++++ backend/handlers.go | 15 ++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/backend/database.go b/backend/database.go index 7987953..66f3e54 100644 --- a/backend/database.go +++ b/backend/database.go @@ -608,3 +608,19 @@ func DeleteSchoolYear(db *sql.DB, id int) error { return nil } + +func DeleteNonManualTimeEntriesByUserAndWeek(db *sql.DB, userID int, year int, week int) error { + dates := calculateWeekDates(year, week) + var dateList []string + for day := 0; day <= 4; day++ { + dateList = append(dateList, dates.Dates[fmt.Sprint(day)]) + } + + query := `DELETE FROM time_entries + WHERE user_id = ? + AND type != 'manual' + AND date IN (?, ?, ?, ?, ?)` + + _, err := db.Exec(query, userID, dateList[0], dateList[1], dateList[2], dateList[3], dateList[4]) + return err +} diff --git a/backend/handlers.go b/backend/handlers.go index 22d4e92..06b3f57 100644 --- a/backend/handlers.go +++ b/backend/handlers.go @@ -340,7 +340,7 @@ func (app *App) DeleteWeekEntries(c echo.Context) error { return HandleError(c, ErrInvalidInputMsg("Woche")) } - if err := DeleteTimeEntriesByUserAndWeek(app.DB, claims.UserID, year, week); err != nil { + if err := DeleteNonManualTimeEntriesByUserAndWeek(app.DB, claims.UserID, year, week); err != nil { return HandleError(c, ErrDatabaseMsg(err)) } @@ -417,6 +417,19 @@ func (app *App) CreateBatchTimeEntriesHandler(c echo.Context) error { return HandleError(c, ErrMissingFieldMsg("Zeiteinträge")) } + if len(req.Entries) > 0 { + firstDate := req.Entries[0].Date + t, err := time.Parse("2006-01-02", firstDate) + if err != nil { + return HandleError(c, ErrInvalidInputMsg("Datum-Format")) + } + year, week := t.ISOWeek() + + if err := DeleteNonManualTimeEntriesByUserAndWeek(app.DB, claims.UserID, year, week); err != nil { + return HandleError(c, ErrDatabaseMsg(err)) + } + } + tx, err := app.DB.Begin() if err != nil { return HandleError(c, ErrDatabaseMsg(err))