import { date } from 'quasar'; import { defineStore } from 'pinia'; import { computed, ref } from 'vue'; import { withLoading } from 'src/utils/store-helpers'; import { timesheetApprovalService } from 'src/modules/timesheet-approval/services/timesheet-approval-service'; import { timesheetTempService } from 'src/modules/timesheets/services/timesheet-services'; import { default_pay_period_employee_details, type PayPeriodEmployeeDetails } from 'src/modules/timesheet-approval/types/pay-period-employee-details'; import { default_pay_period_employee_overview, type PayPeriodEmployeeOverview } from "src/modules/timesheet-approval/types/pay-period-employee-overview"; import type { Timesheet } from 'src/modules/timesheets/types/timesheet.interfaces'; import type { PayPeriod } from 'src/modules/shared/types/pay-period-interface'; import type { PayPeriodReportFilters } from 'src/modules/timesheet-approval/types/pay-period-report'; const default_pay_period: PayPeriod = { pay_period_no: -1, period_start: '', period_end: '', payday: '', pay_year: -1, label: '' }; //employee timesheet const default_timesheet: Timesheet = { start_day: '', end_day: '', label: '', is_approved: false, shifts: [], expenses: [], }; export const useTimesheetStore = defineStore('timesheet', () => { const is_loading = ref(false); const pay_period = ref(default_pay_period); const pay_period_employee_overview_list = ref([]); const pay_period_employee_overview = ref(default_pay_period_employee_overview); const pay_period_employee_details = ref(default_pay_period_employee_details); const pay_period_report = ref(); const timesheet = ref(default_timesheet); const is_calendar_limit = computed( ()=> pay_period.value.pay_year === 2024 && pay_period.value.pay_period_no <= 1 ); const getPayPeriodByDateOrYearAndNumber = (date_or_year: string | number, period_number?: number): Promise => { return withLoading( is_loading, async () => { try { let response; if (typeof date_or_year === 'string') { response = await timesheetApprovalService.getPayPeriodByDate(date_or_year); return true; } else if ( typeof date_or_year === 'number' && period_number ) { response = await timesheetApprovalService.getPayPeriodByYearAndPeriodNumber(date_or_year, period_number); return true; } else response = default_pay_period; pay_period.value = response; return false; } catch(error){ console.error('Could not get current pay period: ', error ); pay_period.value = default_pay_period; pay_period_employee_overview_list.value = []; //TODO: More in-depth error-handling here } return false; }); }; const getPayPeriodEmployeeOverviewListBySupervisorEmail = async (pay_year: number, period_number: number, supervisor_email: string): Promise => { return withLoading( is_loading, async () => { try { const response = await timesheetApprovalService.getPayPeriodEmployeeOverviewListBySupervisorEmail( pay_year, period_number, supervisor_email ); pay_period_employee_overview_list.value = response.employees_overview; return true; } catch (error) { console.error('There was an error retrieving Employee Pay Period overviews: ', error); pay_period_employee_overview_list.value = []; // TODO: More in-depth error-handling here } return false; }); }; const getPayPeriodOverviewByEmployeeEmail = (email: string): PayPeriodEmployeeOverview => { const response = pay_period_employee_overview_list.value?.find( employee_overview => employee_overview.email === email); if (typeof response === 'undefined') { pay_period_employee_overview.value = default_pay_period_employee_overview; } else { pay_period_employee_overview.value = response; } return pay_period_employee_overview.value; }; const getTimesheetByEmail = async (employee_email: string) => { return withLoading( is_loading, async () => { try{ const response = await timesheetTempService.getTimesheetsByEmail(employee_email); timesheet.value = response; return true; }catch (error) { console.error('There was an error retrieving timesheet details for this employee: ', error); timesheet.value = { ...default_timesheet } } return false; }); }; const getPayPeriodEmployeeDetailsByEmployeeEmail = async (employee_email: string) => { return withLoading( is_loading, async () => { try { const response = await timesheetApprovalService.getPayPeriodEmployeeDetailsByPayPeriodAndEmail( pay_period.value.pay_year, pay_period.value.pay_period_no, employee_email ); pay_period_employee_details.value = response; return true; } catch (error) { console.error('There was an error retrieving timesheet details for this employee: ', error); // TODO: More in-depth error-handling here } pay_period_employee_details.value = default_pay_period_employee_details; return false; }); }; const getTimesheetApprovalCSVReport = async (report_filters?: PayPeriodReportFilters) => { return withLoading( is_loading, async () => { try { const response = await timesheetApprovalService.getTimesheetApprovalCSVReport( pay_period.value.pay_year, pay_period.value.pay_period_no, report_filters ); pay_period_report.value = response; return true; } catch (error) { console.error('There was an error retrieving the report CSV: ', error); // TODO: More in-depth error-handling here } return false; }); }; return { pay_period, pay_period_employee_overview_list, pay_period_employee_overview, pay_period_employee_details, timesheet, is_loading, is_calendar_limit, getPayPeriodByDateOrYearAndNumber, getTimesheetByEmail, getPayPeriodEmployeeOverviewListBySupervisorEmail, getPayPeriodOverviewByEmployeeEmail, getPayPeriodEmployeeDetailsByEmployeeEmail, getTimesheetApprovalCSVReport, }; });