This commit is contained in:
2025-05-04 10:59:39 +02:00
parent d386653a64
commit 5f8bb1514b
5 changed files with 180 additions and 78 deletions

View File

@@ -1,6 +1,7 @@
package models
import (
"database/sql"
"errors"
"log"
"time"
@@ -14,6 +15,14 @@ type WorkWeek struct {
WorkHours time.Duration
}
type WeekStatus int16
const (
None WeekStatus = iota
Sent
Accepted
)
func (w *WorkWeek) GetWeek(user User, tsMonday time.Time, populateDays bool) WorkWeek {
var week WorkWeek
if populateDays {
@@ -25,6 +34,31 @@ func (w *WorkWeek) GetWeek(user User, tsMonday time.Time, populateDays bool) Wor
return week
}
func (w *WorkWeek) CheckStatus() WeekStatus {
weekStatus := None
qStr, err := DB.Prepare(`SELECT bestaetigt FROM wochen_report WHERE woche_start = $1::DATE AND personal_nummer = $2;`)
if err != nil {
log.Println("Error preparing SQL statement", err)
return weekStatus
}
defer qStr.Close()
var beastatigt bool
err = qStr.QueryRow(w.WeekStart, w.User.PersonalNummer).Scan(&beastatigt)
if err == sql.ErrNoRows {
return weekStatus
}
if err != nil {
log.Println("Error querying database", err)
return weekStatus
}
if beastatigt {
weekStatus = Accepted
} else {
weekStatus = Sent
}
return weekStatus
}
func (w *WorkWeek) GetWorkHourString() string {
return formatDuration(w.WorkHours)
}
@@ -74,14 +108,24 @@ var ErrRunningWeek = errors.New("Week is in running week")
// creates a new entry in the woche_report table with the given workweek
func (w *WorkWeek) Send() error {
var qStr *sql.Stmt
var err error
if time.Since(w.WeekStart) < 5*24*time.Hour {
log.Println("Cannot send week, because it's the running week!")
return ErrRunningWeek
}
qStr, err := DB.Prepare(`INSERT INTO wochen_report (personal_nummer, woche_start) VALUES ($1, $2);`)
if err != nil {
log.Println("Error preparing SQL statement", err)
return err
if w.CheckStatus() != None {
qStr, err = DB.Prepare(`UPDATE "wochen_report" SET bestaetigt = FALSE WHERE personal_nummer = $1 AND woche_start = $2;`)
if err != nil {
log.Println("Error preparing SQL statement", err)
return err
}
} else {
qStr, err = DB.Prepare(`INSERT INTO wochen_report (personal_nummer, woche_start) VALUES ($1, $2);`)
if err != nil {
log.Println("Error preparing SQL statement", err)
return err
}
}
_, err = qStr.Exec(w.User.PersonalNummer, w.WeekStart)
if err != nil {