diff --git a/src/pages/AssetDetail.tsx b/src/pages/AssetDetail.tsx index a1a54d4..fe4dbd6 100644 --- a/src/pages/AssetDetail.tsx +++ b/src/pages/AssetDetail.tsx @@ -95,9 +95,11 @@ const AssetDetail: React.FC = () => { custom_site_contractor: '', custom_total_amount: 0, calculate_depreciation: false, - available_for_use_date: isNewAsset ? new Date().toISOString().split('T')[0] : undefined + available_for_use_date: isNewAsset ? new Date().toISOString().split('T')[0] : undefined, + finance_books:[] }); + // Load user details on mount useEffect(() => { async function loadUserDetails() { @@ -112,6 +114,43 @@ const AssetDetail: React.FC = () => { loadUserDetails(); }, []); + const addFinanceRow = () => { + // Get today's date in YYYY-MM-DD format for date input + const today = new Date().toISOString().split('T')[0]; + + const newRow: AssetFinanceBookRow = { + finance_book: 'Depreciation Entries', + depreciation_method: 'Straight Line', + total_number_of_depreciations: 10, + frequency_of_depreciation: 12, + depreciation_start_date: today + }; + + setFormData(prev => ({ + ...prev, + finance_books: [ + ...(prev.finance_books || []), + newRow + ] + })); + }; + + const removeFinanceRow = (index: number) => { + setFormData(prev => { + const rows = [...(prev.finance_books || [])]; + rows.splice(index, 1); + return { ...prev, finance_books: rows }; + }); + }; + + const updateFinanceRow = (index: number, patch: Partial) => { + setFormData(prev => { + const rows = [...(prev.finance_books || [])]; + rows[index] = { ...(rows[index] || {}), ...patch }; + return { ...prev, finance_books: rows }; + }); + }; + // Update department filters when company or userSiteName changes useEffect(() => { const filters: Record = {}; @@ -157,7 +196,8 @@ const AssetDetail: React.FC = () => { custom_total_amount: asset.custom_total_amount || 0, gross_purchase_amount: asset.gross_purchase_amount || 0, available_for_use_date: asset.available_for_use_date || '', - calculate_depreciation: asset.calculate_depreciation || false + calculate_depreciation: asset.calculate_depreciation || false, + finance_books: asset.finance_books || [] }); } }, [asset, isDuplicating]); diff --git a/src/services/assetService.ts b/src/services/assetService.ts index 952b34c..90984da 100644 --- a/src/services/assetService.ts +++ b/src/services/assetService.ts @@ -31,6 +31,7 @@ export interface Asset { calculate_depreciation?: boolean; gross_purchase_amount?: number; available_for_use_date?:string; + finance_books?: AssetFinanceBookRow[]; } export interface AssetListResponse { @@ -68,6 +69,15 @@ export interface AssetStats { total_amount: number; } +// Add child row type +export interface AssetFinanceBookRow { + finance_book?: string; + depreciation_method?: string; + total_number_of_depreciations?: number; + frequency_of_depreciation?: number; + depreciation_start_date?: string; // YYYY-MM-DD +} + export interface CreateAssetData { asset_name: string; company: string; @@ -88,6 +98,7 @@ export interface CreateAssetData { custom_site_contractor?: string; custom_total_amount?: number; calculate_depreciation?: boolean; + finance_books?: AssetFinanceBookRow[]; [key: string]: any; }