diff --git a/backend/prisma/migrations/20260813100000_bank_card_number/migration.sql b/backend/prisma/migrations/20260813100000_bank_card_number/migration.sql new file mode 100644 index 00000000..8a5992dc --- /dev/null +++ b/backend/prisma/migrations/20260813100000_bank_card_number/migration.sql @@ -0,0 +1,2 @@ +-- Kartennummer (Debit-/Kontokarte) als optionales Feld an der Bankkarte. +ALTER TABLE `BankCard` ADD COLUMN IF NOT EXISTS `cardNumber` VARCHAR(191) NULL; diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index fedd3b88..c3400dee 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -353,6 +353,7 @@ model BankCard { customer Customer @relation(fields: [customerId], references: [id], onDelete: Cascade) accountHolder String iban String + cardNumber String? // Karten-/Kontokartennummer (optional, z.B. Debitkarte) bic String? bankName String? expiryDate DateTime? diff --git a/backend/src/controllers/customer.controller.ts b/backend/src/controllers/customer.controller.ts index 54029af1..059cf6fb 100644 --- a/backend/src/controllers/customer.controller.ts +++ b/backend/src/controllers/customer.controller.ts @@ -433,7 +433,7 @@ export async function updateBankCard(req: AuthRequest, res: Response): Promise = {}; const fieldLabels: Record = { - iban: 'IBAN', bic: 'BIC', bankName: 'Bank', + iban: 'IBAN', bic: 'BIC', bankName: 'Bank', cardNumber: 'Kartennummer', accountHolder: 'Kontoinhaber', isActive: 'Aktiv', }; for (const [key, newVal] of Object.entries(data)) { diff --git a/backend/src/services/customer.service.ts b/backend/src/services/customer.service.ts index 64fdc3d7..f694cc7b 100644 --- a/backend/src/services/customer.service.ts +++ b/backend/src/services/customer.service.ts @@ -302,6 +302,7 @@ export async function createBankCard( data: { accountHolder: string; iban: string; + cardNumber?: string; bic?: string; bankName?: string; expiryDate?: Date; @@ -322,6 +323,7 @@ export async function updateBankCard( data: { accountHolder?: string; iban?: string; + cardNumber?: string; bic?: string; bankName?: string; expiryDate?: Date; diff --git a/docs/todo.md b/docs/todo.md index 6ec004c1..59441d5b 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -97,6 +97,22 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung ## ✅ Erledigt +- [x] **🪪 Bankkarte-/Ausweis-Details in Vertrag (Ansicht + Bearbeiten) + Kartennummer** (2026-08-13) + - **Schema:** neues Feld `BankCard.cardNumber` (String?, optional). Migration + `20260813100000_bank_card_number` (`ADD COLUMN IF NOT EXISTS`), auf Dev + angewandt + `prisma generate`. Prod zieht via `migrate deploy` im Entrypoint. + Eingabefeld „Kartennummer" im Bankkarten-Modal (Kundenakte) ergänzt. + - **Vertragsansicht (ContractDetail)** – Karten „Bankkarte"/„Ausweis" zeigen + zusätzlich (jeweils mit Copy-Button, nur wenn gesetzt): + - Bankkarte: BIC, Bank, Kartennummer, Ablaufdatum + - Ausweis: Behörde, Ausstellung, Ablaufdatum + **Geburtsort/Geburtsdatum + vom Kunden** + - **Vertrag bearbeiten (ContractForm)** – unter den Bankkarte-/Ausweis- + Dropdowns dieselben Detailfelder der aktuell gewählten Karte/Ausweis + (Copy-Buttons). Selects dafür je in eigenem `
` gewrappt (Grid-Alignment). + - Datenquelle war bereits vorhanden: `getContractById` (bankCard/identityDocument/ + customer) + `getCustomerById` (bankCards/identityDocuments) liefern alle Felder. + - [x] **đź“„ PDF-Viewer-Modal fĂĽr Bankkarte-/Ausweis-Dokument** (2026-08-13) - Neue wiederverwendbare Komponente `PdfViewerModal` (Modal + `