feat(seed): sieben Vorlagen, Beispielbestand und Demo-Kunden (#33)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #33.
This commit is contained in:
2026-09-26 03:26:58 +00:00
parent ae290345b7
commit 9bd198a531
33 changed files with 3400 additions and 119 deletions
+1
View File
@@ -356,6 +356,7 @@ const BEISPIELWERTE: Record<string, string> = {
dn: "CN=Anna Beispiel,OU=Vertrieb,DC=muster,DC=example",
ou: "OU=Vertrieb,DC=muster,DC=example",
gruppen: "G-Vertrieb, G-Drucker-EG",
ou_gesperrt: "OU=Gesperrt,OU=Benutzer,DC=muster,DC=example",
generiertes_passwort: BEISPIEL_PASSWORT,
};
+9 -1
View File
@@ -12,7 +12,7 @@
* zweite Aufzaehlung an anderer Stelle wuerde unweigerlich auseinanderlaufen.
*/
export type PlatzhalterQuelle = "GERAET_LAUF" | "MITARBEITER" | "ABTEILUNG" | "BESONDERS";
export type PlatzhalterQuelle = "GERAET_LAUF" | "MITARBEITER" | "ABTEILUNG" | "EINSTELLUNG" | "BESONDERS";
export type EingebauterPlatzhalter = {
readonly schluessel: string;
@@ -65,6 +65,13 @@ export const EINGEBAUTE_PLATZHALTER: readonly EingebauterPlatzhalter[] = [
},
{ schluessel: "gruppen", quelle: "ABTEILUNG", erklaerung: "Standardgruppen, kommagetrennt" },
// Aus den Einstellungen
{
schluessel: "ou_gesperrt",
quelle: "EINSTELLUNG",
erklaerung: "Ziel-OU für deaktivierte Konten, aus Admin → Einstellungen",
},
// Besonders
{
schluessel: "generiertes_passwort",
@@ -78,6 +85,7 @@ export const QUELLEN_TEXT: Record<PlatzhalterQuelle, string> = {
GERAET_LAUF: "Gerät und Lauf",
MITARBEITER: "Mitarbeiter",
ABTEILUNG: "Abteilung",
EINSTELLUNG: "Einstellungen",
BESONDERS: "Besonders",
};
+12 -2
View File
@@ -316,8 +316,18 @@ export async function laufZumAbarbeiten(
schrittId: schritt.id,
ergebnisId: ergebnis?.id ?? null,
nummer,
titel: platzhalterErsetzen(schritt.titel, werte).text,
hilfetext: schritt.hilfetext ? platzhalterErsetzen(schritt.hilfetext, werte).text : null,
/*
* **Dasselbe Passwort wie im Befehl.** Titel und Hilfetext bekommen das
* Passwort dieses Seitenaufbaus mit, nicht jeweils ein eigenes. Ohne das
* `passwort`-Argument erzeugt jede Aufloesung ein neues: im Befehl stuende
* A, im Hilfetext daneben B — das Konto bekaeme A, der Benutzer erfuehre
* B, und A waere danach weg. Genau davor warnt `platzhalter-werte.ts` in
* Regel 4 seiner eigenen Kopfdokumentation (Reviewbefund zu #017).
*/
titel: platzhalterErsetzen(schritt.titel, werte, { art: "anzeige" }, passwort).text,
hilfetext: schritt.hilfetext
? platzhalterErsetzen(schritt.hilfetext, werte, { art: "anzeige" }, passwort).text
: null,
typ: schritt.typ,
pflicht: schritt.pflicht,
dokuUrl: schritt.dokuUrl,
+16
View File
@@ -171,6 +171,22 @@ export async function platzhalterWerteDesLaufs(kontext: LaufKontext): Promise<Pl
if (werte["ou"] === undefined) setzen(werte, "ou", alsText(lauf.abteilung.zielOu));
}
/*
* --- Aus den Einstellungen ---
*
* Die Ziel-OU fuer deaktivierte Konten steht global in `Einstellung` und wird
* im Offboarding gebraucht. Sie stand dort schon, wurde aber von keinem
* Platzhalter gelesen: `Move-ADObject -TargetPath "{{ou_gesperrt}}"` blieb leer,
* obwohl die Einstellungsseite „Wird beim Offboarding vorbelegt“ verspricht
* (Reviewbefund zu #017). Eine Variable gleichen Namens gewinnt weiter — sie
* steht weiter unten.
*/
const einstellung = await prisma.einstellung.findUnique({
where: { id: "global" },
select: { gesperrteOu: true },
});
setzen(werte, "ou_gesperrt", alsText(einstellung?.gesperrteOu));
/*
* --- Vorlagenvariablen ---
*