import { ref } from 'vue'; import { defineStore } from 'pinia'; import { useAuthStore } from 'src/stores/auth-store'; import { timesheetApprovalService } from 'src/modules/timesheet-approval/services/timesheet-approval-service'; import { timesheetService } from 'src/modules/timesheets/services/timesheet-service'; import type { TimesheetOverview } from "src/modules/timesheet-approval/models/timesheet-overview.models"; import type { PayPeriod } from 'src/modules/shared/models/pay-period.models'; import type { Timesheet } from 'src/modules/timesheets/models/timesheet.models'; import type { TimesheetApprovalCSVReportFilters } from 'src/modules/timesheet-approval/models/timesheet-approval-csv-report.models'; export const useTimesheetStore = defineStore('timesheet', () => { const auth_store = useAuthStore(); const is_loading = ref(false); const pay_period = ref(); const pay_period_overviews = ref([]); const current_pay_period_overview = ref(); const timesheets = ref(); const pay_period_report = ref(); const getPayPeriodByDateOrYearAndNumber = async (date_or_year: string | number, period_number?: number): Promise => { try { if (typeof date_or_year === 'string') { pay_period.value = await timesheetService.getPayPeriodByDate(date_or_year); } else if (typeof date_or_year === 'number' && period_number) { pay_period.value = await timesheetService.getPayPeriodByYearAndPeriodNumber(date_or_year, period_number); } else pay_period.value = undefined; return true; } catch (error) { console.error('Could not get current pay period: ', error); pay_period.value = undefined; pay_period_overviews.value = []; //TODO: More in-depth error-handling here return false; } }; const getTimesheetOverviewsByPayPeriod = async (pay_year: number, period_number: number, supervisor_email?: string): Promise => { is_loading.value = true; try { const response = await timesheetApprovalService.getPayPeriodOverviewsBySupervisorEmail(pay_year, period_number, supervisor_email ?? auth_store.user?.email ?? ''); pay_period_overviews.value = response.employees_overview; is_loading.value = false; return true; } catch (error) { console.error('There was an error retrieving Employee Pay Period overviews: ', error); pay_period_overviews.value = []; // TODO: More in-depth error-handling here is_loading.value = false; return false; } }; const getTimesheetsByEmployeeEmail = async (employee_email: string) => { is_loading.value = true; if (pay_period.value === undefined) return; try { const response = await timesheetService.getTimesheetsByPayPeriodAndEmployeeEmail(employee_email, pay_period.value.pay_year, pay_period.value.pay_period_no); timesheets.value = response.timesheets; is_loading.value = false; } catch (error) { console.error('There was an error retrieving timesheet details for this employee: ', error); // TODO: More in-depth error-handling here timesheets.value = []; is_loading.value = false; } }; const getPayPeriodReportByYearAndPeriodNumber = async (year: number, period_number: number, report_filters?: TimesheetApprovalCSVReportFilters) => { try { const response = await timesheetApprovalService.getPayPeriodReportByYearAndPeriodNumber( year, period_number, 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 { is_loading, pay_period, pay_period_overviews, current_pay_period_overview, timesheets, getPayPeriodByDateOrYearAndNumber, getTimesheetOverviewsByPayPeriod, getTimesheetsByEmployeeEmail, getPayPeriodReportByYearAndPeriodNumber, }; });