diff --git a/src/modules/timesheet-approval/components/details-dialog.vue b/src/modules/timesheet-approval/components/details-dialog.vue index c3b8a0e..5cbc813 100644 --- a/src/modules/timesheet-approval/components/details-dialog.vue +++ b/src/modules/timesheet-approval/components/details-dialog.vue @@ -53,7 +53,11 @@
- +
diff --git a/src/modules/timesheets/components/expense-dialog-form.vue b/src/modules/timesheets/components/expense-dialog-form.vue index d503a07..9a7272b 100644 --- a/src/modules/timesheets/components/expense-dialog-form.vue +++ b/src/modules/timesheets/components/expense-dialog-form.vue @@ -4,7 +4,7 @@ > import { date } from 'quasar'; import { useI18n } from 'vue-i18n'; - import { computed, onMounted, ref } from 'vue'; + import { computed, inject, onMounted, ref } from 'vue'; import { useUiStore } from 'src/stores/ui-store'; import { useExpensesStore } from 'src/stores/expense-store'; import { useTimesheetStore } from 'src/stores/timesheet-store'; @@ -12,11 +12,16 @@ import { getExpenseIcon, useExpenseRules } from 'src/modules/timesheets/utils/expense.util'; import { Expense, type ExpenseType, TYPES_WITH_AMOUNT_ONLY } from 'src/modules/timesheets/models/expense.models'; + // ================= state ====================== + interface ExpenseOption { label: string; value: ExpenseType; icon: string; } + const expense = defineModel({ default: new Expense(new Date().toISOString().slice(0, 10)) }) + + const COMMENT_MAX_LENGTH = 280; const { t } = useI18n(); const ui_store = useUiStore(); @@ -24,16 +29,9 @@ const expenses_store = useExpensesStore(); const expenses_api = useExpensesApi(); const files = defineModel('files'); - const is_navigator_open = ref(false); - - const COMMENT_MAX_LENGTH = 280; const rules = useExpenseRules(t); - const period_start_date = computed(() => timesheet_store.pay_period?.period_start.replaceAll('-', '/') ?? ''); - const period_end_date = computed(() => timesheet_store.pay_period?.period_end.replaceAll('-', '/') ?? ''); - - const expense = defineModel({ default: new Expense(new Date().toISOString().slice(0, 10)) }) const expense_options: ExpenseOption[] = [ { label: t('timesheet.expense.types.PER_DIEM'), value: 'PER_DIEM', icon: getExpenseIcon('PER_DIEM') }, @@ -41,8 +39,15 @@ { label: t('timesheet.expense.types.MILEAGE'), value: 'MILEAGE', icon: getExpenseIcon('MILEAGE') }, { label: t('timesheet.expense.types.ON_CALL'), value: 'ON_CALL', icon: getExpenseIcon('ON_CALL') }, ] - const expense_selected = ref(); + const employeeEmail = inject('employeeEmail'); + + // ================== computed =================== + + const period_start_date = computed(() => timesheet_store.pay_period?.period_start.replaceAll('-', '/') ?? ''); + const period_end_date = computed(() => timesheet_store.pay_period?.period_end.replaceAll('-', '/') ?? ''); + + // ==================== method ======================= const openDatePicker = () => { is_navigator_open.value = true; @@ -57,11 +62,8 @@ } const requestExpenseCreationOrUpdate = async () => { - if (expenses_store.mode === 'update') - await expenses_api.upsertExpense(expenses_store.current_expense, timesheet_store.current_pay_period_overview?.email); - else - await expenses_api.upsertExpense(expenses_store.current_expense); - + await expenses_api.upsertExpense(expenses_store.current_expense, employeeEmail); + expenses_store.is_showing_create_form = true; expenses_store.mode = 'create'; expenses_store.current_expense = new Expense(date.formatDate(new Date(), 'YYYY-MM-DD')); diff --git a/src/modules/timesheets/components/expense-dialog-list.vue b/src/modules/timesheets/components/expense-dialog-list.vue index bc09ce0..57715e2 100644 --- a/src/modules/timesheets/components/expense-dialog-list.vue +++ b/src/modules/timesheets/components/expense-dialog-list.vue @@ -2,23 +2,31 @@ setup lang="ts" > - import { computed } from 'vue'; + import { computed, inject } from 'vue'; import { useTimesheetStore } from 'src/stores/timesheet-store'; import ExpenseDialogListItem from 'src/modules/timesheets/components/expense-dialog-list-item.vue'; import ExpenseDialogListItemMobile from 'src/modules/timesheets/components/mobile/expense-dialog-list-item-mobile.vue'; + // ================== state ======================= + const timesheet_store = useTimesheetStore(); const { mode = 'normal' } = defineProps<{ mode?: 'approval' | 'normal'; }>(); + // ========================== computed ========================== + const expenses_list = computed(() => { if (timesheet_store.timesheets !== undefined) { return timesheet_store.timesheets.flatMap(week => week.days).flatMap(day => day.expenses); } return []; }) + + // ==================== methods ======================== + + inject( 'employeeEmail', mode === 'approval' ? timesheet_store.current_pay_period_overview?.email : undefined); -
- + !! + + - + @click="toggleIsShowingDeleteConfirm(true)" + />
+