Odoo18-Base/addons/account_peppol/models/account_move.py
2025-01-06 10:57:38 +07:00

65 lines
2.6 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.addons.account.models.company import PEPPOL_DEFAULT_COUNTRIES
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
def _notify_by_email_prepare_rendering_context(self, message, **kwargs):
render_context = super()._notify_by_email_prepare_rendering_context(message, **kwargs)
invoice = render_context['record']
invoice_country = invoice.commercial_partner_id.country_code
if invoice_country in PEPPOL_DEFAULT_COUNTRIES:
render_context['peppol_info'] = {
'peppol_country': invoice_country,
'is_peppol_sent': invoice.peppol_move_state in ('processing', 'done'),
}
return render_context