43 lines
1.6 KiB
TypeScript
43 lines
1.6 KiB
TypeScript
import type { ExpenseType } from "src/modules/timesheets/models/expense.models";
|
|
|
|
export const getExpenseIcon = (type: ExpenseType) => {
|
|
switch (type) {
|
|
case 'MILEAGE': return 'time_to_leave';
|
|
case 'EXPENSES': return 'receipt_long';
|
|
case 'PER_DIEM': return 'hotel';
|
|
case 'ON_CALL': return 'phone_android';
|
|
default: return 'help_outline';
|
|
}
|
|
};
|
|
|
|
export const useExpenseRules = (t: (_key: string) => string) => {
|
|
const isPresent = (val: unknown) => val !== undefined && val !== null && val !== '';
|
|
const typeRequired = (val: unknown) => (!!val) || t('timesheet.expense.errors.type_required');
|
|
const amountRequired = (val: unknown) => (isPresent(val)) || t('timesheet.expense.errors.amount_required_for_type');
|
|
const mileageRequired = (val: unknown) => (isPresent(val)) || t('timesheet.expense.errors.mileage_required_for_type');
|
|
const commentRequired = (val: unknown) => (typeof val === 'string' ? val.trim().length > 0 : false) || t('timesheet.expense.errors.comment_required');
|
|
|
|
return {
|
|
typeRequired,
|
|
amountRequired,
|
|
mileageRequired,
|
|
commentRequired,
|
|
};
|
|
};
|
|
|
|
export const convertToMonetaryAmount = (amount: number | string): number => {
|
|
if (typeof amount === 'number') return Number(amount.toFixed(2));
|
|
|
|
if (typeof amount === 'string') {
|
|
try {
|
|
const single_decimal_amount = amount.replace(/\.(?=.*\.)/g, '');
|
|
const numbers_only_decimal = single_decimal_amount.replace(/[^0-9.]/g, '');
|
|
|
|
return Number(numbers_only_decimal);
|
|
} catch(error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}; |