import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import { apiRequest } from "../api/client"; import { useAuth } from "../auth/AuthContext"; import type { Akte } from "../api/types"; import { DokumentePanel } from "../components/DokumentePanel"; import { WartungSection } from "../components/WartungSection"; import { ReadinessBadge } from "../components/status/ReadinessBadge"; import { GRUND_TEXT } from "../components/status/gruendeText"; import { EREIGNIS_LABEL } from "../components/status/ereignisText"; function ablaufFarbe(ablaufdatum: string): string | undefined { const tage = (new Date(ablaufdatum).getTime() - Date.now()) / (1000 * 60 * 60 * 24); if (tage < 0) return "var(--color-danger)"; if (tage < 30) return "var(--color-warning)"; return undefined; } const MANGEL_PRIORITAET_LABEL: Record = { niedrig: "Niedrig", normal: "Normal", hoch: "Hoch", }; export function AktePage() { const { objektId } = useParams<{ objektId: string }>(); const { istVerantwortlich } = useAuth(); const [akte, setAkte] = useState(null); const [fehler, setFehler] = useState(null); const [laedt, setLaedt] = useState(true); function laden() { if (!objektId) return; setLaedt(true); apiRequest(`/akte/objekt/${objektId}`) .then(setAkte) .catch(() => setFehler("Akte konnte nicht geladen werden.")) .finally(() => setLaedt(false)); } useEffect(laden, [objektId]); async function pruefungDurchgefuehrt(geraetId: string) { try { await apiRequest(`/geraete/${geraetId}`, { method: "PATCH", body: { status: "einsatzbereit", pruefdatum: new Date().toISOString().slice(0, 10) }, }); laden(); } catch { setFehler("Prüfung konnte nicht erfasst werden."); } } if (laedt) return

Lade…

; if (fehler) return
{fehler}
; if (!akte) return null; const { objekt } = akte; const istFahrzeug = akte.fahrzeugdetails !== null; return (

{objekt.name}

{objekt.code} · {akte.objekttyp_name} · Objekt-Status: {objekt.status}
{akte.einsatzbereitschaft_gruende.length > 0 && (
    {akte.einsatzbereitschaft_gruende.map((g) => (
  • • {GRUND_TEXT[g] ?? g}
  • ))}
)}
Kontrolle starten Mangel melden

Stammdaten

Standort: {akte.standort_name}
Letzte Kontrolle:{" "} {akte.letzte_kontrolle_am ? new Date(akte.letzte_kontrolle_am).toLocaleString("de-DE") : "noch nie kontrolliert"}
{akte.fahrzeugdetails && ( <> {akte.fahrzeugdetails.kennzeichen &&
Kennzeichen: {akte.fahrzeugdetails.kennzeichen}
} {akte.fahrzeugdetails.funkrufname &&
Funkrufname: {akte.fahrzeugdetails.funkrufname}
} {akte.fahrzeugdetails.funkkenner &&
Funkkenner: {akte.fahrzeugdetails.funkkenner}
} {akte.fahrzeugdetails.kilometerstand !== null && (
Kilometerstand: {akte.fahrzeugdetails.kilometerstand} km
)} )}

Beladung

{akte.beladung.length === 0 &&

Keine Positionen zugeordnet.

} {akte.beladung.length > 0 && (
{akte.beladung.map((b) => ( ))}
Material Fach Soll Ist Ablauf
{b.material_name} {b.fach ?? "–"} {b.sollmenge} {b.einheit} {b.istmenge} {b.einheit} {b.ablaufdatum ? new Date(b.ablaufdatum).toLocaleDateString("de-DE") : "–"}
)}

Verantwortlichkeit

{akte.zustaendige_benutzer.length === 0 && akte.kontrollverantwortung.length === 0 && (

Keine Zuordnung hinterlegt.

)} {akte.zustaendige_benutzer.length > 0 && (
    {akte.zustaendige_benutzer.map((z) => (
  • {z.name} ({z.quelle === "standort" ? "über Standort" : "direkt"})
  • ))}
)}

Prüfungen (Geräte)

{akte.geraete.length === 0 &&

Keine Geräte-Instanzen erfasst.

} {akte.geraete.length > 0 && (
    {akte.geraete.map((g) => (
  • SN {g.seriennummer} —{" "} {g.status} {g.naechste_pruefung && ( · nächste Prüfung {new Date(g.naechste_pruefung).toLocaleDateString("de-DE")} )} {istVerantwortlich && ( )}
  • ))}
)}

Mängel

{akte.maengel.length === 0 &&

Keine Mängel gemeldet.

} {akte.maengel.length > 0 && (
    {akte.maengel.map((m) => (
  • {m.beschreibung} — {MANGEL_PRIORITAET_LABEL[m.prioritaet]}, {m.status}
  • ))}
)}

Dokumente

Historie

{akte.historie.length === 0 &&

Noch keine Änderungen protokolliert.

} {akte.historie.length > 0 && (
    {akte.historie.map((h) => (
  • {new Date(h.zeitpunkt).toLocaleString("de-DE")} — {EREIGNIS_LABEL[h.ereignistyp] ?? h.ereignistyp} {h.benutzer_name && ({h.benutzer_name})}
  • ))}
)}
); }