Files
MixedAssets/src/utils/assets.js
2026-06-03 13:58:12 -05:00

63 lines
1.7 KiB
JavaScript

export function blankAsset() {
const today = new Date().toISOString().slice(0, 10);
return {
asset_id: '',
entity_id: null,
description: '',
category: 'Computer Equipment',
status: 'in_service',
acquisition_cost: 0,
acquired_date: today,
in_service_date: today,
useful_life_months: 60,
salvage_value: 0,
depreciation_method: 'straight_line',
location: '',
department: '',
custodian: '',
vendor: '',
serial_number: '',
invoice_number: '',
gl_asset_account: '',
gl_expense_account: '',
notes: '',
custom_fields: {}
};
}
export function slugFieldKey(value) {
return String(value || '')
.trim()
.toLowerCase()
.replace(/[^a-z0-9]+/g, '_')
.replace(/^_+|_+$/g, '');
}
export function normalizeCustomFields(fields) {
return (fields || [])
.map((field) => ({
key: slugFieldKey(field.key || field.label),
label: field.label || field.key || 'Custom field',
type: ['text', 'date', 'bool', 'numeric'].includes(field.type) ? field.type : 'text',
required: Boolean(field.required),
defaultValue: field.defaultValue ?? field.default ?? ''
}))
.filter((field) => field.key);
}
export function defaultValueForField(field) {
if (field.defaultValue !== undefined && field.defaultValue !== null && field.defaultValue !== '') {
if (field.type === 'bool') return Boolean(field.defaultValue);
if (field.type === 'numeric') return Number(field.defaultValue);
return field.defaultValue;
}
if (field.type === 'bool') return false;
return '';
}
export function inputTypeForCustomField(field) {
if (field.type === 'numeric') return 'number';
if (field.type === 'date') return 'date';
return 'text';
}