Der Wiedereintritt war da, nur nicht erreichbar

Aus dem Gespraech vom 17.09.2026.

Der Kunde suchte den Knopf "Wiedereintritt" an einer ausgetretenen Person
und hielt ihn fuer verschwunden — "ich dachte eigentlich, das ist schon
implementiert, das war mal drin". Er war drin. Er hing nur an
employee.status, und diese Spalte haengt nach: an einer Person, deren
Austritt erfasst und inzwischen vollzogen war, stand dort weiter "Aktiv".

Das ist mein Fehler beim Statusfix. Umgestellt waren dort `isActive` und
`canEditData` — die fuenf einzelnen Abfragen in derselben Datei blieben
stehen, dazu je eine in KarenzPanel und TerminatePanel. Jetzt liest keine
mehr die Spalte; die beiden Panels bekommen den abgeleiteten Status
uebergeben, statt ihn sich selbst aus der Zeile zu holen.

Betroffen war ausser dem Wiedereintritt auch: welcher Austritts-Knopf
erscheint ("Nicht angetreten" statt "Austritt"), die Beschriftung der
Abwesenheit, die Vorbelegung der Beendigungsart und ob die Zugehoerigkeit
angezeigt wird.

Dazu: die Niederlassung ist aus dem Reiter Organisation wieder raus. Sie
stand dort als unsere Auslegung von Anforderung 8; der Kunde hat sie im
Gespraech gestrichen ("nimm's mal hier raus"). Was mit der Anforderung
gemeint war, bleibt offen.
This commit is contained in:
2026-09-17 11:50:26 +02:00
parent bf7f59a959
commit 4165f3f8a1
5 changed files with 69 additions and 39 deletions

View File

@@ -3,7 +3,7 @@ import userEvent from "@testing-library/user-event";
import { describe, expect, it, vi } from "vitest";
import { TerminatePanel } from "@/components/employees/panels/TerminatePanel";
import { ToastProvider } from "@/components/ui/Toast";
import type { Database } from "@/lib/types";
import type { Database, EmploymentStatus } from "@/lib/types";
type EmployeeRow = Database["public"]["Tables"]["employees"]["Row"];
@@ -76,10 +76,23 @@ function mitarbeiter(teil: Partial<EmployeeRow> = {}): EmployeeRow {
} as EmployeeRow;
}
function zeige(teil: Partial<EmployeeRow> = {}) {
// Der Status kommt als eigener Wert und nicht mehr aus der Zeile: die Spalte
// `employees.status` hängt nach, deshalb leitet die Akte ihn aus den Daten ab
// und reicht ihn durch (siehe lib/reports.ts, deriveStatusAsOf).
function zeige(teil: Partial<EmployeeRow> = {}, status?: EmploymentStatus) {
// Vorgabe aus der Zeile, damit die vorhandenen Fälle unverändert das meinen,
// was sie meinten — `zeige({ status: "Aktiv" })` beschreibt weiterhin eine
// aktive Person. Der abgeleitete Status ist nur noch ein eigener Weg zum
// selben Wert, und die Vorgabe „Geplant" entspricht der Zeile oben.
return render(
<ToastProvider>
<TerminatePanel open onClose={() => {}} employee={mitarbeiter(teil)} directReportCount={0} />
<TerminatePanel
open
onClose={() => {}}
employee={mitarbeiter(teil)}
status={status ?? teil.status ?? "Geplant"}
directReportCount={0}
/>
</ToastProvider>
);
}