feat(mitarbeiter): Vorgesetzter auch fuer Personen ohne Verzeichnis (#43)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #43.
This commit is contained in:
2026-10-04 15:10:34 +00:00
parent 0fa41b9e08
commit 0060a55387
19 changed files with 683 additions and 49 deletions
+35
View File
@@ -10,6 +10,7 @@ import {
mitarbeiterAnlegen,
mitarbeiterBearbeiten,
mitarbeiterImportieren,
vorgesetztenSetzen,
type MitarbeiterImportAbweisung,
} from "@/server/services/mitarbeiter";
import type { HandelnderBenutzer } from "@/server/mandant";
@@ -161,6 +162,40 @@ export async function mitarbeiterAktivSetzenAktion(
}
}
/**
* Vorgesetzten setzen oder entfernen (#020).
*
* Ein leeres Feld entfernt die Zuordnung — deshalb `optional` und nicht
* `min(1)`: „niemand“ ist hier eine Angabe und kein Versehen.
*/
export async function vorgesetztenSetzenAktion(
_vorher: AktionsErgebnis,
formular: FormData,
): Promise<AktionsErgebnis> {
const zugang = await angemeldetOderMeldung();
if ("fehler" in zugang) return zugang;
const eingabe = z
.object({ mitarbeiterId: z.string().min(1), vorgesetzterId: z.string().optional() })
.safeParse({
mitarbeiterId: formular.get("mitarbeiterId"),
vorgesetzterId: formular.get("vorgesetzterId") ?? undefined,
});
if (!eingabe.success) return { fehler: "Die Eingabe ist unvollständig." };
try {
await vorgesetztenSetzen(
eingabe.data.mitarbeiterId,
eingabe.data.vorgesetzterId ?? null,
zugang.benutzer,
);
revalidatePath(`/mitarbeiter/${eingabe.data.mitarbeiterId}`);
return { erfolg: eingabe.data.vorgesetzterId ? "Gespeichert." : "Vorgesetzter entfernt." };
} catch (fehler) {
return alsErgebnis(fehler, "Die Änderung konnte nicht gespeichert werden.");
}
}
/**
* Personen aus einer CSV-Datei einspielen (#016).
*