from odoo import models, fields, api, _ from odoo.exceptions import UserError class PosOrder(models.Model): _inherit = 'pos.order' payer_id = fields.Many2one('hr.employee', string='Cashier', help='Employee who processed the payment') # Existing Odoo/POS fields renamed for clarity user_id = fields.Many2one('res.users', string='Session User', help='Odoo user who opened the session') employee_id = fields.Many2one('hr.employee', string='Order Taker', help='Employee who uses the cash register') def _refund(self): for order in self: 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