Vertrag: Auftragsnummer Vertriebsplattform vor Kundennummer
Contract.orderNumberAtSalesPlatform (VARCHAR(191) NULL) mit Migration 20260619100000_contract_order_number_at_sales_platform (IF NOT EXISTS). Form-Input, Detail-Zeile mit Copy-Button, Audit-Mapping, Renewal-Copy und XSS-Strip-Allowlist analog zu den bestehenden Sales-Platform-Feldern. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+7
@@ -0,0 +1,7 @@
|
||||
-- Zusätzliches optionales Feld unter "Anbieter & Tarif": Auftragsnummer bei
|
||||
-- der Vertriebsplattform (vor der Kundennummer). Plattformen liefern beim
|
||||
-- Abschluss oft eine eigene Auftrags-/Vorgangsnummer, die fürs Reklamations-
|
||||
-- handling gebraucht wird.
|
||||
|
||||
ALTER TABLE `Contract`
|
||||
ADD COLUMN IF NOT EXISTS `orderNumberAtSalesPlatform` VARCHAR(191) NULL;
|
||||
@@ -693,6 +693,7 @@ model Contract {
|
||||
tariffName String?
|
||||
customerNumberAtProvider String?
|
||||
contractNumberAtProvider String? // Vertragsnummer beim Anbieter
|
||||
orderNumberAtSalesPlatform String? // Auftragsnummer bei der Vertriebsplattform
|
||||
customerNumberAtSalesPlatform String? // Kundennummer bei der Vertriebsplattform
|
||||
contractNumberAtSalesPlatform String? // Vertragsnummer bei der Vertriebsplattform
|
||||
priceFirst12Months String? // Preis erste 12 Monate
|
||||
|
||||
@@ -204,6 +204,7 @@ export async function updateContract(req: AuthRequest, res: Response): Promise<v
|
||||
status: 'Status', startDate: 'Vertragsbeginn', endDate: 'Vertragsende',
|
||||
portalUsername: 'Portal-Benutzername', customerNumberAtProvider: 'Kundennummer beim Anbieter',
|
||||
contractNumberAtProvider: 'Vertragsnummer beim Anbieter',
|
||||
orderNumberAtSalesPlatform: 'Auftragsnummer bei Vertriebsplattform',
|
||||
customerNumberAtSalesPlatform: 'Kundennummer bei Vertriebsplattform',
|
||||
contractNumberAtSalesPlatform: 'Vertragsnummer bei Vertriebsplattform',
|
||||
providerId: 'Anbieter', tariffId: 'Tarif', cancellationPeriodId: 'Kündigungsfrist',
|
||||
|
||||
@@ -203,6 +203,7 @@ interface ContractCreateData {
|
||||
providerName?: string;
|
||||
tariffName?: string;
|
||||
customerNumberAtProvider?: string;
|
||||
orderNumberAtSalesPlatform?: string;
|
||||
customerNumberAtSalesPlatform?: string;
|
||||
contractNumberAtSalesPlatform?: string;
|
||||
priceFirst12Months?: string;
|
||||
@@ -899,6 +900,7 @@ export async function createRenewalContract(previousContractId: number) {
|
||||
tariffName: previousContract.tariffName,
|
||||
customerNumberAtProvider: previousContract.customerNumberAtProvider,
|
||||
contractNumberAtProvider: previousContract.contractNumberAtProvider,
|
||||
orderNumberAtSalesPlatform: previousContract.orderNumberAtSalesPlatform,
|
||||
customerNumberAtSalesPlatform: previousContract.customerNumberAtSalesPlatform,
|
||||
contractNumberAtSalesPlatform: previousContract.contractNumberAtSalesPlatform,
|
||||
portalUsername: previousContract.portalUsername,
|
||||
|
||||
@@ -75,6 +75,7 @@ const CONTRACT_DISPLAY_STRING_FIELDS = [
|
||||
'tariffName',
|
||||
'customerNumberAtProvider',
|
||||
'contractNumberAtProvider',
|
||||
'orderNumberAtSalesPlatform',
|
||||
'customerNumberAtSalesPlatform',
|
||||
'contractNumberAtSalesPlatform',
|
||||
'portalUsername',
|
||||
|
||||
@@ -97,6 +97,20 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🆕 Vertrag: Auftragsnummer bei Vertriebsplattform**
|
||||
- Neues optionales Feld `Contract.orderNumberAtSalesPlatform`
|
||||
(`VARCHAR(191) NULL`), Migration
|
||||
`20260619100000_contract_order_number_at_sales_platform` mit
|
||||
`IF NOT EXISTS`.
|
||||
- Im ContractForm direkt **vor** der Kundennummer der
|
||||
Vertriebsplattform angeordnet (Wunsch des Users).
|
||||
ContractDetail zeigt sie als eigene Zeile mit Copy-Button vor
|
||||
den anderen beiden Sales-Platform-Feldern.
|
||||
- Audit-Log-Mapping, Renewal-Copy (VVL-Folgevertrag) und
|
||||
XSS-Strip-Allowlist (`CONTRACT_DISPLAY_STRING_FIELDS`)
|
||||
mitgezogen, damit das neue Feld die gleichen Garantien wie
|
||||
Kunden-/Vertragsnummer bekommt.
|
||||
|
||||
- [x] **🐞 Entfernte Weiterleitungen kamen via Auto-Import zurück**
|
||||
- Folge-Bug: User löscht Adresse im Modal → DB-Liste wird kürzer →
|
||||
Plesk-Sync läuft → Auto-Import (`Pentest 83.x`) sieht „c ist in
|
||||
|
||||
@@ -2080,6 +2080,15 @@ export default function ContractDetail() {
|
||||
</dd>
|
||||
</div>
|
||||
)}
|
||||
{c.orderNumberAtSalesPlatform && (
|
||||
<div>
|
||||
<dt className="text-sm text-gray-500">Auftragsnr. Vertriebsplattform</dt>
|
||||
<dd className="font-mono flex items-center gap-1">
|
||||
{c.orderNumberAtSalesPlatform}
|
||||
<CopyButton value={c.orderNumberAtSalesPlatform} />
|
||||
</dd>
|
||||
</div>
|
||||
)}
|
||||
{c.customerNumberAtSalesPlatform && (
|
||||
<div>
|
||||
<dt className="text-sm text-gray-500">Kundennr. Vertriebsplattform</dt>
|
||||
|
||||
@@ -302,6 +302,7 @@ export default function ContractForm() {
|
||||
tariffName: c.tariffName || '',
|
||||
customerNumberAtProvider: c.customerNumberAtProvider || '',
|
||||
contractNumberAtProvider: c.contractNumberAtProvider || '',
|
||||
orderNumberAtSalesPlatform: c.orderNumberAtSalesPlatform || '',
|
||||
customerNumberAtSalesPlatform: c.customerNumberAtSalesPlatform || '',
|
||||
contractNumberAtSalesPlatform: c.contractNumberAtSalesPlatform || '',
|
||||
priceFirst12Months: c.priceFirst12Months || '',
|
||||
@@ -558,6 +559,7 @@ export default function ContractForm() {
|
||||
tariffName: emptyToNull(data.tariffName),
|
||||
customerNumberAtProvider: emptyToNull(data.customerNumberAtProvider),
|
||||
contractNumberAtProvider: emptyToNull(data.contractNumberAtProvider),
|
||||
orderNumberAtSalesPlatform: emptyToNull(data.orderNumberAtSalesPlatform),
|
||||
customerNumberAtSalesPlatform: emptyToNull(data.customerNumberAtSalesPlatform),
|
||||
contractNumberAtSalesPlatform: emptyToNull(data.contractNumberAtSalesPlatform),
|
||||
priceFirst12Months: emptyToNull(data.priceFirst12Months),
|
||||
@@ -956,6 +958,7 @@ export default function ContractForm() {
|
||||
/>
|
||||
<Input label="Kundennummer beim Anbieter" {...register('customerNumberAtProvider')} />
|
||||
<Input label="Vertragsnummer beim Anbieter" {...register('contractNumberAtProvider')} />
|
||||
<Input label="Auftragsnummer bei Vertriebsplattform" {...register('orderNumberAtSalesPlatform')} />
|
||||
<Input label="Kundennummer bei Vertriebsplattform" {...register('customerNumberAtSalesPlatform')} />
|
||||
<Input label="Vertragsnummer bei Vertriebsplattform" {...register('contractNumberAtSalesPlatform')} />
|
||||
<Input label="Provision (€)" type="number" step="0.01" {...register('commission')} />
|
||||
|
||||
@@ -454,6 +454,7 @@ export interface Contract {
|
||||
tariffName?: string;
|
||||
customerNumberAtProvider?: string;
|
||||
contractNumberAtProvider?: string;
|
||||
orderNumberAtSalesPlatform?: string;
|
||||
customerNumberAtSalesPlatform?: string;
|
||||
contractNumberAtSalesPlatform?: string;
|
||||
priceFirst12Months?: string;
|
||||
|
||||
Reference in New Issue
Block a user