import { Network } from "lucide-react"; import Link from "next/link"; import { Avatar } from "@/components/ui/Avatar"; import { LINK_BUTTON_CLASS } from "@/components/ui/Button"; import { fmtName } from "@/lib/format"; type MiniEmployee = { id: string; first_name: string; last_name: string; job_title: string; status?: string }; type OrganisationTabProps = { employeeId: string; manager: MiniEmployee | null; /** Nur gesetzt, wenn die zuständige Leitung abwesend ist und vertreten wird. */ formalManager: MiniEmployee | null; directReports: MiniEmployee[]; breadcrumb: string; /** * Die Kostenstelle der Planstelle, auf der die Person heute sitzt — nicht * ihre eigene: sie kontiert dorthin, wo ihr Sitz kontiert ist. Fehlt sie, * hat die Person keine laufende Besetzung (geplanter Eintritt, Austritt). */ kostenstelle: { code: string; name: string } | null; /** * Die Niederlassung, an der die Person arbeitet. * * Aus dem Workshop nachgetragen (Anforderung 8, „Niederlassungen auch in * Zuordnung einfügen"). Sie stand bisher nur im Stammdatenblatt, obwohl sie * zur Einordnung gehört wie die Einheit und die Kostenstelle: wer wissen * will, wo jemand sitzt, sieht hier nach und nicht bei der Privatadresse. * * Anders als Einheit und Kostenstelle hängt sie **an der Person** * (`employees.location_id`) und nicht an der Planstelle. Deshalb steht sie * auch dann da, wenn es keine laufende Besetzung gibt — bei einem * geplanten Eintritt zum Beispiel, wo daneben „Keine laufende * Planstellenbesetzung" zu lesen ist. */ standort: string | null; }; export function OrganisationTab({ employeeId, manager, formalManager, directReports, breadcrumb, kostenstelle, standort, }: OrganisationTabProps) { return (
{breadcrumb}
{standort ?? Nicht erfasst}
{kostenstelle ? ( <> {kostenstelle.code} · {kostenstelle.name} > ) : ( Keine laufende Planstellenbesetzung )}
Zuständig ist {fmtName(formalManager.first_name, formalManager.last_name)}; während der Abwesenheit übernimmt die nächste besetzte Ebene.
)} {manager ? (Keine Führungskraft (Geschäftsführung)
)}Keine direkten Berichte.
)}