From 6ec05a00b8dd786db25f8be2b11a177ab6471496 Mon Sep 17 00:00:00 2001 From: Nicolas Drolet Date: Fri, 9 Jan 2026 11:40:21 -0500 Subject: [PATCH] feat(employees-list): add paid time off fields to employee details, DRY details dialog code --- src/i18n/en-ca/index.ts | 5 + src/i18n/fr-ca/index.ts | 5 + .../add-modify-dialog-form-input.vue | 56 ++++ .../add-modify-dialog-form-select.vue | 37 +++ .../components/add-modify-dialog-form.vue | 289 +++++------------- .../models/employee-profile.models.ts | 18 +- 6 files changed, 197 insertions(+), 213 deletions(-) create mode 100644 src/modules/employee-list/components/add-modify-dialog-form-input.vue create mode 100644 src/modules/employee-list/components/add-modify-dialog-form-select.vue diff --git a/src/i18n/en-ca/index.ts b/src/i18n/en-ca/index.ts index 85bf7a6..4a15e21 100644 --- a/src/i18n/en-ca/index.ts +++ b/src/i18n/en-ca/index.ts @@ -70,6 +70,7 @@ export default { supervisor: "Supervisor", company: "Company", is_supervisor: "is a supervisor", + expected_daily_hours: "Expected Daily Hours", active: "active", inactive: "inactive", }, @@ -81,7 +82,11 @@ export default { access_label: "access", details_label: "details", schedule_label: "schedule", + can_be_entered_later: "OPTIONAL: can be entered later", enter_delete_input: "type 'DELETE' to remove", + banked_hours: "available banked hours", + sick_hours: "available PTO hours", + vacation_hours: "available vacation hours", schedule_presets: { preset_list_placeholder: "Select a schedule", preset_name_placeholder: "schedule preset name", diff --git a/src/i18n/fr-ca/index.ts b/src/i18n/fr-ca/index.ts index ea06f72..889de99 100644 --- a/src/i18n/fr-ca/index.ts +++ b/src/i18n/fr-ca/index.ts @@ -70,6 +70,7 @@ export default { supervisor: "superviseur", company: "Compagnie", is_supervisor: "est un superviseur", + expected_daily_hours: "Heures quotidiennes attendues", active: "actif", inactive: "inactif", }, @@ -81,7 +82,11 @@ export default { access_label: "accès", details_label: "détails", schedule_label: "horaire", + can_be_entered_later: "FACULTATIF: peut être entré plus tard", enter_delete_input: "tappez 'SUPPRIMER' pour confirmer", + banked_hours: "heures en banque disponibles", + sick_hours: "heures d'absence payées disponibles", + vacation_hours: "heures de vacances disponibles", schedule_presets: { preset_list_placeholder: "Sélectionner un horaire", preset_name_placeholder: "nom de l'horaire", diff --git a/src/modules/employee-list/components/add-modify-dialog-form-input.vue b/src/modules/employee-list/components/add-modify-dialog-form-input.vue new file mode 100644 index 0000000..6c77b95 --- /dev/null +++ b/src/modules/employee-list/components/add-modify-dialog-form-input.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/src/modules/employee-list/components/add-modify-dialog-form-select.vue b/src/modules/employee-list/components/add-modify-dialog-form-select.vue new file mode 100644 index 0000000..d9357c1 --- /dev/null +++ b/src/modules/employee-list/components/add-modify-dialog-form-select.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/src/modules/employee-list/components/add-modify-dialog-form.vue b/src/modules/employee-list/components/add-modify-dialog-form.vue index d1db2c4..e8bc481 100644 --- a/src/modules/employee-list/components/add-modify-dialog-form.vue +++ b/src/modules/employee-list/components/add-modify-dialog-form.vue @@ -2,6 +2,9 @@ setup lang="ts" > + import AddModifyDialogFormInput from 'src/modules/employee-list/components/add-modify-dialog-form-input.vue'; + import AddModifyDialogFormSelect from 'src/modules/employee-list/components/add-modify-dialog-form-select.vue'; + import { ref, computed } from 'vue'; import { useEmployeeStore } from 'src/stores/employee-store'; @@ -20,7 +23,7 @@ return supervisors.map(supervisor => supervisor.first_name + ' ' + supervisor.last_name); }) - const setLastWorkDay = (date: string | number | null) => { + const setLastWorkDay = (date: string | number | null | undefined) => { if (typeof date === 'string' && date.length > 0) { employee_store.employee.last_work_day = date; } @@ -54,260 +57,124 @@ class="q-ma-xs" :class="$q.screen.lt.sm ? 'column' : 'row'" > - - - + :label="$t('profile.personal.first_name')" + /> - - - + :label="$t('profile.personal.last_name')" + />
- - - + :label="$t('profile.employee.email')" + /> - - - + :label="$t('profile.personal.phone_number')" + />
- - - + :label="$t('profile.employee.job_title')" + /> - - - + :label="$t('profile.employee.company')" + />
- - - + :label="$t('profile.employee.supervisor')" + /> - - - + :label="$t('profile.employee.bankroll_id')" + :placeholder="$t('employee_management.can_be_entered_later')" + /> +
+ +
+ + + + +
+
+ +
+ + +
- - + /> - - - - - - - - + />
diff --git a/src/modules/employee-list/models/employee-profile.models.ts b/src/modules/employee-list/models/employee-profile.models.ts index 6a2336b..ec414ff 100644 --- a/src/modules/employee-list/models/employee-profile.models.ts +++ b/src/modules/employee-list/models/employee-profile.models.ts @@ -4,6 +4,13 @@ import type { UserModuleAccess } from "src/modules/shared/models/user.models"; export type ModuleAccessPreset = 'admin' | 'supervisor' | 'employee' | 'none'; export type CompanyNames = 'Targo' | 'Solucom'; +export interface PaidTimeOff { + sick_hours: number; + vacation_hours: number; + banked_hours: number; + last_updated: string; +} + export class EmployeeProfile { first_name: string; last_name: string; @@ -14,7 +21,9 @@ export class EmployeeProfile { phone_number: string; first_work_day: string; last_work_day?: string | null; - external_payroll_id: number; + external_payroll_id?: number; + daily_expected_hours?: number; + paid_time_off?: PaidTimeOff; residence: string; birth_date: string; is_supervisor: boolean; @@ -34,7 +43,6 @@ export class EmployeeProfile { this.residence = ''; this.birth_date = ''; this.is_supervisor = false; - this.external_payroll_id = 999; this.user_module_access = ['dashboard',]; } } @@ -92,6 +100,12 @@ export const employee_list_columns: QTableColumn[] = [ label: 'employee_list.table.role', field: 'job_title', align: 'left', + }, + { + name: 'expected_daily_hours', + label: 'employee_list.table.expected_daily_hours', + field: 'daily_expected_hours', + align: 'left', }, { name: 'last_work_day',