feat(fahrzeug): Fahrzeug-Spezialfelder + 5-stufiger Status (Roadmap Phase 3)
CI / backend-tests (push) Failing after 1m40s
CI / frontend-build (push) Successful in 17s

Neue Tabelle fahrzeugdetails (1:1 zu Objekt, additiv/optional): Kennzeichen,
Funkrufname, Baujahr, Kilometerstand, Betriebsstunden, nächste HU/UVV.
objekt_status um 'in_wartung' erweitert (Nutzer-Vorgabe: einsatzbereit/
eingeschränkt/nicht einsatzbereit/in Wartung/außer Dienst - die ersten drei
bleiben weiterhin rein rechnerisch über dashboard.einsatzbereitschaft(),
in_wartung/ausser_dienst sind die beiden manuell gesetzten Zustände).

dashboard.einsatzbereitschaft(): ausser_dienst-Objekte zählen nicht mehr mit,
in_wartung und überfällige HU/UVV sind neue Gründe für "nicht einsatzbereit".

dashboard.bevorstehende_prueftermine() (Kachel 2) zeigt jetzt Geräte- UND
Fahrzeugprüfungen (HU/UVV) in einer Liste (Nutzer-Vorgabe: ein Konzept für
"welche Prüfungen bald fällig sind") - Schema dafür verallgemeinert
(typ/bezeichnung/faelligkeitsdatum statt geräte-spezifischer Felder).

Frontend: Status-Dropdown + Fahrzeugdetails-Formular in ObjektSection
(nur für Objekttypen mit ist_zugfahrzeug=True), Dashboard-Kachel 2 zeigt
gemischte Liste.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
This commit is contained in:
2026-09-05 13:36:01 +02:00
co-authored by Claude Sonnet 5
parent eb20affd5d
commit 15fb8dbb16
12 changed files with 545 additions and 31 deletions
+10 -11
View File
@@ -19,11 +19,10 @@ interface Einsatzbereitschaft {
}
interface Prueftermineintrag {
geraet_instanz_id: string;
typ: string;
objekt_id: number;
material_name: string;
seriennummer: string;
naechste_pruefung: string;
bezeichnung: string;
faelligkeitsdatum: string;
verbleibende_tage: number;
status: string;
}
@@ -42,6 +41,8 @@ const GRUND_TEXT: Record<string, string> = {
pruefung_ueberfaellig: "Geräteprüfung überfällig",
kontrolle_laeuft: "Kontrolle läuft (gesperrt)",
mangel_kritisch_offen: "Kritischer Mangel offen",
in_wartung: "In Wartung",
hu_uvv_ueberfaellig: "HU/UVV überfällig",
mindermenge_genehmigt: "Mindermenge genehmigt",
};
@@ -124,13 +125,11 @@ export function DashboardPage() {
<p className="text-muted">Keine anstehenden oder überfälligen Geräteprüfungen.</p>
) : (
<ul className="card-list">
{prueftermine.map((p) => (
<li key={p.geraet_instanz_id} className="row-between" style={{ padding: "0.3rem 0" }}>
<span>
{p.material_name} <span className="text-muted">(SN {p.seriennummer})</span>
</span>
<span className={p.status === "abgelaufen" ? "text-muted" : "text-muted"} style={{ color: p.status === "abgelaufen" ? "#b00020" : undefined }}>
{p.naechste_pruefung} ({p.verbleibende_tage} Tage)
{prueftermine.map((p, i) => (
<li key={i} className="row-between" style={{ padding: "0.3rem 0" }}>
<span>{p.bezeichnung}</span>
<span style={{ color: p.status === "abgelaufen" ? "#b00020" : undefined }}>
{p.faelligkeitsdatum} ({p.verbleibende_tage} Tage)
</span>
</li>
))}