PDF-Auftragsvorlagen-System, Objekttyp/Lage-Felder, Eigentümer-Fallback bei Bankverbindung

- PDF-Template-Editor in Einstellungen: Vorlagen hochladen, Formularfelder automatisch auslesen, CRM-Felder zuordnen
- PDF-Vorschau mit annotierten Feldnamen, seitenweise Sortierung der Felder
- Auftrag generieren aus Vertragsdaten (Button im Vertrags-Detail)
- Dynamische Rufnummern-Felder mit Vorwahl-Extraktion und konfigurierbarer Maximalanzahl
- Nicht zugeordnete Felder bleiben editierbar im generierten PDF
- Eigentümer-Felder mit Namens-Kombinationen (Firma+Name etc.) und Fallback auf Kundendaten
- Stressfrei-E-Mail als Feld-Option im Template-Editor
- Objekttyp, Lage und Lage des Anschlusses als neue Felder bei Festnetz-Verträgen (DSL, Glasfaser, Kabel)
- Bankverbindung-Fallback: wenn keine am Vertrag verknüpft, wird automatisch die neueste aktive des Kunden genommen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 19:16:47 +02:00
parent 9fa1cbc591
commit 9a84e2d3cb
16 changed files with 1881 additions and 21 deletions
+39
View File
@@ -123,6 +123,17 @@ export interface Address {
city: string;
country: string;
isDefault: boolean;
// Eigentümer (leer = Kunde ist selbst Eigentümer)
ownerCompany?: string;
ownerFirstName?: string;
ownerLastName?: string;
ownerStreet?: string;
ownerHouseNumber?: string;
ownerPostalCode?: string;
ownerCity?: string;
ownerPhone?: string;
ownerMobile?: string;
ownerEmail?: string;
}
export interface BankCard {
@@ -163,6 +174,34 @@ export interface ContractDocument {
createdAt: string;
}
export interface PdfTemplate {
id: number;
name: string;
description?: string;
providerName?: string;
templatePath: string;
originalName: string;
fieldMapping: string;
phoneFieldPrefix?: string;
maxPhoneFields?: number;
isActive: boolean;
createdAt: string;
updatedAt: string;
}
export interface PdfField {
name: string;
type: string;
page: number;
y: number;
}
export interface CrmField {
path: string;
label: string;
group: string;
}
export type MeterTariffModel = 'SINGLE' | 'DUAL';
export interface Meter {