Phase 10: Mandantenfähigkeit (#15)

This commit was merged in pull request #15.
This commit is contained in:
2026-09-05 13:47:46 +00:00
parent 2b53556175
commit 91742a0dd7
98 changed files with 3810 additions and 201 deletions
+20
View File
@@ -288,6 +288,14 @@ const AUFNAHMEN: Aufnahme[] = [
beschreibung: "Kassenprüfung mit Differenz und Erläuterung",
angemeldet: true,
},
// Phase 10 — Mandantenfähigkeit
{
name: "50-wehren",
pfad: "/wehren",
beschreibung: "Wehren dieser Installation, Konten und ihre Zuordnungen",
angemeldet: true,
},
];
/**
@@ -372,6 +380,18 @@ async function fertigGeladen(seite: Page): Promise<void> {
.addStyleTag({ content: "nextjs-portal { display: none !important; }" })
.catch(() => undefined);
/**
* Erst warten, dass React überhaupt gelaufen ist.
*
* Ohne diese Pause war die Bedingung unten in einem Fall erfüllt, in dem sie
* nichts bedeutet: „keine Ladeanzeige“ trifft auch zu, *bevor* sie erscheint.
* Bei einer Route, die der Entwicklungsserver erst übersetzen muss, kam der
* Auslöser genau in diesem Moment — und das Bild zeigte eine leere Seite mit
* Überschriften.
*/
await seite.waitForTimeout(1_500);
await seite.waitForLoadState("networkidle");
try {
await seite.waitForFunction(() => !document.querySelector(".animate-pulse"), undefined, {
timeout: 15_000,
+16 -3
View File
@@ -53,8 +53,20 @@ async function main(): Promise<void> {
);
}
const vorhanden = await prisma.organisation.findUnique({
where: { slug: SLUG },
/**
* Auch die Nachbarwehr aus Phase 10 und das Konto der Kreisebene.
*
* Beide gehören zur Testwehr, liegen aber nicht in ihr: die Nachbarwehr ist
* eine eigene Organisation, das Konto gehört gar keiner. Blieben sie beim
* Zurücksetzen stehen, sähe der Seed die Nachbarwehr, hielte alles für
* erledigt und legte die Mitgliedschaft in der neuen Testwehr nie wieder an
* — der Wehrwähler zeigte danach nur noch die betreute Wehr.
*/
const NACHBAR_SLUG = `${SLUG}-nachbar`;
const KBI_EMAIL = process.env.SEED_KBI_EMAIL ?? `kbi@${SLUG}.de`;
const vorhanden = await prisma.organisation.findFirst({
where: { slug: { in: [SLUG, NACHBAR_SLUG] } },
select: { id: true, name: true },
});
@@ -79,7 +91,8 @@ async function main(): Promise<void> {
await tx.$executeRawUnsafe(`ALTER TABLE "${tabelle}" DISABLE TRIGGER USER`);
}
await tx.organisation.delete({ where: { slug: SLUG } });
await tx.organisation.deleteMany({ where: { slug: { in: [SLUG, NACHBAR_SLUG] } } });
await tx.benutzer.deleteMany({ where: { email: KBI_EMAIL } });
for (const tabelle of [
"druckmessung",