import { defineStore } from 'pinia'; import { ref } from 'vue'; import { timesheetApprovalService } from 'src/modules/timesheet-approval/services/services-timesheet-approval'; import { timesheetTempService } from 'src/modules/timesheets/services/timesheet-services'; import type { PayPeriod } from 'src/modules/shared/types/pay-period-interface'; import type { PayPeriodOverviewEmployee } from "src/modules/timesheet-approval/types/timesheet-approval-pay-period-overview-employee-interface"; import { default_pay_period_employee_details, type PayPeriodEmployeeDetails } from 'src/modules/timesheet-approval/types/timesheet-approval-pay-period-employee-details-interface'; import type { PayPeriodReportFilters } from 'src/modules/timesheet-approval/types/timesheet-approval-pay-period-report-interface'; import type { Timesheet } from 'src/modules/timesheets/types/timesheet-interface'; import type { CreateShiftPayload } from 'src/modules/timesheets/types/timesheet-shift-interface'; 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 current_pay_period = ref(default_pay_period); const pay_period_overview_employees = ref([]); const pay_period_overview_employee_approval_statuses = ref<{key: string, value: boolean}[] | undefined>(); const pay_period_employee_details = ref(default_pay_period_employee_details); const pay_period_report = ref(); //employee timesheet const current_timesheet = ref(default_timesheet); const getPayPeriodByDate = async (date_string: string): Promise => { is_loading.value = true; try { const response = await timesheetApprovalService.getPayPeriodByDate(date_string); current_pay_period.value = response; is_loading.value = false; return true; } catch(error){ console.error('Could not get current pay period: ', error ); current_pay_period.value = default_pay_period; pay_period_overview_employees.value = []; //TODO: More in-depth error-handling here } is_loading.value = false; return false; }; const getPayPeriodByYearAndPeriodNumber = async (year: number, period_number: number): Promise => { is_loading.value = true; try { const response = await timesheetApprovalService.getPayPeriodByYearAndPeriodNumber(year, period_number); current_pay_period.value = response; is_loading.value = false; return true; } catch(error){ console.error('Could not get current pay period: ', error ); current_pay_period.value = default_pay_period; pay_period_overview_employees.value = []; //TODO: More in-depth error-handling here } is_loading.value = false; return false; }; const getTimesheetApprovalPayPeriodEmployeeOverviews = async (pay_year: number, period_number: number, supervisor_email: string) => { is_loading.value = true; try { const response = await timesheetApprovalService.getPayPeriodEmployeeOverviews( pay_year, period_number, supervisor_email ); pay_period_overview_employees.value = response.employees_overview; pay_period_overview_employee_approval_statuses.value = response.employees_overview.map( employee => ({ key: employee.email, value: employee.is_approved }) ); } catch (error) { console.error('There was an error retrieving Employee Pay Period overviews: ', error); pay_period_overview_employees.value = []; // TODO: More in-depth error-handling here } is_loading.value = false; }; //employee timesheet const getTimesheetByEmail = async (employee_email: string) => { is_loading.value = true; try{ const response = await timesheetTempService.getTimesheetsByEmail(employee_email); current_timesheet.value = response; }catch (error) { console.error('There was an error retrieving timesheet details for this employee: ', error); current_timesheet.value = { ...default_timesheet } } finally { is_loading.value = false; } } //employee timesheet const createTimesheetShifts = async (employee_email: string, shifts: CreateShiftPayload[], offset = 0) => { is_loading.value = true; try{ const timesheet = await timesheetTempService.createTimesheetShifts(employee_email, shifts, offset); current_timesheet.value = timesheet; } catch (err) { console.error('createTimesheetShifts error: ', err); } finally { is_loading.value = false; } }; const getTimesheetsByPayPeriodAndEmail = async (employee_email: string) => { is_loading.value = true; try { const response = await timesheetApprovalService.getTimesheetsByPayPeriodAndEmail( current_pay_period.value.pay_year, current_pay_period.value.pay_period_no, employee_email ); pay_period_employee_details.value = response; } catch (error) { console.error('There was an error retrieving timesheet details for this employee: ', error); // TODO: More in-depth error-handling here } is_loading.value = false; }; const getTimesheetApprovalCSVReport = async (report_filters?: PayPeriodReportFilters) => { is_loading.value = true; try { const response = await timesheetApprovalService.getTimesheetApprovalCSVReport( current_pay_period.value.pay_year, current_pay_period.value.pay_period_no, report_filters ); pay_period_report.value = response; } catch (error) { console.error('There was an error retrieving the report CSV: ', error); // TODO: More in-depth error-handling here } is_loading.value = false; }; return { current_pay_period, pay_period_overview_employees, pay_period_overview_employee_approval_statuses, pay_period_employee_details, current_timesheet, is_loading, getPayPeriodByDate, getTimesheetByEmail, createTimesheetShifts, getPayPeriodByYearAndPeriodNumber, getTimesheetApprovalPayPeriodEmployeeOverviews, getTimesheetsByPayPeriodAndEmail, getTimesheetApprovalCSVReport, }; });