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 && (