From c1083ac4725ee18480ffbfa236eb614d3769ce78 Mon Sep 17 00:00:00 2001 From: "Benjamin Frantzen (bfr)" Date: Fri, 21 Aug 2020 10:59:12 +0000 Subject: [PATCH] [FIX] account_edi: exception during import of attachment is handled When an exception is raised when importing an attachment with an edi.format, we try with the next edi.format (or stop if it was the last) instead of crashing. closes odoo/odoo#56292 Signed-off-by: Laurent Smet --- .../account_edi/models/account_edi_format.py | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/addons/account_edi/models/account_edi_format.py b/addons/account_edi/models/account_edi_format.py index 92f583cca45..d22519e4bf2 100644 --- a/addons/account_edi/models/account_edi_format.py +++ b/addons/account_edi/models/account_edi_format.py @@ -339,11 +339,14 @@ class AccountEdiFormat(models.Model): for file_data in self._decode_attachment(attachment): for edi_format in self: res = False - if file_data['type'] == 'xml': - res = edi_format._create_invoice_from_xml_tree(file_data['filename'], file_data['xml_tree']) - elif file_data['type'] == 'pdf': - res = edi_format._create_invoice_from_pdf_reader(file_data['filename'], file_data['pdf_reader']) - file_data['pdf_reader'].stream.close() + try: + if file_data['type'] == 'xml': + res = edi_format._create_invoice_from_xml_tree(file_data['filename'], file_data['xml_tree']) + elif file_data['type'] == 'pdf': + res = edi_format._create_invoice_from_pdf_reader(file_data['filename'], file_data['pdf_reader']) + file_data['pdf_reader'].stream.close() + except Exception as e: + _logger.exception("Error importing attachment \"%s\" as invoice with format \"%s\"", file_data['filename'], edi_format.name, str(e)) if res: if 'extract_state' in res: # Bypass the OCR to prevent overwriting data when an EDI was succesfully imported. @@ -361,11 +364,14 @@ class AccountEdiFormat(models.Model): for file_data in self._decode_attachment(attachment): for edi_format in self: res = False - if file_data['type'] == 'xml': - res = edi_format._update_invoice_from_xml_tree(file_data['filename'], file_data['xml_tree'], invoice) - elif file_data['type'] == 'pdf': - res = edi_format._update_invoice_from_pdf_reader(file_data['filename'], file_data['pdf_reader'], invoice) - file_data['pdf_reader'].stream.close() + try: + if file_data['type'] == 'xml': + res = edi_format._update_invoice_from_xml_tree(file_data['filename'], file_data['xml_tree'], invoice) + elif file_data['type'] == 'pdf': + res = edi_format._update_invoice_from_pdf_reader(file_data['filename'], file_data['pdf_reader'], invoice) + file_data['pdf_reader'].stream.close() + except Exception as e: + _logger.exception("Error importing attachment \"%s\" as invoice with format \"%s\"", file_data['filename'], edi_format.name, str(e)) if res: if 'extract_state' in res: # Bypass the OCR to prevent overwriting data when an EDI was succesfully imported.