diff --git a/docs/todo.md b/docs/todo.md index cf5a1e90..e86303e9 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -106,10 +106,13 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung Preis, Laufzeit, Kunden-/Vertragsnummer, Anbieter/Tarif ändern sich. - Geleert im Kopier-Modus (Integrität / Eindeutigkeit): Status→DRAFT, Vorgänger-Link, alle Datumsfelder (Start/Ende/Installation/Kündigungs- - bestätigung), Kunden-/Vertragsnummer beim Anbieter + Plattform-Nummern, - Portal-Benutzer/Passwort. **Nicht** übernommen: SIM-Karten & Rufnummern - (hardware-/vertragsspezifisch, eindeutige Nummern). Rest (Anbieter/Tarif, - Preise, alle Detailfelder, Notizen) bleibt als Vorlage. + bestätigung), Kunden-/Vertragsnummer beim Anbieter + Plattform-Nummern. + **Nicht** übernommen: SIM-Karten & Rufnummern (hardware-/vertrags- + spezifisch, eindeutige Nummern). **Behalten** wird der Portal-Zugang + (Benutzername + Stressfrei-Verknüpfung/„nicht benötigt") – bei gleichem + Anbieter oft identisch; nur das verschlüsselte Passwort wird nicht ins + Feld geladen (wie beim Bearbeiten). Rest (Anbieter/Tarif, Preise, alle + Detailfelder, Notizen) bleibt als Vorlage. - Rein Frontend (`ContractForm` copy-Mode + Button in `ContractDetail`); kein neuer Endpoint – nutzt bestehendes Create. Blauer Hinweis-Banner „Kopie … neuer eigenständiger Vertrag" im Formular. diff --git a/frontend/src/pages/contracts/ContractForm.tsx b/frontend/src/pages/contracts/ContractForm.tsx index f8125f08..93b5efe1 100644 --- a/frontend/src/pages/contracts/ContractForm.tsx +++ b/frontend/src/pages/contracts/ContractForm.tsx @@ -423,8 +423,10 @@ export default function ContractForm() { orderNumberAtSalesPlatform: '', customerNumberAtSalesPlatform: '', contractNumberAtSalesPlatform: '', - // Portal-Zugang gehört zum konkreten Vertrag → frisch - portalUsername: '', + // Portal-Zugangsdaten (Benutzername/Stressfrei-Verknüpfung) bewusst + // BEHALTEN – bei gleichem Anbieter oft identisch. Das Passwort liegt + // verschlüsselt vor und wird (wie beim Bearbeiten) nicht ins Feld + // geladen; es bleibt leer und kann bei Bedarf neu gesetzt werden. }); } @@ -495,11 +497,9 @@ export default function ContractForm() { // Portal-Benutzername-Typ initialisieren. // Opt-out („nicht benötigt") gewinnt vor Stressfrei/Manual, damit ein // versehentlich noch alter portalUsername den Radio-Zustand nicht - // überstimmt. Im Kopier-Modus immer frisch (manuell, leer). - if (isCopy) { - setUsernameType('manual'); - setSelectedStressfreiEmailId(''); - } else if (c.portalCredentialsNotRequired) { + // überstimmt. Gilt auch im Kopier-Modus: Portal-Zugangsdaten werden + // mitkopiert (nur das Passwort bleibt leer, s.o.). + if (c.portalCredentialsNotRequired) { setUsernameType('not_required'); setSelectedStressfreiEmailId(''); } else if (c.stressfreiEmailId) { @@ -863,7 +863,8 @@ export default function ContractForm() {