37 lines
1.9 KiB
Python
37 lines
1.9 KiB
Python
from odoo import _, models, fields, api
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class AccountMoveSend(models.TransientModel):
|
|
_inherit = 'account.move.send'
|
|
|
|
l10n_ke_edi_warning_message = fields.Text(compute='_compute_l10n_ke_edi_warning_message')
|
|
|
|
@api.depends('move_ids')
|
|
def _compute_l10n_ke_edi_warning_message(self):
|
|
for wizard in self:
|
|
warning_moves = wizard.move_ids.filtered(lambda m: m.country_code == 'KE' and not m._l10n_ke_fiscal_device_details_filled())
|
|
if warning_moves:
|
|
wizard.l10n_ke_edi_warning_message = '\n'.join([
|
|
_("The following documents have no details related to the fiscal device."),
|
|
*(warning_moves.mapped('name'))
|
|
])
|
|
else:
|
|
wizard.l10n_ke_edi_warning_message = False
|
|
|
|
def _hook_invoice_document_before_pdf_report_render(self, invoice, invoice_data):
|
|
# EXTENDS account
|
|
super()._hook_invoice_document_before_pdf_report_render(invoice, invoice_data)
|
|
if invoice.country_code == 'KE' and not invoice._l10n_ke_fiscal_device_details_filled():
|
|
invoice_data['error'] = _(
|
|
"This document does not have details related to the fiscal device, a proforma invoice will be used."
|
|
)
|
|
|
|
def action_send_and_print(self, force_synchronous=False, allow_fallback_pdf=False, **kwargs):
|
|
# EXTENDS account - prevent Send & Print if KE invoices aren't validated and no fallback is allowed.
|
|
self.ensure_one()
|
|
if not allow_fallback_pdf \
|
|
and any(move.country_code == 'KE' and not move._l10n_ke_fiscal_device_details_filled() for move in self.move_ids):
|
|
raise UserError(self.l10n_ke_edi_warning_message)
|
|
return super().action_send_and_print(force_synchronous=force_synchronous, allow_fallback_pdf=allow_fallback_pdf, **kwargs)
|