diff --git a/edi_core_oca/models/edi_backend.py b/edi_core_oca/models/edi_backend.py index f9dfe3bca..dfeefbdeb 100644 --- a/edi_core_oca/models/edi_backend.py +++ b/edi_core_oca/models/edi_backend.py @@ -144,7 +144,8 @@ def exchange_generate(self, exchange_record, store=True, force=False, **kw): if output: message = exchange_record._exchange_status_message("generate_ok") try: - self._validate_data(exchange_record, output) + with self.env.cr.savepoint(): + self._validate_data(exchange_record, output) except EDIValidationError as err: traceback = _get_exception_traceback() error = _get_exception_msg(err) @@ -240,8 +241,9 @@ def exchange_send(self, exchange_record): message = None res = "" try: - self._exchange_send(exchange_record) - _logger.debug("%s sent", exchange_record.identifier) + with self.env.cr.savepoint(): + self._exchange_send(exchange_record) + _logger.debug("%s sent", exchange_record.identifier) except self._send_retryable_exceptions() as err: traceback = _get_exception_traceback() error = _get_exception_msg(err) @@ -469,7 +471,8 @@ def exchange_process(self, exchange_record): message = None res = None try: - res = self._exchange_process(exchange_record) + with self.env.cr.savepoint(): + res = self._exchange_process(exchange_record) except self._swallable_exceptions() as err: if self.env.context.get("_edi_process_break_on_error"): raise @@ -526,11 +529,12 @@ def exchange_receive(self, exchange_record): message = None res = None try: - content = self._exchange_receive(exchange_record) - # Ignore result of FileNotFoundError/OSError - if content is not None: - exchange_record._set_file_content(content) - self._validate_data(exchange_record) + with self.env.cr.savepoint(): + content = self._exchange_receive(exchange_record) + # Ignore result of FileNotFoundError/OSError + if content is not None: + exchange_record._set_file_content(content) + self._validate_data(exchange_record) except EDIValidationError as err: traceback = _get_exception_traceback() error = _get_exception_msg(err) diff --git a/edi_core_oca/tests/fake_models.py b/edi_core_oca/tests/fake_models.py index df7d5e25c..95a25720a 100644 --- a/edi_core_oca/tests/fake_models.py +++ b/edi_core_oca/tests/fake_models.py @@ -14,6 +14,7 @@ class EdiExchangeConsumerTest(models.Model): _description = "Model used only for test" name = fields.Char() + ref = fields.Char() edi_config_ids = fields.Many2many( string="EDI Test Config Ids", comodel_name="edi.configuration",