@accounter/client 0.0.8-alpha-20251027125446-75cc2031ef62f7abf48ecfbd31f62ddbddee2bd8 → 0.0.8-alpha-20251027135337-f79bd33d242a52dedb78869440eb1332cecb516f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/assets/{Checkbox-BzSHHEEI.js → Checkbox-DpgoGNEh.js} +2 -2
- package/dist/assets/{Progress-CmZjJ77Z.js → Progress-CYZqv7SW.js} +1 -1
- package/dist/assets/{Typography-CuW3aX-4.js → Typography-CkIoreka.js} +1 -1
- package/dist/assets/{accordion-BZB-JxAM.js → accordion-CaHOdrRP.js} +1 -1
- package/dist/assets/accountant-approvals-DSj77RHk.js +1 -0
- package/dist/assets/{all-charges-X26mmfb3.js → all-charges-7emf__4c.js} +1 -1
- package/dist/assets/{arrow-up-down-_p0E2yis.js → arrow-up-down-B0c1T401.js} +1 -1
- package/dist/assets/{building-2-CKq13SAn.js → building-2-Cgw5U9px.js} +1 -1
- package/dist/assets/business-gIm-2ScS.js +37 -0
- package/dist/assets/{business-header-C8fXEo4_.js → business-header-Dr-cPjxi.js} +1 -1
- package/dist/assets/{business-transactions-single-CXmdF2-o.js → business-transactions-single-CyFYlmJ1.js} +1 -1
- package/dist/assets/{business-trip-wd9Embtb.js → business-trip-gN2mmMZs.js} +1 -1
- package/dist/assets/{charges-filters-Fu2ZAzWC.js → charges-filters-BFXTNJlR.js} +1 -1
- package/dist/assets/{charges-ledger-validation-BXXhWS5W.js → charges-ledger-validation-PLL72LF_.js} +1 -1
- package/dist/assets/{chart-3ddx32Qz.js → chart-CW1hdLVW.js} +1 -1
- package/dist/assets/{data-table-pagination-BopLOYg9.js → data-table-pagination-DGMzd5Ur.js} +1 -1
- package/dist/assets/{editable-business-trip-C34Ue7Hf.js → editable-business-trip-DO2VVnpQ.js} +2 -2
- package/dist/assets/{index-DeQnadsl.js → index-1WpeqtCj.js} +1 -1
- package/dist/assets/{index-HzZyyExI.js → index-B9J1vUWt.js} +1 -1
- package/dist/assets/{index-BGW4bQ-L.js → index-BKOjJ4S2.js} +1 -1
- package/dist/assets/{index-dP8CSci_.js → index-BNVZgIhA.js} +1 -1
- package/dist/assets/{index-DA1mkO2v.js → index-BgaZ9SWH.js} +1 -1
- package/dist/assets/{index-o-HWUpBy.js → index-C1Lhx64B.js} +1 -1
- package/dist/assets/{index-szVd1r0-.js → index-C3mMRi14.js} +1 -1
- package/dist/assets/{index-cZSBCnNJ.js → index-CNYfsMvN.js} +2 -2
- package/dist/assets/{index-B0uGI3EC.js → index-CWKSy3gx.js} +1 -1
- package/dist/assets/{index-BpCZ3X72.js → index-ClQMK6pH.js} +1 -1
- package/dist/assets/{index-CuczBTlN.js → index-CwSHI3TR.js} +1 -1
- package/dist/assets/{index-Cr24h-Cl.js → index-DIilK_xX.js} +1 -1
- package/dist/assets/index-DLcR6D3A.js +1 -0
- package/dist/assets/{index-CvS1Q-ya.js → index-DVls0wZI.js} +1 -1
- package/dist/assets/{index-BEtUypi7.js → index-DkoK59wU.js} +2 -2
- package/dist/assets/{index-BsqMXEt3.js → index-DmeswmlH.js} +2 -2
- package/dist/assets/{index-CkFRewFP.js → index-DnJZ0kU3.js} +2 -2
- package/dist/assets/{index-Dia_wOFb.js → index-DpWWjU9o.js} +1 -1
- package/dist/assets/{index-pjGYYOoy.js → index-DuovWEWg.js} +1 -1
- package/dist/assets/{index-PaJBRncn.js → index-DxWD905F.js} +1 -1
- package/dist/assets/{index-B6vWXPp8.js → index-DzpHfxyz.js} +1 -1
- package/dist/assets/{index-DL8q44ap.js → index-Mle6gZrH.js} +258 -263
- package/dist/assets/{index-JfxexlPg.js → index-df1n76_f.js} +2 -2
- package/dist/assets/index-wCrXjHTc.css +1 -0
- package/dist/assets/{index.es-ZISWba9V.js → index.es-CItPkO4N.js} +1 -1
- package/dist/assets/{issue-document-B-c96E9w.js → issue-document-OO4Zci4E.js} +1 -1
- package/dist/assets/{login-page-C_RNlOZS.js → login-page-BSQTX6W0.js} +1 -1
- package/dist/assets/{missing-info-charges-BrFjY7yz.js → missing-info-charges-opuTpAg9.js} +1 -1
- package/dist/assets/{page-not-found-s0xtsc5O.js → page-not-found-CajD8Y-I.js} +1 -1
- package/dist/assets/{pencil-D-2dJ444.js → pencil-30Ac_SOe.js} +1 -1
- package/dist/assets/{report-commentary-row-aIxbqTgK.js → report-commentary-row-CMQfSAqR.js} +1 -1
- package/dist/assets/{save-DZ9jxz9u.js → save-CepuoEj-.js} +1 -1
- package/dist/assets/sub-CHPOWTq8.js +1 -0
- package/dist/assets/subMonths-CnpmFwyh.js +1 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/src/components/business/financial-account-section.tsx +658 -0
- package/src/components/business/index.tsx +26 -10
- package/src/components/clients/modify-client-dialog.tsx +9 -27
- package/src/components/common/modals/insert-business.tsx +36 -87
- package/src/components/layout/user-nav.tsx +3 -25
- package/dist/assets/accountant-approvals-BtF90Myx.js +0 -1
- package/dist/assets/business--pLros0g.js +0 -27
- package/dist/assets/index-DtE5Y1ZB.css +0 -1
- package/dist/assets/index-SmrmFP8m.js +0 -1
- package/dist/assets/sub-o9iEG2Bl.js +0 -1
- package/dist/assets/subMonths-CpJ3oidH.js +0 -1
|
@@ -0,0 +1,658 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import type React from 'react';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { Bitcoin, Building2, CreditCard, Edit, Plus, X } from 'lucide-react';
|
|
6
|
+
import { Badge } from '@/components/ui/badge.js';
|
|
7
|
+
import { Button } from '@/components/ui/button.js';
|
|
8
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card.js';
|
|
9
|
+
import {
|
|
10
|
+
Dialog,
|
|
11
|
+
DialogContent,
|
|
12
|
+
DialogDescription,
|
|
13
|
+
DialogFooter,
|
|
14
|
+
DialogHeader,
|
|
15
|
+
DialogTitle,
|
|
16
|
+
} from '@/components/ui/dialog.js';
|
|
17
|
+
import { Input } from '@/components/ui/input.js';
|
|
18
|
+
import { Label } from '@/components/ui/label.js';
|
|
19
|
+
import {
|
|
20
|
+
Select,
|
|
21
|
+
SelectContent,
|
|
22
|
+
SelectItem,
|
|
23
|
+
SelectTrigger,
|
|
24
|
+
SelectValue,
|
|
25
|
+
} from '@/components/ui/select.js';
|
|
26
|
+
import { Switch } from '@/components/ui/switch.js';
|
|
27
|
+
import type { Currency } from '@/gql/graphql';
|
|
28
|
+
|
|
29
|
+
type AccountType = 'BANK' | 'CREDIT_CARD' | 'CRYPTO_WALLET';
|
|
30
|
+
|
|
31
|
+
interface CurrencyTaxCategory {
|
|
32
|
+
currency: Currency;
|
|
33
|
+
taxCategory: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface FinancialAccount {
|
|
37
|
+
id: string;
|
|
38
|
+
accountNumber: string;
|
|
39
|
+
isBusiness: boolean;
|
|
40
|
+
type: AccountType;
|
|
41
|
+
currencies: CurrencyTaxCategory[];
|
|
42
|
+
// Bank-specific fields
|
|
43
|
+
bankNumber?: number;
|
|
44
|
+
branchNumber?: number;
|
|
45
|
+
extendedBankNumber?: number;
|
|
46
|
+
partyPreferredIndication?: number;
|
|
47
|
+
partyAccountInvolvementCode?: number;
|
|
48
|
+
accountDealDate?: number;
|
|
49
|
+
accountUpdateDate?: number;
|
|
50
|
+
metegDoraNet?: number;
|
|
51
|
+
kodHarshaatPeilut?: number;
|
|
52
|
+
accountClosingReasonCode?: number;
|
|
53
|
+
accountAgreementOpeningDate?: number;
|
|
54
|
+
serviceAuthorizationDesc?: string;
|
|
55
|
+
branchTypeCode?: number;
|
|
56
|
+
mymailEntitlementSwitch?: number;
|
|
57
|
+
productLabel?: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function FinancialAccountsSection() {
|
|
61
|
+
const [accounts, setAccounts] = useState<FinancialAccount[]>([
|
|
62
|
+
{
|
|
63
|
+
id: '1',
|
|
64
|
+
accountNumber: '123456789',
|
|
65
|
+
isBusiness: true,
|
|
66
|
+
type: 'BANK',
|
|
67
|
+
currencies: [
|
|
68
|
+
{ currency: 'ILS', taxCategory: 'Standard ILS' },
|
|
69
|
+
{ currency: 'USD', taxCategory: 'Foreign Currency' },
|
|
70
|
+
],
|
|
71
|
+
bankNumber: 12,
|
|
72
|
+
branchNumber: 345,
|
|
73
|
+
extendedBankNumber: 123_456_789,
|
|
74
|
+
partyPreferredIndication: 1,
|
|
75
|
+
partyAccountInvolvementCode: 2,
|
|
76
|
+
accountDealDate: 20_200_101,
|
|
77
|
+
accountUpdateDate: 20_240_101,
|
|
78
|
+
metegDoraNet: 1,
|
|
79
|
+
kodHarshaatPeilut: 100,
|
|
80
|
+
accountClosingReasonCode: 0,
|
|
81
|
+
accountAgreementOpeningDate: 20_200_101,
|
|
82
|
+
serviceAuthorizationDesc: 'Full access',
|
|
83
|
+
branchTypeCode: 1,
|
|
84
|
+
mymailEntitlementSwitch: 1,
|
|
85
|
+
productLabel: 'Business Checking Account',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: '2',
|
|
89
|
+
accountNumber: '9876543210',
|
|
90
|
+
isBusiness: false,
|
|
91
|
+
type: 'CREDIT_CARD',
|
|
92
|
+
currencies: [
|
|
93
|
+
{ currency: 'ILS', taxCategory: 'A-ILS category' },
|
|
94
|
+
{ currency: 'USD', taxCategory: 'SOME CATEGORY' },
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
id: '3',
|
|
99
|
+
accountNumber: '0xABC123DEF456',
|
|
100
|
+
isBusiness: false,
|
|
101
|
+
type: 'CRYPTO_WALLET',
|
|
102
|
+
currencies: [{ currency: 'ETH', taxCategory: 'Crypto Assets' }],
|
|
103
|
+
},
|
|
104
|
+
]);
|
|
105
|
+
|
|
106
|
+
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
107
|
+
const [editingAccount, setEditingAccount] = useState<FinancialAccount | null>(null);
|
|
108
|
+
const [formData, setFormData] = useState<Partial<FinancialAccount>>({
|
|
109
|
+
accountNumber: '',
|
|
110
|
+
isBusiness: false,
|
|
111
|
+
type: 'BANK',
|
|
112
|
+
currencies: [],
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const handleOpenModal = (account?: FinancialAccount) => {
|
|
116
|
+
if (account) {
|
|
117
|
+
setEditingAccount(account);
|
|
118
|
+
setFormData(account);
|
|
119
|
+
} else {
|
|
120
|
+
setEditingAccount(null);
|
|
121
|
+
setFormData({
|
|
122
|
+
accountNumber: '',
|
|
123
|
+
isBusiness: false,
|
|
124
|
+
type: 'BANK',
|
|
125
|
+
currencies: [],
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
setIsModalOpen(true);
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const handleCloseModal = () => {
|
|
132
|
+
setIsModalOpen(false);
|
|
133
|
+
setEditingAccount(null);
|
|
134
|
+
setFormData({
|
|
135
|
+
accountNumber: '',
|
|
136
|
+
isBusiness: false,
|
|
137
|
+
type: 'BANK',
|
|
138
|
+
currencies: [],
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const handleSubmit = (e: React.FormEvent) => {
|
|
143
|
+
e.preventDefault();
|
|
144
|
+
if (editingAccount) {
|
|
145
|
+
setAccounts(
|
|
146
|
+
accounts.map(acc =>
|
|
147
|
+
acc.id === editingAccount.id ? ({ ...formData, id: acc.id } as FinancialAccount) : acc,
|
|
148
|
+
),
|
|
149
|
+
);
|
|
150
|
+
} else {
|
|
151
|
+
setAccounts([...accounts, { ...formData, id: Date.now().toString() } as FinancialAccount]);
|
|
152
|
+
}
|
|
153
|
+
handleCloseModal();
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const addCurrency = () => {
|
|
157
|
+
setFormData({
|
|
158
|
+
...formData,
|
|
159
|
+
currencies: [...(formData.currencies || []), { currency: 'USD', taxCategory: '' }],
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const removeCurrency = (index: number) => {
|
|
164
|
+
setFormData({
|
|
165
|
+
...formData,
|
|
166
|
+
currencies: formData.currencies?.filter((_, i) => i !== index) || [],
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const updateCurrency = (index: number, field: keyof CurrencyTaxCategory, value: string) => {
|
|
171
|
+
const updatedCurrencies = [...(formData.currencies || [])];
|
|
172
|
+
updatedCurrencies[index] = { ...updatedCurrencies[index], [field]: value };
|
|
173
|
+
setFormData({ ...formData, currencies: updatedCurrencies });
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const getAccountIcon = (type: AccountType) => {
|
|
177
|
+
switch (type) {
|
|
178
|
+
case 'BANK':
|
|
179
|
+
return <Building2 className="h-5 w-5" />;
|
|
180
|
+
case 'CREDIT_CARD':
|
|
181
|
+
return <CreditCard className="h-5 w-5" />;
|
|
182
|
+
case 'CRYPTO_WALLET':
|
|
183
|
+
return <Bitcoin className="h-5 w-5" />;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const getAccountTypeLabel = (type: AccountType) => {
|
|
188
|
+
switch (type) {
|
|
189
|
+
case 'BANK':
|
|
190
|
+
return 'Bank Account';
|
|
191
|
+
case 'CREDIT_CARD':
|
|
192
|
+
return 'Credit Card';
|
|
193
|
+
case 'CRYPTO_WALLET':
|
|
194
|
+
return 'Crypto Wallet';
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
return (
|
|
199
|
+
<div className="space-y-6">
|
|
200
|
+
<div className="flex items-center justify-between">
|
|
201
|
+
<div>
|
|
202
|
+
<h2 className="text-2xl font-semibold tracking-tight">Financial Accounts</h2>
|
|
203
|
+
<p className="text-sm text-muted-foreground">
|
|
204
|
+
Manage bank accounts, credit cards, and crypto wallets
|
|
205
|
+
</p>
|
|
206
|
+
</div>
|
|
207
|
+
<Button onClick={() => handleOpenModal()}>
|
|
208
|
+
<Plus className="h-4 w-4 mr-2" />
|
|
209
|
+
New Account
|
|
210
|
+
</Button>
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
<div className="grid gap-4">
|
|
214
|
+
{accounts.map(account => (
|
|
215
|
+
<Card key={account.id}>
|
|
216
|
+
<CardHeader>
|
|
217
|
+
<div className="flex items-start justify-between">
|
|
218
|
+
<div className="flex items-center gap-3">
|
|
219
|
+
<div className="p-2 rounded-lg bg-primary/10 text-primary">
|
|
220
|
+
{getAccountIcon(account.type)}
|
|
221
|
+
</div>
|
|
222
|
+
<div>
|
|
223
|
+
<CardTitle className="text-lg">{account.accountNumber}</CardTitle>
|
|
224
|
+
<CardDescription className="flex items-center gap-2 mt-1">
|
|
225
|
+
<Badge variant="outline">{getAccountTypeLabel(account.type)}</Badge>
|
|
226
|
+
{account.isBusiness && <Badge variant="secondary">Business</Badge>}
|
|
227
|
+
</CardDescription>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
<Button variant="ghost" size="sm" onClick={() => handleOpenModal(account)}>
|
|
231
|
+
<Edit className="h-4 w-4" />
|
|
232
|
+
</Button>
|
|
233
|
+
</div>
|
|
234
|
+
</CardHeader>
|
|
235
|
+
<CardContent className="space-y-4">
|
|
236
|
+
{/* Currencies */}
|
|
237
|
+
<div>
|
|
238
|
+
<h4 className="text-sm font-medium mb-2">Currencies & Tax Categories</h4>
|
|
239
|
+
<div className="flex flex-wrap gap-2">
|
|
240
|
+
{account.currencies.map((curr, idx) => (
|
|
241
|
+
<Badge key={idx} variant="secondary" className="text-xs">
|
|
242
|
+
{curr.currency} → {curr.taxCategory}
|
|
243
|
+
</Badge>
|
|
244
|
+
))}
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
|
|
248
|
+
{/* Bank-specific fields */}
|
|
249
|
+
{account.type === 'BANK' && (
|
|
250
|
+
<div className="border-t pt-4">
|
|
251
|
+
<h4 className="text-sm font-medium mb-3">Bank Details</h4>
|
|
252
|
+
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 text-sm">
|
|
253
|
+
<div>
|
|
254
|
+
<span className="text-muted-foreground">Bank Number:</span>
|
|
255
|
+
<p className="font-medium">{account.bankNumber}</p>
|
|
256
|
+
</div>
|
|
257
|
+
<div>
|
|
258
|
+
<span className="text-muted-foreground">Branch Number:</span>
|
|
259
|
+
<p className="font-medium">{account.branchNumber}</p>
|
|
260
|
+
</div>
|
|
261
|
+
<div>
|
|
262
|
+
<span className="text-muted-foreground">Extended Bank Number:</span>
|
|
263
|
+
<p className="font-medium">{account.extendedBankNumber}</p>
|
|
264
|
+
</div>
|
|
265
|
+
<div>
|
|
266
|
+
<span className="text-muted-foreground">Party Preferred Indication:</span>
|
|
267
|
+
<p className="font-medium">{account.partyPreferredIndication}</p>
|
|
268
|
+
</div>
|
|
269
|
+
<div>
|
|
270
|
+
<span className="text-muted-foreground">Party Account Involvement:</span>
|
|
271
|
+
<p className="font-medium">{account.partyAccountInvolvementCode}</p>
|
|
272
|
+
</div>
|
|
273
|
+
<div>
|
|
274
|
+
<span className="text-muted-foreground">Account Deal Date:</span>
|
|
275
|
+
<p className="font-medium">{account.accountDealDate}</p>
|
|
276
|
+
</div>
|
|
277
|
+
<div>
|
|
278
|
+
<span className="text-muted-foreground">Account Update Date:</span>
|
|
279
|
+
<p className="font-medium">{account.accountUpdateDate}</p>
|
|
280
|
+
</div>
|
|
281
|
+
<div>
|
|
282
|
+
<span className="text-muted-foreground">Meteg Dora Net:</span>
|
|
283
|
+
<p className="font-medium">{account.metegDoraNet}</p>
|
|
284
|
+
</div>
|
|
285
|
+
<div>
|
|
286
|
+
<span className="text-muted-foreground">Kod Harshaot Peilut:</span>
|
|
287
|
+
<p className="font-medium">{account.kodHarshaatPeilut}</p>
|
|
288
|
+
</div>
|
|
289
|
+
<div>
|
|
290
|
+
<span className="text-muted-foreground">Closing Reason Code:</span>
|
|
291
|
+
<p className="font-medium">{account.accountClosingReasonCode}</p>
|
|
292
|
+
</div>
|
|
293
|
+
<div>
|
|
294
|
+
<span className="text-muted-foreground">Agreement Opening Date:</span>
|
|
295
|
+
<p className="font-medium">{account.accountAgreementOpeningDate}</p>
|
|
296
|
+
</div>
|
|
297
|
+
<div>
|
|
298
|
+
<span className="text-muted-foreground">Branch Type Code:</span>
|
|
299
|
+
<p className="font-medium">{account.branchTypeCode}</p>
|
|
300
|
+
</div>
|
|
301
|
+
<div>
|
|
302
|
+
<span className="text-muted-foreground">Mymail Entitlement:</span>
|
|
303
|
+
<p className="font-medium">{account.mymailEntitlementSwitch}</p>
|
|
304
|
+
</div>
|
|
305
|
+
<div className="col-span-2">
|
|
306
|
+
<span className="text-muted-foreground">Service Authorization:</span>
|
|
307
|
+
<p className="font-medium">{account.serviceAuthorizationDesc}</p>
|
|
308
|
+
</div>
|
|
309
|
+
<div className="col-span-2">
|
|
310
|
+
<span className="text-muted-foreground">Product Label:</span>
|
|
311
|
+
<p className="font-medium">{account.productLabel}</p>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
)}
|
|
316
|
+
</CardContent>
|
|
317
|
+
</Card>
|
|
318
|
+
))}
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
{/* Add/Edit Account Modal */}
|
|
322
|
+
<Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>
|
|
323
|
+
<DialogContent className="max-w-4xl max-h-[90vh] overflow-y-auto">
|
|
324
|
+
<DialogHeader>
|
|
325
|
+
<DialogTitle>{editingAccount ? 'Edit Account' : 'New Account'}</DialogTitle>
|
|
326
|
+
<DialogDescription>
|
|
327
|
+
{editingAccount
|
|
328
|
+
? 'Update account details and settings'
|
|
329
|
+
: 'Add a new financial account'}
|
|
330
|
+
</DialogDescription>
|
|
331
|
+
</DialogHeader>
|
|
332
|
+
|
|
333
|
+
<form onSubmit={handleSubmit} className="space-y-6">
|
|
334
|
+
{/* Basic Information */}
|
|
335
|
+
<div className="space-y-4">
|
|
336
|
+
<h3 className="text-sm font-semibold">Basic Information</h3>
|
|
337
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
338
|
+
<div className="space-y-2">
|
|
339
|
+
<Label htmlFor="accountNumber">Account Number *</Label>
|
|
340
|
+
<Input
|
|
341
|
+
id="accountNumber"
|
|
342
|
+
value={formData.accountNumber}
|
|
343
|
+
onChange={e => setFormData({ ...formData, accountNumber: e.target.value })}
|
|
344
|
+
required
|
|
345
|
+
/>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<div className="space-y-2">
|
|
349
|
+
<Label htmlFor="type">Account Type *</Label>
|
|
350
|
+
<Select
|
|
351
|
+
value={formData.type}
|
|
352
|
+
onValueChange={(value: AccountType) =>
|
|
353
|
+
setFormData({ ...formData, type: value })
|
|
354
|
+
}
|
|
355
|
+
>
|
|
356
|
+
<SelectTrigger id="type">
|
|
357
|
+
<SelectValue />
|
|
358
|
+
</SelectTrigger>
|
|
359
|
+
<SelectContent>
|
|
360
|
+
<SelectItem value="BANK">Bank Account</SelectItem>
|
|
361
|
+
<SelectItem value="CREDIT_CARD">Credit Card</SelectItem>
|
|
362
|
+
<SelectItem value="CRYPTO_WALLET">Crypto Wallet</SelectItem>
|
|
363
|
+
</SelectContent>
|
|
364
|
+
</Select>
|
|
365
|
+
</div>
|
|
366
|
+
|
|
367
|
+
<div className="flex items-center space-x-2">
|
|
368
|
+
<Switch
|
|
369
|
+
id="isBusiness"
|
|
370
|
+
checked={formData.isBusiness}
|
|
371
|
+
onCheckedChange={checked => setFormData({ ...formData, isBusiness: checked })}
|
|
372
|
+
/>
|
|
373
|
+
<Label htmlFor="isBusiness">Business Account</Label>
|
|
374
|
+
</div>
|
|
375
|
+
</div>
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
{/* Currencies & Tax Categories */}
|
|
379
|
+
<div className="space-y-4">
|
|
380
|
+
<div className="flex items-center justify-between">
|
|
381
|
+
<h3 className="text-sm font-semibold">Currencies & Tax Categories</h3>
|
|
382
|
+
<Button type="button" variant="outline" size="sm" onClick={addCurrency}>
|
|
383
|
+
<Plus className="h-4 w-4 mr-2" />
|
|
384
|
+
Add Currency
|
|
385
|
+
</Button>
|
|
386
|
+
</div>
|
|
387
|
+
<div className="space-y-3">
|
|
388
|
+
{formData.currencies?.map((curr, index) => (
|
|
389
|
+
<div key={index} className="flex gap-2 items-start">
|
|
390
|
+
<div className="flex-1 grid grid-cols-2 gap-2">
|
|
391
|
+
<Input
|
|
392
|
+
placeholder="Currency (e.g., ILS, USD)"
|
|
393
|
+
value={curr.currency}
|
|
394
|
+
onChange={e => updateCurrency(index, 'currency', e.target.value)}
|
|
395
|
+
/>
|
|
396
|
+
<Input
|
|
397
|
+
placeholder="Tax Category"
|
|
398
|
+
value={curr.taxCategory}
|
|
399
|
+
onChange={e => updateCurrency(index, 'taxCategory', e.target.value)}
|
|
400
|
+
/>
|
|
401
|
+
</div>
|
|
402
|
+
<Button
|
|
403
|
+
type="button"
|
|
404
|
+
variant="ghost"
|
|
405
|
+
size="icon"
|
|
406
|
+
onClick={() => removeCurrency(index)}
|
|
407
|
+
>
|
|
408
|
+
<X className="h-4 w-4" />
|
|
409
|
+
</Button>
|
|
410
|
+
</div>
|
|
411
|
+
))}
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
|
|
415
|
+
{/* Bank-specific fields */}
|
|
416
|
+
{formData.type === 'BANK' && (
|
|
417
|
+
<div className="space-y-4 border-t pt-4">
|
|
418
|
+
<h3 className="text-sm font-semibold">Bank-Specific Details</h3>
|
|
419
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
420
|
+
<div className="space-y-2">
|
|
421
|
+
<Label htmlFor="bankNumber">Bank Number</Label>
|
|
422
|
+
<Input
|
|
423
|
+
id="bankNumber"
|
|
424
|
+
type="number"
|
|
425
|
+
value={formData.bankNumber || ''}
|
|
426
|
+
onChange={e =>
|
|
427
|
+
setFormData({
|
|
428
|
+
...formData,
|
|
429
|
+
bankNumber: Number.parseInt(e.target.value) || undefined,
|
|
430
|
+
})
|
|
431
|
+
}
|
|
432
|
+
/>
|
|
433
|
+
</div>
|
|
434
|
+
|
|
435
|
+
<div className="space-y-2">
|
|
436
|
+
<Label htmlFor="branchNumber">Branch Number</Label>
|
|
437
|
+
<Input
|
|
438
|
+
id="branchNumber"
|
|
439
|
+
type="number"
|
|
440
|
+
value={formData.branchNumber || ''}
|
|
441
|
+
onChange={e =>
|
|
442
|
+
setFormData({
|
|
443
|
+
...formData,
|
|
444
|
+
branchNumber: Number.parseInt(e.target.value) || undefined,
|
|
445
|
+
})
|
|
446
|
+
}
|
|
447
|
+
/>
|
|
448
|
+
</div>
|
|
449
|
+
|
|
450
|
+
<div className="space-y-2">
|
|
451
|
+
<Label htmlFor="extendedBankNumber">Extended Bank Number</Label>
|
|
452
|
+
<Input
|
|
453
|
+
id="extendedBankNumber"
|
|
454
|
+
type="number"
|
|
455
|
+
value={formData.extendedBankNumber || ''}
|
|
456
|
+
onChange={e =>
|
|
457
|
+
setFormData({
|
|
458
|
+
...formData,
|
|
459
|
+
extendedBankNumber: Number.parseInt(e.target.value) || undefined,
|
|
460
|
+
})
|
|
461
|
+
}
|
|
462
|
+
/>
|
|
463
|
+
</div>
|
|
464
|
+
|
|
465
|
+
<div className="space-y-2">
|
|
466
|
+
<Label htmlFor="partyPreferredIndication">Party Preferred Indication</Label>
|
|
467
|
+
<Input
|
|
468
|
+
id="partyPreferredIndication"
|
|
469
|
+
type="number"
|
|
470
|
+
value={formData.partyPreferredIndication || ''}
|
|
471
|
+
onChange={e =>
|
|
472
|
+
setFormData({
|
|
473
|
+
...formData,
|
|
474
|
+
partyPreferredIndication: Number.parseInt(e.target.value) || undefined,
|
|
475
|
+
})
|
|
476
|
+
}
|
|
477
|
+
/>
|
|
478
|
+
</div>
|
|
479
|
+
|
|
480
|
+
<div className="space-y-2">
|
|
481
|
+
<Label htmlFor="partyAccountInvolvementCode">
|
|
482
|
+
Party Account Involvement Code
|
|
483
|
+
</Label>
|
|
484
|
+
<Input
|
|
485
|
+
id="partyAccountInvolvementCode"
|
|
486
|
+
type="number"
|
|
487
|
+
value={formData.partyAccountInvolvementCode || ''}
|
|
488
|
+
onChange={e =>
|
|
489
|
+
setFormData({
|
|
490
|
+
...formData,
|
|
491
|
+
partyAccountInvolvementCode: Number.parseInt(e.target.value) || undefined,
|
|
492
|
+
})
|
|
493
|
+
}
|
|
494
|
+
/>
|
|
495
|
+
</div>
|
|
496
|
+
|
|
497
|
+
<div className="space-y-2">
|
|
498
|
+
<Label htmlFor="accountDealDate">Account Deal Date</Label>
|
|
499
|
+
<Input
|
|
500
|
+
id="accountDealDate"
|
|
501
|
+
type="number"
|
|
502
|
+
placeholder="YYYYMMDD"
|
|
503
|
+
value={formData.accountDealDate || ''}
|
|
504
|
+
onChange={e =>
|
|
505
|
+
setFormData({
|
|
506
|
+
...formData,
|
|
507
|
+
accountDealDate: Number.parseInt(e.target.value) || undefined,
|
|
508
|
+
})
|
|
509
|
+
}
|
|
510
|
+
/>
|
|
511
|
+
</div>
|
|
512
|
+
|
|
513
|
+
<div className="space-y-2">
|
|
514
|
+
<Label htmlFor="accountUpdateDate">Account Update Date</Label>
|
|
515
|
+
<Input
|
|
516
|
+
id="accountUpdateDate"
|
|
517
|
+
type="number"
|
|
518
|
+
placeholder="YYYYMMDD"
|
|
519
|
+
value={formData.accountUpdateDate || ''}
|
|
520
|
+
onChange={e =>
|
|
521
|
+
setFormData({
|
|
522
|
+
...formData,
|
|
523
|
+
accountUpdateDate: Number.parseInt(e.target.value) || undefined,
|
|
524
|
+
})
|
|
525
|
+
}
|
|
526
|
+
/>
|
|
527
|
+
</div>
|
|
528
|
+
|
|
529
|
+
<div className="space-y-2">
|
|
530
|
+
<Label htmlFor="metegDoraNet">Meteg Dora Net</Label>
|
|
531
|
+
<Input
|
|
532
|
+
id="metegDoraNet"
|
|
533
|
+
type="number"
|
|
534
|
+
value={formData.metegDoraNet || ''}
|
|
535
|
+
onChange={e =>
|
|
536
|
+
setFormData({
|
|
537
|
+
...formData,
|
|
538
|
+
metegDoraNet: Number.parseInt(e.target.value) || undefined,
|
|
539
|
+
})
|
|
540
|
+
}
|
|
541
|
+
/>
|
|
542
|
+
</div>
|
|
543
|
+
|
|
544
|
+
<div className="space-y-2">
|
|
545
|
+
<Label htmlFor="kodHarshaatPeilut">Kod Harshaot Peilut</Label>
|
|
546
|
+
<Input
|
|
547
|
+
id="kodHarshaatPeilut"
|
|
548
|
+
type="number"
|
|
549
|
+
value={formData.kodHarshaatPeilut || ''}
|
|
550
|
+
onChange={e =>
|
|
551
|
+
setFormData({
|
|
552
|
+
...formData,
|
|
553
|
+
kodHarshaatPeilut: Number.parseInt(e.target.value) || undefined,
|
|
554
|
+
})
|
|
555
|
+
}
|
|
556
|
+
/>
|
|
557
|
+
</div>
|
|
558
|
+
|
|
559
|
+
<div className="space-y-2">
|
|
560
|
+
<Label htmlFor="accountClosingReasonCode">Account Closing Reason Code</Label>
|
|
561
|
+
<Input
|
|
562
|
+
id="accountClosingReasonCode"
|
|
563
|
+
type="number"
|
|
564
|
+
value={formData.accountClosingReasonCode || ''}
|
|
565
|
+
onChange={e =>
|
|
566
|
+
setFormData({
|
|
567
|
+
...formData,
|
|
568
|
+
accountClosingReasonCode: Number.parseInt(e.target.value) || undefined,
|
|
569
|
+
})
|
|
570
|
+
}
|
|
571
|
+
/>
|
|
572
|
+
</div>
|
|
573
|
+
|
|
574
|
+
<div className="space-y-2">
|
|
575
|
+
<Label htmlFor="accountAgreementOpeningDate">
|
|
576
|
+
Account Agreement Opening Date
|
|
577
|
+
</Label>
|
|
578
|
+
<Input
|
|
579
|
+
id="accountAgreementOpeningDate"
|
|
580
|
+
type="number"
|
|
581
|
+
placeholder="YYYYMMDD"
|
|
582
|
+
value={formData.accountAgreementOpeningDate || ''}
|
|
583
|
+
onChange={e =>
|
|
584
|
+
setFormData({
|
|
585
|
+
...formData,
|
|
586
|
+
accountAgreementOpeningDate: Number.parseInt(e.target.value) || undefined,
|
|
587
|
+
})
|
|
588
|
+
}
|
|
589
|
+
/>
|
|
590
|
+
</div>
|
|
591
|
+
|
|
592
|
+
<div className="space-y-2">
|
|
593
|
+
<Label htmlFor="branchTypeCode">Branch Type Code</Label>
|
|
594
|
+
<Input
|
|
595
|
+
id="branchTypeCode"
|
|
596
|
+
type="number"
|
|
597
|
+
value={formData.branchTypeCode || ''}
|
|
598
|
+
onChange={e =>
|
|
599
|
+
setFormData({
|
|
600
|
+
...formData,
|
|
601
|
+
branchTypeCode: Number.parseInt(e.target.value) || undefined,
|
|
602
|
+
})
|
|
603
|
+
}
|
|
604
|
+
/>
|
|
605
|
+
</div>
|
|
606
|
+
|
|
607
|
+
<div className="space-y-2">
|
|
608
|
+
<Label htmlFor="mymailEntitlementSwitch">Mymail Entitlement Switch</Label>
|
|
609
|
+
<Input
|
|
610
|
+
id="mymailEntitlementSwitch"
|
|
611
|
+
type="number"
|
|
612
|
+
value={formData.mymailEntitlementSwitch || ''}
|
|
613
|
+
onChange={e =>
|
|
614
|
+
setFormData({
|
|
615
|
+
...formData,
|
|
616
|
+
mymailEntitlementSwitch: Number.parseInt(e.target.value) || undefined,
|
|
617
|
+
})
|
|
618
|
+
}
|
|
619
|
+
/>
|
|
620
|
+
</div>
|
|
621
|
+
|
|
622
|
+
<div className="space-y-2 md:col-span-2">
|
|
623
|
+
<Label htmlFor="serviceAuthorizationDesc">
|
|
624
|
+
Service Authorization Description
|
|
625
|
+
</Label>
|
|
626
|
+
<Input
|
|
627
|
+
id="serviceAuthorizationDesc"
|
|
628
|
+
value={formData.serviceAuthorizationDesc || ''}
|
|
629
|
+
onChange={e =>
|
|
630
|
+
setFormData({ ...formData, serviceAuthorizationDesc: e.target.value })
|
|
631
|
+
}
|
|
632
|
+
/>
|
|
633
|
+
</div>
|
|
634
|
+
|
|
635
|
+
<div className="space-y-2 md:col-span-2 lg:col-span-3">
|
|
636
|
+
<Label htmlFor="productLabel">Product Label</Label>
|
|
637
|
+
<Input
|
|
638
|
+
id="productLabel"
|
|
639
|
+
value={formData.productLabel || ''}
|
|
640
|
+
onChange={e => setFormData({ ...formData, productLabel: e.target.value })}
|
|
641
|
+
/>
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
</div>
|
|
645
|
+
)}
|
|
646
|
+
|
|
647
|
+
<DialogFooter>
|
|
648
|
+
<Button type="button" variant="outline" onClick={handleCloseModal}>
|
|
649
|
+
Cancel
|
|
650
|
+
</Button>
|
|
651
|
+
<Button type="submit">{editingAccount ? 'Update Account' : 'Create Account'}</Button>
|
|
652
|
+
</DialogFooter>
|
|
653
|
+
</form>
|
|
654
|
+
</DialogContent>
|
|
655
|
+
</Dialog>
|
|
656
|
+
</div>
|
|
657
|
+
);
|
|
658
|
+
}
|