// /opt/erp-system/app/customers/page.tsx 'use client'; import { useState, useEffect } from 'react'; import { Users, Plus, Mail, Building2, Phone, X, Trash2 } from 'lucide-react'; import { useToast } from '../components/ToastProvider'; import { useSession } from 'next-auth/react'; type Customer = { id: number; firstName: string; lastName: string; email: string; companyName: string | null; phone: string | null; }; export default function CustomersPage() { const [customers, setCustomers] = useState([]); const [showForm, setShowForm] = useState(false); const [formData, setFormData] = useState({ firstName: '', lastName: '', email: '', companyName: '', phone: '' }); const { toast, confirm } = useToast(); const { data: session } = useSession(); const permissions = (session?.user as any)?.permissions || []; const canDelete = permissions.includes('DATA_DELETE'); useEffect(() => { fetchCustomers(); }, []); const fetchCustomers = async () => { const res = await fetch('/api/customers'); if (res.ok) setCustomers(await res.json()); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const res = await fetch('/api/customers', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData), }); if (res.ok) { setFormData({ firstName: '', lastName: '', email: '', companyName: '', phone: '' }); setShowForm(false); fetchCustomers(); } }; const handleDelete = async (customer: Customer) => { const isConfirmed = await confirm({ title: 'Kunde löschen', message: `"${customer.companyName || customer.firstName + ' ' + customer.lastName}" und alle verknüpften Daten (Tickets, Verträge, Dokumente) unwiderruflich löschen?`, danger: true }); if (!isConfirmed) return; const res = await fetch(`/api/customers?id=${customer.id}`, { method: 'DELETE' }); if (res.ok) { toast('Kunde gelöscht', 'success'); fetchCustomers(); } else { const data = await res.json(); toast(data.error || 'Fehler beim Löschen', 'error'); } }; return (
{/* Header */}

Kundenverwaltung

Verwalte deinen Kundenstamm und Ansprechpartner.

{/* Formular (Toggle) */} {showForm && (

Kundendaten erfassen

setFormData({...formData, firstName: e.target.value})} />
setFormData({...formData, lastName: e.target.value})} />
setFormData({...formData, email: e.target.value})} />
setFormData({...formData, phone: e.target.value})} />
setFormData({...formData, companyName: e.target.value})} />
)} {/* Datentabelle */}
{customers.map((c) => ( ))} {customers.length === 0 && ( )}
ID Kunde Kontakt Aktion
#{c.id.toString().padStart(4, '0')}
{c.firstName} {c.lastName} {c.companyName && ( {c.companyName} )}
{c.email} {c.phone && {c.phone}}
Akte öffnen {canDelete && ( )}
Keine Kunden vorhanden.
); }