import { useEffect, useState } from "react"; import { apiRequest } from "../../api/client"; import type { EskalationKonfiguration } from "../../api/types"; interface Props { onFehler: (text: string) => void; } /** Karte 12: Zeitschwellen für die Fehlbestand-Eskalation, zur Laufzeit * änderbar (bewusst nicht fix im Code, siehe backend/app/services/eskalation.py). * "Jetzt prüfen" stößt denselben Lauf an, den sonst der tägliche systemd-Timer * macht - nützlich um eine Konfigurationsänderung sofort zu testen. */ export function EskalationSection({ onFehler }: Props) { const [konfiguration, setKonfiguration] = useState(null); const [erinnerungTage, setErinnerungTage] = useState(""); const [leitungTage, setLeitungTage] = useState(""); const [wirdGespeichert, setWirdGespeichert] = useState(false); const [pruefErgebnis, setPruefErgebnis] = useState(null); const [wirdGeprueft, setWirdGeprueft] = useState(false); async function laden() { try { const daten = await apiRequest("/eskalation/konfiguration"); setKonfiguration(daten); setErinnerungTage(String(daten.erinnerung_tage)); setLeitungTage(String(daten.leitung_tage)); } catch { onFehler("Eskalations-Konfiguration konnte nicht geladen werden."); } } useEffect(() => { laden(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); async function speichern() { setWirdGespeichert(true); try { const daten = await apiRequest("/eskalation/konfiguration", { method: "PUT", body: { erinnerung_tage: Number(erinnerungTage), leitung_tage: Number(leitungTage) }, }); setKonfiguration(daten); } catch { onFehler("Eskalations-Konfiguration konnte nicht gespeichert werden."); } finally { setWirdGespeichert(false); } } async function jetztPruefen() { setWirdGeprueft(true); setPruefErgebnis(null); try { const ergebnis = await apiRequest<{ erinnerungen: number; eskalationen: number }>( "/eskalation/pruefen", { method: "POST" } ); setPruefErgebnis( `${ergebnis.erinnerungen} Erinnerung(en), ${ergebnis.eskalationen} Eskalation(en) verschickt.` ); } catch { onFehler("Prüflauf konnte nicht gestartet werden."); } finally { setWirdGeprueft(false); } } if (!konfiguration) { return (

Eskalation

Lade…

); } return (

Eskalation offener Fehlbestände

Läuft täglich automatisch (systemd-Timer). Zeitschwellen ab Entstehung des Fehlbestands, in Tagen.

setErinnerungTage(e.target.value)} />
setLeitungTage(e.target.value)} />
{pruefErgebnis &&

{pruefErgebnis}

}
); }