From d00fdbdda2456549d0ae673bbdf009c705793e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Le=C3=B3n?= Date: Mon, 17 Nov 2025 15:03:54 -0500 Subject: [PATCH 1/6] [IMP][CL] Base Tier Validation Black List --- .../models/tier_validation.py | 12 ++++-- base_tier_validation_black_list/__init__.py | 1 + .../__manifest__.py | 19 ++++++++++ .../models/__init__.py | 2 + .../models/tier_validation.py | 37 +++++++++++++++++++ .../models/tier_validation_exception.py | 13 +++++++ .../views/tier_validation_exception_views.xml | 15 ++++++++ 7 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 base_tier_validation_black_list/__init__.py create mode 100644 base_tier_validation_black_list/__manifest__.py create mode 100644 base_tier_validation_black_list/models/__init__.py create mode 100644 base_tier_validation_black_list/models/tier_validation.py create mode 100644 base_tier_validation_black_list/models/tier_validation_exception.py create mode 100644 base_tier_validation_black_list/views/tier_validation_exception_views.xml diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py index 6479bb5bff..dcbf99a1d6 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -273,11 +273,10 @@ def evaluate_tier(self, tier): return self.filtered_domain(domain) else: return self - - @api.model - def _get_validation_exceptions(self, extra_domain=None, add_base_exceptions=True): + + def _get_exception_fields(self, extra_domain=None): """Return Tier Validation Exception field names that matchs custom domain.""" - exception_fields = ( + return ( self.env["tier.validation.exception"] .sudo() .search( @@ -292,6 +291,11 @@ def _get_validation_exceptions(self, extra_domain=None, add_base_exceptions=True ) .mapped("field_ids.name") ) + + @api.model + def _get_validation_exceptions(self, extra_domain=None, add_base_exceptions=True): + """Return Tier Validation Exception field names that matchs custom domain.""" + exception_fields = self._get_exception_fields(extra_domain=extra_domain) if add_base_exceptions: exception_fields += BASE_EXCEPTION_FIELDS return list(set(exception_fields)) diff --git a/base_tier_validation_black_list/__init__.py b/base_tier_validation_black_list/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/base_tier_validation_black_list/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/base_tier_validation_black_list/__manifest__.py b/base_tier_validation_black_list/__manifest__.py new file mode 100644 index 0000000000..caca2fa49d --- /dev/null +++ b/base_tier_validation_black_list/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Base Tier Validation Black List", + "summary": """ + Exception rules for tier validation used like a black list. + The fields in the exception rules will be restricted + """, + "version": "18.0.1.0.0", + "category": "Tools", + "license": "AGPL-3", + "development_status": "Alpha", + "author": "Trescloud,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/server-ux", + "depends": ["base_tier_validation"], + "data": ['views/tier_validation_exception_views.xml',], + "demo": [], +} diff --git a/base_tier_validation_black_list/models/__init__.py b/base_tier_validation_black_list/models/__init__.py new file mode 100644 index 0000000000..b86d2bf2f8 --- /dev/null +++ b/base_tier_validation_black_list/models/__init__.py @@ -0,0 +1,2 @@ +from . import tier_validation +from . import tier_validation_exception \ No newline at end of file diff --git a/base_tier_validation_black_list/models/tier_validation.py b/base_tier_validation_black_list/models/tier_validation.py new file mode 100644 index 0000000000..69544a32e3 --- /dev/null +++ b/base_tier_validation_black_list/models/tier_validation.py @@ -0,0 +1,37 @@ + +from odoo import api, fields, models + +class TierValidation(models.AbstractModel): + _inherit = "tier.validation" + + @api.model + def _get_exception_fields(self, extra_domain=None): + """ + Return Tier Validation Exception field names that matchs custom domain + taken account blacklist exceptions. + """ + extra_domain = extra_domain or [] + extra_domain.append(("is_blacklist", "=", False)) + res = super()._get_exception_fields(extra_domain=extra_domain) + extra_domain.remove(("is_blacklist", "=", False)) + domain = [ + ("model_name", "=", self._name), + ("company_id", "in", [False] + self._get_company().ids), + ("is_blacklist", "=", True), + "|", + ("group_ids", "in", self.env.user.groups_id.ids), + ("group_ids", "=", False), + *(extra_domain or []), + ] + exception_ids = (self.env["tier.validation.exception"] + .sudo() + .search( + domain + ) + ) + if exception_ids: + all_fields_allowed = exception_ids[0].valid_model_field_ids.mapped("name") + fields_to_add = set(all_fields_allowed) - set(exception_ids.mapped("field_ids.name")) + fields_allowed = (set(res) - set(exception_ids.mapped("field_ids.name"))) | fields_to_add + res = list(fields_allowed) + return res \ No newline at end of file diff --git a/base_tier_validation_black_list/models/tier_validation_exception.py b/base_tier_validation_black_list/models/tier_validation_exception.py new file mode 100644 index 0000000000..60a0627076 --- /dev/null +++ b/base_tier_validation_black_list/models/tier_validation_exception.py @@ -0,0 +1,13 @@ +from odoo import api, exceptions, fields, models + + +class TierValidationException(models.Model): + _inherit = "tier.validation.exception" + + is_blacklist = fields.Boolean( + string="Is Blacklist", + help="If checked, the selected fields will be skiped " + "in allowed fields for tier validation.", + ) + + \ No newline at end of file diff --git a/base_tier_validation_black_list/views/tier_validation_exception_views.xml b/base_tier_validation_black_list/views/tier_validation_exception_views.xml new file mode 100644 index 0000000000..a92477bfc0 --- /dev/null +++ b/base_tier_validation_black_list/views/tier_validation_exception_views.xml @@ -0,0 +1,15 @@ + + + + tier.validation.exception.form + tier.validation.exception + + + + + + + + \ No newline at end of file From b0ddec2136d81e9ba1444f2e48fc932c36682eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Le=C3=B3n?= Date: Mon, 17 Nov 2025 15:04:39 -0500 Subject: [PATCH 2/6] [IMP][CL] Base Tier Validation Black List --- base_tier_validation_black_list/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_tier_validation_black_list/__manifest__.py b/base_tier_validation_black_list/__manifest__.py index caca2fa49d..1700981d1f 100644 --- a/base_tier_validation_black_list/__manifest__.py +++ b/base_tier_validation_black_list/__manifest__.py @@ -1,4 +1,4 @@ -# Copyright 2019 Creu Blanca +# Copyright 2025 Trescloud and Odoo Community Association (OCA) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { From 81e88229e01ff13835d72b6fb1d3fe1c7a6b2f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Le=C3=B3n?= Date: Mon, 17 Nov 2025 15:15:58 -0500 Subject: [PATCH 3/6] [IMP][CL] Base Tier Validation Black List --- .../models/tier_validation.py | 2 +- .../__manifest__.py | 4 +- .../models/__init__.py | 2 +- .../models/tier_validation.py | 38 +++++++++---------- .../models/tier_validation_exception.py | 4 +- .../views/tier_validation_exception_views.xml | 9 +++-- 6 files changed, 29 insertions(+), 30 deletions(-) diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py index dcbf99a1d6..0d069c06ab 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -273,7 +273,7 @@ def evaluate_tier(self, tier): return self.filtered_domain(domain) else: return self - + def _get_exception_fields(self, extra_domain=None): """Return Tier Validation Exception field names that matchs custom domain.""" return ( diff --git a/base_tier_validation_black_list/__manifest__.py b/base_tier_validation_black_list/__manifest__.py index 1700981d1f..13c63a1a7d 100644 --- a/base_tier_validation_black_list/__manifest__.py +++ b/base_tier_validation_black_list/__manifest__.py @@ -14,6 +14,8 @@ "author": "Trescloud,Odoo Community Association (OCA)", "website": "https://github.com/OCA/server-ux", "depends": ["base_tier_validation"], - "data": ['views/tier_validation_exception_views.xml',], + "data": [ + 'views/tier_validation_exception_views.xml', + ], "demo": [], } diff --git a/base_tier_validation_black_list/models/__init__.py b/base_tier_validation_black_list/models/__init__.py index b86d2bf2f8..07c4e99a66 100644 --- a/base_tier_validation_black_list/models/__init__.py +++ b/base_tier_validation_black_list/models/__init__.py @@ -1,2 +1,2 @@ from . import tier_validation -from . import tier_validation_exception \ No newline at end of file +from . import tier_validation_exception diff --git a/base_tier_validation_black_list/models/tier_validation.py b/base_tier_validation_black_list/models/tier_validation.py index 69544a32e3..546271f067 100644 --- a/base_tier_validation_black_list/models/tier_validation.py +++ b/base_tier_validation_black_list/models/tier_validation.py @@ -1,5 +1,4 @@ - -from odoo import api, fields, models +from odoo import api, models class TierValidation(models.AbstractModel): _inherit = "tier.validation" @@ -14,24 +13,23 @@ def _get_exception_fields(self, extra_domain=None): extra_domain.append(("is_blacklist", "=", False)) res = super()._get_exception_fields(extra_domain=extra_domain) extra_domain.remove(("is_blacklist", "=", False)) - domain = [ - ("model_name", "=", self._name), - ("company_id", "in", [False] + self._get_company().ids), - ("is_blacklist", "=", True), - "|", - ("group_ids", "in", self.env.user.groups_id.ids), - ("group_ids", "=", False), - *(extra_domain or []), - ] - exception_ids = (self.env["tier.validation.exception"] - .sudo() - .search( - domain - ) - ) + domain = [ + ("model_name", "=", self._name), + ("company_id", "in", [False] + self._get_company().ids), + ("is_blacklist", "=", True), + "|", + ("group_ids", "in", self.env.user.groups_id.ids), + ("group_ids", "=", False), + *(extra_domain or []), + ] + exception_ids = self.env["tier.validation.exception"].sudo().search(domain) if exception_ids: all_fields_allowed = exception_ids[0].valid_model_field_ids.mapped("name") - fields_to_add = set(all_fields_allowed) - set(exception_ids.mapped("field_ids.name")) - fields_allowed = (set(res) - set(exception_ids.mapped("field_ids.name"))) | fields_to_add + fields_to_add = set(all_fields_allowed) - set( + exception_ids.mapped("field_ids.name") + ) + fields_allowed = ( + set(res) - set(exception_ids.mapped("field_ids.name")) + ) | fields_to_add res = list(fields_allowed) - return res \ No newline at end of file + return res diff --git a/base_tier_validation_black_list/models/tier_validation_exception.py b/base_tier_validation_black_list/models/tier_validation_exception.py index 60a0627076..c9b0dde613 100644 --- a/base_tier_validation_black_list/models/tier_validation_exception.py +++ b/base_tier_validation_black_list/models/tier_validation_exception.py @@ -1,4 +1,4 @@ -from odoo import api, exceptions, fields, models +from odoo import fields, models class TierValidationException(models.Model): @@ -9,5 +9,3 @@ class TierValidationException(models.Model): help="If checked, the selected fields will be skiped " "in allowed fields for tier validation.", ) - - \ No newline at end of file diff --git a/base_tier_validation_black_list/views/tier_validation_exception_views.xml b/base_tier_validation_black_list/views/tier_validation_exception_views.xml index a92477bfc0..e75f188ad9 100644 --- a/base_tier_validation_black_list/views/tier_validation_exception_views.xml +++ b/base_tier_validation_black_list/views/tier_validation_exception_views.xml @@ -3,12 +3,13 @@ tier.validation.exception.form tier.validation.exception - + - + From 83f0a78723cb4a07a7f5f5f7706e241da6ea1242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Le=C3=B3n?= Date: Mon, 17 Nov 2025 15:19:38 -0500 Subject: [PATCH 4/6] [IMP][CL] Base Tier Validation Black List --- base_tier_validation_black_list/__manifest__.py | 2 +- .../views/tier_validation_exception_views.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/base_tier_validation_black_list/__manifest__.py b/base_tier_validation_black_list/__manifest__.py index 13c63a1a7d..961bf02b61 100644 --- a/base_tier_validation_black_list/__manifest__.py +++ b/base_tier_validation_black_list/__manifest__.py @@ -15,7 +15,7 @@ "website": "https://github.com/OCA/server-ux", "depends": ["base_tier_validation"], "data": [ - 'views/tier_validation_exception_views.xml', + "views/tier_validation_exception_views.xml", ], "demo": [], } diff --git a/base_tier_validation_black_list/views/tier_validation_exception_views.xml b/base_tier_validation_black_list/views/tier_validation_exception_views.xml index e75f188ad9..15bab7749e 100644 --- a/base_tier_validation_black_list/views/tier_validation_exception_views.xml +++ b/base_tier_validation_black_list/views/tier_validation_exception_views.xml @@ -13,4 +13,4 @@ - \ No newline at end of file + From a9a04269f8597a874256706f035b9b2f599ca6b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Le=C3=B3n?= Date: Mon, 17 Nov 2025 15:21:41 -0500 Subject: [PATCH 5/6] [IMP][CL] Base Tier Validation Black List --- base_tier_validation_black_list/models/tier_validation.py | 1 + .../models/tier_validation_exception.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/base_tier_validation_black_list/models/tier_validation.py b/base_tier_validation_black_list/models/tier_validation.py index 546271f067..686a0f2132 100644 --- a/base_tier_validation_black_list/models/tier_validation.py +++ b/base_tier_validation_black_list/models/tier_validation.py @@ -1,5 +1,6 @@ from odoo import api, models + class TierValidation(models.AbstractModel): _inherit = "tier.validation" diff --git a/base_tier_validation_black_list/models/tier_validation_exception.py b/base_tier_validation_black_list/models/tier_validation_exception.py index c9b0dde613..2b84365fcd 100644 --- a/base_tier_validation_black_list/models/tier_validation_exception.py +++ b/base_tier_validation_black_list/models/tier_validation_exception.py @@ -5,7 +5,7 @@ class TierValidationException(models.Model): _inherit = "tier.validation.exception" is_blacklist = fields.Boolean( - string="Is Blacklist", + string="Is Blacklist Exception", help="If checked, the selected fields will be skiped " "in allowed fields for tier validation.", ) From d37510ec0608bf168dd49d44f020414e5d2e5ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Le=C3=B3n?= Date: Mon, 17 Nov 2025 16:28:43 -0500 Subject: [PATCH 6/6] [FIX][CL] Ajuste para permitir heredar --- base_tier_validation_black_list/__init__.py | 1 - .../__manifest__.py | 21 ----------- .../models/__init__.py | 2 -- .../models/tier_validation.py | 36 ------------------- .../models/tier_validation_exception.py | 11 ------ .../views/tier_validation_exception_views.xml | 16 --------- 6 files changed, 87 deletions(-) delete mode 100644 base_tier_validation_black_list/__init__.py delete mode 100644 base_tier_validation_black_list/__manifest__.py delete mode 100644 base_tier_validation_black_list/models/__init__.py delete mode 100644 base_tier_validation_black_list/models/tier_validation.py delete mode 100644 base_tier_validation_black_list/models/tier_validation_exception.py delete mode 100644 base_tier_validation_black_list/views/tier_validation_exception_views.xml diff --git a/base_tier_validation_black_list/__init__.py b/base_tier_validation_black_list/__init__.py deleted file mode 100644 index 0650744f6b..0000000000 --- a/base_tier_validation_black_list/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import models diff --git a/base_tier_validation_black_list/__manifest__.py b/base_tier_validation_black_list/__manifest__.py deleted file mode 100644 index 961bf02b61..0000000000 --- a/base_tier_validation_black_list/__manifest__.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2025 Trescloud and Odoo Community Association (OCA) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -{ - "name": "Base Tier Validation Black List", - "summary": """ - Exception rules for tier validation used like a black list. - The fields in the exception rules will be restricted - """, - "version": "18.0.1.0.0", - "category": "Tools", - "license": "AGPL-3", - "development_status": "Alpha", - "author": "Trescloud,Odoo Community Association (OCA)", - "website": "https://github.com/OCA/server-ux", - "depends": ["base_tier_validation"], - "data": [ - "views/tier_validation_exception_views.xml", - ], - "demo": [], -} diff --git a/base_tier_validation_black_list/models/__init__.py b/base_tier_validation_black_list/models/__init__.py deleted file mode 100644 index 07c4e99a66..0000000000 --- a/base_tier_validation_black_list/models/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import tier_validation -from . import tier_validation_exception diff --git a/base_tier_validation_black_list/models/tier_validation.py b/base_tier_validation_black_list/models/tier_validation.py deleted file mode 100644 index 686a0f2132..0000000000 --- a/base_tier_validation_black_list/models/tier_validation.py +++ /dev/null @@ -1,36 +0,0 @@ -from odoo import api, models - - -class TierValidation(models.AbstractModel): - _inherit = "tier.validation" - - @api.model - def _get_exception_fields(self, extra_domain=None): - """ - Return Tier Validation Exception field names that matchs custom domain - taken account blacklist exceptions. - """ - extra_domain = extra_domain or [] - extra_domain.append(("is_blacklist", "=", False)) - res = super()._get_exception_fields(extra_domain=extra_domain) - extra_domain.remove(("is_blacklist", "=", False)) - domain = [ - ("model_name", "=", self._name), - ("company_id", "in", [False] + self._get_company().ids), - ("is_blacklist", "=", True), - "|", - ("group_ids", "in", self.env.user.groups_id.ids), - ("group_ids", "=", False), - *(extra_domain or []), - ] - exception_ids = self.env["tier.validation.exception"].sudo().search(domain) - if exception_ids: - all_fields_allowed = exception_ids[0].valid_model_field_ids.mapped("name") - fields_to_add = set(all_fields_allowed) - set( - exception_ids.mapped("field_ids.name") - ) - fields_allowed = ( - set(res) - set(exception_ids.mapped("field_ids.name")) - ) | fields_to_add - res = list(fields_allowed) - return res diff --git a/base_tier_validation_black_list/models/tier_validation_exception.py b/base_tier_validation_black_list/models/tier_validation_exception.py deleted file mode 100644 index 2b84365fcd..0000000000 --- a/base_tier_validation_black_list/models/tier_validation_exception.py +++ /dev/null @@ -1,11 +0,0 @@ -from odoo import fields, models - - -class TierValidationException(models.Model): - _inherit = "tier.validation.exception" - - is_blacklist = fields.Boolean( - string="Is Blacklist Exception", - help="If checked, the selected fields will be skiped " - "in allowed fields for tier validation.", - ) diff --git a/base_tier_validation_black_list/views/tier_validation_exception_views.xml b/base_tier_validation_black_list/views/tier_validation_exception_views.xml deleted file mode 100644 index 15bab7749e..0000000000 --- a/base_tier_validation_black_list/views/tier_validation_exception_views.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - tier.validation.exception.form - tier.validation.exception - - - - - - - -