58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
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
|