diff --git a/models/pos_session.py b/models/pos_session.py index 7cab0cf..f35a562 100644 --- a/models/pos_session.py +++ b/models/pos_session.py @@ -6,6 +6,33 @@ from odoo import models, api class PosSession(models.Model): _inherit = 'pos.session' + def _get_last_active_cashier_name(self): + self.ensure_one() + order_domain = [('session_id', '=', self.id)] + if 'payer_id' in self.env['pos.order']._fields: + last_order = self.env['pos.order'].search( + order_domain + [('payer_id', '!=', False)], + order='id desc', + limit=1 + ) + if last_order: + return last_order.payer_id.name + + last_order = self.env['pos.order'].search( + order_domain + [('employee_id', '!=', False)], + order='id desc', + limit=1 + ) + if last_order: + return last_order.employee_id.name + + return self.employee_id.name or self.user_id.name or '' + + def get_closing_control_data(self): + data = super().get_closing_control_data() + data['last_cashier_name'] = self._get_last_active_cashier_name() + return data + def action_reprint_closing_summary(self): """Open the closing summary report for this session (backend reprint).""" self.ensure_one() @@ -52,7 +79,7 @@ class PosSession(models.Model): grand_total = sum(m['amount'] for m in sorted_methods) - cashier_name = session.user_id.name or '' + cashier_name = session._get_last_active_cashier_name() closing_time = '' if session.stop_at: tz = self.env.user.tz or 'UTC' @@ -118,7 +145,7 @@ class PosSession(models.Model): key=lambda m: (0 if m['is_cash'] else 1, m['name']) ) - cashier_name = session.user_id.name or '' + cashier_name = session._get_last_active_cashier_name() closing_time = '' if session.stop_at: tz = self.env.user.tz or 'UTC' diff --git a/static/src/app/closing_receipt_patch.js b/static/src/app/closing_receipt_patch.js index 7f2d189..80a151f 100644 --- a/static/src/app/closing_receipt_patch.js +++ b/static/src/app/closing_receipt_patch.js @@ -307,12 +307,14 @@ patch(ClosePosPopup.prototype, { const pos = this.pos; const formatCurrency = this.env.utils.formatCurrency; - let cashierName = ""; - try { - const cashier = pos.getCashier(); - cashierName = cashier?.name || cashier?.display_name || ""; - } catch (_) { - cashierName = pos.user?.name || ""; + let cashierName = this.props.last_cashier_name || ""; + if (!cashierName) { + try { + const cashier = pos.getCashier(); + cashierName = cashier?.name || cashier?.display_name || ""; + } catch (_) { + cashierName = pos.user?.name || ""; + } } const now = new Date();