added overtime to time and team page + ui improvements + mobile support for team page closed #12
This commit is contained in:
70
db.sql
70
db.sql
@@ -194,3 +194,73 @@ SELECT
|
||||
FROM days d
|
||||
WHERE random() < 0.2 -- ~20% random absences
|
||||
ORDER BY d.work_date;
|
||||
|
||||
|
||||
WITH params AS (
|
||||
SELECT
|
||||
'acde-edca'::varchar AS card_uid,
|
||||
101::int AS geraet_id,
|
||||
14::int AS start_days_ago, -- how many days back to start
|
||||
0::int AS end_days_ahead, -- how many days forward (0 = today)
|
||||
0.5::float AS pause_probability,
|
||||
0.2::float AS absence_probability
|
||||
),
|
||||
days AS (
|
||||
SELECT gs::date AS work_date, p.card_uid, p.geraet_id, p.pause_probability, p.absence_probability
|
||||
FROM params p,
|
||||
generate_series(
|
||||
date_trunc('week', CURRENT_DATE) - (p.start_days_ago || ' days')::interval,
|
||||
CURRENT_DATE + (p.end_days_ahead || ' days')::interval,
|
||||
interval '1 day'
|
||||
) gs
|
||||
WHERE EXTRACT(ISODOW FROM gs) <= 5 -- only Mon–Fri
|
||||
),
|
||||
base_bookings AS (
|
||||
-- come
|
||||
SELECT
|
||||
d.work_date, d.card_uid, 1 AS check_in_out, d.geraet_id,
|
||||
(d.work_date + make_time(8, floor(random()*40)::int, 0))::timestamptz AS ts
|
||||
FROM days d
|
||||
UNION ALL
|
||||
-- go
|
||||
SELECT
|
||||
d.work_date, d.card_uid, 2 AS check_in_out, d.geraet_id,
|
||||
(d.work_date + make_time(16, floor(random()*40)::int, 0))::timestamptz AS ts
|
||||
FROM days d
|
||||
),
|
||||
pause_bookings AS (
|
||||
-- pause come
|
||||
SELECT
|
||||
d.work_date, d.card_uid, 3 AS check_in_out, d.geraet_id,
|
||||
(d.work_date + make_time(11, floor(random()*30)::int, 0))::timestamptz AS ts
|
||||
FROM days d
|
||||
WHERE random() < d.pause_probability
|
||||
UNION ALL
|
||||
-- pause go
|
||||
SELECT
|
||||
d.work_date, d.card_uid, 4 AS check_in_out, d.geraet_id,
|
||||
(d.work_date + make_time(12, floor(random()*30)::int, 0))::timestamptz AS ts
|
||||
FROM days d
|
||||
WHERE random() < d.pause_probability
|
||||
),
|
||||
all_bookings AS (
|
||||
SELECT * FROM base_bookings
|
||||
UNION ALL
|
||||
SELECT * FROM pause_bookings
|
||||
),
|
||||
ins_anw AS (
|
||||
INSERT INTO anwesenheit ("timestamp", card_uid, check_in_out, geraet_id)
|
||||
SELECT ts, card_uid, check_in_out, geraet_id
|
||||
FROM all_bookings
|
||||
WHERE ts <= NOW()
|
||||
ORDER BY work_date, ts
|
||||
RETURNING 1
|
||||
)
|
||||
INSERT INTO abwesenheit (card_uid, abwesenheit_typ, datum)
|
||||
SELECT
|
||||
d.card_uid,
|
||||
(ARRAY[1, 2])[floor(random()*2 + 1)], -- example types
|
||||
d.work_date::timestamptz
|
||||
FROM days d
|
||||
WHERE random() < d.absence_probability
|
||||
ORDER BY d.work_date;
|
||||
|
||||
Reference in New Issue
Block a user