feat(schedule-presets): implement store and service for schedule-presets. added schedule panel to profile menu
This commit is contained in:
parent
f0ef88a16c
commit
13b3cf9399
|
|
@ -66,6 +66,11 @@ export default {
|
|||
dark_mode: "dark",
|
||||
light_mode: "light",
|
||||
},
|
||||
schedule_presets: {
|
||||
tab_title: "Schedule",
|
||||
selected_schedule: "Selected Schedule Preset",
|
||||
new_preset: "Build a new preset",
|
||||
},
|
||||
errors: {
|
||||
must_enter_birthdate: "You must enter a valid birthdate",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,12 @@ export default {
|
|||
dark_mode: "sombre",
|
||||
light_mode: "clair",
|
||||
},
|
||||
schedule_presets: {
|
||||
tab_title: "horaire",
|
||||
selected_schedule: "Horaire Sélectionné",
|
||||
new_preset: "Construire un nouvel horaire",
|
||||
|
||||
},
|
||||
errors: {
|
||||
must_enter_birthdate: "Vous devez entrer une date de naissance valide",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,11 +7,13 @@
|
|||
import MenuPanelPreferences from 'src/modules/profile/components/shared/menu-panel-preferences.vue';
|
||||
import MenuTemplate from 'src/modules/profile/components/shared/menu-template.vue';
|
||||
import { default_employee_profile, type EmployeeProfile } from 'src/modules/employee-list/models/employee-profile.models';
|
||||
import MenuPanelSchedulePresets from 'src/modules/profile/components/shared/menu-panel-schedule-presets.vue';
|
||||
|
||||
const PanelNames = {
|
||||
PERSONAL_INFO: 'personal_info',
|
||||
EMPLOYEE_INFO: 'employee_info',
|
||||
PREFERENCES: 'references',
|
||||
SCHEDULE_PRESETS: 'schedule_presets',
|
||||
};
|
||||
|
||||
const employee_profile = defineModel<EmployeeProfile>({ default: default_employee_profile });
|
||||
|
|
@ -44,6 +46,11 @@
|
|||
icon="display_settings"
|
||||
:label="$q.screen.lt.md ? '' : $t('profile.preferences.tab_title')"
|
||||
/>
|
||||
<q-tab
|
||||
:name="PanelNames.SCHEDULE_PRESETS"
|
||||
icon="list_alt"
|
||||
:label="$q.screen.lt.md ? '' : $t('profile.schedule_presets.tab_title')"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<template #panels>
|
||||
|
|
@ -67,6 +74,12 @@
|
|||
>
|
||||
<MenuPanelPreferences />
|
||||
</q-tab-panel>
|
||||
<q-tab-panel
|
||||
:name="PanelNames.SCHEDULE_PRESETS"
|
||||
class="q-pa-none"
|
||||
>
|
||||
<MenuPanelSchedulePresets/>
|
||||
</q-tab-panel>
|
||||
</template>
|
||||
</MenuTemplate>
|
||||
</q-card>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
<script setup lang="ts">
|
||||
|
||||
const model = defineModel<string>();
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<q-form class="q-pa-md column fit">
|
||||
<div
|
||||
class="col-auto text-uppercase rounded-5"
|
||||
style="line-height: 1em;"
|
||||
>{{ $t('profile.schedule_presets.selected_schedule') }}</div>
|
||||
<!-- where the selected preset schedule will be displayed-->
|
||||
<q-card
|
||||
flat
|
||||
class="col-auto column justify-center items-center content-center q-mb-lg q-pa-md"
|
||||
style="border: solid #AAA 1px;"
|
||||
>
|
||||
<!-- will display the list of schedules by name -->
|
||||
<q-select v-model="model" />
|
||||
<!-- will display a list with details about the selected schedule -->
|
||||
<q-card-section>
|
||||
<q-list>
|
||||
|
||||
</q-list>
|
||||
|
||||
</q-card-section>
|
||||
</q-card>
|
||||
|
||||
<div
|
||||
class="col-auto text-uppercase rounded-5"
|
||||
style="line-height: 1em;"
|
||||
>{{ $t('profile.schedule_presets.new_preset') }}</div>
|
||||
<!-- where the user will be able to create a new preset schedule -->
|
||||
<q-card
|
||||
flat
|
||||
class="col-auto column justify-center items-center content-center q-mb-lg q-pa-md"
|
||||
style="border: solid #AAA 1px;"
|
||||
>
|
||||
<q-form>
|
||||
|
||||
</q-form>
|
||||
</q-card>
|
||||
</q-form>
|
||||
</template>
|
||||
27
src/modules/profile/models/schedule-presets.models.ts
Normal file
27
src/modules/profile/models/schedule-presets.models.ts
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
export interface SchedulePreset {
|
||||
name: string;
|
||||
is_default: boolean;
|
||||
presets_shifts: ShiftPreset[];
|
||||
}
|
||||
|
||||
class ShiftPreset {
|
||||
week_day: Weekday;
|
||||
preset_id: number;
|
||||
sort_order: number;
|
||||
type: string;
|
||||
start_time: string;
|
||||
end_time: string;
|
||||
is_remote: boolean;
|
||||
|
||||
constructor() {
|
||||
this.week_day = '';
|
||||
this.preset_id = -1;
|
||||
this.sort_order = -1;
|
||||
this.type = '';
|
||||
this.start_time = '';
|
||||
this.end_time = '';
|
||||
this.is_remote = false;
|
||||
}
|
||||
}
|
||||
|
||||
export type Weekday = 'SUN' | 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | '';
|
||||
29
src/modules/profile/services/schedule-presets-service.ts
Normal file
29
src/modules/profile/services/schedule-presets-service.ts
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import { api } from "src/boot/axios";
|
||||
import { SchedulePreset } from "src/modules/profile/models/schedule-presets.models";
|
||||
|
||||
export const SchedulePresetsService = {
|
||||
createSchedulePresets: async (new_schedule: SchedulePreset) => {
|
||||
const response = await api.post(`/schedule-presets/create/`, new_schedule);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
updateSchedulePresets: async (preset_id: number, dto: Partial<SchedulePreset>) => {
|
||||
const response = await api.patch(`/schedule-presets/update/${preset_id}`, dto);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
deleteSchedulePresets: async (preset_id: number) => {
|
||||
const response = await api.delete(`/schedule-presets/delete/${preset_id}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
findListOfSchedulePresets: async () => {
|
||||
const response = await api.get(`/schedule-presets/find-list`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
applyPresets: async (preset_name: string, start_date: string) => {
|
||||
const response = await api.post(`/schedule-presets/apply-presets/`, { preset: preset_name, start: start_date });
|
||||
return response.data;
|
||||
},
|
||||
};
|
||||
66
src/stores/schedule-presets.store.ts
Normal file
66
src/stores/schedule-presets.store.ts
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
import { defineStore } from "pinia";
|
||||
import { SchedulePreset } from "src/modules/profile/models/schedule-presets.models";
|
||||
import { SchedulePresetsService } from "src/modules/profile/services/schedule-presets-service";
|
||||
import { ref } from "vue";
|
||||
|
||||
|
||||
export const useSchedulePresetsStore = defineStore('schedule_presets_store', () => {
|
||||
const schedule_presets = ref<SchedulePreset>();
|
||||
|
||||
const createSchedulePreset = async (): Promise<boolean> => {
|
||||
try {
|
||||
// const new_preset: SchedulePreset = ??
|
||||
// await SchedulePresetsService.createSchedulePresets(new_preset);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DEV ERROR || error while creating schedule preset: ', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const updateSchedulePreset = async (): Promise<boolean> => {
|
||||
try {
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DEV ERROR || error while updating schedule preset: ', error);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const deleteSchedulePreset = async (preset_id: number): Promise<boolean> => {
|
||||
try {
|
||||
await SchedulePresetsService.deleteSchedulePresets(preset_id);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DEV ERROR || error while deleting schedule preset: ', error);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const findSchedulePresetList = async (): Promise<boolean> => {
|
||||
try {
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DEV ERROR || error while searching for schedule presets: ', error);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const applySchedulePreset = async (): Promise<boolean> => {
|
||||
try {
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DEV ERROR || error while building schedule: ', error);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
createSchedulePreset,
|
||||
updateSchedulePreset,
|
||||
deleteSchedulePreset,
|
||||
findSchedulePresetList,
|
||||
applySchedulePreset,
|
||||
}
|
||||
})
|
||||
Loading…
Reference in New Issue
Block a user