diff --git a/src/app/admin/dashboard/page.tsx b/src/app/admin/dashboard/page.tsx index 816ac27..98bed2c 100644 --- a/src/app/admin/dashboard/page.tsx +++ b/src/app/admin/dashboard/page.tsx @@ -33,6 +33,16 @@ export default function AdminDashboardPage() { const [showConfirmation, setShowConfirmation] = useState(false); const [confirmMsg, setConfirmMsg] = useState(''); + // Wasserzähler edit/delete + const [editZaehler, setEditZaehler] = useState(null); + const [editForm, setEditForm] = useState({ + haushalt_name: '', adresse: '', kundennummer: '', zaehlernummer: '', + alter_stand: '', neuer_stand: '', ablesedatum: '', + }); + const [editError, setEditError] = useState(''); + const [editSaving, setEditSaving] = useState(false); + const [deleteConfirm, setDeleteConfirm] = useState(null); + useEffect(() => { supabase.auth.getUser().then(({ data: { user } }) => { if (!user) { @@ -138,6 +148,65 @@ export default function AdminDashboardPage() { loadSettings(); }; + const openEditZaehler = (z: Wasserzaehler) => { + setEditZaehler(z); + setEditForm({ + haushalt_name: z.haushalt_name || '', + adresse: z.adresse || '', + kundennummer: z.kundennummer || '', + zaehlernummer: z.zaehlernummer || '', + alter_stand: z.alter_stand != null ? String(z.alter_stand) : '', + neuer_stand: z.neuer_stand != null ? String(z.neuer_stand) : '', + ablesedatum: z.ablesedatum || '', + }); + setEditError(''); + }; + + const handleEditSave = async () => { + if (!editZaehler) return; + setEditError(''); + setEditSaving(true); + + const alterStand = editForm.alter_stand ? parseFloat(editForm.alter_stand) : null; + const neuerStand = editForm.neuer_stand ? parseFloat(editForm.neuer_stand) : null; + const verbrauch = neuerStand != null && alterStand != null ? neuerStand - alterStand : null; + + const { error } = await supabase.from('wasserzaehler').update({ + haushalt_name: editForm.haushalt_name, + adresse: editForm.adresse, + kundennummer: editForm.kundennummer, + zaehlernummer: editForm.zaehlernummer, + alter_stand: alterStand, + neuer_stand: neuerStand, + verbrauch, + ablesedatum: editForm.ablesedatum || null, + }).eq('id', editZaehler.id); + + setEditSaving(false); + if (error) { + setEditError(`Fehler: ${error.message}`); + return; + } + setEditZaehler(null); + setConfirmMsg('Wasserzähler wurde erfolgreich aktualisiert.'); + setShowConfirmation(true); + loadZaehler(); + }; + + const handleDeleteZaehler = async (id: string) => { + const { error } = await supabase.from('wasserzaehler').delete().eq('id', id); + setDeleteConfirm(null); + if (error) { + setConfirmMsg(`Fehler beim Löschen: ${error.message}`); + setShowConfirmation(true); + return; + } + setEditZaehler(null); + setConfirmMsg('Wasserzähler wurde gelöscht.'); + setShowConfirmation(true); + loadZaehler(); + }; + // Today stats const todayStr = new Date().toISOString().split('T')[0]; const todayStats = useMemo(() => { @@ -420,12 +489,13 @@ export default function AdminDashboardPage() { Verbrauch Ablesedatum Token + Aktion {zaehler.length === 0 ? ( - + Keine Wasserzähler gefunden. @@ -455,6 +525,20 @@ export default function AdminDashboardPage() { {z.access_token.slice(0, 8)}... + + + + )) )} @@ -632,6 +716,177 @@ export default function AdminDashboardPage() { )} + {/* Wasserzähler Edit Modal */} + {editZaehler && ( +
+
+
+

+ Wasserzähler bearbeiten +

+ +
+ + {/* Readonly fields */} +
+
+ Access Token + {editZaehler.access_token} +
+ {editForm.neuer_stand && editForm.alter_stand && ( +
+ Verbrauch (berechnet) + + {(parseFloat(editForm.neuer_stand) - parseFloat(editForm.alter_stand)).toFixed(1)} m³ + +
+ )} +
+ +
+
+
+ + setEditForm(f => ({ ...f, haushalt_name: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+
+ + setEditForm(f => ({ ...f, adresse: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+
+ + setEditForm(f => ({ ...f, kundennummer: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+
+ + setEditForm(f => ({ ...f, zaehlernummer: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+
+ + setEditForm(f => ({ ...f, alter_stand: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+
+ + setEditForm(f => ({ ...f, neuer_stand: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+
+ +
+ + setEditForm(f => ({ ...f, ablesedatum: e.target.value }))} + className="w-full border border-border rounded-xl px-3 py-2.5 text-sm" + /> +
+ + {editError && ( +
+ {editError} +
+ )} + +
+ + +
+ + +
+
+
+ )} + + {/* Delete Confirmation */} + {deleteConfirm && ( +
+
+
+ + + +
+

Wirklich löschen?

+

+ Der Wasserzähler-Eintrag wird unwiderruflich gelöscht. +

+
+ + +
+
+
+ )} + {showConfirmation && (