Fix Folgevertrag aus deaktiviertem Vertrag + Kundendaten-Modal erweitern

1) Folgevertrag-Bug: Backend legt den Folgevertrag korrekt mit
   previousContractId an. Der Verlust passierte im Frontend - das
   Vorgaenger-Dropdown holt Vertraege ueber getAll, das DEACTIVATED
   standardmaessig ausblendet. Beim Bearbeiten des Folgevertrags war der
   deaktivierte Vorgaenger nicht als Option da -> Verknuepfung ging beim
   Speichern verloren.
   Fix: getAllContracts + Controller + contractApi.getAll um
   includeDeactivated erweitert; Vorgaenger-Dropdown nutzt es und markiert
   deaktivierte Vertraege mit '· deaktiviert'. Verifiziert (Flag inkludiert
   deaktivierte; Folgevertrag setzt previousContractId).

2) Kundendaten-Modal: zeigt jetzt zusaetzlich Lieferadresse + (falls
   abweichend) Rechnungsadresse des geoeffneten Vertrags, die Stressfrei-
   Adresse des Vertrags einzeln und darunter alle weiteren Stressfrei-
   Adressen des Kunden. CustomerInfoModal nimmt optionale Vertragskontext-
   Props; ContractDetail + ContractForm uebergeben sie.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 22:49:41 +02:00
co-authored by Claude Opus 4.8
parent a6b1dac606
commit 5f06ed9830
7 changed files with 113 additions and 13 deletions
+5 -2
View File
@@ -908,8 +908,11 @@ export interface ContractTreeNode {
}
export const contractApi = {
getAll: async (params?: { customerId?: number; type?: string; status?: string; search?: string; page?: number; limit?: number }) => {
const res = await api.get<ApiResponse<Contract[]>>('/contracts', { params });
getAll: async (params?: { customerId?: number; type?: string; status?: string; search?: string; page?: number; limit?: number; includeDeactivated?: boolean }) => {
const query = params?.includeDeactivated
? { ...params, includeDeactivated: 'true' }
: params;
const res = await api.get<ApiResponse<Contract[]>>('/contracts', { params: query });
return res.data;
},
getTreeForCustomer: async (customerId: number, includeDeactivated = false) => {