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
@@ -361,6 +361,7 @@ function SuccessorMeterButton({
const [selectedMeterId, setSelectedMeterId] = useState('');
const [installedAt, setInstalledAt] = useState(new Date().toISOString().split('T')[0]);
const [finalReading, setFinalReading] = useState('');
const [deactivatePredecessor, setDeactivatePredecessor] = useState(true);
const queryClient = useQueryClient();
const { data: metersData } = useQuery({
@@ -370,13 +371,14 @@ function SuccessorMeterButton({
});
const addMutation = useMutation({
mutationFn: (data: { meterId: number; installedAt?: string; finalReadingPrevious?: number }) =>
mutationFn: (data: { meterId: number; installedAt?: string; finalReadingPrevious?: number; deactivatePredecessor?: boolean }) =>
contractApi.addSuccessorMeter(contractId, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['contract'] });
setShowForm(false);
setSelectedMeterId('');
setFinalReading('');
setDeactivatePredecessor(true);
},
});
@@ -451,6 +453,15 @@ function SuccessorMeterButton({
erfasst und fließt damit in die Verbrauchsberechnung ein.
</p>
)}
<label className="flex items-center gap-2 mt-3 text-sm">
<input
type="checkbox"
checked={deactivatePredecessor}
onChange={(e) => setDeactivatePredecessor(e.target.checked)}
className="rounded"
/>
Alten Zähler deaktivieren
</label>
<div className="flex gap-2 mt-3">
<Button
size="sm"
@@ -458,6 +469,7 @@ function SuccessorMeterButton({
meterId: parseInt(selectedMeterId),
installedAt,
finalReadingPrevious: finalReading ? parseFloat(finalReading) : undefined,
deactivatePredecessor,
})}
disabled={!selectedMeterId || addMutation.isPending}
>