Vier Befunde, die still falsche Ergebnisse lieferten
C.08 -- die Suche mit Bindestrich fand nichts. Das Feld wird per translate an "-/:.," in Leerzeichen zerlegt, die Eingabe aber nicht: "Mueller-Weiss" erzeugte das Muster mueller-weiss%, waehrend im Heuhaufen "mueller weiss" stand. Ohne Bindestrich fand man dieselbe Person. Die Trennzeichen stehen jetzt einmal in lib/employee-search.ts und werden von beiden Seiten des Vergleichs benutzt. C.09 -- der Einheitenfilter verlor jede Person mit vorgemerktem Austritt. "Laufend" war valid_to is null, aber terminate_employee setzt das Ende schon beim Erfassen, Monate vor dem Tag. Jetzt zaehlt auch, was noch laeuft (valid_to > heute). Bewusst ohne valid_from <= heute: ein geplanter Eintritt gehoert in die Liste, sonst fiele er aus dem Filter, obwohl der Status "Geplant" ihn ausdruecklich fuehrt. E.07 -- nur die Kostenstelle zu aendern war unmoeglich. update_position weist einen Aufruf ohne Aenderung ab, und die Umkontierung lief erst bei dessen Erfolg. Sie wird jetzt uebersprungen, wenn sich an den Stammangaben nichts geaendert hat. H.06 -- jedes Speichern erzeugte zusaetzlich "Wochenstunden 30.0 -> 30". Der Vergleich laeuft ueber Text, die Spalte ist numeric(4,1), und das Formular schickt 30. Der Kommentar an der Zeile nannte die Absicht richtig, nur reicht ::numeric dafuer nicht -- es muss auf die Genauigkeit der Spalte gehen.
This commit is contained in:
@@ -63,20 +63,42 @@ export function EditPositionModal({
|
||||
// Die eigene Leitung zählt nicht als Hindernis für sich selbst.
|
||||
const chiefTaken = Boolean(unit?.hasChief) && !(position.is_chief && orgUnitId === position.org_unit_id);
|
||||
|
||||
// Ob sich an den Stammangaben überhaupt etwas geändert hat.
|
||||
//
|
||||
// update_position weist einen Aufruf ohne Änderung mit „Es wurde nichts
|
||||
// geändert." ab — und weil die Umkontierung erst bei dessen Erfolg lief,
|
||||
// liess sich die Kostenstelle **allein** nicht setzen: die Meldung kam, und
|
||||
// die neue Kostenstelle blieb liegen. Wer es trotzdem wollte, musste
|
||||
// nebenbei ein anderes Feld verstellen. Gemeldet im Test vom 29.09. (E.07).
|
||||
const stammGeaendert =
|
||||
jobTitle.trim() !== position.title ||
|
||||
orgUnitId !== position.org_unit_id ||
|
||||
(isChief && !chiefTaken) !== position.is_chief ||
|
||||
validFrom !== position.valid_from ||
|
||||
(validTo || null) !== (position.valid_to ?? null);
|
||||
|
||||
async function handleSubmit() {
|
||||
if (!jobTitle.trim() || !orgUnitId || !validFrom) {
|
||||
showToast("Tätigkeit, Einheit und Gültigkeitsbeginn sind Pflicht.", "error");
|
||||
return;
|
||||
}
|
||||
if (!stammGeaendert && !kostenstelleGeaendert) {
|
||||
showToast("Es wurde nichts geändert.", "error");
|
||||
return;
|
||||
}
|
||||
setPending(true);
|
||||
const result = await updatePosition({
|
||||
position_id: position.id,
|
||||
org_unit_id: orgUnitId,
|
||||
job_title: jobTitle.trim(),
|
||||
is_chief: isChief && !chiefTaken,
|
||||
valid_from: validFrom,
|
||||
valid_to: validTo || null,
|
||||
});
|
||||
// Nur aufrufen, wenn es etwas zu ändern gibt. Sonst ist der Fehlschlag
|
||||
// dieses Schritts die einzige Antwort auf eine reine Umkontierung.
|
||||
const result = stammGeaendert
|
||||
? await updatePosition({
|
||||
position_id: position.id,
|
||||
org_unit_id: orgUnitId,
|
||||
job_title: jobTitle.trim(),
|
||||
is_chief: isChief && !chiefTaken,
|
||||
valid_from: validFrom,
|
||||
valid_to: validTo || null,
|
||||
})
|
||||
: { success: true as const };
|
||||
if (result.success && kostenstelleGeaendert) {
|
||||
// Nacheinander, nicht gemeinsam: die Umkontierung ist ein eigener
|
||||
// Vorgang mit eigenem Stichtag und eigenem Protokolleintrag. Schlägt sie
|
||||
@@ -96,7 +118,13 @@ export function EditPositionModal({
|
||||
}
|
||||
setPending(false);
|
||||
if (result.success) {
|
||||
showToast(kostenstelleGeaendert ? "Planstelle geändert und umkontiert." : "Planstelle geändert.");
|
||||
showToast(
|
||||
stammGeaendert && kostenstelleGeaendert
|
||||
? "Planstelle geändert und umkontiert."
|
||||
: kostenstelleGeaendert
|
||||
? "Planstelle umkontiert."
|
||||
: "Planstelle geändert."
|
||||
);
|
||||
router.refresh();
|
||||
onClose();
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user