160 lines
6.1 KiB
TypeScript
160 lines
6.1 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { ref } from 'vue';
|
|
import { timesheetApprovalService } from 'src/modules/timesheet-approval/services/services-timesheet-approval';
|
|
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 type { PayPeriodEmployeeDetails } from 'src/modules/timesheet-approval/types/timesheet-approval-pay-period-employee-details-interface';
|
|
|
|
const default_pay_period: PayPeriod = {
|
|
pay_period_no: -1,
|
|
period_start: '',
|
|
period_end: '',
|
|
payday: '',
|
|
pay_year: -1,
|
|
label: ''
|
|
};
|
|
|
|
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_employee_details = ref<PayPeriodEmployeeDetails | undefined>();
|
|
|
|
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;
|
|
} 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;
|
|
};
|
|
|
|
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);
|
|
pay_period_employee_details.value = MOCK_DATA_TIMESHEET_DETAILS;
|
|
// TODO: More in-depth error-handling here
|
|
}
|
|
|
|
is_loading.value = false;
|
|
}
|
|
|
|
return {
|
|
current_pay_period,
|
|
pay_period_overview_employees,
|
|
pay_period_employee_details,
|
|
is_loading,
|
|
getPayPeriodByDate,
|
|
getPayPeriodByYearAndPeriodNumber,
|
|
getTimesheetApprovalPayPeriodEmployeeOverviews,
|
|
getTimesheetsByPayPeriodAndEmail,
|
|
};
|
|
});
|
|
|
|
const MOCK_DATA_TIMESHEET_DETAILS = {
|
|
is_approved: false,
|
|
week1: {
|
|
is_approved: true,
|
|
shifts: {
|
|
sun: [],
|
|
mon: [ { is_approved: true, start: '08:00', end: '12:00' }, { is_approved: true, start: '13:00', end: '17:00' } ],
|
|
tue: [ { is_approved: true, start: '08:00', end: '11:45' }, { is_approved: true, start: '12:45', end: '17:00' } ],
|
|
wed: [ { is_approved: true, start: '08:00', end: '12:00' }, { is_approved: true, start: '13:00', end: '17:00' } ],
|
|
thu: [ { is_approved: false, start: '13:00', end: '17:00' } ],
|
|
fri: [ { is_approved: true, start: '08:00', end: '12:00' }, { is_approved: true, start: '13:00', end: '17:00' } ],
|
|
sat: []
|
|
},
|
|
expenses: {
|
|
sun: { costs: [], mileage: [] },
|
|
mon: { costs: [ { is_approved: true, amount: 156.49 } ], mileage: [] },
|
|
tue: { costs: [], mileage: [] },
|
|
wed: { costs: [], mileage: [] },
|
|
thu: { costs: [], mileage: [ { is_approved: false, amount: 16 } ] },
|
|
fri: { costs: [], mileage: [] },
|
|
sat: { costs: [], mileage: [] }
|
|
}
|
|
},
|
|
week2: {
|
|
is_approved: true,
|
|
shifts: {
|
|
sun: [],
|
|
mon: [],
|
|
tue: [],
|
|
wed: [],
|
|
thu: [],
|
|
fri: [],
|
|
sat: []
|
|
},
|
|
expenses: {
|
|
sun: { costs: [], mileage: [] },
|
|
mon: { costs: [], mileage: [] },
|
|
tue: { costs: [], mileage: [] },
|
|
wed: { costs: [], mileage: [] },
|
|
thu: { costs: [], mileage: [] },
|
|
fri: { costs: [], mileage: [] },
|
|
sat: { costs: [], mileage: [] }
|
|
}
|
|
},
|
|
} as PayPeriodEmployeeDetails;
|