diff --git a/sale_exception/models/sale_order.py b/sale_exception/models/sale_order.py index c79884f373d..4a1857bd8d8 100644 --- a/sale_exception/models/sale_order.py +++ b/sale_exception/models/sale_order.py @@ -47,10 +47,22 @@ def sale_check_exception(self): if orders: orders._check_exception() - def action_confirm(self): - if self.detect_exceptions(): - return self._popup_exceptions() - return super().action_confirm() + def _register_hook(self): + ModelClass = self.env.registry["sale.order"] + + original_action_confirm = ModelClass.action_confirm + + def patched_action_confirm(self): + if self.detect_exceptions(): + return self._popup_exceptions() + original_func = patched_action_confirm.origin + return original_func(self) + + patched_action_confirm.origin = original_action_confirm + + ModelClass.action_confirm = patched_action_confirm + + return super()._register_hook() def action_draft(self): res = super().action_draft() diff --git a/sale_exception/tests/test_sale_exception.py b/sale_exception/tests/test_sale_exception.py index cd3a979fcb6..64a6e50f80c 100644 --- a/sale_exception/tests/test_sale_exception.py +++ b/sale_exception/tests/test_sale_exception.py @@ -13,6 +13,8 @@ class TestSaleException(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() + cls.env["sale.order"]._register_hook() + cls.env["exception.rule"].search([]).write({"active": False}) cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) cls.default_pl = cls.env["product.pricelist"].create( {