From 0115957631a88dffd0de70c046b45e8ddae873bc Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Wed, 17 Jun 2026 17:42:26 +0700 Subject: [PATCH] feat: automate payer_id assignment during order processing and payment validation --- models/pos_order.py | 15 +++++++++++++++ static/src/app/utils/order_payment_validation.js | 3 +++ 2 files changed, 18 insertions(+) diff --git a/models/pos_order.py b/models/pos_order.py index 14b07d7..90ecb7f 100644 --- a/models/pos_order.py +++ b/models/pos_order.py @@ -15,3 +15,18 @@ class PosOrder(models.Model): if order.state == 'cancel': raise UserError(_("You cannot refund a cancelled order.")) return super()._refund() + + @api.model + def _process_order(self, order, existing_order): + res = super()._process_order(order, existing_order) + pos_order = self.browse(res) + if pos_order.state in ['paid', 'done', 'invoiced'] and not pos_order.payer_id: + if pos_order.employee_id: + pos_order.write({'payer_id': pos_order.employee_id.id}) + elif pos_order.session_id.user_id.employee_id: + pos_order.write({'payer_id': pos_order.session_id.user_id.employee_id.id}) + else: + employee = self.env['hr.employee'].sudo().search([('user_id', '=', pos_order.user_id.id)], limit=1) + if employee: + pos_order.write({'payer_id': employee.id}) + return res diff --git a/static/src/app/utils/order_payment_validation.js b/static/src/app/utils/order_payment_validation.js index aef3a44..15afd5e 100644 --- a/static/src/app/utils/order_payment_validation.js +++ b/static/src/app/utils/order_payment_validation.js @@ -3,6 +3,9 @@ import { patch } from "@web/core/utils/patch"; patch(OrderPaymentValidation.prototype, { async validateOrder(isForceValidate) { + if (this.order) { + this.order.update({ payer_id: this.pos.getCashier() }); + } const originalEmployeeId = this.order?.original_employee_id || this.order?.employee_id; const result = await super.validateOrder(...arguments);