Wiedereintritt wieder moeglich, und die Panels lesen die Akte neu
Some checks failed
CI / Lint, Typen, Tests, Build (push) Successful in 11m36s
CI / Migrationen auf leerer Datenbank (push) Has been cancelled

Zwei Befunde aus dem Test vom 29.09., beide Klasse A.

K.01 -- rehire_employee scheitert bei jedem Aufruf: der case-Ausdruck fuer den
Status liefert text, die Spalte ist ein Aufzaehlungstyp. Genau das wurde am
10.08. schon einmal behoben. Vier spaetere Migrationen haben die Funktion neu
erzeugt und den Zusatz nicht mitgenommen -- zwei davon aus einer aelteren
Datei, zwei aus der laufenden Definition. Daraus die Lehre, die vorher nicht
dastand: aus dem laufenden Stand zu erzeugen schuetzt davor, Verhalten zu
verlieren, nicht davor, einen bereits vorhandenen Fehler mitzunehmen. Die
Selbstpruefung benennt deshalb jetzt das Erwartete und nicht nur das Neue.

H.05 -- "Daten aendern" schrieb veraltete Werte zurueck. Die Panels bleiben
eingebunden, damit ihr Ein- und Ausfahren laufen kann, belegen ihre Felder aber
mit useState(employee.…) vor -- und das laeuft nur beim ersten Aufbau. Nach
einer Befoerderung brachte router.refresh() die frische Akte herein, der
Zustand im Panel blieb der von vorhin, und beim naechsten Speichern ging er als
Ganzes an change_employee_data: der eben gesetzte Hay-Grade stand wieder auf
dem alten Wert. Jedes Panel bekommt jetzt einen key aus employees.updated_at,
der sich bei jeder Aenderung an der Zeile bewegt und sonst nie. Der
Wiedereintritts-Assistent daneben macht es seit jeher so.
This commit is contained in:
2026-09-29 18:42:30 +02:00
parent 3664b9a435
commit be9ca4758f
2 changed files with 129 additions and 1 deletions

View File

@@ -217,20 +217,44 @@ export function EmployeeDetail(props: EmployeeDetailProps) {
{tab === "HR-Notizen" && <NotizenTab employeeId={employee.id} notes={notes} />}
</div>
{/* Der `key` an jedem Panel ist kein Feinschliff, sondern der Unterschied
zwischen „zeigt Altes" und „schreibt Altes zurück".
Die Panels bleiben eingebunden, damit ihr Ein- und Ausfahren laufen
kann. Sie belegen ihre Felder aber mit useState(employee.…) vor, und
das läuft nur beim ersten Aufbau. Nach einer Beförderung bringt
router.refresh() zwar die frische Akte herein — der Zustand im Panel
bleibt der von vorhin. Beim nächsten Speichern geht er als Ganzes an
change_employee_data, und der eben gesetzte Hay-Grade steht wieder
auf dem alten Wert. Gemeldet im Test vom 29.09. (H.05).
employees.updated_at wechselt bei jeder Änderung an der Zeile
(Trigger trg_employees_touch_updated_at), also genau dann, wenn die
Vorbelegung neu zu lesen ist — und sonst nie. Der Wiedereintritts-
Assistent darunter macht es seit jeher so. */}
<TransferPanel
key={`transfer-${employee.updated_at}`}
open={panel === "transfer"}
onClose={() => setPanel(null)}
employee={employee}
openPositions={openPositions}
/>
<PromotePanel
key={`promote-${employee.updated_at}`}
open={panel === "promote"}
onClose={() => setPanel(null)}
employee={employee}
openPositions={openPositions}
/>
<KarenzPanel open={panel === "karenz"} onClose={() => setPanel(null)} employee={employee} status={status} />
<KarenzPanel
key={`karenz-${employee.updated_at}`}
open={panel === "karenz"}
onClose={() => setPanel(null)}
employee={employee}
status={status}
/>
<DatenAendernPanel
key={`daten-${employee.updated_at}`}
open={panel === "daten"}
onClose={() => setPanel(null)}
employee={employee}
@@ -238,6 +262,7 @@ export function EmployeeDetail(props: EmployeeDetailProps) {
locationCountry={location?.country}
/>
<TerminatePanel
key={`terminate-${employee.updated_at}`}
open={panel === "terminate"}
onClose={() => setPanel(null)}
employee={employee}