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

181 lines
7.1 KiB
TypeScript

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<boolean>(false);
const current_pay_period = ref<PayPeriod>(default_pay_period);
const pay_period_overview_employees = ref<PayPeriodOverviewEmployee[]>([]);
const pay_period_overview_employee_approval_statuses = ref<{key: string, value: boolean}[] | undefined>();
const pay_period_employee_details = ref<PayPeriodEmployeeDetails>(default_pay_period_employee_details);
const pay_period_report = ref();
//employee timesheet
const current_timesheet = ref<Timesheet>(default_timesheet);
const getPayPeriodByDate = async (date_string: string): Promise<boolean> => {
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<boolean> => {
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,
};
});