From 77e58da90b1d9e214666d4136415677336bf5cb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Gil=20Sorribes?= Date: Mon, 25 Feb 2019 11:34:23 +0100 Subject: [PATCH 01/34] [11.0][IMP] base_tier_validation fixup and extend tests [ADD] systray icon for pending reviews [FIX] Remove python safe_eval [ADD] base_tier_validation_formula and migration scripts [ADD] widget domain and python expression to define reviewer in tier definition [ADD] auto updating of systray icon counter [ADD] validation date field [ADD] review widget dropdown menu --- base_tier_validation_formula/README.rst | 81 ++++ base_tier_validation_formula/__init__.py | 1 + base_tier_validation_formula/__manifest__.py | 20 + .../models/__init__.py | 3 + .../models/tier_definition.py | 37 ++ .../models/tier_review.py | 47 ++ .../models/tier_validation.py | 25 ++ .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 2 + base_tier_validation_formula/readme/USAGE.rst | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 405 ++++++++++++++++++ .../tests/__init__.py | 4 + base_tier_validation_formula/tests/common.py | 19 + .../tests/test_tier_validation.py | 112 +++++ .../tests/tier_validation_tester.py | 23 + .../views/tier_definition_view.xml | 25 ++ 17 files changed, 808 insertions(+) create mode 100644 base_tier_validation_formula/README.rst create mode 100644 base_tier_validation_formula/__init__.py create mode 100644 base_tier_validation_formula/__manifest__.py create mode 100644 base_tier_validation_formula/models/__init__.py create mode 100644 base_tier_validation_formula/models/tier_definition.py create mode 100644 base_tier_validation_formula/models/tier_review.py create mode 100644 base_tier_validation_formula/models/tier_validation.py create mode 100644 base_tier_validation_formula/readme/CONTRIBUTORS.rst create mode 100644 base_tier_validation_formula/readme/DESCRIPTION.rst create mode 100644 base_tier_validation_formula/readme/USAGE.rst create mode 100644 base_tier_validation_formula/static/description/icon.png create mode 100644 base_tier_validation_formula/static/description/index.html create mode 100644 base_tier_validation_formula/tests/__init__.py create mode 100644 base_tier_validation_formula/tests/common.py create mode 100644 base_tier_validation_formula/tests/test_tier_validation.py create mode 100644 base_tier_validation_formula/tests/tier_validation_tester.py create mode 100644 base_tier_validation_formula/views/tier_definition_view.xml diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst new file mode 100644 index 000000000..676e96376 --- /dev/null +++ b/base_tier_validation_formula/README.rst @@ -0,0 +1,81 @@ +============================ +Base Tier Validation Formula +============================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github + :target: https://github.com/OCA/server-ux/tree/11.0/base_tier_validation_formula + :alt: OCA/server-ux +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-ux-11-0/server-ux-11-0-base_tier_validation_formula + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/250/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module includes the ability to define the tier definition domain +and the tier reviewers using python code. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To define the domain by python code choose the Formula option in the Definition field. +To define the reviewers by python code choose Python Expression option in the Validated by field. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Adrià Gil Sorribes + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/server-ux `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_formula/__init__.py b/base_tier_validation_formula/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/base_tier_validation_formula/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py new file mode 100644 index 000000000..937e7e976 --- /dev/null +++ b/base_tier_validation_formula/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Base Tier Validation Formula', + 'summary': """ + Formulas for Base tier validation""", + 'version': '11.0.1.0.0', + 'license': 'AGPL-3', + 'author': 'Creu Blanca,Odoo Community Association (OCA)', + 'website': 'www.creublanca.es', + 'depends': [ + 'base_tier_validation' + ], + 'data': [ + 'views/tier_definition_view.xml', + ], + 'demo': [ + ], +} diff --git a/base_tier_validation_formula/models/__init__.py b/base_tier_validation_formula/models/__init__.py new file mode 100644 index 000000000..928b46c88 --- /dev/null +++ b/base_tier_validation_formula/models/__init__.py @@ -0,0 +1,3 @@ +from . import tier_definition +from . import tier_validation +from . import tier_review diff --git a/base_tier_validation_formula/models/tier_definition.py b/base_tier_validation_formula/models/tier_definition.py new file mode 100644 index 000000000..86d435530 --- /dev/null +++ b/base_tier_validation_formula/models/tier_definition.py @@ -0,0 +1,37 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, api, models + + +class TierDefinition(models.Model): + _inherit = 'tier.definition' + + python_code = fields.Text( + string='Tier Definition Expression', + help="Write Python code that defines when this tier confirmation " + "will be needed. The result of executing the expresion must be " + "a boolean.", + default="""# Available locals:\n# - rec: current record""", + ) + definition_type = fields.Selection( + selection_add=[('formula', 'Formula')] + ) + reviewer_expression = fields.Text( + string='Review Expression', + help="Write Python code that defines the reviewer. " + "The result of executing the expression must be a res.users " + "recordset.", + default="# Available locals:\n# - rec: current record\n" + "# - Expects a recordset of res.users", + ) + review_type = fields.Selection( + selection_add=[("expression", "Python Expression")] + ) + + @api.onchange('review_type') + def onchange_review_type(self): + super(TierDefinition, self).onchange_review_type() + self.reviewer_expression = "# Available locals:\n" \ + "# - rec: current record\n" \ + "# - Expects a recordset of res.users" diff --git a/base_tier_validation_formula/models/tier_review.py b/base_tier_validation_formula/models/tier_review.py new file mode 100644 index 000000000..6a128dd40 --- /dev/null +++ b/base_tier_validation_formula/models/tier_review.py @@ -0,0 +1,47 @@ +# Copyright 2019 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, _ +from odoo.exceptions import UserError +from odoo.tools.safe_eval import safe_eval + + +class TierReview(models.Model): + _inherit = "tier.review" + + python_reviewer_ids = fields.Many2many( + string="Reviewers from Python expression", comodel_name="res.users", + compute="_compute_python_reviewer_ids", store=True + ) + + @api.depends('reviewer_id', 'reviewer_group_id', 'reviewer_group_id.users', + 'python_reviewer_ids') + def _compute_reviewer_ids(self): + super(TierReview, self)._compute_reviewer_ids() + for rec in self: + rec.reviewer_ids = rec.reviewer_id + rec.reviewer_group_id.users \ + + rec.python_reviewer_ids + + @api.multi + @api.depends('definition_id.reviewer_expression', + 'review_type', 'model', 'res_id') + def _compute_python_reviewer_ids(self): + for rec in self: + if rec.review_type == 'expression': + record = rec.env[rec.model].browse(rec.res_id).exists() + try: + reviewer_ids = safe_eval( + rec.definition_id.reviewer_expression, + globals_dict={'rec': record}) + except Exception as error: + raise UserError(_( + "Error evaluating tier validation " + "conditions.\n %s") % error) + # Check if python expression returns 'res.users' recordset + if not isinstance(reviewer_ids, models.Model) or \ + reviewer_ids._name != 'res.users': + raise UserError(_( + "Reviewer python expression must return a " + "res.users recordset.")) + else: + rec.python_reviewer_ids = reviewer_ids diff --git a/base_tier_validation_formula/models/tier_validation.py b/base_tier_validation_formula/models/tier_validation.py new file mode 100644 index 000000000..f4545ad8f --- /dev/null +++ b/base_tier_validation_formula/models/tier_validation.py @@ -0,0 +1,25 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models, _ +from odoo.tools.safe_eval import safe_eval +from odoo.exceptions import UserError + + +class TierValidation(models.AbstractModel): + _inherit = 'tier.validation' + + @api.multi + def evaluate_formula_tier(self, tier): + try: + res = safe_eval(tier.python_code, globals_dict={'rec': self}) + except Exception as error: + raise UserError(_( + "Error evaluating tier validation conditions.\n %s") % error) + return res + + @api.multi + def evaluate_tier(self, tier): + if tier.definition_type == 'formula': + return self.evaluate_formula_tier(tier) + return super().evaluate_tier(tier) diff --git a/base_tier_validation_formula/readme/CONTRIBUTORS.rst b/base_tier_validation_formula/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..82054b491 --- /dev/null +++ b/base_tier_validation_formula/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Enric Tobella +* Adrià Gil Sorribes diff --git a/base_tier_validation_formula/readme/DESCRIPTION.rst b/base_tier_validation_formula/readme/DESCRIPTION.rst new file mode 100644 index 000000000..cbaee8071 --- /dev/null +++ b/base_tier_validation_formula/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module includes the ability to define the tier definition domain +and the tier reviewers using python code. diff --git a/base_tier_validation_formula/readme/USAGE.rst b/base_tier_validation_formula/readme/USAGE.rst new file mode 100644 index 000000000..d8ab6f928 --- /dev/null +++ b/base_tier_validation_formula/readme/USAGE.rst @@ -0,0 +1,2 @@ +To define the domain by python code choose the Formula option in the Definition field. +To define the reviewers by python code choose Python Expression option in the Validated by field. diff --git a/base_tier_validation_formula/static/description/icon.png b/base_tier_validation_formula/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html new file mode 100644 index 000000000..2b288abc5 --- /dev/null +++ b/base_tier_validation_formula/static/description/index.html @@ -0,0 +1,405 @@ + + + + + + +Base Tier Validation Formula + + + +
+

Base Tier Validation Formula

+ + +

Beta License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runbot

+

This module includes the ability to define the tier definition domain +and the tier reviewers using python code.

+

Table of contents

+ +
+

Usage

+

To define the domain by python code choose the Formula option in the Definition field. +To define the reviewers by python code choose Python Expression option in the Validated by field.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/server-ux project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/base_tier_validation_formula/tests/__init__.py b/base_tier_validation_formula/tests/__init__.py new file mode 100644 index 000000000..c5d19b193 --- /dev/null +++ b/base_tier_validation_formula/tests/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import common +from . import test_tier_validation diff --git a/base_tier_validation_formula/tests/common.py b/base_tier_validation_formula/tests/common.py new file mode 100644 index 000000000..79b92d018 --- /dev/null +++ b/base_tier_validation_formula/tests/common.py @@ -0,0 +1,19 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + + +def setup_test_model(env, model_clses): + for model_cls in model_clses: + model_cls._build_model(env.registry, env.cr) + + env.registry.setup_models(env.cr) + env.registry.init_models( + env.cr, [model_cls._name for model_cls in model_clses], + dict(env.context, update_custom_fields=True) + ) + + +def teardown_test_model(env, model_clses): + for model_cls in model_clses: + del env.registry.models[model_cls._name] + env.registry.setup_models(env.cr) diff --git a/base_tier_validation_formula/tests/test_tier_validation.py b/base_tier_validation_formula/tests/test_tier_validation.py new file mode 100644 index 000000000..e94bed996 --- /dev/null +++ b/base_tier_validation_formula/tests/test_tier_validation.py @@ -0,0 +1,112 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo.tests import common +from odoo.exceptions import UserError +from .common import setup_test_model, teardown_test_model +from .tier_validation_tester import TierValidationTester + + +@common.at_install(False) +@common.post_install(True) +class TierTierValidation(common.SavepointCase): + + @classmethod + def setUpClass(cls): + super(TierTierValidation, cls).setUpClass() + + setup_test_model(cls.env, [TierValidationTester]) + + cls.test_model = cls.env[TierValidationTester._name] + + cls.tester_model = cls.env['ir.model'].search([ + ('model', '=', 'tier.validation.tester')]) + + # Access record: + cls.env["ir.model.access"].create({ + 'name': "access.tester", + 'model_id': cls.tester_model.id, + 'perm_read': 1, + 'perm_write': 1, + 'perm_create': 1, + 'perm_unlink': 1, + }) + + # Create users: + group_ids = cls.env.ref('base.group_system').ids + cls.test_user_1 = cls.env['res.users'].create({ + 'name': 'John', + 'login': 'test1', + 'groups_id': [(6, 0, group_ids)], + }) + cls.test_user_2 = cls.env['res.users'].create({ + 'name': 'Mike', + 'login': 'test2', + }) + cls.test_user_3 = cls.env['res.users'].create({ + 'name': 'Mary', + 'login': 'test3', + }) + + # Create tier definitions: + cls.tier_def_obj = cls.env['tier.definition'] + cls.tier_def_obj.create({ + 'model_id': cls.tester_model.id, + 'review_type': 'individual', + 'reviewer_id': cls.test_user_1.id, + 'definition_domain': "[('test_field', '>', 1.0)]", + }) + + cls.test_record = cls.test_model.create({ + 'test_field': 2.5, + }) + + @classmethod + def tearDownClass(cls): + teardown_test_model(cls.env, + [TierValidationTester]) + super(TierTierValidation, cls).tearDownClass() + + def test_01_reviewer_from_python_expression(self): + tier_definition = self.tier_def_obj.create({ + 'model_id': self.tester_model.id, + 'review_type': 'individual', + 'reviewer_id': self.test_user_1.id, + 'definition_type': 'formula', + 'python_code': 'rec.test_field > 1.0', + }) + tier_definition.write({ + 'model_id': self.tester_model.id, + 'review_type': 'expression', + 'python_code': 'rec.test_field > 3.0', + }) + tier_definition.onchange_review_type() + tier_definition.write({ + 'reviewer_expression': 'rec.user_id', + }) + self.test_record.write({ + 'test_field': 3.5, + 'user_id': self.test_user_2.id, + }) + reviews = self.test_record.sudo( + self.test_user_3.id).request_validation() + self.assertTrue(reviews) + self.assertEqual(len(reviews), 2) + record = self.test_record.sudo(self.test_user_1.id) + self.assertIn(self.test_user_1, record.reviewer_ids) + self.assertIn(self.test_user_2, record.reviewer_ids) + res = self.test_model.search( + [('reviewer_ids', 'in', self.test_user_2.id)]) + self.assertTrue(res) + + def test_02_wrong_reviewer_expression(self): + """Error should raise with incorrect python expresions on + tier definitions.""" + self.tier_def_obj.create({ + 'model_id': self.tester_model.id, + 'review_type': 'expression', + 'reviewer_expression': 'rec.test_field', + 'python_code': 'rec.test_field > 1.0', + }) + with self.assertRaises(UserError): + self.test_record.sudo(self.test_user_3.id).request_validation() diff --git a/base_tier_validation_formula/tests/tier_validation_tester.py b/base_tier_validation_formula/tests/tier_validation_tester.py new file mode 100644 index 000000000..d0136be3b --- /dev/null +++ b/base_tier_validation_formula/tests/tier_validation_tester.py @@ -0,0 +1,23 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class TierValidationTester(models.Model): + _name = 'tier.validation.tester' + _inherit = ['tier.validation'] + + state = fields.Selection( + selection=[('draft', 'Draft'), + ('confirmed', 'Confirmed'), + ('cancel', 'Cancel')], + default='draft', + ) + test_field = fields.Float() + user_id = fields.Many2one(string="Assigned to:", + comodel_name="res.users") + + @api.multi + def action_confirm(self): + self.write({'state': 'confirmed'}) diff --git a/base_tier_validation_formula/views/tier_definition_view.xml b/base_tier_validation_formula/views/tier_definition_view.xml new file mode 100644 index 000000000..8498b0841 --- /dev/null +++ b/base_tier_validation_formula/views/tier_definition_view.xml @@ -0,0 +1,25 @@ + + + + + + tier.definition.form + tier.definition + + + + + + + + + + + + + + From 9ecfb39423ea83a4a0ed3952071ee1f0bb05cfc1 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 10 Apr 2019 13:55:25 +0200 Subject: [PATCH 02/34] [IMP] base_tier_validation: Pass parameters as functions --- base_tier_validation_formula/models/tier_review.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/base_tier_validation_formula/models/tier_review.py b/base_tier_validation_formula/models/tier_review.py index 6a128dd40..b1889c394 100644 --- a/base_tier_validation_formula/models/tier_review.py +++ b/base_tier_validation_formula/models/tier_review.py @@ -14,13 +14,13 @@ class TierReview(models.Model): compute="_compute_python_reviewer_ids", store=True ) - @api.depends('reviewer_id', 'reviewer_group_id', 'reviewer_group_id.users', - 'python_reviewer_ids') - def _compute_reviewer_ids(self): - super(TierReview, self)._compute_reviewer_ids() - for rec in self: - rec.reviewer_ids = rec.reviewer_id + rec.reviewer_group_id.users \ - + rec.python_reviewer_ids + @api.model + def _get_reviewer_fields(self): + res = super()._get_reviewer_fields() + return res + ['python_reviewer_ids'] + + def _get_reviewers(self): + return super()._get_reviewers() + self.python_reviewer_ids @api.multi @api.depends('definition_id.reviewer_expression', From 579b581d6f4615912428aa604c4cb37a2b417573 Mon Sep 17 00:00:00 2001 From: Lois Rilo Date: Tue, 28 May 2019 14:33:47 +0200 Subject: [PATCH 03/34] [12.0][MIG] base_tier_validation_formula --- base_tier_validation_formula/README.rst | 10 +- base_tier_validation_formula/__manifest__.py | 2 +- .../i18n/base_tier_validation_formula.pot | 104 ++++++++++++++++++ .../static/description/index.html | 36 ++++-- 4 files changed, 139 insertions(+), 13 deletions(-) create mode 100644 base_tier_validation_formula/i18n/base_tier_validation_formula.pot diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst index 676e96376..f2a11786e 100644 --- a/base_tier_validation_formula/README.rst +++ b/base_tier_validation_formula/README.rst @@ -14,13 +14,13 @@ Base Tier Validation Formula :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github - :target: https://github.com/OCA/server-ux/tree/11.0/base_tier_validation_formula + :target: https://github.com/OCA/server-ux/tree/12.0/base_tier_validation_formula :alt: OCA/server-ux .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-ux-11-0/server-ux-11-0-base_tier_validation_formula + :target: https://translation.odoo-community.org/projects/server-ux-12-0/server-ux-12-0-base_tier_validation_formula :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/250/11.0 + :target: https://runbot.odoo-community.org/runbot/250/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -45,7 +45,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,6 +76,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/server-ux `_ project on GitHub. +This module is part of the `OCA/server-ux `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py index 937e7e976..e327b182b 100644 --- a/base_tier_validation_formula/__manifest__.py +++ b/base_tier_validation_formula/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Base Tier Validation Formula', 'summary': """ Formulas for Base tier validation""", - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'license': 'AGPL-3', 'author': 'Creu Blanca,Odoo Community Association (OCA)', 'website': 'www.creublanca.es', diff --git a/base_tier_validation_formula/i18n/base_tier_validation_formula.pot b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot new file mode 100644 index 000000000..47e06cd5d --- /dev/null +++ b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot @@ -0,0 +1,104 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: base_tier_validation_formula +#: selection:tier.definition,review_type:0 +msgid "Any user in a specific group." +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "" + +#. module: base_tier_validation_formula +#: selection:tier.definition,definition_type:0 +msgid "Domain" +msgstr "" + +#. module: base_tier_validation_formula +#: code:addons/base_tier_validation_formula/models/tier_review.py:37 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:17 +#, python-format +msgid "Error evaluating tier validation conditions.\n" +" %s" +msgstr "" + +#. module: base_tier_validation_formula +#: selection:tier.definition,definition_type:0 +msgid "Formula" +msgstr "" + +#. module: base_tier_validation_formula +#: selection:tier.definition,review_type:0 +msgid "Python Expression" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "" + +#. module: base_tier_validation_formula +#: code:addons/base_tier_validation_formula/models/tier_review.py:43 +#, python-format +msgid "Reviewer python expression must return a res.users recordset." +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "" + +#. module: base_tier_validation_formula +#: selection:tier.definition,review_type:0 +msgid "Specific user" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Write Python code that defines the reviewer. The result of executing the expression must be a res.users recordset." +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "Write Python code that defines when this tier confirmation will be needed. The result of executing the expresion must be a boolean." +msgstr "" + diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html index 2b288abc5..02b4b57b0 100644 --- a/base_tier_validation_formula/static/description/index.html +++ b/base_tier_validation_formula/static/description/index.html @@ -3,13 +3,13 @@ - + Base Tier Validation Formula -
-

Base Tier Validation Formula

+
+ + +Odoo Community Association + +
+

Base Tier Validation Formula

-

Mature License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

+

Mature License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

This module includes the ability to define the tier definition domain and the tier reviewers using python code.

Table of contents

@@ -387,7 +392,7 @@

Base Tier Validation Formula

-

Usage

+

Usage

To define the domain, * By python code choose the Formula option in the Definition field. * By both domain and python code, choose the Domain & Formula option in the Definition field.

@@ -395,7 +400,7 @@

Usage

option in the Validated by field.

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -403,15 +408,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Creu Blanca
-

Contributors

+

Contributors

-

Other credits

+

Other credits

The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -450,5 +455,6 @@

Maintainers

+
diff --git a/base_tier_validation_formula/tests/test_tier_validation.py b/base_tier_validation_formula/tests/test_tier_validation.py index 58b0b4af6..d61eaa232 100644 --- a/base_tier_validation_formula/tests/test_tier_validation.py +++ b/base_tier_validation_formula/tests/test_tier_validation.py @@ -12,27 +12,26 @@ # Use Base Common @tagged("post_install", "-at_install") class TierTierValidation(BaseCommon): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.loader = FakeModelLoader(cls.env, cls.__module__) - cls.loader.backup_registry() + def setUp(self): + super().setUp() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() from odoo.addons.base_tier_validation.tests.tier_validation_tester import ( TierValidationTester, ) - cls.loader.update_registry((TierValidationTester,)) - cls.test_model = cls.env[TierValidationTester._name] + self.loader.update_registry((TierValidationTester,)) + self.test_model = self.env[TierValidationTester._name] - cls.tester_model = cls.env["ir.model"].search( + self.tester_model = self.env["ir.model"].search( [("model", "=", "tier.validation.tester")] ) # Access record: - cls.env["ir.model.access"].create( + self.env["ir.model.access"].create( { "name": "access.tester", - "model_id": cls.tester_model.id, + "model_id": self.tester_model.id, "perm_read": 1, "perm_write": 1, "perm_create": 1, @@ -40,30 +39,29 @@ def setUpClass(cls): } ) - cls.test_user_1 = cls.env.ref("base.user_admin") - cls.test_user_2 = cls.env.ref("base.user_demo") + self.test_user_1 = self.env.ref("base.user_admin") + self.test_user_2 = self.env.ref("base.user_demo") # Create users: - cls.test_user_3 = cls.env["res.users"].create( + self.test_user_3 = self.env["res.users"].create( {"name": "Mary", "login": "test3", "email": "mary@yourcompany.example.com"} ) # Create tier definitions: - cls.tier_def_obj = cls.env["tier.definition"] - cls.tier_def_obj.create( + self.tier_def_obj = self.env["tier.definition"] + self.tier_def_obj.create( { - "model_id": cls.tester_model.id, + "model_id": self.tester_model.id, "review_type": "individual", - "reviewer_id": cls.test_user_1.id, + "reviewer_id": self.test_user_1.id, "definition_domain": "[('test_field', '>', 1.0)]", } ) - cls.test_record = cls.test_model.create({"test_field": 2.5}) + self.test_record = self.test_model.create({"test_field": 2.5}) - @classmethod - def tearDownClass(cls): - cls.loader.restore_registry() - return super().tearDownClass() + def tearDown(self): + self.loader.restore_registry() + super().tearDown() def test_01_reviewer_from_python_expression(self): tier_definition = self.tier_def_obj.create( From a03d3b632c3805c764c9ac34a2be8ffb622d54aa Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Thu, 30 Apr 2026 10:54:16 +0300 Subject: [PATCH 27/34] [IMP] base_tier_validation_formula: pre-commit auto fixes --- base_tier_validation_formula/README.rst | 16 ++++++++-------- base_tier_validation_formula/__manifest__.py | 2 +- .../models/tier_review.py | 7 ++----- .../static/description/index.html | 8 ++++---- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst index 05911dcb2..5a856cdd0 100644 --- a/base_tier_validation_formula/README.rst +++ b/base_tier_validation_formula/README.rst @@ -20,14 +20,14 @@ Base Tier Validation Formula .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github - :target: https://github.com/OCA/server-ux/tree/18.0/base_tier_validation_formula - :alt: OCA/server-ux +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftier--validation-lightgray.png?logo=github + :target: https://github.com/OCA/tier-validation/tree/19.0/base_tier_validation_formula + :alt: OCA/tier-validation .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-ux-18-0/server-ux-18-0-base_tier_validation_formula + :target: https://translation.odoo-community.org/projects/tier-validation-19-0/tier-validation-19-0-base_tier_validation_formula :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/server-ux&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/tier-validation&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -53,10 +53,10 @@ option in the Validated by field. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -103,6 +103,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/server-ux `_ project on GitHub. +This module is part of the `OCA/tier-validation `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py index 800c3a7e6..52a98d526 100644 --- a/base_tier_validation_formula/__manifest__.py +++ b/base_tier_validation_formula/__manifest__.py @@ -10,7 +10,7 @@ "license": "AGPL-3", "development_status": "Mature", "author": "Creu Blanca,Odoo Community Association (OCA)", - "website": "https://github.com/OCA/server-ux", + "website": "https://github.com/OCA/tier-validation", "depends": ["base_tier_validation"], "data": ["views/tier_definition_view.xml"], "demo": [], diff --git a/base_tier_validation_formula/models/tier_review.py b/base_tier_validation_formula/models/tier_review.py index f94f86927..7121937af 100644 --- a/base_tier_validation_formula/models/tier_review.py +++ b/base_tier_validation_formula/models/tier_review.py @@ -40,7 +40,7 @@ def _compute_python_reviewer_ids(self): ) except Exception as error: raise UserError( - _("Error evaluating tier validation " "conditions.\n %s") % error + _("Error evaluating tier validation conditions.\n %s") % error ) from error # Check if python expression returns 'res.users' recordset if ( @@ -48,10 +48,7 @@ def _compute_python_reviewer_ids(self): or reviewer_ids._name != "res.users" ): raise UserError( - _( - "Reviewer python expression must return a " - "res.users recordset." - ) + _("Reviewer python expression must return a res.users recordset.") ) else: rec.python_reviewer_ids = reviewer_ids diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html index 93473f379..abe51273e 100644 --- a/base_tier_validation_formula/static/description/index.html +++ b/base_tier_validation_formula/static/description/index.html @@ -374,7 +374,7 @@

Base Tier Validation Formula

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:2dda79f5e977900dd6b6ff1fbb0d9dd6b612ee3b25170b6dcc383d65152afff0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Mature License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

+

Mature License: AGPL-3 OCA/tier-validation Translate me on Weblate Try me on Runboat

This module includes the ability to define the tier definition domain and the tier reviewers using python code.

Table of contents

@@ -401,10 +401,10 @@

Usage

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -450,7 +450,7 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/server-ux project on GitHub.

+

This module is part of the OCA/tier-validation project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 49bbe13f85b8084f4c87825e51f486168c292046 Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Thu, 30 Apr 2026 11:09:52 +0300 Subject: [PATCH 28/34] [MIG] base_tier_validation_formula: Migration to 19.0 --- base_tier_validation_formula/README.rst | 2 +- base_tier_validation_formula/__manifest__.py | 2 +- .../i18n/base_tier_validation_formula.pot | 16 ++++- .../models/tier_review.py | 12 ++-- .../models/tier_validation.py | 6 +- .../static/description/index.html | 2 +- .../tests/test_tier_validation.py | 69 +++++-------------- 7 files changed, 46 insertions(+), 63 deletions(-) diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst index 5a856cdd0..3c70c8b5e 100644 --- a/base_tier_validation_formula/README.rst +++ b/base_tier_validation_formula/README.rst @@ -11,7 +11,7 @@ Base Tier Validation Formula !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2dda79f5e977900dd6b6ff1fbb0d9dd6b612ee3b25170b6dcc383d65152afff0 + !! source digest: sha256:a0940813476c07c1f5082e67935e7c5f3e9fccfb390e85187ff1fd7fb026dd24 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py index 52a98d526..a8f40d4f1 100644 --- a/base_tier_validation_formula/__manifest__.py +++ b/base_tier_validation_formula/__manifest__.py @@ -5,7 +5,7 @@ "name": "Base Tier Validation Formula", "summary": """ Formulas for Base tier validation""", - "version": "18.0.1.0.1", + "version": "19.0.1.0.0", "category": "Tools", "license": "AGPL-3", "development_status": "Mature", diff --git a/base_tier_validation_formula/i18n/base_tier_validation_formula.pot b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot index 40b78b27b..e107fe06a 100644 --- a/base_tier_validation_formula/i18n/base_tier_validation_formula.pot +++ b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -18,6 +18,13 @@ msgstr "" msgid "Definition" msgstr "" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula msgid "Domain & Formula" @@ -37,6 +44,13 @@ msgstr "" msgid "Formula" msgstr "" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression msgid "Python Expression" diff --git a/base_tier_validation_formula/models/tier_review.py b/base_tier_validation_formula/models/tier_review.py index 7121937af..b8e8fe33b 100644 --- a/base_tier_validation_formula/models/tier_review.py +++ b/base_tier_validation_formula/models/tier_review.py @@ -1,7 +1,7 @@ # Copyright 2019 ForgeFlow S.L. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models +from odoo import api, fields, models from odoo.exceptions import UserError from odoo.tools.safe_eval import safe_eval @@ -36,11 +36,13 @@ def _compute_python_reviewer_ids(self): record = rec.env[rec.model].browse(rec.res_id).exists() try: reviewer_ids = safe_eval( - rec.definition_id.reviewer_expression, globals_dict={"rec": record} + rec.definition_id.reviewer_expression, {"rec": record} ) except Exception as error: raise UserError( - _("Error evaluating tier validation conditions.\n %s") % error + rec.env._( + "Error evaluating tier validation conditions.\n %s", error + ) ) from error # Check if python expression returns 'res.users' recordset if ( @@ -48,7 +50,9 @@ def _compute_python_reviewer_ids(self): or reviewer_ids._name != "res.users" ): raise UserError( - _("Reviewer python expression must return a res.users recordset.") + rec.env._( + "Reviewer python expression must return a res.users recordset." + ) ) else: rec.python_reviewer_ids = reviewer_ids diff --git a/base_tier_validation_formula/models/tier_validation.py b/base_tier_validation_formula/models/tier_validation.py index d5a07a45b..eb9a4c5fc 100644 --- a/base_tier_validation_formula/models/tier_validation.py +++ b/base_tier_validation_formula/models/tier_validation.py @@ -1,7 +1,7 @@ # Copyright 2019 Creu Blanca # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, models +from odoo import models from odoo.exceptions import UserError from odoo.tools.safe_eval import safe_eval @@ -11,10 +11,10 @@ class TierValidation(models.AbstractModel): def evaluate_formula_tier(self, tier): try: - res = safe_eval(tier.python_code, globals_dict={"rec": self}) + res = safe_eval(tier.python_code, {"rec": self}) except Exception as error: raise UserError( - _("Error evaluating tier validation conditions.\n %s") % error + self.env._("Error evaluating tier validation conditions.\n %s", error) ) from error return res diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html index abe51273e..ca208c107 100644 --- a/base_tier_validation_formula/static/description/index.html +++ b/base_tier_validation_formula/static/description/index.html @@ -372,7 +372,7 @@

Base Tier Validation Formula

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2dda79f5e977900dd6b6ff1fbb0d9dd6b612ee3b25170b6dcc383d65152afff0 +!! source digest: sha256:a0940813476c07c1f5082e67935e7c5f3e9fccfb390e85187ff1fd7fb026dd24 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Mature License: AGPL-3 OCA/tier-validation Translate me on Weblate Try me on Runboat

This module includes the ability to define the tier definition domain diff --git a/base_tier_validation_formula/tests/test_tier_validation.py b/base_tier_validation_formula/tests/test_tier_validation.py index d61eaa232..78397d913 100644 --- a/base_tier_validation_formula/tests/test_tier_validation.py +++ b/base_tier_validation_formula/tests/test_tier_validation.py @@ -1,53 +1,16 @@ # Copyright 2018 ForgeFlow S.L. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). -from odoo_test_helper import FakeModelLoader - from odoo.exceptions import UserError +from odoo.fields import Domain from odoo.tests.common import tagged -from odoo.addons.base.tests.common import BaseCommon +from odoo.addons.base_tier_validation.tests.common import CommonTierValidation -# Use Base Common @tagged("post_install", "-at_install") -class TierTierValidation(BaseCommon): - def setUp(self): - super().setUp() - self.loader = FakeModelLoader(self.env, self.__module__) - self.loader.backup_registry() - from odoo.addons.base_tier_validation.tests.tier_validation_tester import ( - TierValidationTester, - ) - - self.loader.update_registry((TierValidationTester,)) - self.test_model = self.env[TierValidationTester._name] - - self.tester_model = self.env["ir.model"].search( - [("model", "=", "tier.validation.tester")] - ) - - # Access record: - self.env["ir.model.access"].create( - { - "name": "access.tester", - "model_id": self.tester_model.id, - "perm_read": 1, - "perm_write": 1, - "perm_create": 1, - "perm_unlink": 1, - } - ) - - self.test_user_1 = self.env.ref("base.user_admin") - self.test_user_2 = self.env.ref("base.user_demo") - # Create users: - self.test_user_3 = self.env["res.users"].create( - {"name": "Mary", "login": "test3", "email": "mary@yourcompany.example.com"} - ) - - # Create tier definitions: - self.tier_def_obj = self.env["tier.definition"] +class TierTierValidation(CommonTierValidation): + def _setup_tier_definitions(self): self.tier_def_obj.create( { "model_id": self.tester_model.id, @@ -57,12 +20,6 @@ def setUp(self): } ) - self.test_record = self.test_model.create({"test_field": 2.5}) - - def tearDown(self): - self.loader.restore_registry() - super().tearDown() - def test_01_reviewer_from_python_expression(self): tier_definition = self.tier_def_obj.create( { @@ -83,7 +40,9 @@ def test_01_reviewer_from_python_expression(self): tier_definition.onchange_review_type() tier_definition.write({"reviewer_expression": "rec.user_id"}) self.test_record.write({"test_field": 3.5, "user_id": self.test_user_2.id}) - reviews = self.test_record.with_user(self.test_user_3.id).request_validation() + reviews = self.test_record.with_user( + self.test_user_3_multi_company.id + ).request_validation() self.assertTrue(reviews) self.assertEqual(len(reviews), 2) record = self.test_record.with_user(self.test_user_1.id) @@ -91,7 +50,7 @@ def test_01_reviewer_from_python_expression(self): record.invalidate_recordset() self.assertIn(self.test_user_1, record.reviewer_ids) self.assertIn(self.test_user_2, record.reviewer_ids) - res = self.test_model.search([("reviewer_ids", "in", self.test_user_2.id)]) + res = self.test_model.search(Domain("reviewer_ids", "in", self.test_user_2.id)) self.assertTrue(res) def test_02_wrong_reviewer_expression(self): @@ -106,7 +65,9 @@ def test_02_wrong_reviewer_expression(self): } ) with self.assertRaises(UserError): - self.test_record.with_user(self.test_user_3).request_validation() + self.test_record.with_user( + self.test_user_3_multi_company + ).request_validation() self.test_record.review_ids.invalidate_recordset() self.test_record.review_ids._compute_python_reviewer_ids() @@ -120,7 +81,9 @@ def test_03_evaluate_wrong_reviewer_expression(self): } ) with self.assertRaises(UserError): - self.test_record.with_user(self.test_user_3).request_validation() + self.test_record.with_user( + self.test_user_3_multi_company + ).request_validation() self.test_record.review_ids.invalidate_recordset() self.test_record.review_ids._compute_python_reviewer_ids() @@ -152,5 +115,7 @@ def test_05_definition_from_domain_formula(self): } ) self.test_record.write({"test_field": 3.5, "user_id": self.test_user_2.id}) - reviews = self.test_record.with_user(self.test_user_3.id).request_validation() + reviews = self.test_record.with_user( + self.test_user_3_multi_company.id + ).request_validation() self.assertTrue(reviews) From 0a0b8fd75cc52c218fcba9781cc3f52b0dfd94b8 Mon Sep 17 00:00:00 2001 From: Bosd Date: Wed, 13 May 2026 19:59:45 +0000 Subject: [PATCH 29/34] Added translation using Weblate (Dutch) --- base_tier_validation_formula/i18n/nl.po | 123 ++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 base_tier_validation_formula/i18n/nl.po diff --git a/base_tier_validation_formula/i18n/nl.po b/base_tier_validation_formula/i18n/nl.po new file mode 100644 index 000000000..dc1a6785b --- /dev/null +++ b/base_tier_validation_formula/i18n/nl.po @@ -0,0 +1,123 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-05-13 20:02+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "Definitie" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "Domein & Formule" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" +"Fout bij het evalueren van de voorwaarden voor de niveauvalidatie.\n" +" %s" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "Formule" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "Python-expressie" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "Beoordelingsexpressie" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "" +"De Python-expressie voor de beoordelaar moet een res.users-recordset " +"retourneren." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "Beoordelaars uit Python-expressie" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "Niveaudefinitie" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "Expressie voor niveaudefinitie" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "Niveaubeoordeling" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Niveauvalidatie (abstract)" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "Gevalideerd door" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "" +"Schrijf Python-code die de beoordelaar definieert. Het resultaat van het " +"uitvoeren van de expressie moet een res.users-recordset zijn." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "" +"Schrijf Python-code die definieert wanneer deze niveaubevestiging nodig is. " +"Het resultaat van het uitvoeren van de expressie moet een boolean zijn." From f6a57f0e42fa07faff6d5b74f64092cb2f2b4977 Mon Sep 17 00:00:00 2001 From: bosd <5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me> Date: Wed, 13 May 2026 23:05:02 +0200 Subject: [PATCH 30/34] [IMP] base_tier_validation_formula: code widget on python expressions - Apply widget="code" with python mode to reviewer_expression so the Python Expression reviewer field gets syntax-highlighted editing, matching the treatment of python_code. - Move python_code into its own full-width (col="4"/colspan="4") group so the code editor is no longer squeezed to half-width inside the default 2-column "Apply On" group. - Add placeholder hints listing the available locals on both fields. --- base_tier_validation_formula/README.rst | 2 +- base_tier_validation_formula/__manifest__.py | 2 +- .../i18n/base_tier_validation_formula.pot | 17 +++++++++ base_tier_validation_formula/i18n/es.po | 35 +++++++++++++++++-- base_tier_validation_formula/i18n/it.po | 35 +++++++++++++++++-- base_tier_validation_formula/i18n/nl.po | 24 ++++++++++++- base_tier_validation_formula/i18n/tr.po | 31 ++++++++++++++++ base_tier_validation_formula/i18n/zh_CN.po | 35 +++++++++++++++++-- .../static/description/index.html | 2 +- .../views/tier_definition_view.xml | 23 +++++++----- 10 files changed, 185 insertions(+), 21 deletions(-) diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst index 3c70c8b5e..ca876f2c6 100644 --- a/base_tier_validation_formula/README.rst +++ b/base_tier_validation_formula/README.rst @@ -11,7 +11,7 @@ Base Tier Validation Formula !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:a0940813476c07c1f5082e67935e7c5f3e9fccfb390e85187ff1fd7fb026dd24 + !! source digest: sha256:4720ae953809b68d7af621235ee072e0267eb0a0f726cd235557b546be782f78 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py index a8f40d4f1..3d16ee1af 100644 --- a/base_tier_validation_formula/__manifest__.py +++ b/base_tier_validation_formula/__manifest__.py @@ -5,7 +5,7 @@ "name": "Base Tier Validation Formula", "summary": """ Formulas for Base tier validation""", - "version": "19.0.1.0.0", + "version": "19.0.1.1.0", "category": "Tools", "license": "AGPL-3", "development_status": "Mature", diff --git a/base_tier_validation_formula/i18n/base_tier_validation_formula.pot b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot index e107fe06a..7ba6c3921 100644 --- a/base_tier_validation_formula/i18n/base_tier_validation_formula.pot +++ b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot @@ -13,6 +13,23 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type msgid "Definition" diff --git a/base_tier_validation_formula/i18n/es.po b/base_tier_validation_formula/i18n/es.po index 4ffc809e5..e530c359d 100644 --- a/base_tier_validation_formula/i18n/es.po +++ b/base_tier_validation_formula/i18n/es.po @@ -16,11 +16,35 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type msgid "Definition" msgstr "Definición" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula msgid "Domain & Formula" @@ -30,7 +54,6 @@ msgstr "Dominio & Fórmula" #. odoo-python #: code:addons/base_tier_validation_formula/models/tier_review.py:0 #: code:addons/base_tier_validation_formula/models/tier_validation.py:0 -#, python-format msgid "" "Error evaluating tier validation conditions.\n" " %s" @@ -43,6 +66,13 @@ msgstr "" msgid "Formula" msgstr "Fórmula" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression msgid "Python Expression" @@ -56,7 +86,6 @@ msgstr "Expresión de Revisión" #. module: base_tier_validation_formula #. odoo-python #: code:addons/base_tier_validation_formula/models/tier_review.py:0 -#, python-format msgid "Reviewer python expression must return a res.users recordset." msgstr "" "La expresión python del revisor debe retornar un conjunto de registros de " @@ -117,4 +146,4 @@ msgstr "" #~ msgstr "Dominio" #~ msgid "Specific user" -#~ msgstr "Usuario específico" \ No newline at end of file +#~ msgstr "Usuario específico" diff --git a/base_tier_validation_formula/i18n/it.po b/base_tier_validation_formula/i18n/it.po index 1e62ef413..ee5abacb5 100644 --- a/base_tier_validation_formula/i18n/it.po +++ b/base_tier_validation_formula/i18n/it.po @@ -16,11 +16,35 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.6.2\n" +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type msgid "Definition" msgstr "Definizione" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula msgid "Domain & Formula" @@ -30,7 +54,6 @@ msgstr "Dominio e Formula" #. odoo-python #: code:addons/base_tier_validation_formula/models/tier_review.py:0 #: code:addons/base_tier_validation_formula/models/tier_validation.py:0 -#, python-format msgid "" "Error evaluating tier validation conditions.\n" " %s" @@ -43,6 +66,13 @@ msgstr "" msgid "Formula" msgstr "Formula" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression msgid "Python Expression" @@ -56,7 +86,6 @@ msgstr "Espressione Approvazione" #. module: base_tier_validation_formula #. odoo-python #: code:addons/base_tier_validation_formula/models/tier_review.py:0 -#, python-format msgid "Reviewer python expression must return a res.users recordset." msgstr "L'espressione Python revisore deve restituire un recordset res.user." @@ -106,4 +135,4 @@ msgid "" "The result of executing the expresion must be a boolean." msgstr "" "Scrivere codice Python che definisce quando questa conferma sarà necessaria. " -"Il risultato dell'espressione deve essere un booleano." \ No newline at end of file +"Il risultato dell'espressione deve essere un booleano." diff --git a/base_tier_validation_formula/i18n/nl.po b/base_tier_validation_formula/i18n/nl.po index dc1a6785b..5ed920d98 100644 --- a/base_tier_validation_formula/i18n/nl.po +++ b/base_tier_validation_formula/i18n/nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-13 20:02+0000\n" +"PO-Revision-Date: 2026-07-24 17:40+0000\n" "Last-Translator: Bosd \n" "Language-Team: none\n" "Language: nl\n" @@ -16,6 +16,28 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.2\n" +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +#, fuzzy +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type msgid "Definition" diff --git a/base_tier_validation_formula/i18n/tr.po b/base_tier_validation_formula/i18n/tr.po index 292cec492..bfbd755b2 100644 --- a/base_tier_validation_formula/i18n/tr.po +++ b/base_tier_validation_formula/i18n/tr.po @@ -16,11 +16,35 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10.4\n" +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type msgid "Definition" msgstr "Tanım" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula msgid "Domain & Formula" @@ -42,6 +66,13 @@ msgstr "" msgid "Formula" msgstr "Formül" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression msgid "Python Expression" diff --git a/base_tier_validation_formula/i18n/zh_CN.po b/base_tier_validation_formula/i18n/zh_CN.po index 77170cf74..a2282c2a4 100644 --- a/base_tier_validation_formula/i18n/zh_CN.po +++ b/base_tier_validation_formula/i18n/zh_CN.po @@ -16,11 +16,35 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 3.10\n" +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type msgid "Definition" msgstr "定义" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula msgid "Domain & Formula" @@ -30,7 +54,6 @@ msgstr "域和公式" #. odoo-python #: code:addons/base_tier_validation_formula/models/tier_review.py:0 #: code:addons/base_tier_validation_formula/models/tier_validation.py:0 -#, python-format msgid "" "Error evaluating tier validation conditions.\n" " %s" @@ -43,6 +66,13 @@ msgstr "" msgid "Formula" msgstr "公式" +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression msgid "Python Expression" @@ -56,7 +86,6 @@ msgstr "审核表达式" #. module: base_tier_validation_formula #. odoo-python #: code:addons/base_tier_validation_formula/models/tier_review.py:0 -#, python-format msgid "Reviewer python expression must return a res.users recordset." msgstr "审核者python表达式必须返回res.users记录集。" @@ -111,4 +140,4 @@ msgstr "编写Python代码,定义何时需要此层确认。执行表达式的 #~ msgstr "域" #~ msgid "Specific user" -#~ msgstr "具体用户" \ No newline at end of file +#~ msgstr "具体用户" diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html index ca208c107..6fa8602a2 100644 --- a/base_tier_validation_formula/static/description/index.html +++ b/base_tier_validation_formula/static/description/index.html @@ -372,7 +372,7 @@

Base Tier Validation Formula

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:a0940813476c07c1f5082e67935e7c5f3e9fccfb390e85187ff1fd7fb026dd24 +!! source digest: sha256:4720ae953809b68d7af621235ee072e0267eb0a0f726cd235557b546be782f78 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Mature License: AGPL-3 OCA/tier-validation Translate me on Weblate Try me on Runboat

This module includes the ability to define the tier definition domain diff --git a/base_tier_validation_formula/views/tier_definition_view.xml b/base_tier_validation_formula/views/tier_definition_view.xml index e390f02e6..3e92ae5ca 100644 --- a/base_tier_validation_formula/views/tier_definition_view.xml +++ b/base_tier_validation_formula/views/tier_definition_view.xml @@ -12,6 +12,9 @@ @@ -21,14 +24,18 @@ name="invisible" >definition_type not in ('domain', 'domain_formula') - - - + + + + + From da09a62d5f8429d475668818628cdb04affb7165 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 27 Jul 2026 09:38:21 +0000 Subject: [PATCH 31/34] Translated using Weblate (Italian) Currently translated at 100.0% (19 of 19 strings) Translation: tier-validation-19.0/tier-validation-19.0-base_tier_validation_formula Translate-URL: https://translation.odoo-community.org/projects/tier-validation-19-0/tier-validation-19-0-base_tier_validation_formula/it/ --- base_tier_validation_formula/i18n/it.po | 15 +++++++++++---- base_tier_validation_formula/i18n/nl.po | 12 +++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/base_tier_validation_formula/i18n/it.po b/base_tier_validation_formula/i18n/it.po index ee5abacb5..999ae644b 100644 --- a/base_tier_validation_formula/i18n/it.po +++ b/base_tier_validation_formula/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-01-16 15:06+0000\n" +"PO-Revision-Date: 2026-07-27 11:46+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6.2\n" +"X-Generator: Weblate 5.15.2\n" #. module: base_tier_validation_formula #: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form @@ -24,6 +24,10 @@ msgid "" "# - Expects a recordset of res.users\n" "rec.env.user" msgstr "" +"# Disponibili:\n" +"# - rec: record attuale\n" +"# - Attesa di un recordset di res.users\n" +"rec.env.user" #. module: base_tier_validation_formula #: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form @@ -32,6 +36,9 @@ msgid "" "# - rec: current record\n" "True" msgstr "" +"# Disponibili:\n" +"# - rec: record attuale\n" +"True" #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type @@ -43,7 +50,7 @@ msgstr "Definizione" #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula @@ -71,7 +78,7 @@ msgstr "Formula" #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id msgid "ID" -msgstr "" +msgstr "ID" #. module: base_tier_validation_formula #: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression diff --git a/base_tier_validation_formula/i18n/nl.po b/base_tier_validation_formula/i18n/nl.po index 5ed920d98..a66252496 100644 --- a/base_tier_validation_formula/i18n/nl.po +++ b/base_tier_validation_formula/i18n/nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-07-24 17:40+0000\n" +"PO-Revision-Date: 2026-10-02 23:46+0000\n" "Last-Translator: Bosd \n" "Language-Team: none\n" "Language: nl\n" @@ -18,16 +18,15 @@ msgstr "" #. module: base_tier_validation_formula #: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form -#, fuzzy msgid "" "# Available locals:\n" "# - rec: current record\n" "# - Expects a recordset of res.users\n" "rec.env.user" msgstr "" -"# Available locals:\n" -"# - rec: current record\n" -"# - Expects a recordset of res.users\n" +"# Beschikbare lokalen:\n" +"# - rec: huidige record\n" +"# -Verwacht huidig recordset\n" "rec.env.user" #. module: base_tier_validation_formula @@ -37,6 +36,9 @@ msgid "" "# - rec: current record\n" "True" msgstr "" +"# Beschikbare lokalen:\n" +"# - rec: huidige record\n" +"Waar" #. module: base_tier_validation_formula #: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type From 3ea473aeec7b758dc457a88fb820a56bec935868 Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Fri, 16 Oct 2026 11:00:03 +0530 Subject: [PATCH 32/34] [IMP] base_tier_validation_formula: pre-commit auto fixes --- base_tier_validation_formula/README.rst | 10 +++++----- base_tier_validation_formula/__manifest__.py | 3 +-- .../static/description/index.html | 8 ++++---- .../views/tier_definition_view.xml | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst index ca876f2c6..fbe8f5934 100644 --- a/base_tier_validation_formula/README.rst +++ b/base_tier_validation_formula/README.rst @@ -21,13 +21,13 @@ Base Tier Validation Formula :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftier--validation-lightgray.png?logo=github - :target: https://github.com/OCA/tier-validation/tree/19.0/base_tier_validation_formula + :target: https://github.com/OCA/tier-validation/tree/20.0/base_tier_validation_formula :alt: OCA/tier-validation .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/tier-validation-19-0/tier-validation-19-0-base_tier_validation_formula + :target: https://translation.odoo-community.org/projects/tier-validation-20-0/tier-validation-20-0-base_tier_validation_formula :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/tier-validation&target_branch=19.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/tier-validation&target_branch=20.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -56,7 +56,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -103,6 +103,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/tier-validation `_ project on GitHub. +This module is part of the `OCA/tier-validation `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py index 3d16ee1af..8203c72e6 100644 --- a/base_tier_validation_formula/__manifest__.py +++ b/base_tier_validation_formula/__manifest__.py @@ -3,8 +3,7 @@ { "name": "Base Tier Validation Formula", - "summary": """ - Formulas for Base tier validation""", + "summary": "Formulas for Base tier validation", "version": "19.0.1.1.0", "category": "Tools", "license": "AGPL-3", diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html index 6fa8602a2..7a25e6cf5 100644 --- a/base_tier_validation_formula/static/description/index.html +++ b/base_tier_validation_formula/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Base Tier Validation Formula