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:
@@ -3387,6 +3387,9 @@ export default function ContractDetail() {
|
||||
customerId={c.customer.id}
|
||||
open={showCustomerInfo}
|
||||
onClose={() => setShowCustomerInfo(false)}
|
||||
deliveryAddress={c.address}
|
||||
billingAddress={c.billingAddress}
|
||||
contractStressfreiEmailId={c.stressfreiEmailId}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
@@ -153,7 +153,10 @@ export default function ContractForm() {
|
||||
// Fetch contracts for same customer (for predecessor selection)
|
||||
const { data: customerContractsData } = useQuery({
|
||||
queryKey: ['customer-contracts-for-predecessor', customerId],
|
||||
queryFn: () => contractApi.getAll({ customerId: parseInt(customerId), limit: 1000 }),
|
||||
// includeDeactivated: auch deaktivierte Verträge als möglichen Vorgänger
|
||||
// anbieten – sonst geht die Verknüpfung verloren, wenn man einen
|
||||
// Folgevertrag aus einem deaktivierten Vertrag anlegt/bearbeitet.
|
||||
queryFn: () => contractApi.getAll({ customerId: parseInt(customerId), limit: 1000, includeDeactivated: true }),
|
||||
enabled: !!customerId,
|
||||
});
|
||||
|
||||
@@ -965,9 +968,10 @@ export default function ContractForm() {
|
||||
const parts = buildContractLabelParts(c);
|
||||
const dateHint = c.startDate ? ` – ${formatDate(c.startDate)}` : '';
|
||||
const suffix = parts.extras.length > 0 ? ` · ${parts.extras.join(' · ')}` : '';
|
||||
const deact = c.status === 'DEACTIVATED' ? ' · deaktiviert' : '';
|
||||
return {
|
||||
value: c.id,
|
||||
label: `${c.contractNumber} (${c.type}${dateHint})${suffix}`,
|
||||
label: `${c.contractNumber} (${c.type}${dateHint})${suffix}${deact}`,
|
||||
};
|
||||
})}
|
||||
placeholder="Keinen Vorgänger auswählen"
|
||||
@@ -1994,6 +1998,9 @@ export default function ContractForm() {
|
||||
customerId={customer.id}
|
||||
open={showCustomerInfo}
|
||||
onClose={() => setShowCustomerInfo(false)}
|
||||
deliveryAddress={addresses.find((a) => String(a.id) === watch('addressId')) || null}
|
||||
billingAddress={addresses.find((a) => String(a.id) === watch('billingAddressId')) || null}
|
||||
contractStressfreiEmailId={selectedStressfreiEmailId ? parseInt(selectedStressfreiEmailId) : null}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user