SIM-Karten: Feld "Kartennutzer" für Firmen-/Familienverträge

Bei Firmenverträgen (Vertragsinhaber = Firma, Nutzer = Mitarbeiter)
und Familienverträgen (Inhaber = Eltern, Nutzer = Kind) brauchten
wir ein Feld, das den tatsächlichen Nutzer der SIM-Karte erfasst.

Backend: SimCard.cardUser (String?, optional), Migration
20260601100000_sim_card_user mit IF NOT EXISTS. Im Service durch
Create + Update propagiert.

Frontend: Input "Kartennutzer" pro SIM-Karte in ContractForm
(eigene Zeile oberhalb der technischen Felder Rufnummer/SIM-Nr/
PIN/PUK). In ContractDetail wird der Nutzer als "Nutzer: <Name>"
neben den Hauptkarte/Multisim-Badges angezeigt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-01 08:10:16 +02:00
parent 9e3bce85f0
commit 4acfd9de1c
6 changed files with 42 additions and 1 deletions
@@ -0,0 +1,9 @@
-- SIM-Karte bekommt einen optionalen "Kartennutzer" relevant bei Firmen-
-- und Familienverträgen, wo der Vertragsinhaber (Firma/Eltern) nicht
-- gleich dem tatsächlichen Nutzer (Mitarbeiter/Kind) ist.
--
-- IF NOT EXISTS macht den Re-Deploy auf Prod sicher, falls jemand schon
-- `prisma db push` gefahren hat.
ALTER TABLE `SimCard`
ADD COLUMN IF NOT EXISTS `cardUser` VARCHAR(191) NULL;
+3
View File
@@ -928,6 +928,9 @@ model SimCard {
puk String? // PUK (verschlüsselt gespeichert)
isMultisim Boolean @default(false) // Ist dies eine Multisim-Karte?
isMain Boolean @default(false) // Ist dies die Hauptkarte?
// Tatsächlicher Nutzer der SIM-Karte (z.B. Mitarbeiter bei Firmenverträgen,
// Kind bei Eltern-Vertrag) kann vom Vertragsinhaber abweichen.
cardUser String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
+4
View File
@@ -275,6 +275,7 @@ interface ContractCreateData {
puk?: string;
isMultisim?: boolean;
isMain?: boolean;
cardUser?: string;
}[];
};
tvDetails?: {
@@ -378,6 +379,7 @@ export async function createContract(data: ContractCreateData) {
puk: sc.puk ? encrypt(sc.puk) : undefined,
isMultisim: sc.isMultisim ?? false,
isMain: sc.isMain ?? false,
cardUser: sc.cardUser,
})),
}
: undefined,
@@ -614,6 +616,7 @@ export async function updateContract(
puk: sc.puk ? encrypt(sc.puk) : (existingSc?.puk ?? undefined),
isMultisim: sc.isMultisim ?? false,
isMain: sc.isMain ?? false,
cardUser: sc.cardUser,
};
}),
});
@@ -632,6 +635,7 @@ export async function updateContract(
puk: sc.puk ? encrypt(sc.puk) : undefined,
isMultisim: sc.isMultisim ?? false,
isMain: sc.isMain ?? false,
cardUser: sc.cardUser,
})),
}
: undefined,