Vertrag: Kunden-/Vertragsnummer bei Vertriebsplattform

Viele Vertriebsplattformen vergeben eigene Nummern, die nicht mit
denen des Endanbieters identisch sind. Zwei neue optionale Felder
unter "Anbieter & Tarif".

- Schema: Contract.customerNumberAtSalesPlatform +
  contractNumberAtSalesPlatform, Migration mit IF NOT EXISTS.
- ContractForm: zwei neue Inputs direkt unter den entsprechenden
  Provider-Feldern.
- ContractDetail: eigene Zeilen mit CopyButton.
- Audit-Log-Mapping + Renewal-Copy + XSS-Strip-Whitelist mitgezogen.
- Bonus: contractNumberAtProvider war im Renewal-Copy und Audit-
  Label-Mapping fehlend – mitkorrigiert.
This commit is contained in:
2026-06-03 18:13:17 +02:00
parent 101369c205
commit fcc3b04725
9 changed files with 59 additions and 0 deletions
@@ -2080,6 +2080,24 @@ export default function ContractDetail() {
</dd>
</div>
)}
{c.customerNumberAtSalesPlatform && (
<div>
<dt className="text-sm text-gray-500">Kundennr. Vertriebsplattform</dt>
<dd className="font-mono flex items-center gap-1">
{c.customerNumberAtSalesPlatform}
<CopyButton value={c.customerNumberAtSalesPlatform} />
</dd>
</div>
)}
{c.contractNumberAtSalesPlatform && (
<div>
<dt className="text-sm text-gray-500">Vertragsnr. Vertriebsplattform</dt>
<dd className="font-mono flex items-center gap-1">
{c.contractNumberAtSalesPlatform}
<CopyButton value={c.contractNumberAtSalesPlatform} />
</dd>
</div>
)}
{c.salesPlatform && (
<div>
<dt className="text-sm text-gray-500">Vertriebsplattform</dt>
@@ -302,6 +302,8 @@ export default function ContractForm() {
tariffName: c.tariffName || '',
customerNumberAtProvider: c.customerNumberAtProvider || '',
contractNumberAtProvider: c.contractNumberAtProvider || '',
customerNumberAtSalesPlatform: c.customerNumberAtSalesPlatform || '',
contractNumberAtSalesPlatform: c.contractNumberAtSalesPlatform || '',
priceFirst12Months: c.priceFirst12Months || '',
priceFrom13Months: c.priceFrom13Months || '',
priceAfter24Months: c.priceAfter24Months || '',
@@ -556,6 +558,8 @@ export default function ContractForm() {
tariffName: emptyToNull(data.tariffName),
customerNumberAtProvider: emptyToNull(data.customerNumberAtProvider),
contractNumberAtProvider: emptyToNull(data.contractNumberAtProvider),
customerNumberAtSalesPlatform: emptyToNull(data.customerNumberAtSalesPlatform),
contractNumberAtSalesPlatform: emptyToNull(data.contractNumberAtSalesPlatform),
priceFirst12Months: emptyToNull(data.priceFirst12Months),
priceFrom13Months: emptyToNull(data.priceFrom13Months),
priceAfter24Months: emptyToNull(data.priceAfter24Months),
@@ -952,6 +956,8 @@ export default function ContractForm() {
/>
<Input label="Kundennummer beim Anbieter" {...register('customerNumberAtProvider')} />
<Input label="Vertragsnummer beim Anbieter" {...register('contractNumberAtProvider')} />
<Input label="Kundennummer bei Vertriebsplattform" {...register('customerNumberAtSalesPlatform')} />
<Input label="Vertragsnummer bei Vertriebsplattform" {...register('contractNumberAtSalesPlatform')} />
<Input label="Provision (€)" type="number" step="0.01" {...register('commission')} />
<Input label="Preis erste 12 Monate" {...register('priceFirst12Months')} placeholder="z.B. 29,99 €/Monat" />
<Input label="Preis ab 13. Monat" {...register('priceFrom13Months')} placeholder="z.B. 39,99 €/Monat" />
+2
View File
@@ -454,6 +454,8 @@ export interface Contract {
tariffName?: string;
customerNumberAtProvider?: string;
contractNumberAtProvider?: string;
customerNumberAtSalesPlatform?: string;
contractNumberAtSalesPlatform?: string;
priceFirst12Months?: string;
priceFrom13Months?: string;
priceAfter24Months?: string;