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()