import { AngehoerigeSection } from "@/components/employees/AngehoerigeSection"; import { brauchtAufenthaltstitel } from "@/lib/countries"; import { fmtAge, fmtDate } from "@/lib/format"; import type { Database } from "@/lib/types"; type EmployeeRow = Database["public"]["Tables"]["employees"]["Row"]; type Location = Database["public"]["Tables"]["locations"]["Row"]; type Dependent = Database["public"]["Tables"]["employee_dependents"]["Row"]; export function StammdatenTab({ employee, location, dependents }: { employee: EmployeeRow; location?: Location; dependents: Dependent[] }) { // Defensive against a DB that hasn't received the title_prefix/title_suffix // migration yet — select("*") simply omits unknown columns, so these can // be undefined rather than the empty array the column default implies. const prefixe = employee.title_prefix ?? []; const suffixe = employee.title_suffix ?? []; // Feld für Feld dieselbe Liste wie im Abschnitt „Person" von „Daten // ändern", in derselben Reihenfolge. // // Vorher fasste die Anzeige zusammen: Titel in einer Zeile, Adresse mit // Postleitzahl und Ort verschmolzen, Vor- und Nachname gar nicht — die // standen nur in der Kopfzeile. Wer eine Angabe prüfen wollte, musste den // Änderungsdialog öffnen, um sie überhaupt zu sehen, und stand dann schon // in einem Formular. Was sich ändern lässt, soll sich auch ansehen lassen. const rows: [string, string][] = [ ["Personalnummer", String(employee.personnel_number)], ["Vorname", employee.first_name], ["Nachname", employee.last_name], ["Titel (vorangestellt)", prefixe.length > 0 ? prefixe.join(", ") : "–"], ["Titel (nachgestellt)", suffixe.length > 0 ? suffixe.join(", ") : "–"], ["Geschlecht", employee.gender === "m" ? "männlich" : "weiblich"], ["Geburtsdatum", `${fmtDate(employee.birth_date)} (${fmtAge(employee.birth_date)} Jahre)`], ["SV-Nummer", employee.sv_nummer ?? "–"], ["Staatsbürgerschaft", employee.nationality], // Nur, wo er verlangt ist. Bei einer österreichischen Staatsbürger- // schaft wäre die Zeile „Aufenthaltstitel: Nein" keine Auskunft, // sondern eine Frage, die sich nicht stellt. ...(brauchtAufenthaltstitel(employee.nationality) ? ([ [ "Aufenthaltstitel", employee.hat_aufenthaltstitel ? employee.aufenthaltstitel_bis ? `Ja, bis ${fmtDate(employee.aufenthaltstitel_bis)}` : "Ja (unbefristet oder nicht erfasst)" : "Nein", ], ] as [string, string][]) : []), ["Adresse", employee.address ?? "–"], ["Postleitzahl", employee.postal_code ?? "–"], ["Ort", employee.city ?? "–"], ["Land", employee.address_country ?? "–"], ["Private E-Mail", employee.email ?? "–"], ["Private Telefonnummer", employee.phone ?? "–"], // Der Standort ist keine Angabe zur Person, sondern die Betriebsstätte — // er steht deshalb am Ende und nicht zwischen Adresse und Land, wo man // ihn für den Wohnort halten könnte. ["Standort", location ? `${location.name} (${location.country})` : "–"], ]; return (
Kein Notfallkontakt hinterlegt.
)}