From bd70c53689d2980b3cb4fbe3d0091bfd8adbf88f Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 26 Sep 2024 11:23:15 +0200 Subject: [PATCH] [REF] sale_blanket_order_tier_validation: rely on computed state patch https://github.com/OCA/server-ux/pull/939 --- .../models/sale_blanket_order.py | 53 +++++-------------- ...test_sale_blanket_order_tier_validation.py | 3 +- test-requirements.txt | 1 + 3 files changed, 17 insertions(+), 40 deletions(-) diff --git a/sale_blanket_order_tier_validation/models/sale_blanket_order.py b/sale_blanket_order_tier_validation/models/sale_blanket_order.py index 4ad6dd061b2..233451c6ef7 100644 --- a/sale_blanket_order_tier_validation/models/sale_blanket_order.py +++ b/sale_blanket_order_tier_validation/models/sale_blanket_order.py @@ -1,7 +1,6 @@ # Copyright 2024 Open Source Integrators # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import api, fields, models -from odoo.tools import float_is_zero +from odoo import api, models class SaleBlanketOrder(models.Model): @@ -15,42 +14,18 @@ class SaleBlanketOrder(models.Model): _state_to = ["open", "done", "expired"] _tier_validation_manual_config = False + _tier_validation_state_field_is_computed = True - @api.depends( - "line_ids.remaining_uom_qty", - "validity_date", - "confirmed", - ) - def _compute_state(self): - """Complete override of Blanket Order Compute State Method: - The OCA Blanket Order module sets state via compute method which messes - with tier validation checks so we are going to instead set the state - to 'Open' only when clicking confirmed. This also forces process as before - just changing data would reset BO back to Open if expired.""" - today = fields.Date.today() - precision = self.env["decimal.precision"].precision_get( - "Product Unit of Measure" - ) - for order in self: - if not order.confirmed: - order.state = "draft" - elif order.validity_date <= today: - order.state = "expired" - elif float_is_zero( - sum( - order.line_ids.filtered(lambda line: not line.display_type).mapped( - "remaining_uom_qty" - ) - ), - precision_digits=precision, - ): - order.state = "done" - # Removing else statement from original method - # else: - # order.state = "open" + @api.model + def _get_after_validation_exceptions(self): + return super()._get_after_validation_exceptions() + [ + "confirmed", + "name", + ] - def action_confirm(self): - """Set the state to 'Open' when clicking confirmed instead of during compute.""" - for rec in self: - rec.write({"state": "open"}) - return super().action_confirm() + @api.model + def _get_under_validation_exceptions(self): + return super()._get_under_validation_exceptions() + [ + "confirmed", + "name", + ] diff --git a/sale_blanket_order_tier_validation/tests/test_sale_blanket_order_tier_validation.py b/sale_blanket_order_tier_validation/tests/test_sale_blanket_order_tier_validation.py index 041448aa552..55cb780114c 100644 --- a/sale_blanket_order_tier_validation/tests/test_sale_blanket_order_tier_validation.py +++ b/sale_blanket_order_tier_validation/tests/test_sale_blanket_order_tier_validation.py @@ -69,7 +69,6 @@ def setUpClass(cls): "model_id": cls.eco_model.id, "review_type": "individual", "reviewer_id": cls.test_user_1.id, - "definition_domain": "[('state', '=', 'draft')]", } ) @@ -105,6 +104,7 @@ def test02_validation_blanket_order(self): } ) self.assertEqual(blanket_order.state, "draft") + blanket_order.flush_recordset() # Request tier validation blanket_order.request_validation() @@ -112,6 +112,7 @@ def test02_validation_blanket_order(self): # Changing to new stage would cause a validation error with self.assertRaises(ValidationError): blanket_order.action_confirm() + blanket_order.flush_recordset() # Validate the tier validation request blanket_order.with_user(self.test_user_1).validate_tier() diff --git a/test-requirements.txt b/test-requirements.txt index 66bc2cbae3f..7ba386d949f 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1 +1,2 @@ odoo_test_helper +git+https://github.com/stefanrijnhart/server-ux@17.0-imp-base_tier_validation-computed_state_field#subdirectory=base_tier_validation