JPGs → PDF: neuer Button überall bei PDF-Upload

- Neue Komponente JpgToPdfModal (jsPDF clientseitig, kein Backend-Roundtrip).
- Bilder hinzufügen per Klick, Drag&Drop oder Strg+V (Clipboard).
- Reihenfolge per Drag&Drop sortierbar; pro Bild 90°/180°-Drehung +
  horizontal/vertikal-Spiegelung.
- Jedes Bild = eine A4-Seite, Orientation automatisch nach Bild,
  JPEG-Qualität 100%.
- FileUpload-Komponente zeigt den Sekundär-Button automatisch, sobald
  accept PDF einschließt (Datenschutz, Vollmacht, Bankkarten, Ausweise,
  Gewerbeanmeldung, Handelsregister, Kündigungsschreiben/-bestätigung
  + jeweilige Optionen).
- Direktinputs ebenfalls erweitert: Vertragsdokumente (ContractDetail),
  Vollmacht-Tab (CustomerDetail), Rechnungen (InvoicesSection).
- PdfTemplates bewusst ausgenommen – braucht AcroForm-Felder.
This commit is contained in:
2026-06-03 12:27:37 +02:00
parent 358688db9e
commit 30f528596c
8 changed files with 810 additions and 54 deletions
+18
View File
@@ -97,6 +97,24 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🆕 JPGs → PDF: Button überall bei PDF-Upload**
- Neue Komponente `JpgToPdfModal` (lokal im Browser via `jspdf`,
keine Backend-Round-Trip nötig). Mehrere Bilder hinzufügen per
Klick, Drag&Drop oder `Strg+V` (Clipboard-Image), Reihenfolge
per Drag&Drop sortierbar, pro Bild 90°/180°-Drehung +
Horizontal/Vertikal-Spiegelung. Quality 100%, 1 Bild = 1 Seite,
A4 mit automatischer Hoch-/Querformat-Wahl je Bild.
- `FileUpload`-Komponente (11 Stellen: Datenschutz-PDF,
Vollmacht, Bankkarten-Dokumente, Ausweise, Gewerbeanmeldung,
Handelsregister, Kündigungsschreiben + -Bestätigung +
deren Optionen) bekommt automatisch einen sekundären
"JPGs → PDF"-Button, wenn `accept` PDF einschließt.
- Direkt-Inputs ebenfalls erweitert: Vertragsdokumente
(ContractDetail), Vollmacht-Dokumente (CustomerDetail Tab),
Rechnungen (InvoicesSection).
- PdfTemplates **bewusst ausgenommen** braucht echte
AcroForm-PDFs mit Formularfeldern, Bild-PDFs wären unbrauchbar.
- [x] **🆕 EmailProvider-Settings: Override-Feld „Bezeichnung im UI"**
- `customerEmailLabel` existierte im Backend (Schema +
Update-Logik + Public-Endpoint), war im UI aber nicht