Gutschriften: Auszahlungskonto (Bankkonto des Kunden) fuer Ueberweisungen
Bei Geld-Gutschriften kann die Auszahlung auf ein anderes Konto gehen als das Vertrags-Abbuchkonto: - CreditNote.payoutBankCardId + Migration (FK ON DELETE SET NULL, damit Loeschen einer Bankkarte die Gutschrift nicht mitreisst). - Formular: Dropdown mit allen Bankkonten des Kunden (Default = Vertrags-Abbuchkonto). getCreditNoteDefaults liefert bankCards + contractBankCardId. - Server prueft, dass die gewaehlte Bankkarte dem Kunden des Vertrags gehoert (kein Fremdkonto unterschieben). - PDF: bei Ueberweisung 'Unsere Bankverbindung' (Absender) + darunter 'an Bankkonto: <Kunden-IBAN> (<Inhaber>)'. Section-Zeile zeigt das Auszahlungskonto. Lokal verifiziert (Anlage + PDF). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
-- Auszahlungskonto (Bankkarte des Kunden) fuer Geld-Gutschriften.
|
||||
-- ON DELETE SET NULL: Loeschen der Bankkarte reisst die Gutschrift nicht mit.
|
||||
ALTER TABLE `CreditNote` ADD COLUMN IF NOT EXISTS `payoutBankCardId` INT NULL;
|
||||
|
||||
-- FK nur anlegen, wenn noch nicht vorhanden (idempotent via information_schema).
|
||||
SET @fk := (SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'CreditNote'
|
||||
AND CONSTRAINT_NAME = 'CreditNote_payoutBankCardId_fkey');
|
||||
SET @sql := IF(@fk = 0,
|
||||
'ALTER TABLE `CreditNote` ADD CONSTRAINT `CreditNote_payoutBankCardId_fkey` FOREIGN KEY (`payoutBankCardId`) REFERENCES `BankCard`(`id`) ON DELETE SET NULL ON UPDATE CASCADE',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @idx := (SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'CreditNote'
|
||||
AND INDEX_NAME = 'CreditNote_payoutBankCardId_idx');
|
||||
SET @sql2 := IF(@idx = 0,
|
||||
'CREATE INDEX `CreditNote_payoutBankCardId_idx` ON `CreditNote`(`payoutBankCardId`)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt2 FROM @sql2; EXECUTE stmt2; DEALLOCATE PREPARE stmt2;
|
||||
@@ -360,6 +360,7 @@ model BankCard {
|
||||
description String? @db.Text // Freitext-Notiz (z.B. "Geschäftskonto", "gemeinsames Konto mit Partner")
|
||||
isActive Boolean @default(true)
|
||||
contracts Contract[]
|
||||
creditNotePayouts CreditNote[] @relation("CreditNotePayoutBankCard")
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
@@ -1008,6 +1009,13 @@ model CreditNote {
|
||||
// Sachwert: Bestätigung "Ware erhalten".
|
||||
goodsReceived Boolean @default(false)
|
||||
|
||||
// Auszahlungskonto (nur GELD): Bankkarte des Kunden, auf die überwiesen
|
||||
// wird. Kann ein anderes Konto sein als das Abbuchkonto des Vertrags.
|
||||
// ON DELETE SET NULL, damit das Löschen einer Bankkarte die Gutschrift
|
||||
// (historischer Beleg) nicht mitreißt.
|
||||
payoutBankCardId Int?
|
||||
payoutBankCard BankCard? @relation("CreditNotePayoutBankCard", fields: [payoutBankCardId], references: [id], onDelete: SetNull)
|
||||
|
||||
// Überweisungsbeleg (nur GELD) – hochgeladene Datei.
|
||||
receiptPath String?
|
||||
// Generiertes Gutschrift-Dokument (PDF bzw. ZUGFeRD-Hybrid) – Phase 3.
|
||||
|
||||
Reference in New Issue
Block a user