targo-frontend/src/stores/timesheet-store.ts

172 lines
7.1 KiB
TypeScript

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<boolean>(false);
const pay_period = ref<PayPeriod>(default_pay_period);
const pay_period_employee_overview_list = ref<PayPeriodEmployeeOverview[]>([]);
const pay_period_employee_overview = ref<PayPeriodEmployeeOverview>(default_pay_period_employee_overview);
const pay_period_employee_details = ref<PayPeriodEmployeeDetails>(default_pay_period_employee_details);
const pay_period_report = ref();
const timesheet = ref<Timesheet>(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<boolean> => {
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<boolean> => {
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,
};
});