diff --git a/printing_auto_base/models/printing_auto.py b/printing_auto_base/models/printing_auto.py index 03aed3f9a62..b892ab22b69 100644 --- a/printing_auto_base/models/printing_auto.py +++ b/printing_auto_base/models/printing_auto.py @@ -49,6 +49,12 @@ class PrintingAuto(models.Model): printer_id = fields.Many2one("printing.printer", "Printer") printer_tray_id = fields.Many2one("printing.tray", "Tray") nbr_of_copies = fields.Integer("Number of Copies", default=1) + action_on_error = fields.Selection( + [("log", "Record an error"), ("raise", "Raise an Exception")], + "Action on error", + default="log", + required=True, + ) @api.constrains("data_source", "report_id", "attachment_domain") def _check_data_source(self): diff --git a/printing_auto_base/models/printing_auto_mixin.py b/printing_auto_base/models/printing_auto_mixin.py index 036415b1e0f..5bb0f851b40 100644 --- a/printing_auto_base/models/printing_auto_mixin.py +++ b/printing_auto_base/models/printing_auto_mixin.py @@ -37,14 +37,21 @@ def _on_printing_auto_error(self, e): def _get_printing_auto(self): return self.auto_printing_ids - def _handle_print_auto(self, printing_auto): + def _do_print_auto(self, printing_auto): self.ensure_one() printing_auto.ensure_one() + printer, count = printing_auto.do_print(self) + if count: + self._on_printing_auto_done(printing_auto, printer, count) + + def _handle_print_auto(self, printing_auto): + printing_auto.ensure_one() + if printing_auto.action_on_error == "raise": + self._do_print_auto(printing_auto) + return try: with self.env.cr.savepoint(): - printer, count = printing_auto.do_print(self) - if count: - self._on_printing_auto_done(printing_auto, printer, count) + self._do_print_auto(printing_auto) except Exception as e: _logger.exception( "An error occurred while printing '%s' for record %s.", diff --git a/printing_auto_base/views/printing_auto.xml b/printing_auto_base/views/printing_auto.xml index a346bd5ff35..5489e49a448 100644 --- a/printing_auto_base/views/printing_auto.xml +++ b/printing_auto_base/views/printing_auto.xml @@ -24,6 +24,7 @@ domain="[('printer_id', '=', printer_id)]" /> + @@ -44,6 +45,7 @@ + diff --git a/printing_auto_stock_picking/tests/test_printing_auto_stock.py b/printing_auto_stock_picking/tests/test_printing_auto_stock.py index 90190196ac8..325a1a58d57 100644 --- a/printing_auto_stock_picking/tests/test_printing_auto_stock.py +++ b/printing_auto_stock_picking/tests/test_printing_auto_stock.py @@ -5,6 +5,8 @@ import logging from unittest import mock +from odoo.exceptions import UserError + from odoo.addons.printing_auto_base.tests.common import ( PrintingPrinter, TestPrintingAutoCommon, @@ -39,3 +41,8 @@ def test_action_done_printing_auto(self): def test_action_done_printing_error(self): self.record._action_done() self.assertTrue(self.record.printing_auto_error) + + def test_action_done_printing_error_raise(self): + self.printing_auto.action_on_error = "raise" + with self.assertRaises(UserError): + self.record._action_done()