Hauptmenue: Gutschriften/Lieferscheine-Gesamtuebersicht (portal-scoped)

Neuer Menuepunkt 'Gutschriften' -> Seite /credit-notes mit Tabelle
aller Belege (Beleg-Nr, Art, Kunde, Vertrag, Betrag, Datum, PDF),
Suche + Pagination.

Neuer Endpoint GET /credit-notes (NICHT staff-only wie die uebrigen
Credit-Note-Endpoints): Staff sieht alle Belege aller Kunden, Portal-
Kunden nur eigene + vertretene (Vollmacht via hasAuthorization).
customerIds kommt aus dem JWT, nicht aus Query/Body -> nicht
manipulierbar. Fuer Portal wird receiptPath aus der Response entfernt
(Belege bleiben staff-only). Route requirePermission contracts:read.

Verifiziert: Staff -> alle Belege; Portal-scoped -> nur eigene, korrekt
zugeordnet.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-12 10:23:53 +02:00
co-authored by Claude Opus 4.8
parent bbe1aed230
commit 48e65be91c
9 changed files with 281 additions and 2 deletions
+10
View File
@@ -97,6 +97,16 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **📋 Hauptmenü: Gutschriften/Lieferscheine-Gesamtübersicht** (2026-08-12)
- Neuer Menüpunkt „Gutschriften" (Sidebar, `show: contracts:read`) → Seite
`/credit-notes` mit Tabelle aller Belege (Beleg-Nr., Art, Kunde, Vertrag,
Betrag, Datum, PDF), Suche + Pagination.
- **Scoping:** neuer Endpoint `GET /credit-notes` (NICHT staff-only wie die
übrigen Credit-Note-Endpoints): Staff sieht **alle** Belege aller Kunden,
Portal-Kunden **nur eigene + vertretene** (Vollmacht via `hasAuthorization`).
`customerIds` kommt aus dem JWT (nicht aus Query/Body → nicht manipulierbar).
Für Portal wird `receiptPath` aus der Response entfernt (Belege bleiben
staff-only). Verifiziert (Staff alle, Portal nur eigene).
- [x] **🚫 Gutschrift nur mit Empfängeradresse (Rechnung > Liefer)** (2026-08-12)
- Beim Klick auf „Gutschrift anlegen" wird geprüft, ob der Vertrag eine
Empfängeradresse hat: **Rechnungsadresse hat Vorrang, sonst Lieferadresse**.