diff --git a/src/i18n/en-ca/index.ts b/src/i18n/en-ca/index.ts
index 1b03a4a..f9d38f0 100644
--- a/src/i18n/en-ca/index.ts
+++ b/src/i18n/en-ca/index.ts
@@ -58,6 +58,21 @@ export default {
company: "company",
supervisor: "supervisor",
hired_date: "hiring date",
+ bankroll_id: "payroll ID",
+ module_access: {
+ dashboard: "Dashboard",
+ employee_list: "employee list",
+ employee_management: "employee management",
+ personal_profile: "profile",
+ timesheets: "timesheets",
+ timesheets_approval: "timesheet approval",
+ user_access: "module access",
+ presets: "access presets",
+ preset_admin: "admin",
+ preset_employee: "employee",
+ uncheck_all: "remove all",
+
+ },
},
preferences: {
tab_title: "preferences",
diff --git a/src/i18n/fr-ca/index.ts b/src/i18n/fr-ca/index.ts
index 929145d..4b25d4c 100644
--- a/src/i18n/fr-ca/index.ts
+++ b/src/i18n/fr-ca/index.ts
@@ -58,6 +58,20 @@ export default {
company: "compagnie",
supervisor: "nom du superviseur",
hired_date: "date d'embauche",
+ bankroll_id: "identifiant de paie",
+ module_access: {
+ dashboard: "accueil",
+ employee_list: "liste employés",
+ employee_management: "gestion employés",
+ personal_profile: "profil",
+ timesheets: "feuilles de temps",
+ timesheets_approval: "valider feuilles de temps",
+ user_access: "accès aux modules",
+ presets: "accès prédéfinis",
+ preset_admin: "administrateur",
+ preset_employee: "employé",
+ uncheck_all: "aucun accès",
+ },
},
preferences: {
tab_title: "préférences",
diff --git a/src/layouts/main-layout.vue b/src/layouts/main-layout.vue
index d202b83..97163be 100644
--- a/src/layouts/main-layout.vue
+++ b/src/layouts/main-layout.vue
@@ -16,20 +16,16 @@
const user_preferences = ref(ui_store.user_preferences);
onMounted(async () => {
- console.log('current preferences on load: ', ui_store.user_preferences);
if (ui_store.user_preferences.id === -1) {
- console.log('fetching preferences');
await ui_store.getUserPreferences();
}
});
watch(user_preferences, async () => {
if (ui_store.user_preferences.id !== -1) {
- console.log('triggered watcher');
await ui_store.updateUserPreferences(t);
return
}
- console.log('watcher triggered but store has no preferences')
await ui_store.getUserPreferences();
}, {deep: true});
diff --git a/src/modules/employee-list/components/employee-list-table-item.vue b/src/modules/employee-list/components/employee-list-table-item.vue
index d7472d0..ca2b4cb 100644
--- a/src/modules/employee-list/components/employee-list-table-item.vue
+++ b/src/modules/employee-list/components/employee-list-table-item.vue
@@ -49,12 +49,17 @@
class="col-grow text-center text-h6 text-weight-medium text-uppercase q-pb-none"
style="line-height: 0.8em;"
>
-
{{ row.first_name }} {{ row.last_name }}
+
+ {{ row.first_name }} {{ row.last_name }}
+
- {{ row.job_title }}
+ {{ row.job_title }}
diff --git a/src/modules/employee-list/components/employee-list-table.vue b/src/modules/employee-list/components/employee-list-table.vue
index bbfb6bb..e500814 100644
--- a/src/modules/employee-list/components/employee-list-table.vue
+++ b/src/modules/employee-list/components/employee-list-table.vue
@@ -71,6 +71,7 @@
@@ -82,6 +83,7 @@
icon="person_add"
:label="$t('shared.label.add')"
class="text-uppercase"
+ @click.stop="_evt => employee_store.openAddModifyDialog()"
/>
diff --git a/src/modules/employee-list/components/employee/add-modify-dialog-form.vue b/src/modules/employee-list/components/employee/add-modify-dialog-form.vue
new file mode 100644
index 0000000..92aec5c
--- /dev/null
+++ b/src/modules/employee-list/components/employee/add-modify-dialog-form.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+ {{ $t('profile.personal.first_name') }}
+
+
+
+
+
+
+
+ {{ $t('profile.personal.last_name') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('profile.employee.email') }}
+
+
+
+
+
+
+
+ {{ $t('profile.personal.phone_number') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('profile.employee.job_title') }}
+
+
+
+
+
+
+
+ {{ $t('profile.employee.company') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('profile.employee.supervisor') }}
+
+
+
+
+
+
+
+ {{ $t('profile.employee.bankroll_id') }}
+
+
+
+
+
+
+
+
+ {{ $t('profile.employee.module_access.user_access') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('profile.employee.module_access.' + option.value) }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/modules/employee-list/components/employee/add-modify-dialog.vue b/src/modules/employee-list/components/employee/add-modify-dialog.vue
new file mode 100644
index 0000000..29fa55c
--- /dev/null
+++ b/src/modules/employee-list/components/employee/add-modify-dialog.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ ADD EMPLOYEE
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/modules/employee-list/components/employee/employee-list-add-modify-dialog.vue b/src/modules/employee-list/components/employee/employee-list-add-modify-dialog.vue
deleted file mode 100644
index 1cf6ab7..0000000
--- a/src/modules/employee-list/components/employee/employee-list-add-modify-dialog.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
- LOL
-
-
-
-
-
\ No newline at end of file
diff --git a/src/modules/employee-list/models/employee-profile.models.ts b/src/modules/employee-list/models/employee-profile.models.ts
index 2d1ee8b..ed8f7e2 100644
--- a/src/modules/employee-list/models/employee-profile.models.ts
+++ b/src/modules/employee-list/models/employee-profile.models.ts
@@ -1,4 +1,7 @@
-import type { QTableColumn } from "quasar";
+import type { QSelectOption, QTableColumn } from "quasar";
+
+export type ModuleAccessName = 'dashboard' | 'employee_list' | 'employee_management' | 'personal_profile' | 'timesheets' | 'timesheets_approval';
+export type ModuleAccessPreset = 'admin' | 'employee' | 'none';
export class EmployeeProfile {
first_name: string;
@@ -10,9 +13,11 @@ export class EmployeeProfile {
phone_number: string;
first_work_day: string;
last_work_day: string;
+ external_payroll_id: number;
residence: string;
birth_date: string;
-
+ user_module_access: ModuleAccessName[];
+
constructor() {
this.first_name = '';
this.last_name = '';
@@ -25,6 +30,8 @@ export class EmployeeProfile {
this.last_work_day = '';
this.residence = '';
this.birth_date = '';
+ this.external_payroll_id = -1;
+ this.user_module_access = ['dashboard',];
}
}
@@ -67,6 +74,21 @@ export const employee_list_columns: QTableColumn[] = [
},
];
+export const employee_access_options: QSelectOption[] = [
+ { label: 'dashboard', value: 'dashboard' },
+ { label: 'employee_list', value: 'employee_list' },
+ { label: 'employee_management', value: 'employee_management' },
+ { label: 'personal_profile', value: 'personal_profile' },
+ { label: 'timesheets', value: 'timesheets' },
+ { label: 'timesheets_approval', value: 'timesheets_approval' },
+]
+
+export const employee_access_presets: Record = {
+ 'admin' : ['dashboard', 'employee_list', 'employee_management', 'personal_profile', 'timesheets', 'timesheets_approval'],
+ 'employee' : ['dashboard', 'timesheets', 'personal_profile', 'employee_list'],
+ 'none' : [],
+}
+
export const getCompanyName = (company_code: number) => {
switch (company_code) {
case 271583: return 'Targo';
diff --git a/src/pages/employee-list-page.vue b/src/pages/employee-list-page.vue
index bbe9828..60a6d75 100644
--- a/src/pages/employee-list-page.vue
+++ b/src/pages/employee-list-page.vue
@@ -3,13 +3,13 @@
lang="ts"
>
import EmployeeListTable from 'src/modules/employee-list/components/employee-list-table.vue';
- import EmployeeListAddModifyDialog from 'src/modules/employee-list/components/employee/employee-list-add-modify-dialog.vue';
+ import AddModifyDialog from 'src/modules/employee-list/components/employee/add-modify-dialog.vue';
import PageHeaderTemplate from 'src/modules/shared/components/page-header-template.vue';
-
+
diff --git a/src/stores/employee-store.ts b/src/stores/employee-store.ts
index f0711a0..2a79cdc 100644
--- a/src/stores/employee-store.ts
+++ b/src/stores/employee-store.ts
@@ -6,12 +6,25 @@ import { EmployeeProfile } from "src/modules/employee-list/models/employee-profi
export const useEmployeeStore = defineStore('employee', () => {
const employee = ref(new EmployeeProfile);
const employee_list = ref([]);
- const isShowingEmployeeAddModifyWindow = ref(false);
+ const is_add_modify_dialog_open = ref(false);
const is_loading = ref(false);
- const isLoadingEmployeeList = ref(false);
+
+ const openAddModifyDialog = async (employee_email?: string) =>{
+ console.log('open window triggered');
+ is_add_modify_dialog_open.value = true;
+
+ if (employee_email === undefined) {
+ employee.value = new EmployeeProfile();
+ return;
+ }
+
+ is_loading.value = true;
+ await getEmployeeDetails(employee_email);
+ is_loading.value = false;
+ }
const getEmployeeList = async () => {
- isLoadingEmployeeList.value = true;
+ is_loading.value = true;
try {
const response = await EmployeeListService.getEmployeeList();
employee_list.value = response;
@@ -19,7 +32,7 @@ export const useEmployeeStore = defineStore('employee', () => {
console.error("Ran into an error fetching employee list: ", error);
//TODO: trigger an alert window with an error message here!
}
- isLoadingEmployeeList.value = false;
+ is_loading.value = false;
};
const getEmployeeDetails = async (email?: string) => {
@@ -40,6 +53,14 @@ export const useEmployeeStore = defineStore('employee', () => {
is_loading.value = false;
};
- return { employee, employee_list, isShowingEmployeeAddModifyWindow, isLoadingEmployeeList, is_loading, getEmployeeList, getEmployeeDetails };
+ return {
+ employee,
+ employee_list,
+ is_add_modify_dialog_open,
+ is_loading,
+ getEmployeeList,
+ getEmployeeDetails,
+ openAddModifyDialog,
+ };
});