Folgezähler-Forms: Checkbox "Alten Zähler deaktivieren" (default an)

Beide Folgezähler-Forms (Kundenakte MeterModal + Vertragsansicht
SuccessorMeterForm) bekommen eine Checkbox, die standardmäßig
angehakt ist. Beim Speichern wird der Vorgänger automatisch
auf isActive=false gesetzt – ein-klick-fähiger Zählerwechsel.

Backend: createMeter mit successorOf und addSuccessorMeter
akzeptieren deactivatePredecessor (Default true).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 14:39:05 +02:00
parent 3a9cece929
commit 2ee06630b9
5 changed files with 49 additions and 3 deletions
+10 -1
View File
@@ -539,7 +539,7 @@ export async function getCockpit(req: AuthRequest, res: Response): Promise<void>
export async function addSuccessorMeter(req: AuthRequest, res: Response): Promise<void> {
try {
const contractId = parseInt(req.params.id);
const { meterId, installedAt, finalReadingPrevious } = req.body;
const { meterId, installedAt, finalReadingPrevious, deactivatePredecessor } = req.body;
const contract = await prisma.contract.findUnique({
where: { id: contractId },
@@ -648,6 +648,15 @@ export async function addSuccessorMeter(req: AuthRequest, res: Response): Promis
);
}
// Alten Zähler deaktivieren (Default), sofern der Aufrufer das nicht
// explizit auf false setzt ein-klick-fähiger Zählerwechsel.
if (predecessorMeterId && deactivatePredecessor !== false) {
await prisma.meter.update({
where: { id: predecessorMeterId },
data: { isActive: false },
});
}
await logChange({
req, action: 'CREATE', resourceType: 'ContractMeter',
resourceId: contractMeter.id.toString(),
+14
View File
@@ -488,6 +488,10 @@ export async function createMeter(
predecessorMeterId: number;
installedAt?: string;
finalReadingPrevious?: number;
// Default true im UI: alter Zähler wird nach dem Wechsel auf
// isActive=false gesetzt. Kann ausgeschaltet werden, wenn der alte
// Zähler aus irgendeinem Grund noch aktiv bleiben soll.
deactivatePredecessor?: boolean;
};
}
) {
@@ -622,6 +626,16 @@ export async function createMeter(
data.successorOf.finalReadingPrevious,
);
}
// Alten Zähler deaktivieren (Default), sofern der Aufrufer das nicht
// explizit auf false setzt. Macht den typischen Zählerwechsel-Workflow
// ein-klick-fähig.
if (data.successorOf.deactivatePredecessor !== false) {
await prisma.meter.update({
where: { id: predecessor.id },
data: { isActive: false },
});
}
}
return created;