seperate delivery and billig adresses in contract added

This commit is contained in:
2026-02-04 08:48:25 +01:00
parent 88e5f47158
commit a55b58265b
15 changed files with 922 additions and 216 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -5,7 +5,7 @@
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>OpenCRM</title>
<script type="module" crossorigin src="/assets/index-H1r24hX1.js"></script>
<script type="module" crossorigin src="/assets/index-DCSrWwxa.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DWDTTlpk.css">
</head>
<body>
@@ -1833,9 +1833,9 @@ export default function ContractDetail() {
)}
{/* Linked Data */}
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-6">
<div className="grid grid-cols-1 lg:grid-cols-4 gap-6 mb-6">
{c.address && (
<Card title="Adresse">
<Card title="Lieferadresse">
<CopyableBlock
values={[
`${c.address.street} ${c.address.houseNumber}`,
@@ -1853,6 +1853,35 @@ export default function ContractDetail() {
</CopyableBlock>
</Card>
)}
{/* Rechnungsadresse: Falls nicht gesetzt, Lieferadresse anzeigen */}
{(c.billingAddress || c.address) && (
<Card title="Rechnungsadresse">
{(() => {
const addr = c.billingAddress || c.address;
if (!addr) return null;
return (
<CopyableBlock
values={[
`${addr.street} ${addr.houseNumber}`,
`${addr.postalCode} ${addr.city}`,
addr.country
]}
>
<p>
{addr.street} {addr.houseNumber}
</p>
<p>
{addr.postalCode} {addr.city}
</p>
<p className="text-gray-500">{addr.country}</p>
{!c.billingAddress && c.address && (
<p className="text-xs text-gray-400 mt-1">(wie Lieferadresse)</p>
)}
</CopyableBlock>
);
})()}
</Card>
)}
{c.bankCard && (
<Card title="Bankkarte">
<p className="font-medium">{c.bankCard.accountHolder}</p>
+23 -6
View File
@@ -207,6 +207,7 @@ export default function ContractForm() {
type: c.type,
status: c.status,
addressId: c.addressId?.toString() || '',
billingAddressId: c.billingAddressId?.toString() || '',
bankCardId: c.bankCardId?.toString() || '',
identityDocumentId: c.identityDocumentId?.toString() || '',
salesPlatformId: c.salesPlatformId?.toString() || '',
@@ -422,6 +423,7 @@ export default function ContractForm() {
contractCategoryId: selectedCategory.id,
status: data.status,
addressId: safeParseInt(data.addressId) ?? null,
billingAddressId: safeParseInt(data.billingAddressId) ?? null,
bankCardId: safeParseInt(data.bankCardId) ?? null,
identityDocumentId: safeParseInt(data.identityDocumentId) ?? null,
salesPlatformId: safeParseInt(data.salesPlatformId) ?? null,
@@ -658,16 +660,31 @@ export default function ContractForm() {
{customerId && (
<Card className="mb-6" title="Kundendaten verknüpfen">
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
<Select
label="Adresse"
label="Lieferadresse"
{...register('addressId')}
options={addresses.map((a) => ({
value: a.id,
label: `${a.street} ${a.houseNumber}, ${a.postalCode} ${a.city} (${a.type === 'BILLING' ? 'Rechnung' : 'Liefer'})`,
}))}
options={addresses
.filter((a) => a.type === 'DELIVERY_RESIDENCE')
.map((a) => ({
value: a.id,
label: `${a.street} ${a.houseNumber}, ${a.postalCode} ${a.city}`,
}))}
/>
<Select
label="Rechnungsadresse"
{...register('billingAddressId')}
options={addresses
.filter((a) => a.type === 'BILLING')
.map((a) => ({
value: a.id,
label: `${a.street} ${a.houseNumber}, ${a.postalCode} ${a.city}`,
}))}
placeholder="Wie Lieferadresse"
/>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Select
label="Bankkarte"
{...register('bankCardId')}
+2
View File
@@ -274,6 +274,8 @@ export interface Contract {
status: ContractStatus;
addressId?: number;
address?: Address;
billingAddressId?: number;
billingAddress?: Address;
bankCardId?: number;
bankCard?: BankCard;
identityDocumentId?: number;