feat(frontend): Zahlungsabgleich (paid / open / exempted) #73

Closed
opened 2026-06-21 16:18:03 +00:00 by niboer · 0 comments
Owner

Beschreibung

Zahlungsabgleich fuer ein Event: Uebersicht ueber Beitraege, wer bereits bezahlt hat und wer noch offen hat. Organisatoren koennen den Payment-Status pro Gast aendern. Ersetzt die alte Issue #12.

Endpunkte

  • GET /api/v1/events/{event_id}/guests?payment=... - Gaesteliste mit Payment-Filter
  • PUT /api/v1/events/{event_id}/guests/{person_id}/payment - Payment-Status aendern

load-Funktion (+page.server.ts)

s export async function load({ fetch, params }) { const eventId = params.eventId; const res = await fetch(/api/v1/events//guests); const guests = res.ok ? await res.json() : []; const total = guests.reduce((sum, g) => sum + (g.contributionEuro || 0), 0); const paid = guests.filter(g => g.paymentStatus === 'paid').reduce((sum, g) => sum + (g.contributionEuro || 0), 0); const open = total - paid; return { guests, stats: { total, paid, open } }; }

Seite (+page.svelte)

  • Statistik-Kacheln (Cards):
    • Gesamtbeitrag: Summe aller contributionEuro
    • Bezahlt: Summe aller "paid"-Beitraege (gruen)
    • Offen: Summe aller nicht-bezahlten Beitraege (rot/gelb wenn > 0)
  • DataTable:
    • Spalten: Name, Status (Badge), Beitrag, Bezahlt-Status (Badge), Aktion
    • Aktion: "Als bezahlt markieren" / "Als offen markieren" / "Befreien"
    • Dropdown oder Button zum Aendern des Payment-Status
  • Nutzt PageHeader, DataTable, StatusBadge, Card, ErrorAlert

Tests

  • payment.test.ts: load mit Payment-Filter, update payment-Action, Statistik-Berechnung
  • Testet: Korrekte Summen, Payment-Aenderung, CSV-Export (wenn implementiert)

Akzeptanzkriterien

  • Statistik-Kacheln zeigen Gesamt/Bezahlt/Offen korrekt an
  • Tabelle zeigt alle Gaeste mit Beitrag und Payment-Status
  • Payment-Status kann geaendert werden (paid/open/exempted)
  • Aenderungen werden sofort in der Statistik sichtbar (nach Reload)
  • EmptyState bei keinen Gaesten
  • Tests laufen gruen
## Beschreibung Zahlungsabgleich fuer ein Event: Uebersicht ueber Beitraege, wer bereits bezahlt hat und wer noch offen hat. Organisatoren koennen den Payment-Status pro Gast aendern. Ersetzt die alte Issue #12. ## Endpunkte - GET /api/v1/events/{event_id}/guests?payment=... - Gaesteliste mit Payment-Filter - PUT /api/v1/events/{event_id}/guests/{person_id}/payment - Payment-Status aendern ## load-Funktion (+page.server.ts) ` s export async function load({ fetch, params }) { const eventId = params.eventId; const res = await fetch(/api/v1/events//guests); const guests = res.ok ? await res.json() : []; const total = guests.reduce((sum, g) => sum + (g.contributionEuro || 0), 0); const paid = guests.filter(g => g.paymentStatus === 'paid').reduce((sum, g) => sum + (g.contributionEuro || 0), 0); const open = total - paid; return { guests, stats: { total, paid, open } }; } ` ## Seite (+page.svelte) - **Statistik-Kacheln** (Cards): - Gesamtbeitrag: Summe aller contributionEuro - Bezahlt: Summe aller "paid"-Beitraege (gruen) - Offen: Summe aller nicht-bezahlten Beitraege (rot/gelb wenn > 0) - **DataTable**: - Spalten: Name, Status (Badge), Beitrag, Bezahlt-Status (Badge), Aktion - Aktion: "Als bezahlt markieren" / "Als offen markieren" / "Befreien" - Dropdown oder Button zum Aendern des Payment-Status - Nutzt PageHeader, DataTable, StatusBadge, Card, ErrorAlert ## Tests - payment.test.ts: load mit Payment-Filter, update payment-Action, Statistik-Berechnung - Testet: Korrekte Summen, Payment-Aenderung, CSV-Export (wenn implementiert) ## Akzeptanzkriterien - [ ] Statistik-Kacheln zeigen Gesamt/Bezahlt/Offen korrekt an - [ ] Tabelle zeigt alle Gaeste mit Beitrag und Payment-Status - [ ] Payment-Status kann geaendert werden (paid/open/exempted) - [ ] Aenderungen werden sofort in der Statistik sichtbar (nach Reload) - [ ] EmptyState bei keinen Gaesten - [ ] Tests laufen gruen
Sign in to join this conversation.
No description provided.