diff --git a/controllers/hr_expense_kiosk_controller.py b/controllers/hr_expense_kiosk_controller.py index ca85e65..e4d4b1d 100644 --- a/controllers/hr_expense_kiosk_controller.py +++ b/controllers/hr_expense_kiosk_controller.py @@ -79,6 +79,37 @@ class HrExpenseKioskController(http.Controller): return [] return request.env['hr.expense.realization'].sudo().get_pending_realizations(employee_id) + @http.route('/hr_expense/kiosk_get_submitted/', type='json', auth='public') + def get_submitted(self, token, employee_id): + """ Returns submitted expenses for the employee. """ + if not self._check_token(token): + return [] + + expenses = request.env['hr.expense'].sudo().search([ + ('employee_id', '=', employee_id), + ('state', 'not in', ['draft', 'refused']) + ], order='date desc, id desc', limit=15) + + result = [] + state_selection = dict(request.env['hr.expense']._fields['state']._description_selection(request.env)) + # Get payment state labels from account.move if possible + payment_selection = dict(request.env['account.move']._fields['payment_state']._description_selection(request.env)) + + for exp in expenses: + payment_state = exp.account_move_id.payment_state if exp.account_move_id else 'not_paid' + result.append({ + 'id': exp.id, + 'name': exp.name, + 'sequences': exp.sequence_name or '', + 'date': exp.date.strftime('%Y-%m-%d') if exp.date else '', + 'total_amount': exp.currency_id.symbol + " " + "{:,.2f}".format(exp.total_amount), + 'state': state_selection.get(exp.state), + 'state_raw': exp.state, + 'payment_status': payment_selection.get(payment_state, _("Not Paid")), + 'payment_state_raw': payment_state, + }) + return result + @http.route('/hr_expense/kiosk_submit_realization/', type='json', auth='public') def submit_realization(self, token, employee_id, expense_id, lines=None): """ Creates a realization report from the kiosk. """ diff --git a/static/src/kiosk/kiosk_app.js b/static/src/kiosk/kiosk_app.js index 6908a6b..25daf32 100644 --- a/static/src/kiosk/kiosk_app.js +++ b/static/src/kiosk/kiosk_app.js @@ -20,6 +20,7 @@ class ExpenseKioskApp extends Component { selectedCategory: null, enteredPin: "", pendingRealizations: [], + submittedExpenses: [], selectedAction: null, selectedPaymentMode: null, selectedExpense: null, @@ -88,6 +89,7 @@ class ExpenseKioskApp extends Component { if (result.status === 'ok') { await this.loadPendingRealizations(); + await this.loadSubmittedExpenses(); this.state.screen = 'action_selection'; } else { this.notification.add(result.message, { type: 'danger' }); @@ -102,6 +104,13 @@ class ExpenseKioskApp extends Component { this.state.pendingRealizations = data; } + async loadSubmittedExpenses() { + const data = await this.rpc(`/hr_expense/kiosk_get_submitted/${this.token}`, { + employee_id: this.state.selectedEmployee.id, + }); + this.state.submittedExpenses = data; + } + // Action Selection selectAction(action) { this.state.selectedAction = action; @@ -237,6 +246,8 @@ class ExpenseKioskApp extends Component { if (result.status === 'ok') { this.state.screen = 'success'; + await this.loadPendingRealizations(); + await this.loadSubmittedExpenses(); setTimeout(() => { this.backToSelection(); }, 3000); diff --git a/static/src/kiosk/kiosk_app.xml b/static/src/kiosk/kiosk_app.xml index 94923b7..e96ca17 100644 --- a/static/src/kiosk/kiosk_app.xml +++ b/static/src/kiosk/kiosk_app.xml @@ -79,6 +79,45 @@

Submit a new reimbursement request

+ + +
+

Your Recent Submissions

+
+ + + + + + + + + + + + + + + + + + + +
Reference / DescriptionDateTotalStatusPayment
+
+
+
+ + + + + +
+
+
+ Showing your last 15 submissions. +
+