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:
Nic D. 2025-12-11 10:27:35 -05:00
parent fd2146567f
commit 3579931899
5 changed files with 38 additions and 33 deletions

View File

@ -32,7 +32,7 @@ import { useEmployeeListApi } from '../composables/use-employee-api';
</script>
<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 />
<div class="col row justify-center full-width no-wrap">

View File

@ -15,8 +15,11 @@ export const useEmployeeListApi = () => {
employee_store.is_loading = false;
};
const getEmployeeDetails = (email: string): Promise<void> => {
return employee_store.getEmployeeDetails(email);
const getEmployeeDetails = async(email: string): Promise<void> => {
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) => {
@ -28,8 +31,10 @@ export const useEmployeeListApi = () => {
const preset = schedule_preset_store.current_schedule_preset;
const preset_shifts = preset.weekdays.flatMap(weekday => weekday.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) {
schedule_preset_store.is_manager_open = false;

View File

@ -1,5 +1,5 @@
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';
export const EmployeeListService = {
@ -9,25 +9,23 @@ export const EmployeeListService = {
},
getEmployeeDetails: async (): Promise<EmployeeProfile> => {
const response = await api.get<BackendResponse<EmployeeProfile>>('employees/profile');
if (response.data.data) return response.data.data;
return new EmployeeProfile;
getEmployeeDetails: async (): Promise<BackendResponse<EmployeeProfile>> => {
const response = await api.get('employees/profile');
return response.data;
},
getEmployeeDetailsWithEmployeeEmail: async (employee_email: string): Promise<EmployeeProfile> => {
const response = await api.get<BackendResponse<EmployeeProfile>>(`employees/profile?employee_email=${employee_email}`);
if (response.data.data) return response.data.data;
return new EmployeeProfile;
getEmployeeDetailsWithEmployeeEmail: async (employee_email: string): Promise<BackendResponse<EmployeeProfile>> => {
const response = await api.get(`employees/profile?employee_email=${employee_email}`);
return response.data;
},
createNewEmployee: async (profile: Omit<EmployeeProfile, 'last_work_day' | 'birth_date' | 'external_payroll_id'>): Promise<boolean> => {
const response = await api.post<BackendResponse<EmployeeProfile>>('employees/create', profile);
return response.data.success;
createNewEmployee: async (profile: Omit<EmployeeProfile, 'last_work_day' | 'birth_date' | 'external_payroll_id'>): Promise<BackendResponse<EmployeeProfile>> => {
const response = await api.post('employees/create', profile);
return response.data;
},
updateEmployee: async (profile: EmployeeProfile): Promise<boolean> => {
const response = await api.patch<BackendResponse<EmployeeProfile>>('employees/update', profile);
return response.data.success;
updateEmployee: async (profile: EmployeeProfile): Promise<BackendResponse<EmployeeProfile>> => {
const response = await api.patch('employees/update', profile);
return response.data;
},
};

View File

@ -45,39 +45,41 @@ export const useEmployeeStore = defineStore('employee', () => {
}
};
const getEmployeeDetails = async (email?: string) => {
is_loading.value = true;
const getEmployeeDetails = async (email?: string): Promise<boolean> => {
try {
if (email === undefined) {
const response = await EmployeeListService.getEmployeeDetails();
employee.value = response;
if (response.success && response.data) employee.value = response.data;
return response.success;
} else {
const response = await EmployeeListService.getEmployeeDetailsWithEmployeeEmail(email);
employee.value = response;
if (response.success && response.data) employee.value = response.data;
return response.success;
}
} catch (error) {
console.error('There was an error retrieving employee info: ', error);
//TODO: trigger an alert window with an error message here!
}
is_loading.value = false;
return false;
};
const createOrUpdateEmployee = async (profile: EmployeeProfile) => {
let success = false;
let response;
if (management_mode.value === 'add_employee') {
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 {
success = await EmployeeListService.updateEmployee(profile);
response = await EmployeeListService.updateEmployee(profile);
}
closeAddModifyDialog();
if (success) { await getEmployeeList(); }
else { Notify.create({
if (response.success) await getEmployeeList();
else {
Notify.create({
message: 'failed to update or create employee',
color: 'negative',
})}

View File

@ -28,10 +28,10 @@ export const useSchedulePresetsStore = defineStore('schedule_presets_store', ()
is_manager_open.value = true;
};
const createSchedulePreset = async (): Promise<boolean> => {
const createSchedulePreset = async (preset: SchedulePreset): Promise<boolean> => {
try {
// await SchedulePresetsService.createSchedulePresets(new_preset);
return true;
const response = await SchedulePresetsService.createSchedulePresets(preset);
return response.success;
} catch (error) {
console.error('DEV ERROR || error while creating schedule preset: ', error);
return false;