95 lines
2.7 KiB
TypeScript
95 lines
2.7 KiB
TypeScript
import { DayExpensesDto, WeekDto, DetailedShifts, TimesheetPeriodDto } from "./dtos/timesheet-period.dto";
|
|
import { ExpenseRow, ExpensesAmount, ShiftRow } from "./timesheet.types";
|
|
import { addDays, shortDate, toNum, upper } from "./timesheet.helpers";
|
|
import { Prisma } from "@prisma/client";
|
|
|
|
|
|
//mappers
|
|
export const mapShiftRow = (shift: {
|
|
date: Date;
|
|
start_time: Date;
|
|
end_time: Date;
|
|
comment?: string | null;
|
|
is_approved: boolean;
|
|
is_remote: boolean;
|
|
bank_code: { type: string };
|
|
}): ShiftRow => ({
|
|
date: shift.date,
|
|
start_time: shift.start_time,
|
|
end_time: shift.end_time,
|
|
comment: shift.comment ?? '',
|
|
is_approved: shift.is_approved,
|
|
is_remote: shift.is_remote,
|
|
type: upper(shift.bank_code.type),
|
|
});
|
|
|
|
export const mapExpenseRow = (expense: {
|
|
date: Date;
|
|
amount: Prisma.Decimal | number | null;
|
|
mileage: Prisma.Decimal | number | null;
|
|
comment?: string | null;
|
|
is_approved: boolean;
|
|
supervisor_comment?: string|null;
|
|
bank_code: { type: string },
|
|
}): ExpenseRow => ({
|
|
date: expense.date,
|
|
amount: toNum(expense.amount),
|
|
mileage: toNum(expense.mileage),
|
|
comment: expense.comment ?? '',
|
|
is_approved: expense.is_approved,
|
|
supervisor_comment: expense.supervisor_comment ?? '',
|
|
type: upper(expense.bank_code.type),
|
|
});
|
|
|
|
|
|
// Factories
|
|
export function makeEmptyDayExpenses(): DayExpensesDto {
|
|
return {
|
|
expenses: [],
|
|
total_expense: -1,
|
|
total_mileage: -1,
|
|
};
|
|
}
|
|
|
|
export function makeEmptyWeek(week_start: Date): WeekDto {
|
|
const make_empty_shifts = (offset: number): DetailedShifts => ({
|
|
shifts: [],
|
|
regular_hours: 0,
|
|
evening_hours: 0,
|
|
emergency_hours: 0,
|
|
overtime_hours: 0,
|
|
comment: '',
|
|
short_date: shortDate(addDays(week_start, offset)),
|
|
break_durations: 0,
|
|
});
|
|
return {
|
|
is_approved: true,
|
|
shifts: {
|
|
sun: make_empty_shifts(0),
|
|
mon: make_empty_shifts(1),
|
|
tue: make_empty_shifts(2),
|
|
wed: make_empty_shifts(3),
|
|
thu: make_empty_shifts(4),
|
|
fri: make_empty_shifts(5),
|
|
sat: make_empty_shifts(6),
|
|
},
|
|
expenses: {
|
|
sun: makeEmptyDayExpenses(),
|
|
mon: makeEmptyDayExpenses(),
|
|
tue: makeEmptyDayExpenses(),
|
|
wed: makeEmptyDayExpenses(),
|
|
thu: makeEmptyDayExpenses(),
|
|
fri: makeEmptyDayExpenses(),
|
|
sat: makeEmptyDayExpenses(),
|
|
},
|
|
};
|
|
}
|
|
|
|
export function makeEmptyPeriod(): TimesheetPeriodDto {
|
|
return { weeks: [makeEmptyWeek(new Date()), makeEmptyWeek(new Date())], employee_full_name: '' };
|
|
}
|
|
|
|
export const makeAmounts = (): ExpensesAmount => ({
|
|
expense: 0,
|
|
mileage: 0,
|
|
}); |