@@ -34,6 +34,7 @@ type WeekStatus int8
|
||||
|
||||
const (
|
||||
WeekStatusNone WeekStatus = iota
|
||||
WeekStatusCorrected
|
||||
WeekStatusSent
|
||||
WeekStatusAccepted
|
||||
WeekStatusDifferences
|
||||
@@ -86,25 +87,31 @@ func (w *WorkWeek) CheckStatus() WeekStatus {
|
||||
log.Println("Cannot access Database!")
|
||||
return w.Status
|
||||
}
|
||||
qStr, err := DB.Prepare(`SELECT bestaetigt FROM wochen_report WHERE woche_start = $1::DATE AND personal_nummer = $2;`)
|
||||
qStr, err := DB.Prepare(`SELECT bestaetigt, id FROM wochen_report WHERE woche_start = $1::DATE AND personal_nummer = $2;`)
|
||||
if err != nil {
|
||||
log.Println("Error preparing SQL statement", err)
|
||||
return w.Status
|
||||
}
|
||||
|
||||
defer qStr.Close()
|
||||
var beastatigt bool
|
||||
err = qStr.QueryRow(w.WeekStart, w.User.PersonalNummer).Scan(&beastatigt)
|
||||
var beastatigt sql.NullBool
|
||||
err = qStr.QueryRow(w.WeekStart, w.User.PersonalNummer).Scan(&beastatigt, &w.Id)
|
||||
if err == sql.ErrNoRows {
|
||||
return w.Status
|
||||
}
|
||||
slog.Info("Bestätigt query res", "Best", beastatigt, "week", w.Id)
|
||||
if err != nil {
|
||||
log.Println("Error querying database", err)
|
||||
return w.Status
|
||||
}
|
||||
if beastatigt {
|
||||
switch {
|
||||
case beastatigt.Bool:
|
||||
w.Status = WeekStatusAccepted
|
||||
} else {
|
||||
case beastatigt.Valid:
|
||||
w.Status = WeekStatusSent
|
||||
default:
|
||||
w.Status = WeekStatusCorrected
|
||||
|
||||
}
|
||||
return w.Status
|
||||
}
|
||||
@@ -206,23 +213,33 @@ func (w *WorkWeek) SendWeek() error {
|
||||
return ErrRunningWeek
|
||||
}
|
||||
|
||||
if w.CheckStatus() != WeekStatusNone {
|
||||
qStr, err = DB.Prepare(`UPDATE "wochen_report" SET bestaetigt = FALSE, arbeitszeit = make_interval(secs => $3::numeric / 1000000000), ueberstunden = make_interval(secs => $4::numeric / 1000000000), anwesenheiten=$5, abwesenheiten=$6 WHERE personal_nummer = $1 AND woche_start = $2;`)
|
||||
if err != nil {
|
||||
slog.Warn("Error preparing SQL statement", "error", err)
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
switch w.CheckStatus() {
|
||||
case WeekStatusNone:
|
||||
qStr, err = DB.Prepare(`INSERT INTO wochen_report (personal_nummer, woche_start, arbeitszeit, ueberstunden, anwesenheiten, abwesenheiten) VALUES ($1, $2, make_interval(secs => $3::numeric / 1000000000), make_interval(secs => $4::numeric / 1000000000), $5, $6);`)
|
||||
if err != nil {
|
||||
slog.Warn("Error preparing SQL statement", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
case WeekStatusCorrected:
|
||||
qStr, err = DB.Prepare(`UPDATE "wochen_report" SET bestaetigt = FALSE, arbeitszeit = make_interval(secs => $3::numeric / 1000000000), ueberstunden = make_interval(secs => $4::numeric / 1000000000), anwesenheiten=$5, abwesenheiten=$6 WHERE personal_nummer = $1 AND woche_start = $2;`)
|
||||
if err != nil {
|
||||
slog.Warn("Error preparing SQL statement", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
case WeekStatusSent, WeekStatusAccepted:
|
||||
qStr, err = DB.Prepare(`UPDATE "wochen_report" SET bestaetigt = null WHERE personal_nummer = $1 AND woche_start = $2 AND ($3::numeric IS NULL OR TRUE) AND ($4::numeric IS NULL OR TRUE) AND ($5::int[] IS NULL OR TRUE) AND ($6::int[] IS NULL OR TRUE);`)
|
||||
if err != nil {
|
||||
slog.Warn("Error preparing SQL statement", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_, err = qStr.Exec(w.User.PersonalNummer, w.WeekStart, int64(w.Worktime), int64(w.Overtime), pq.Array(anwBookings), pq.Array(awBookings))
|
||||
if err != nil {
|
||||
log.Println("Error executing query!", err)
|
||||
slog.Error("Error executing query!", "error", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user