Kundenansicht: Toggle „Deaktivierte Verträge anzeigen"

Der Vertragsbaum beim Kunden blendete DEACTIVATED-Verträge
komplett aus. Da der aktuellste Vertrag die Baumwurzel ist und
Vorgänger als Children hängen, verschwand eine ganze Kette aus
der Ansicht, sobald die Wurzel deaktiviert wurde – so „verschwand"
ein Vertrag scheinbar, als ein aktiver Folgevertrag gelöscht und
der Vorgänger vorher deaktiviert worden war.

getContractTreeForCustomer bekommt ein optionales
includeDeactivated-Flag (Default false = bisheriges Verhalten),
durchgereicht per Query-Param includeDeactivated=true. Toggle-
Button (Eye/EyeOff) im Kunden-Vertragstab; showDeactivated ist
Teil des Query-Keys → frischer Fetch beim Umschalten. Deaktivierte
behalten ihr graues DEACTIVATED-Badge.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 21:45:58 +02:00
co-authored by Claude Opus 4.7
parent d0611b740a
commit d059912c1e
5 changed files with 52 additions and 14 deletions
+11 -3
View File
@@ -1222,12 +1222,20 @@ export interface ContractTreeNode {
* Wurzelknoten = Verträge ohne Nachfolger (aktuellste Verträge)
* Vorgänger werden rekursiv eingebettet.
*/
export async function getContractTreeForCustomer(customerId: number): Promise<ContractTreeNode[]> {
// Alle Verträge des Kunden laden (außer DEACTIVATED)
export async function getContractTreeForCustomer(
customerId: number,
includeDeactivated = false,
): Promise<ContractTreeNode[]> {
// Alle Verträge des Kunden laden. DEACTIVATED standardmäßig ausgeblendet,
// per Toggle (includeDeactivated) aber sichtbar machen sonst
// verschwinden ganze Ketten aus der Ansicht, sobald der aktuellste
// (Wurzel-)Vertrag deaktiviert ist. Genau dieser Fall trat auf, als ein
// aktiver Folgevertrag gelöscht wurde und der deaktivierte Vorgänger zur
// neuen (unsichtbaren) Wurzel wurde.
const allContracts = await prisma.contract.findMany({
where: {
customerId,
status: { not: ContractStatus.DEACTIVATED },
...(includeDeactivated ? {} : { status: { not: ContractStatus.DEACTIVATED } }),
},
select: {
id: true,