Vertragslisten: Karteninhaber + Mobilfunknetz + Kuendigung (rot)

Beide Vertragslisten (Kundenakte-Baum + Hauptmenue /contracts) zeigen bei
Mobilfunkvertraegen mit Rufnummer jetzt zusaetzlich Karteninhaber
(SimCard.cardUser der angezeigten SIM, nur wenn gesetzt) und Netz
(mobileNetwork -> Telekom/Vodafone/Telefonica (o2)) inline. Vertraege mit
Kuendigungsbestaetigung (cancellationConfirmationDate) bekommen eine eigene
Zeile in roter, fetter Schrift.

Backend: getContractTreeForCustomer + getAllContracts selektieren nun
mobileNetwork + cardUser (Tree zusaetzlich cancellationConfirmationDate).
Shared-Helper getContractTypeInfo um cardUser/network + mobileNetworkLabel
erweitert. Beide Listen rendern ueber den Tree-Endpoint.

Verifiziert: tsc + vite build gruen, Tree-Service liefert die Felder,
Helper-Mapping getestet (Vodafone/Telekom/o2, leerer Karteninhaber ausgelassen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 12:18:24 +02:00
co-authored by Claude Opus 4.8
parent 8e46dbbfed
commit c5cf2c7416
6 changed files with 72 additions and 7 deletions
+8 -3
View File
@@ -105,7 +105,8 @@ export async function getAllContracts(filters: ContractFilters) {
mobileDetails: {
select: {
phoneNumber: true,
simCards: { select: { phoneNumber: true, isMain: true } },
mobileNetwork: true,
simCards: { select: { phoneNumber: true, isMain: true, cardUser: true } },
},
},
// 2026-07-04: für Vertragsauswahl-Labels brauchen wir überall
@@ -1223,6 +1224,7 @@ export interface ContractTreeNode {
status: ContractStatus;
startDate: Date | null;
endDate: Date | null;
cancellationConfirmationDate: Date | null;
providerName: string | null;
tariffName: string | null;
previousContractId: number | null;
@@ -1233,7 +1235,8 @@ export interface ContractTreeNode {
address?: { street: string; houseNumber: string; postalCode: string; city: string } | null;
mobileDetails?: {
phoneNumber: string | null;
simCards: { phoneNumber: string | null; isMain: boolean }[];
mobileNetwork: string | null;
simCards: { phoneNumber: string | null; isMain: boolean; cardUser: string | null }[];
} | null;
carInsuranceDetails?: { licensePlate: string | null } | null;
};
@@ -1268,6 +1271,7 @@ export async function getContractTreeForCustomer(
status: true,
startDate: true,
endDate: true,
cancellationConfirmationDate: true,
providerName: true,
tariffName: true,
previousContractId: true,
@@ -1279,7 +1283,8 @@ export async function getContractTreeForCustomer(
mobileDetails: {
select: {
phoneNumber: true,
simCards: { select: { phoneNumber: true, isMain: true } },
mobileNetwork: true,
simCards: { select: { phoneNumber: true, isMain: true, cardUser: true } },
},
},
carInsuranceDetails: { select: { licensePlate: true } },