From db4b9edd130d4e627f4e1429ffd8df4ea9953df7 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 18 Aug 2026 14:03:15 +0200 Subject: [PATCH] Energievertrag: Ankreuzfeld "Keine Bonis erwuenscht" Neues Feld EnergyContractDetails.noBonusDesired (Boolean, default false) + Migration. Checkbox im Vertragsformular (Strom/Gas, bei den Bonus-Feldern), Anzeige im Vertragsdetail wenn gesetzt. Co-Authored-By: Claude Opus 4.8 --- .../20260818100000_energy_no_bonus_desired/migration.sql | 2 ++ backend/prisma/schema.prisma | 1 + backend/src/services/contract.service.ts | 1 + frontend/src/pages/contracts/ContractDetail.tsx | 6 ++++++ frontend/src/pages/contracts/ContractForm.tsx | 7 +++++++ frontend/src/types/index.ts | 1 + 6 files changed, 18 insertions(+) create mode 100644 backend/prisma/migrations/20260818100000_energy_no_bonus_desired/migration.sql diff --git a/backend/prisma/migrations/20260818100000_energy_no_bonus_desired/migration.sql b/backend/prisma/migrations/20260818100000_energy_no_bonus_desired/migration.sql new file mode 100644 index 00000000..443c1e5b --- /dev/null +++ b/backend/prisma/migrations/20260818100000_energy_no_bonus_desired/migration.sql @@ -0,0 +1,2 @@ +-- "Keine Bonis erwünscht": Kunde möchte bei diesem Energievertrag keine Bonis. +ALTER TABLE `EnergyContractDetails` ADD COLUMN IF NOT EXISTS `noBonusDesired` BOOLEAN NOT NULL DEFAULT false; diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index 31cb08df..fe20d8ba 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -923,6 +923,7 @@ model EnergyContractDetails { // `instantBonus` (Annahme: meistgenutzte Variante). instantBonus Float? // Sofort-Bonus newCustomerBonus Float? // Neukunden-Bonus + noBonusDesired Boolean @default(false) // Kunde wünscht keine Bonis previousProviderName String? previousCustomerNumber String? invoices Invoice[] // Rechnungen diff --git a/backend/src/services/contract.service.ts b/backend/src/services/contract.service.ts index 823ed482..cba52348 100644 --- a/backend/src/services/contract.service.ts +++ b/backend/src/services/contract.service.ts @@ -255,6 +255,7 @@ interface ContractCreateData { unitPrice?: number; instantBonus?: number; newCustomerBonus?: number; + noBonusDesired?: boolean; previousProviderName?: string; previousCustomerNumber?: string; }; diff --git a/frontend/src/pages/contracts/ContractDetail.tsx b/frontend/src/pages/contracts/ContractDetail.tsx index 229892aa..86f8b364 100644 --- a/frontend/src/pages/contracts/ContractDetail.tsx +++ b/frontend/src/pages/contracts/ContractDetail.tsx @@ -2825,6 +2825,12 @@ export default function ContractDetail() { ) : null; })()} + {c.energyDetails.noBonusDesired && ( +
+
Bonis
+
Keine Bonis erwünscht
+
+ )} {c.energyDetails.annualConsumption ? (
diff --git a/frontend/src/pages/contracts/ContractForm.tsx b/frontend/src/pages/contracts/ContractForm.tsx index 1f1d6124..079b5f03 100644 --- a/frontend/src/pages/contracts/ContractForm.tsx +++ b/frontend/src/pages/contracts/ContractForm.tsx @@ -356,6 +356,7 @@ export default function ContractForm() { unitPriceNt: c.energyDetails?.unitPriceNt || '', instantBonus: c.energyDetails?.instantBonus || '', newCustomerBonus: c.energyDetails?.newCustomerBonus || '', + noBonusDesired: c.energyDetails?.noBonusDesired || false, // Internet details downloadSpeed: c.internetDetails?.downloadSpeed || '', uploadSpeed: c.internetDetails?.uploadSpeed || '', @@ -679,6 +680,7 @@ export default function ContractForm() { unitPriceNt: data.unitPriceNt ? parseFloat(data.unitPriceNt) : null, instantBonus: data.instantBonus ? parseFloat(data.instantBonus) : null, newCustomerBonus: data.newCustomerBonus ? parseFloat(data.newCustomerBonus) : null, + noBonusDesired: !!data.noBonusDesired, }; } @@ -1558,6 +1560,11 @@ export default function ContractForm() {
+ + {/* Hinweis für Zählerstände und Rechnungen */} {isEdit && (
diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index fd5840dd..6fa449de 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -661,6 +661,7 @@ export interface EnergyContractDetails { unitPriceNt?: number; // €/kWh NT-Preis (nur bei Zweitarifzähler) instantBonus?: number; // Sofort-Bonus newCustomerBonus?: number; // Neukunden-Bonus + noBonusDesired?: boolean; // Kunde wünscht keine Bonis previousProviderName?: string; previousCustomerNumber?: string; invoices?: Invoice[]; // Rechnungen