from odoo import _, api, fields, models from odoo.exceptions import UserError class AccountMove(models.Model): _inherit = 'account.move' nemhandel_message_uuid = fields.Char(string='Nemhandel message ID', copy=False) nemhandel_move_state = fields.Selection( selection=[ ('ready', 'Ready to send'), ('to_send', 'Queued'), ('processing', 'Pending Reception'), ('done', 'Done'), ('error', 'Error'), ], compute='_compute_nemhandel_move_state', store=True, string='Nemhandel status', copy=False, ) @api.depends('state') def _compute_nemhandel_move_state(self): for move in self: if all([ move.company_id.l10n_dk_nemhandel_proxy_state == 'receiver', move.commercial_partner_id.nemhandel_verification_state == 'valid', move.state == 'posted', move.is_sale_document(include_receipts=True), not move.nemhandel_move_state, ]): move.nemhandel_move_state = 'ready' elif ( move.state == 'draft' and move.is_sale_document(include_receipts=True) and move.nemhandel_move_state not in {'processing', 'done'} ): move.nemhandel_move_state = False else: move.nemhandel_move_state = move.nemhandel_move_state @api.model def _get_ubl_cii_builder_from_xml_tree(self, tree): # Extends account_edi_ubl_cii customization_id = tree.find('{*}CustomizationID') if customization_id is not None and 'OIOUBL-2' in customization_id.text: return self.env['account.edi.xml.oioubl_21'] return super()._get_ubl_cii_builder_from_xml_tree(tree) def action_cancel_nemhandel_documents(self): # if the nemhandel_move_state is processing/done # then it means it has been already sent to nemhandel proxy and we can't cancel if any(move.nemhandel_move_state in {'processing', 'done'} for move in self): raise UserError(_("Cannot cancel an entry that has already been sent to Nemhandel")) self.nemhandel_move_state = False self.sending_data = False