diff --git a/stock_scrap_tier_validation/models/__init__.py b/stock_scrap_tier_validation/models/__init__.py index 90448d34afb..db6df331b79 100644 --- a/stock_scrap_tier_validation/models/__init__.py +++ b/stock_scrap_tier_validation/models/__init__.py @@ -1,5 +1,6 @@ # Copyright 2023 Jarsa # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import stock_picking from . import stock_scrap from . import tier_definition diff --git a/stock_scrap_tier_validation/models/stock_picking.py b/stock_scrap_tier_validation/models/stock_picking.py new file mode 100644 index 00000000000..87d71729385 --- /dev/null +++ b/stock_scrap_tier_validation/models/stock_picking.py @@ -0,0 +1,25 @@ +# Copyright 2024 360ERP () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + def button_scrap(self): + """Fix compatibility with stock_scrap_tier_validation. + + The way that super opens the scrap form in a popup window prevents + the tier validation UI elements from being effective. The record is + only saved when closing the popup. Given that it's only possible to + check if the record needs validation after saving, the popup will + always raise the 'validation required' error which blocks saving it. + + As a workaround, we open the unsaved scrap record in the main window + so that it can be saved first and then be requested validation for + in the usual way. + """ + action = super().button_scrap() + action.pop("target") + return action diff --git a/stock_scrap_tier_validation/tests/test_tier_validation.py b/stock_scrap_tier_validation/tests/test_tier_validation.py index 0256fe5978a..b0273c4c67c 100644 --- a/stock_scrap_tier_validation/tests/test_tier_validation.py +++ b/stock_scrap_tier_validation/tests/test_tier_validation.py @@ -64,3 +64,9 @@ def test_validation_stock_scrap(self): scrap.with_user(self.test_user_1).validate_tier() scrap.action_validate() self.assertEqual(scrap.state, "done") + + def test_stock_picking_scrap(self): + """Scrapping from picking does not open in a popup""" + picking = self.env["stock.picking"].search([], limit=1) + action = picking.button_scrap() + self.assertFalse(action.get("target")) diff --git a/stock_scrap_tier_validation/views/stock_scrap_view.xml b/stock_scrap_tier_validation/views/stock_scrap_view.xml index 882efd3f7d1..aa54585fb2c 100644 --- a/stock_scrap_tier_validation/views/stock_scrap_view.xml +++ b/stock_scrap_tier_validation/views/stock_scrap_view.xml @@ -21,4 +21,40 @@ + + + + stock.scrap + + + +
+ +
+ +