L14 Abrechnungsübersicht: Demo-Seed auf frischer Datenbank lauffähig

Seit L12 darf ein Nutzer nur eine laufende Uhr haben. DEMO-06/DEMO-07 (laufende Uhren) werden deshalb nach den vergangenen Einsätzen derselben Monteure angelegt; Inhalte unverändert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 10:35:07 +02:00
co-authored by Claude Opus 5
parent 5ea23a179d
commit 9b087168d1
+18 -14
View File
@@ -273,20 +273,8 @@ export async function seedDemoTenant(tenantId: string, users: DemoUsers): Promis
await assign(id, nord, [users.tech2]);
await transitionWorkOrder(tech2, { workOrderId: id, to: "accepted" });
});
await order({ ext: "DEMO-06", customer: "K-D006", site: "Halle 1 – Kühllager", title: "Störung Kältemittelleitung", orderTypeId: type("stoerung"), priority: "urgent", plannedStart: day(0, 9), plannedEnd: day(0, 13) }, async (id) => {
await assign(id, sued, [users.tech3]);
await travel(tech3, id, day(0, 8, 30));
});
await order({ ext: "DEMO-07", customer: "K-D003", site: "Quartier Poppenbüttel – Block 3", title: "Montage Gas-Brennwerttherme", orderTypeId: type("montage"), plannedStart: day(0, 7), plannedEnd: day(0, 17), materials: heating, scope: "Demontage Altgerät, Montage Neugerät, Abgasanschluss, Inbetriebnahme." }, async (id) => {
await assign(id, nord, [users.tech]);
await travel(tech, id, day(0, 6, 45));
await work(tech, id, day(0, 7, 10));
await photo(tech, id, { phase: "before", requirementKey: "ausgangszustand", comment: "Altgerät vor Demontage" });
await note(tech, id, "work_done", "Altgerät demontiert, Anschlüsse verschlossen.");
await note(tech, id, "deviation", "Abgasrohr muss um 30 cm verlängert werden.");
await planMaterial(tech, id, 1, 14, "fully_used", "Leitungsführung um den Schacht");
await material(tech, id, { clientId: randomUUID(), name: "Abgasrohr-Verlängerung DN80", articleNumber: "AG-80-05", quantity: 1, unit: "Stk", usageStatus: "additional", deviationReason: "Abgasrohr zu kurz" });
});
// DEMO-06/DEMO-07 (laufende Uhren von Sven Südfeld und Max Monteur) werden erst nach DEMO-19 angelegt: seit
// L12 darf ein Nutzer nur eine laufende Uhr haben – spätere Einsätze derselben Monteure würden sonst kollidieren.
await order({ ext: "DEMO-08", customer: "K-D002", site: "Filiale Eppendorf", title: "Undichte Leitung unter der Theke", orderTypeId: type("reparatur"), plannedStart: day(0, 7), plannedEnd: day(0, 11) }, async (id) => {
await assign(id, sued, [users.tech3]);
await work(tech3, id, day(0, 7, 5));
@@ -376,6 +364,22 @@ export async function seedDemoTenant(tenantId: string, users: DemoUsers): Promis
await markBilled(bo, { workOrderId: id });
});
// Heute laufende Uhren (nach allen vergangenen Einsätzen derselben Monteure, s. o.)
await order({ ext: "DEMO-06", customer: "K-D006", site: "Halle 1 – Kühllager", title: "Störung Kältemittelleitung", orderTypeId: type("stoerung"), priority: "urgent", plannedStart: day(0, 9), plannedEnd: day(0, 13) }, async (id) => {
await assign(id, sued, [users.tech3]);
await travel(tech3, id, day(0, 8, 30));
});
await order({ ext: "DEMO-07", customer: "K-D003", site: "Quartier Poppenbüttel – Block 3", title: "Montage Gas-Brennwerttherme", orderTypeId: type("montage"), plannedStart: day(0, 7), plannedEnd: day(0, 17), materials: heating, scope: "Demontage Altgerät, Montage Neugerät, Abgasanschluss, Inbetriebnahme." }, async (id) => {
await assign(id, nord, [users.tech]);
await travel(tech, id, day(0, 6, 45));
await work(tech, id, day(0, 7, 10));
await photo(tech, id, { phase: "before", requirementKey: "ausgangszustand", comment: "Altgerät vor Demontage" });
await note(tech, id, "work_done", "Altgerät demontiert, Anschlüsse verschlossen.");
await note(tech, id, "deviation", "Abgasrohr muss um 30 cm verlängert werden.");
await planMaterial(tech, id, 1, 14, "fully_used", "Leitungsführung um den Schacht");
await material(tech, id, { clientId: randomUUID(), name: "Abgasrohr-Verlängerung DN80", articleNumber: "AG-80-05", quantity: 1, unit: "Stk", usageStatus: "additional", deviationReason: "Abgasrohr zu kurz" });
});
// Notdienst mit vorläufigem Kunden (feste Client-IDs → idempotent)
const emergencyExisting = await bo.db.workSession.findFirst({ where: { clientId: "7c1d6a0e-3b1f-4c55-9d2a-00000000d020" }, select: { workOrderId: true } });
if (!emergencyExisting) {