From 0d024b94c21fa64e6c71f3ac7238f11e7c3e2ce1 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 14:50:24 +0200 Subject: [PATCH] =?UTF-8?q?Kundenakte=20=E2=86=92=20Z=C3=A4hler:=20Checkbo?= =?UTF-8?q?x=20"Z=C3=A4hler=20ohne=20Vertr=C3=A4ge=20anzeigen"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Standardmäßig werden nur Zähler angezeigt, die mindestens einem Vertrag zugeordnet sind (entweder als Hauptzähler oder über die Folgezähler-Kette). Mit der neuen Checkbox lassen sich auch verwaiste Zähler ins Listing holen – nützlich beim Aufräumen. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/pages/customers/CustomerDetail.tsx | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/customers/CustomerDetail.tsx b/frontend/src/pages/customers/CustomerDetail.tsx index 50f56505..6059c9c3 100644 --- a/frontend/src/pages/customers/CustomerDetail.tsx +++ b/frontend/src/pages/customers/CustomerDetail.tsx @@ -1296,7 +1296,17 @@ function MetersTab({ onSuccess: () => queryClient.invalidateQueries({ queryKey: ['customer', customerId] }), }); - const filtered = showInactive ? meters : meters.filter((m) => m.isActive); + const [showWithoutContracts, setShowWithoutContracts] = useState(false); + + // Liefert true, wenn der Zähler mindestens einem Vertrag zugeordnet ist + // (entweder als Hauptzähler oder über die Folgezähler-Kette). + const hasAnyContract = (m: Meter) => + (m.energyDetails?.some((ed) => ed.contract) ?? false) + || (m.contractMeters?.some((cm) => cm.energyContractDetails?.contract) ?? false); + + const filtered = meters + .filter((m) => showInactive ? true : m.isActive) + .filter((m) => showWithoutContracts ? true : hasAnyContract(m)); // Sort readings by date (newest first) const getSortedReadings = (readings: any[] | undefined) => { @@ -1329,6 +1339,15 @@ function MetersTab({ /> Inaktive anzeigen + {canEdit && !hasDeliveryAddress && (