import { redirect } from "next/navigation"; import { KundeAnlegen } from "@/components/kunde-anlegen"; import { KundeBearbeiten } from "@/components/kunde-bearbeiten"; import { KundeArchivieren } from "@/components/kunde-archivieren"; import { darf } from "@/server/auth/rollen"; import { sitzungErforderlich } from "@/server/auth/sitzungspflicht"; import { kundenEbeneSichtbar } from "@/server/mandant"; import { kundenListe, type KundenZeile } from "@/server/queries/kunden"; /** * Kundenliste – nur im Modus Dienstleistung. * * Im Modus Intern gibt es genau einen Kunden, und der erscheint nirgends. Die * Seite leitet dann auf die Uebersicht, statt eine leere Liste zu zeigen. */ function Zaehlung({ zeile }: { zeile: KundenZeile }) { const teile = [ [zeile.anzahlGeraete, "Gerät", "Geräte"], [zeile.anzahlMitarbeiter, "Person", "Personen"], [zeile.anzahlLaeufe, "Lauf", "Läufe"], ] as const; return (
{teile.map(([anzahl, eins, viele]) => `${anzahl} ${anzahl === 1 ? eins : viele}`).join(" · ")}
); } export default async function KundenSeite() { const { benutzer } = await sitzungErforderlich("lesen", "/kunden"); if (!(await kundenEbeneSichtbar())) { redirect("/"); } const darfVerwalten = darf(benutzer.rolle, "verwaltung"); const zeilen = await kundenListe(benutzer, true); return ( <>Geräte, Personen, Abteilungen und Läufe hängen an einem Kunden. Kunden werden archiviert, nicht gelöscht — sonst verlöre das Archiv seine Bezüge.
{zeile.name}
{zeile.istEigeneOrganisation ? ( eigene Organisation ) : null}{zeile.notizen}
) : null}
Das Kürzel erscheint auf den Etiketten und lässt sich in der Hostname-Regel als{" "}
{"{kundenkuerzel}"} verwenden.