@@ -292,10 +292,42 @@ func (u *User) GetNextWeek() WorkWeek {
|
||||
func (u *User) GetLastWorkWeekSubmission() time.Time {
|
||||
var lastSub time.Time
|
||||
qStr, err := DB.Prepare(`
|
||||
SELECT COALESCE(
|
||||
(SELECT woche_start + INTERVAL '1 week' FROM wochen_report WHERE personal_nummer = $1 ORDER BY woche_start DESC LIMIT 1),
|
||||
(SELECT timestamp FROM anwesenheit WHERE card_uid = $2 ORDER BY timestamp LIMIT 1)
|
||||
) AS letzte_buchung;
|
||||
SELECT new_week
|
||||
FROM (
|
||||
-- Highest priority
|
||||
SELECT
|
||||
woche_start AS new_week,
|
||||
1 AS priority
|
||||
FROM wochen_report
|
||||
WHERE personal_nummer = $1
|
||||
AND bestaetigt IS NULL
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- Fallback if #1 returns nothing
|
||||
SELECT
|
||||
woche_start + INTERVAL '1 week' AS new_week,
|
||||
2 AS priority
|
||||
FROM wochen_report wo
|
||||
WHERE personal_nummer = $1
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM wochen_report wi
|
||||
WHERE wi.woche_start = wo.woche_start + INTERVAL '1 week'
|
||||
AND wi.personal_nummer = wo.personal_nummer
|
||||
)
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- Final fallback
|
||||
SELECT
|
||||
timestamp AS new_week,
|
||||
3 AS priority
|
||||
FROM anwesenheit
|
||||
WHERE card_uid = $2
|
||||
) t
|
||||
ORDER BY priority, new_week
|
||||
LIMIT 1;
|
||||
`)
|
||||
if err != nil {
|
||||
slog.Debug("Error preparing query statement.", "error", err)
|
||||
|
||||
Reference in New Issue
Block a user