fix(schedule-preset): can now add new schedule presets, small service/store refactor
minor bug fix with schedule preview not showing up in the schedule tab when looking at the details of an employee who has a schedule preset assigned to them.
This commit is contained in:
parent
fd2146567f
commit
3579931899
|
|
@ -32,7 +32,7 @@ import { useEmployeeListApi } from '../composables/use-employee-api';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="column full-width flex-center items-start">
|
<div :key="schedule_preset_store.is_manager_open === false ? '0' : '1'" class="column full-width flex-center items-start">
|
||||||
<SchedulePresetsDialog />
|
<SchedulePresetsDialog />
|
||||||
|
|
||||||
<div class="col row justify-center full-width no-wrap">
|
<div class="col row justify-center full-width no-wrap">
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,11 @@ export const useEmployeeListApi = () => {
|
||||||
employee_store.is_loading = false;
|
employee_store.is_loading = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getEmployeeDetails = (email: string): Promise<void> => {
|
const getEmployeeDetails = async(email: string): Promise<void> => {
|
||||||
return employee_store.getEmployeeDetails(email);
|
const success = await employee_store.getEmployeeDetails(email);
|
||||||
|
if (success && employee_store.employee.preset_id !== null) {
|
||||||
|
schedule_preset_store.setCurrentSchedulePreset(employee_store.employee.preset_id ?? -1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const setSchedulePreset = (preset_id: number) => {
|
const setSchedulePreset = (preset_id: number) => {
|
||||||
|
|
@ -28,8 +31,10 @@ export const useEmployeeListApi = () => {
|
||||||
const preset = schedule_preset_store.current_schedule_preset;
|
const preset = schedule_preset_store.current_schedule_preset;
|
||||||
const preset_shifts = preset.weekdays.flatMap(weekday => weekday.shifts);
|
const preset_shifts = preset.weekdays.flatMap(weekday => weekday.shifts);
|
||||||
const backend_preset = new SchedulePreset(preset.id, preset.name, preset.is_default, preset_shifts);
|
const backend_preset = new SchedulePreset(preset.id, preset.name, preset.is_default, preset_shifts);
|
||||||
|
let success = false;
|
||||||
|
|
||||||
const success = await schedule_preset_store.updateSchedulePreset(backend_preset);
|
if (preset.id === -1) success = await schedule_preset_store.createSchedulePreset(backend_preset);
|
||||||
|
else success = await schedule_preset_store.updateSchedulePreset(backend_preset);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
schedule_preset_store.is_manager_open = false;
|
schedule_preset_store.is_manager_open = false;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { api } from 'src/boot/axios';
|
import { api } from 'src/boot/axios';
|
||||||
import { EmployeeProfile } from 'src/modules/employee-list/models/employee-profile.models';
|
import type { EmployeeProfile } from 'src/modules/employee-list/models/employee-profile.models';
|
||||||
import type { BackendResponse } from 'src/modules/shared/models/backend-response.models';
|
import type { BackendResponse } from 'src/modules/shared/models/backend-response.models';
|
||||||
|
|
||||||
export const EmployeeListService = {
|
export const EmployeeListService = {
|
||||||
|
|
@ -9,25 +9,23 @@ export const EmployeeListService = {
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getEmployeeDetails: async (): Promise<EmployeeProfile> => {
|
getEmployeeDetails: async (): Promise<BackendResponse<EmployeeProfile>> => {
|
||||||
const response = await api.get<BackendResponse<EmployeeProfile>>('employees/profile');
|
const response = await api.get('employees/profile');
|
||||||
if (response.data.data) return response.data.data;
|
return response.data;
|
||||||
return new EmployeeProfile;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getEmployeeDetailsWithEmployeeEmail: async (employee_email: string): Promise<EmployeeProfile> => {
|
getEmployeeDetailsWithEmployeeEmail: async (employee_email: string): Promise<BackendResponse<EmployeeProfile>> => {
|
||||||
const response = await api.get<BackendResponse<EmployeeProfile>>(`employees/profile?employee_email=${employee_email}`);
|
const response = await api.get(`employees/profile?employee_email=${employee_email}`);
|
||||||
if (response.data.data) return response.data.data;
|
return response.data;
|
||||||
return new EmployeeProfile;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
createNewEmployee: async (profile: Omit<EmployeeProfile, 'last_work_day' | 'birth_date' | 'external_payroll_id'>): Promise<boolean> => {
|
createNewEmployee: async (profile: Omit<EmployeeProfile, 'last_work_day' | 'birth_date' | 'external_payroll_id'>): Promise<BackendResponse<EmployeeProfile>> => {
|
||||||
const response = await api.post<BackendResponse<EmployeeProfile>>('employees/create', profile);
|
const response = await api.post('employees/create', profile);
|
||||||
return response.data.success;
|
return response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
updateEmployee: async (profile: EmployeeProfile): Promise<boolean> => {
|
updateEmployee: async (profile: EmployeeProfile): Promise<BackendResponse<EmployeeProfile>> => {
|
||||||
const response = await api.patch<BackendResponse<EmployeeProfile>>('employees/update', profile);
|
const response = await api.patch('employees/update', profile);
|
||||||
return response.data.success;
|
return response.data;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -45,39 +45,41 @@ export const useEmployeeStore = defineStore('employee', () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getEmployeeDetails = async (email?: string) => {
|
const getEmployeeDetails = async (email?: string): Promise<boolean> => {
|
||||||
is_loading.value = true;
|
|
||||||
try {
|
try {
|
||||||
if (email === undefined) {
|
if (email === undefined) {
|
||||||
const response = await EmployeeListService.getEmployeeDetails();
|
const response = await EmployeeListService.getEmployeeDetails();
|
||||||
employee.value = response;
|
if (response.success && response.data) employee.value = response.data;
|
||||||
|
return response.success;
|
||||||
} else {
|
} else {
|
||||||
const response = await EmployeeListService.getEmployeeDetailsWithEmployeeEmail(email);
|
const response = await EmployeeListService.getEmployeeDetailsWithEmployeeEmail(email);
|
||||||
employee.value = response;
|
if (response.success && response.data) employee.value = response.data;
|
||||||
|
return response.success;
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('There was an error retrieving employee info: ', error);
|
console.error('There was an error retrieving employee info: ', error);
|
||||||
//TODO: trigger an alert window with an error message here!
|
//TODO: trigger an alert window with an error message here!
|
||||||
}
|
}
|
||||||
is_loading.value = false;
|
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const createOrUpdateEmployee = async (profile: EmployeeProfile) => {
|
const createOrUpdateEmployee = async (profile: EmployeeProfile) => {
|
||||||
let success = false;
|
let response;
|
||||||
|
|
||||||
if (management_mode.value === 'add_employee') {
|
if (management_mode.value === 'add_employee') {
|
||||||
const { birth_date, external_payroll_id, last_work_day, ...create_payload} = profile;
|
const { birth_date, external_payroll_id, last_work_day, ...create_payload} = profile;
|
||||||
success = await EmployeeListService.createNewEmployee(create_payload);
|
response = await EmployeeListService.createNewEmployee(create_payload);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
success = await EmployeeListService.updateEmployee(profile);
|
response = await EmployeeListService.updateEmployee(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
closeAddModifyDialog();
|
closeAddModifyDialog();
|
||||||
|
|
||||||
if (success) { await getEmployeeList(); }
|
if (response.success) await getEmployeeList();
|
||||||
else { Notify.create({
|
else {
|
||||||
|
Notify.create({
|
||||||
message: 'failed to update or create employee',
|
message: 'failed to update or create employee',
|
||||||
color: 'negative',
|
color: 'negative',
|
||||||
})}
|
})}
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,10 @@ export const useSchedulePresetsStore = defineStore('schedule_presets_store', ()
|
||||||
is_manager_open.value = true;
|
is_manager_open.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const createSchedulePreset = async (): Promise<boolean> => {
|
const createSchedulePreset = async (preset: SchedulePreset): Promise<boolean> => {
|
||||||
try {
|
try {
|
||||||
// await SchedulePresetsService.createSchedulePresets(new_preset);
|
const response = await SchedulePresetsService.createSchedulePresets(preset);
|
||||||
return true;
|
return response.success;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('DEV ERROR || error while creating schedule preset: ', error);
|
console.error('DEV ERROR || error while creating schedule preset: ', error);
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user