import Link from 'next/link'; import { FileText, Plus } from 'lucide-react'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Badge } from '@kit/ui/badge'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { createFinanceApi } from '@kit/finance/api'; import { CmsPageShell } from '~/components/cms-page-shell'; import { EmptyState } from '~/components/empty-state'; interface PageProps { params: Promise<{ account: string }>; } const STATUS_VARIANT: Record< string, 'secondary' | 'default' | 'info' | 'outline' | 'destructive' > = { draft: 'secondary', sent: 'default', paid: 'info', overdue: 'destructive', cancelled: 'destructive', }; const STATUS_LABEL: Record = { draft: 'Entwurf', sent: 'Versendet', paid: 'Bezahlt', overdue: 'Überfällig', cancelled: 'Storniert', }; const formatCurrency = (amount: unknown) => new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format( Number(amount), ); export default async function InvoicesPage({ params }: PageProps) { const { account } = await params; const client = getSupabaseServerClient(); const { data: acct } = await client .from('accounts') .select('id') .eq('slug', account) .single(); if (!acct) return
Konto nicht gefunden
; const api = createFinanceApi(client); const invoices = await api.listInvoices(acct.id); return (
{/* Header */}

Rechnungen

Rechnungen verwalten

{/* Table or Empty State */} {invoices.length === 0 ? ( } title="Keine Rechnungen vorhanden" description="Erstellen Sie Ihre erste Rechnung." actionLabel="Neue Rechnung" actionHref={`/home/${account}/finance/invoices/new`} /> ) : ( Alle Rechnungen ({invoices.length})
{invoices.map((invoice: Record) => { const status = String(invoice.status); return ( ); })}
Nr. Empfänger Datum Fällig Betrag Status
{String(invoice.invoice_number ?? '—')} {String(invoice.recipient_name ?? '—')} {invoice.issue_date ? new Date( String(invoice.issue_date), ).toLocaleDateString('de-DE') : '—'} {invoice.due_date ? new Date( String(invoice.due_date), ).toLocaleDateString('de-DE') : '—'} {invoice.total_amount != null ? formatCurrency(invoice.total_amount) : '—'} {STATUS_LABEL[status] ?? status}
)}
); }