Fix: Folgezähler-Button auch bei Single-Meter-Verträgen anzeigen
Bei Folgeverträgen / Bestandsverträgen ohne ContractMeter-Eintrag war der "Folgezähler hinzufügen"-Button unsichtbar, weil er nur im Multi-Meter-Zweig gerendert wurde. Zusätzlich im addSuccessorMeter-Backend: bei Single-Meter-Verträgen wird der bisherige energyDetails.meterId jetzt als ContractMeter position 0 backfillt und als removed markiert, damit die Kette lückenlos ist und der alte Zähler im Vertrag dokumentiert bleibt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -551,19 +551,40 @@ export async function addSuccessorMeter(req: AuthRequest, res: Response): Promis
|
||||
}
|
||||
|
||||
const ecdId = contract.energyDetails.id;
|
||||
const existingMeters = contract.energyDetails.contractMeters;
|
||||
const existingMeters = [...contract.energyDetails.contractMeters];
|
||||
const switchAt = installedAt ? new Date(installedAt) : new Date();
|
||||
|
||||
// Backfill: Bei Single-Meter-Verträgen (kein ContractMeter-Eintrag) den
|
||||
// bisherigen `energyDetails.meterId` als position 0 nachtragen, damit die
|
||||
// Folgezähler-Kette lückenlos ist und der alte Zähler nicht aus dem
|
||||
// Vertrag verschwindet, wenn `energyDetails.meterId` gleich auf den Neuen
|
||||
// gedreht wird.
|
||||
if (existingMeters.length === 0 && contract.energyDetails.meterId) {
|
||||
const backfilled = await prisma.contractMeter.create({
|
||||
data: {
|
||||
energyContractDetailsId: ecdId,
|
||||
meterId: contract.energyDetails.meterId,
|
||||
position: 0,
|
||||
installedAt: null,
|
||||
},
|
||||
});
|
||||
existingMeters.push(backfilled);
|
||||
}
|
||||
|
||||
const nextPosition = existingMeters.length > 0
|
||||
? Math.max(...existingMeters.map(m => m.position)) + 1
|
||||
: 0;
|
||||
|
||||
// Vorherigen Zähler als gewechselt markieren
|
||||
if (existingMeters.length > 0 && finalReadingPrevious !== undefined) {
|
||||
if (existingMeters.length > 0) {
|
||||
const prevMeter = existingMeters[existingMeters.length - 1];
|
||||
await prisma.contractMeter.update({
|
||||
where: { id: prevMeter.id },
|
||||
data: {
|
||||
removedAt: installedAt ? new Date(installedAt) : new Date(),
|
||||
finalReading: parseFloat(finalReadingPrevious),
|
||||
removedAt: switchAt,
|
||||
finalReading: finalReadingPrevious !== undefined
|
||||
? parseFloat(finalReadingPrevious)
|
||||
: prevMeter.finalReading,
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -573,7 +594,7 @@ export async function addSuccessorMeter(req: AuthRequest, res: Response): Promis
|
||||
energyContractDetailsId: ecdId,
|
||||
meterId: parseInt(meterId),
|
||||
position: nextPosition,
|
||||
installedAt: installedAt ? new Date(installedAt) : new Date(),
|
||||
installedAt: switchAt,
|
||||
},
|
||||
include: { meter: { include: { readings: true } } },
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user