import type { Shift } from "./shift.models"; import type { Expense } from "src/modules/timesheets/models/expense.models"; export type Week = { sun: T; mon: T; tue: T; wed: T; thu: T; fri: T; sat: T; }; export interface PayPeriodDetails { weeks: PayPeriodDetailsWeek[]; employee_full_name: string; } export interface PayPeriodDetailsWeek { is_approved: boolean; shifts: Week expenses: Week; } export interface PayPeriodDetailsWeekDayShifts { shifts: Shift[]; regular_hours: number; evening_hours: number; emergency_hours: number; overtime_hours: number; total_hours: number; short_date: string; break_duration?: number; } export interface PayPeriodDetailsWeekDayExpenses { cash: Expense[]; km: Expense[]; [otherType: string]: Expense[]; } const makeWeek = (factory: ()=> T): Week => ({ sun: factory(), mon: factory(), tue: factory(), wed: factory(), thu: factory(), fri: factory(), sat: factory(), }); const emptyDailySchedule = (): PayPeriodDetailsWeekDayShifts => ({ shifts: [], regular_hours: 0, evening_hours: 0, emergency_hours: 0, overtime_hours: 0, total_hours: 0, short_date: "", break_duration: 0, }); const emptyDailyExpenses = (): PayPeriodDetailsWeekDayExpenses => ({ cash: [], km: [], }); export const defaultPayPeriodDetailsWeek = (): PayPeriodDetailsWeek => ({ is_approved: false, shifts: makeWeek(emptyDailySchedule), expenses: makeWeek(emptyDailyExpenses), }); export const default_pay_period_details: PayPeriodDetails = { weeks: [ defaultPayPeriodDetailsWeek(), ], employee_full_name: "", }