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))