import { AlertTriangle, Truck, Users, Wrench } from "lucide-react"; import { aktuelleSitzung } from "@/lib/auth"; import { fuerOrganisation } from "@/lib/db"; import { ROLLEN_BEZEICHNUNG } from "@/lib/authz"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { alsDatumZeit } from "@/lib/utils"; export const metadata = { title: "Übersicht" }; /** Startseite nach der Anmeldung. */ export default async function UebersichtSeite() { const sitzung = await aktuelleSitzung(); if (!sitzung) return null; const daten = await fuerOrganisation(sitzung.organisationId, async (db) => { const [organisation, mitglieder, fahrzeuge, geraete, pruefungFaellig, gesperrt] = await Promise.all([ db.organisation.findUnique({ where: { id: sitzung.organisationId } }), db.person.count({ where: { aktiv: true, geloeschtAm: null } }), db.fahrzeug.count({ where: { aktiv: true, geloeschtAm: null } }), db.geraet.count({ where: { geloeschtAm: null } }), db.geraet.count({ where: { status: "PRUEFUNG_FAELLIG", geloeschtAm: null } }), db.geraet.count({ where: { status: "GESPERRT", geloeschtAm: null } }), ]); return { organisation, mitglieder, fahrzeuge, geraete, pruefungFaellig, gesperrt }; }); const kacheln = [ { titel: "Aktive Mitglieder", wert: daten.mitglieder, symbol: Users }, { titel: "Fahrzeuge", wert: daten.fahrzeuge, symbol: Truck }, { titel: "Geräte", wert: daten.geraete, symbol: Wrench }, { titel: "Prüfung fällig", wert: daten.pruefungFaellig, symbol: AlertTriangle }, ]; return (
Angemeldet als {sitzung.name} —{" "} {sitzung.rollen.map((rolle) => ROLLEN_BEZEICHNUNG[rolle]).join(", ")}
Diese Installation ist noch nicht freigegeben.
Atemschutzüberwachung und Alarmmonitor sind sicherheitsrelevant. Solange die Wehr das System nicht ausdrücklich freigegeben hat, bleibt die analoge Überwachung führend. FLORIAN ersetzt sie nicht.
{kachel.wert}