1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class AccountMove(models.Model):
_inherit = 'account.move'
peppol_message_uuid = fields.Char(string='PEPPOL message ID')
peppol_move_state = fields.Selection(
selection=[
('ready', 'Ready to send'),
('to_send', 'Queued'),
('skipped', 'Skipped'),
('processing', 'Pending Reception'),
('done', 'Done'),
('error', 'Error'),
],
compute='_compute_peppol_move_state', store=True,
string='PEPPOL status',
copy=False,
)
def action_cancel_peppol_documents(self):
# if the peppol_move_state is processing/done
# then it means it has been already sent to peppol proxy and we can't cancel
if any(move.peppol_move_state in {'processing', 'done'} for move in self):
raise UserError(_("Cannot cancel an entry that has already been sent to PEPPOL"))
self.peppol_move_state = False
self.sending_data = False
@api.depends('state')
def _compute_peppol_move_state(self):
can_send = self.env['account_edi_proxy_client.user']._get_can_send_domain()
for move in self:
if all([
move.company_id.account_peppol_proxy_state in can_send,
move.commercial_partner_id.peppol_verification_state == 'valid',
move.state == 'posted',
move.is_sale_document(include_receipts=True),
not move.peppol_move_state,
]):
move.peppol_move_state = 'ready'
elif (
move.state == 'draft'
and move.is_sale_document(include_receipts=True)
and move.peppol_move_state not in ('processing', 'done')
):
move.peppol_move_state = False
else:
move.peppol_move_state = move.peppol_move_state
|