from odoo import models, fields, api class AccountMove(models.Model): _inherit = 'account.move' is_expense_payment = fields.Boolean( string="Is Expense Payment", compute="_compute_is_expense_payment", store=True, ) @api.depends('payment_id.expense_sheet_id') def _compute_is_expense_payment(self): for move in self: move.is_expense_payment = bool(move.payment_id and move.payment_id.expense_sheet_id) def _get_hr_expense_base_class(self): """ Returns the hr_expense class in the MRO to jump over it. """ mro = type(self).mro() return next((c for c in mro if c.__module__ == 'odoo.addons.hr_expense.models.account_move'), None) def write(self, vals): # Surgical Jumper to bypass hr_expense's account.move lock hr_expense_class = self._get_hr_expense_base_class() if hr_expense_class and self._context.get('skip_expense_lock'): return super(hr_expense_class, self).write(vals) return super().write(vals)