featur add fahrmeister
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
-- Migration 007: Authentik groups + vehicle inspection/service periods
|
||||
-- Depends on: 001_create_users_table.sql, 005_create_fahrzeuge.sql
|
||||
--
|
||||
-- Changes:
|
||||
-- 1. Add authentik_groups column to users (stores Authentik group memberships)
|
||||
-- 2. Add paragraph57a_faellig_am + naechste_wartung_am to fahrzeuge
|
||||
-- 3. Refresh the fahrzeuge_mit_pruefstatus view to expose the new columns
|
||||
-- Rollback:
|
||||
-- ALTER TABLE users DROP COLUMN IF EXISTS authentik_groups;
|
||||
-- ALTER TABLE fahrzeuge DROP COLUMN IF EXISTS paragraph57a_faellig_am;
|
||||
-- ALTER TABLE fahrzeuge DROP COLUMN IF EXISTS naechste_wartung_am;
|
||||
|
||||
-- ── 1. users: Authentik group memberships ─────────────────────────────────────
|
||||
ALTER TABLE users
|
||||
ADD COLUMN IF NOT EXISTS authentik_groups TEXT[] NOT NULL DEFAULT '{}';
|
||||
|
||||
COMMENT ON COLUMN users.authentik_groups IS
|
||||
'Authentik group slugs synced on every login (e.g. dashboard_admin, fahrmeister)';
|
||||
|
||||
-- ── 2. fahrzeuge: §57a (Austrian periodic inspection) + service interval ──────
|
||||
ALTER TABLE fahrzeuge
|
||||
ADD COLUMN IF NOT EXISTS paragraph57a_faellig_am DATE;
|
||||
|
||||
COMMENT ON COLUMN fahrzeuge.paragraph57a_faellig_am IS
|
||||
'§57a StVO periodic inspection due date (Austrian equivalent of HU/TÜV)';
|
||||
|
||||
ALTER TABLE fahrzeuge
|
||||
ADD COLUMN IF NOT EXISTS naechste_wartung_am DATE;
|
||||
|
||||
COMMENT ON COLUMN fahrzeuge.naechste_wartung_am IS
|
||||
'Next scheduled service / maintenance due date';
|
||||
|
||||
-- ── 3. Refresh view to expose new vehicle columns ─────────────────────────────
|
||||
-- Drop and recreate since CREATE OR REPLACE on views requires identical column list.
|
||||
DROP VIEW IF EXISTS fahrzeuge_mit_pruefstatus;
|
||||
|
||||
CREATE OR REPLACE VIEW fahrzeuge_mit_pruefstatus AS
|
||||
WITH latest_pruefungen AS (
|
||||
SELECT DISTINCT ON (fahrzeug_id, pruefung_art)
|
||||
fahrzeug_id,
|
||||
pruefung_art,
|
||||
id AS pruefung_id,
|
||||
faellig_am,
|
||||
durchgefuehrt_am,
|
||||
ergebnis,
|
||||
naechste_faelligkeit,
|
||||
pruefende_stelle,
|
||||
CURRENT_DATE - faellig_am::date AS tage_ueberfaellig,
|
||||
faellig_am::date - CURRENT_DATE AS tage_bis_faelligkeit
|
||||
FROM fahrzeug_pruefungen
|
||||
ORDER BY
|
||||
fahrzeug_id,
|
||||
pruefung_art,
|
||||
(durchgefuehrt_am IS NULL) DESC,
|
||||
faellig_am DESC
|
||||
)
|
||||
SELECT
|
||||
f.id,
|
||||
f.bezeichnung,
|
||||
f.kurzname,
|
||||
f.amtliches_kennzeichen,
|
||||
f.fahrgestellnummer,
|
||||
f.baujahr,
|
||||
f.hersteller,
|
||||
f.typ_schluessel,
|
||||
f.besatzung_soll,
|
||||
f.status,
|
||||
f.status_bemerkung,
|
||||
f.standort,
|
||||
f.bild_url,
|
||||
f.created_at,
|
||||
f.updated_at,
|
||||
-- §57a Austrian periodic inspection
|
||||
f.paragraph57a_faellig_am,
|
||||
f.paragraph57a_faellig_am::date - CURRENT_DATE AS paragraph57a_tage_bis_faelligkeit,
|
||||
-- Next service/maintenance
|
||||
f.naechste_wartung_am,
|
||||
f.naechste_wartung_am::date - CURRENT_DATE AS wartung_tage_bis_faelligkeit,
|
||||
-- Legacy pruefungen (HU / AU / UVV / Leiter) kept for backwards compat
|
||||
hu.pruefung_id AS hu_pruefung_id,
|
||||
hu.faellig_am AS hu_faellig_am,
|
||||
hu.tage_bis_faelligkeit AS hu_tage_bis_faelligkeit,
|
||||
hu.ergebnis AS hu_ergebnis,
|
||||
au.pruefung_id AS au_pruefung_id,
|
||||
au.faellig_am AS au_faellig_am,
|
||||
au.tage_bis_faelligkeit AS au_tage_bis_faelligkeit,
|
||||
au.ergebnis AS au_ergebnis,
|
||||
uvv.pruefung_id AS uvv_pruefung_id,
|
||||
uvv.faellig_am AS uvv_faellig_am,
|
||||
uvv.tage_bis_faelligkeit AS uvv_tage_bis_faelligkeit,
|
||||
uvv.ergebnis AS uvv_ergebnis,
|
||||
leiter.pruefung_id AS leiter_pruefung_id,
|
||||
leiter.faellig_am AS leiter_faellig_am,
|
||||
leiter.tage_bis_faelligkeit AS leiter_tage_bis_faelligkeit,
|
||||
leiter.ergebnis AS leiter_ergebnis,
|
||||
-- Overall worst urgency: §57a + Wartung take precedence, legacy pruefungen kept
|
||||
LEAST(
|
||||
f.paragraph57a_faellig_am::date - CURRENT_DATE,
|
||||
f.naechste_wartung_am::date - CURRENT_DATE,
|
||||
hu.tage_bis_faelligkeit,
|
||||
au.tage_bis_faelligkeit,
|
||||
uvv.tage_bis_faelligkeit,
|
||||
leiter.tage_bis_faelligkeit
|
||||
) AS naechste_pruefung_tage
|
||||
FROM
|
||||
fahrzeuge f
|
||||
LEFT JOIN latest_pruefungen hu ON hu.fahrzeug_id = f.id AND hu.pruefung_art = 'HU'
|
||||
LEFT JOIN latest_pruefungen au ON au.fahrzeug_id = f.id AND au.pruefung_art = 'AU'
|
||||
LEFT JOIN latest_pruefungen uvv ON uvv.fahrzeug_id = f.id AND uvv.pruefung_art = 'UVV'
|
||||
LEFT JOIN latest_pruefungen leiter ON leiter.fahrzeug_id = f.id AND leiter.pruefung_art = 'Leiter';
|
||||
Reference in New Issue
Block a user