Vertrag kopieren: Portal-Zugangsdaten mitkopieren

Auf Wunsch: Portal-Benutzername + Stressfrei-Verknuepfung/'nicht
benoetigt'-Flag werden im Kopier-Modus behalten (bei gleichem Anbieter
oft identisch). Nur das Passwort bleibt leer, weil es verschluesselt
gespeichert und - wie beim Bearbeiten - nicht im Klartext ins Feld
geladen wird. Banner-Hinweis ergaenzt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-03 12:58:41 +02:00
co-authored by Claude Opus 4.8
parent a2ed0e94f1
commit 2aee1f1114
2 changed files with 16 additions and 12 deletions
+7 -4
View File
@@ -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.
@@ -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() {
<p className="ml-12 mt-1 text-sm text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1 inline-flex items-center gap-1">
<Copy className="w-4 h-4" />
Kopie eines bestehenden Vertrags wird als <strong>neuer eigenständiger Vertrag</strong> gespeichert.
Anbieter/Tarif, Preise, Kunden-/Vertragsnummern und Daten bitte prüfen.
Anbieter/Tarif, Preise, Kunden-/Vertragsnummern und Daten bitte prüfen. Portal-Benutzername
übernommen, Passwort ggf. neu setzen.
</p>
)}
{customer && (