Merge branch 'dev/nicolas/timesheet-gui-refactor' of git.targo.ca:Targo/targo_frontend into dev/nicolas/timesheet-gui-refactor
This commit is contained in:
commit
8e24d36b56
|
|
@ -66,6 +66,11 @@ export default {
|
||||||
dark_mode: "dark",
|
dark_mode: "dark",
|
||||||
light_mode: "light",
|
light_mode: "light",
|
||||||
},
|
},
|
||||||
|
schedule_presets: {
|
||||||
|
tab_title: "Schedule",
|
||||||
|
selected_schedule: "Selected Schedule Preset",
|
||||||
|
new_preset: "Build a new preset",
|
||||||
|
},
|
||||||
errors: {
|
errors: {
|
||||||
must_enter_birthdate: "You must enter a valid birthdate",
|
must_enter_birthdate: "You must enter a valid birthdate",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,12 @@ export default {
|
||||||
dark_mode: "sombre",
|
dark_mode: "sombre",
|
||||||
light_mode: "clair",
|
light_mode: "clair",
|
||||||
},
|
},
|
||||||
|
schedule_presets: {
|
||||||
|
tab_title: "horaire",
|
||||||
|
selected_schedule: "Horaire Sélectionné",
|
||||||
|
new_preset: "Construire un nouvel horaire",
|
||||||
|
|
||||||
|
},
|
||||||
errors: {
|
errors: {
|
||||||
must_enter_birthdate: "Vous devez entrer une date de naissance valide",
|
must_enter_birthdate: "Vous devez entrer une date de naissance valide",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
import MenuPanelPersonal from 'src/modules/profile/components/employee/menu-panel-personal.vue';
|
import MenuPanelPersonal from 'src/modules/profile/components/employee/menu-panel-personal.vue';
|
||||||
import MenuPanelEmployee from 'src/modules/profile/components/employee/menu-panel-employee.vue';
|
import MenuPanelEmployee from 'src/modules/profile/components/employee/menu-panel-employee.vue';
|
||||||
import MenuPanelPreferences from 'src/modules/profile/components/shared/menu-panel-preferences.vue';
|
import MenuPanelPreferences from 'src/modules/profile/components/shared/menu-panel-preferences.vue';
|
||||||
|
import MenuPanelSchedulePresets from 'src/modules/profile/components/shared/menu-panel-schedule-presets.vue';
|
||||||
import MenuTemplate from 'src/modules/profile/components/shared/menu-template.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 { default_employee_profile, type EmployeeProfile } from 'src/modules/employee-list/models/employee-profile.models';
|
||||||
import { useAuthStore } from 'src/stores/auth-store';
|
import { useAuthStore } from 'src/stores/auth-store';
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
PERSONAL_INFO: 'personal_info',
|
PERSONAL_INFO: 'personal_info',
|
||||||
EMPLOYEE_INFO: 'employee_info',
|
EMPLOYEE_INFO: 'employee_info',
|
||||||
PREFERENCES: 'references',
|
PREFERENCES: 'references',
|
||||||
|
SCHEDULE_PRESETS: 'schedule_presets',
|
||||||
};
|
};
|
||||||
|
|
||||||
const employee_profile = defineModel<EmployeeProfile>({ default: default_employee_profile });
|
const employee_profile = defineModel<EmployeeProfile>({ default: default_employee_profile });
|
||||||
|
|
@ -47,6 +49,11 @@
|
||||||
icon="display_settings"
|
icon="display_settings"
|
||||||
:label="$q.screen.lt.md ? '' : $t('profile.preferences.tab_title')"
|
: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>
|
||||||
|
|
||||||
<template #panels>
|
<template #panels>
|
||||||
|
|
@ -70,6 +77,12 @@
|
||||||
>
|
>
|
||||||
<MenuPanelPreferences />
|
<MenuPanelPreferences />
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
|
<q-tab-panel
|
||||||
|
:name="PanelNames.SCHEDULE_PRESETS"
|
||||||
|
class="q-pa-none"
|
||||||
|
>
|
||||||
|
<MenuPanelSchedulePresets />
|
||||||
|
</q-tab-panel>
|
||||||
</template>
|
</template>
|
||||||
</MenuTemplate>
|
</MenuTemplate>
|
||||||
</q-card>
|
</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