diff --git a/addons/l10n_es_edi_facturae/models/account_move.py b/addons/l10n_es_edi_facturae/models/account_move.py
index 7ca05ad8f57..9e7f1af87c3 100644
--- a/addons/l10n_es_edi_facturae/models/account_move.py
+++ b/addons/l10n_es_edi_facturae/models/account_move.py
@@ -359,8 +359,9 @@ class AccountMove(models.Model):
xml_content = cleanup_xml_node(self.env['ir.qweb']._render('l10n_es_edi_facturae.account_invoice_facturae_export', template_values))
certificate = self.env['l10n_es_edi_facturae.certificate'].search([("company_id", '=', company.id)], limit=1)
+ errors = []
try:
xml_content = certificate._sign_xml(xml_content, signature_values)
except ValueError:
- raise UserError(_('No valid certificate found for this company, Facturae EDI file will not be signed.\n'))
- return xml_content
+ errors.append(_('No valid certificate found for this company, Facturae EDI file will not be signed.\n'))
+ return xml_content, errors
diff --git a/addons/l10n_es_edi_facturae/models/account_move_send.py b/addons/l10n_es_edi_facturae/models/account_move_send.py
index 1e27f322160..8881eaf214f 100644
--- a/addons/l10n_es_edi_facturae/models/account_move_send.py
+++ b/addons/l10n_es_edi_facturae/models/account_move_send.py
@@ -57,23 +57,23 @@ class AccountMoveSend(models.Model):
super()._hook_invoice_document_before_pdf_report_render(invoice, invoice_data)
if self.l10n_es_edi_facturae_checkbox_xml and invoice._l10n_es_edi_facturae_get_default_enable():
- try:
- xml_content = invoice._l10n_es_edi_facturae_render_facturae()
- except Exception as error:
- invoice_data['error'] = "".join((
+ xml_content, errors = invoice._l10n_es_edi_facturae_render_facturae()
+ if errors:
+ invoice_data['error'] = "".join([
_("Errors occured while creating the EDI document (format: %s):", "Facturae"),
"\n",
- str(error),
- ))
-
- invoice_data['l10n_es_edi_facturae_attachment_values'] = {
- 'name': invoice._l10n_es_edi_facturae_get_filename(),
- 'raw': xml_content,
- 'mimetype': 'application/xml',
- 'res_model': invoice._name,
- 'res_id': invoice.id,
- 'res_field': 'l10n_es_edi_facturae_xml_file', # Binary field
- }
+ "
" + "".join(errors) + "" if self.mode == 'invoice_multi' \
+ else "\n".join(errors)
+ ])
+ else:
+ invoice_data['l10n_es_edi_facturae_attachment_values'] = {
+ 'name': invoice._l10n_es_edi_facturae_get_filename(),
+ 'raw': xml_content,
+ 'mimetype': 'application/xml',
+ 'res_model': invoice._name,
+ 'res_id': invoice.id,
+ 'res_field': 'l10n_es_edi_facturae_xml_file', # Binary field
+ }
def _link_invoice_documents(self, invoice, invoice_data):
# EXTENDS 'account'
diff --git a/addons/l10n_es_edi_facturae/tests/test_edi_xml.py b/addons/l10n_es_edi_facturae/tests/test_edi_xml.py
index 4c0b4528131..f79f7bff684 100644
--- a/addons/l10n_es_edi_facturae/tests/test_edi_xml.py
+++ b/addons/l10n_es_edi_facturae/tests/test_edi_xml.py
@@ -90,6 +90,16 @@ class TestEdiFacturaeXmls(AccountEdiTestCommon):
],
})
+ def create_send_and_print(self, invoices, **kwargs):
+ template = self.env.ref(invoices._get_mail_template())
+ return self.env['account.move.send'].with_context(
+ active_model='account.move',
+ active_ids=invoices.ids,
+ ).create({
+ 'mail_template_id': template.id,
+ **kwargs,
+ })
+
def test_generate_signed_xml(self, date=None):
random.seed(42)
date = date or self.frozen_today
@@ -109,7 +119,8 @@ class TestEdiFacturaeXmls(AccountEdiTestCommon):
],
)
invoice.action_post()
- generated_file = invoice._l10n_es_edi_facturae_render_facturae()
+ generated_file, errors = invoice._l10n_es_edi_facturae_render_facturae()
+ self.assertFalse(errors)
self.assertTrue(generated_file)
with file_open("l10n_es_edi_facturae/tests/data/expected_signed_document.xml", "rt") as f:
@@ -125,7 +136,9 @@ class TestEdiFacturaeXmls(AccountEdiTestCommon):
patch(f"{self.certificate_module}.sha1", lambda x: sha1()):
invoice = self.create_invoice(partner_id=self.partner_a.id, move_type='out_invoice', invoice_line_ids=[{'price_unit': 100.0, 'tax_ids': [self.tax.id]},],)
invoice.action_post()
- self.assertRaises(UserError, invoice._l10n_es_edi_facturae_render_facturae)
+ wizard = self.create_send_and_print(invoice)
+ with self.assertRaises(UserError):
+ wizard.action_send_and_print()
def test_tax_withheld(self):
with freeze_time(self.frozen_today), \
@@ -155,7 +168,8 @@ class TestEdiFacturaeXmls(AccountEdiTestCommon):
],
)
invoice.action_post()
- generated_file = invoice._l10n_es_edi_facturae_render_facturae()
+ generated_file, errors = invoice._l10n_es_edi_facturae_render_facturae()
+ self.assertFalse(errors)
self.assertTrue(generated_file)
with file_open("l10n_es_edi_facturae/tests/data/expected_tax_withholding.xml", "rt") as f:
expected_xml = lxml.etree.fromstring(f.read().encode())
@@ -179,7 +193,8 @@ class TestEdiFacturaeXmls(AccountEdiTestCommon):
],
)
invoice.action_post()
- generated_file = invoice._l10n_es_edi_facturae_render_facturae()
+ generated_file, errors = invoice._l10n_es_edi_facturae_render_facturae()
+ self.assertFalse(errors)
self.assertTrue(generated_file)
with file_open("l10n_es_edi_facturae/tests/data/expected_in_invoice_document.xml", "rt") as f:
@@ -212,7 +227,8 @@ class TestEdiFacturaeXmls(AccountEdiTestCommon):
})
reversal_wizard.modify_moves()
refund = invoice.reversal_move_id
- generated_file = refund._l10n_es_edi_facturae_render_facturae()
+ generated_file, errors = refund._l10n_es_edi_facturae_render_facturae()
+ self.assertFalse(errors)
self.assertTrue(generated_file)
with file_open("l10n_es_edi_facturae/tests/data/expected_refund_document.xml", "rt") as f: