From 03abaecf19b3d3dff9a089994972829feb335fee Mon Sep 17 00:00:00 2001 From: Kevin Khao Date: Thu, 7 Aug 2025 19:51:10 +0300 Subject: [PATCH 1/9] [IMP] base_tier_validation: support res.groups in addition to res.users in field-based validation --- .../models/tier_definition.py | 7 ++- base_tier_validation/models/tier_review.py | 19 ++++--- base_tier_validation/tests/common.py | 7 +++ .../tests/test_tier_validation.py | 51 +++++++++++++++++++ .../tests/tier_validation_tester.py | 4 ++ 5 files changed, 81 insertions(+), 7 deletions(-) diff --git a/base_tier_validation/models/tier_definition.py b/base_tier_validation/models/tier_definition.py index 5f5d221774..7bd7c3940a 100644 --- a/base_tier_validation/models/tier_definition.py +++ b/base_tier_validation/models/tier_definition.py @@ -120,7 +120,12 @@ def _compute_domain_reviewer_field(self): IrModelFields = self.env["ir.model.fields"].sudo() valid_reviewer_fields = dict( IrModelFields._read_group( - domain=[("model", "in", models), ("relation", "=", "res.users")], + domain=[ + ("model", "in", models), + "|", + ("relation", "=", "res.users"), + ("relation", "=", "res.groups"), + ], groupby=["model"], aggregates=["id:array_agg"], ) diff --git a/base_tier_validation/models/tier_review.py b/base_tier_validation/models/tier_review.py index cd5dc3bf4f..fa277921fd 100644 --- a/base_tier_validation/models/tier_review.py +++ b/base_tier_validation/models/tier_review.py @@ -150,15 +150,22 @@ def _compute_todo_by(self): def _get_reviewers(self): if self.reviewer_id or self.reviewer_group_id.users: return self.reviewer_id + self.reviewer_group_id.users - reviewer_field = self.env["res.users"] if self.reviewer_field_id: resource = self.env[self.model].browse(self.res_id) reviewer_field = getattr(resource, self.reviewer_field_id.name, False) - if not reviewer_field or not reviewer_field._name == "res.users": - raise ValidationError( - self.env._("There are no res.users in the selected field") - ) - return reviewer_field + if reviewer_field: + if reviewer_field._name == "res.groups": + return reviewer_field.users + elif reviewer_field._name == "res.users": + return reviewer_field + else: + raise ValidationError( + self.env._( + "Validation reviewer field " + "should be of the appropriate type" + ) + ) + return self.env["res.users"] def _notify_pending_status(self, review_ids): """Method to call and reuse abstract notification method""" diff --git a/base_tier_validation/tests/common.py b/base_tier_validation/tests/common.py index 1da841584f..ccac99bffe 100644 --- a/base_tier_validation/tests/common.py +++ b/base_tier_validation/tests/common.py @@ -94,6 +94,13 @@ def setUpClass(cls): login="test3", company_ids=[Command.set([cls.main_company.id, cls.other_company.id])], ) + # Create groups + cls.test_group = cls.env["res.groups"].create( + { + "name": "TestGroup", + "users": [(4, cls.test_user_1.id), (4, cls.test_user_2.id)], + } + ) # Create tier definitions: cls.tier_def_obj = cls.env["tier.definition"] cls.tier_definition = cls.tier_def_obj.create( diff --git a/base_tier_validation/tests/test_tier_validation.py b/base_tier_validation/tests/test_tier_validation.py index 26e228a3f7..4103d54853 100644 --- a/base_tier_validation/tests/test_tier_validation.py +++ b/base_tier_validation/tests/test_tier_validation.py @@ -1202,6 +1202,57 @@ def test_31_request_validation(self): self.test_user_3_multi_company.partner_id, followers.mapped("partner_id") ) + def test_32_test_review_by_res_groups_field(self): + """Test using field-based validation with groups""" + selected_field = self.env["ir.model.fields"].search( + [("model", "=", self.test_model._name), ("name", "=", "group_id")] + ) + test_record = self.test_model.create( + {"test_field": 2.5, "group_id": self.test_group.id} + ) + + definition = self.env["tier.definition"].create( + { + "model_id": self.tester_model.id, + "review_type": "field", + "reviewer_field_id": selected_field.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + + reviews = test_record.request_validation() + review = reviews.filtered(lambda r: r.definition_id == definition) + self.assertTrue(review) + self.assertEqual(review.reviewer_ids, self.test_user_2 | self.test_user_1) + + def test_33_test_review_by_wrong_field_type(self): + """Test using field-based validation with groups""" + selected_field = self.env["ir.model.fields"].search( + [("model", "=", self.test_model._name), ("name", "=", "menu_id")] + ) + test_record = self.test_model.create( + { + "test_field": 2.5, + "menu_id": self.env["ir.ui.menu"].search([], limit=1).id, + } + ) + self.assertTrue(test_record.menu_id) + self.env["tier.definition"].create( + { + "model_id": self.tester_model.id, + "review_type": "field", + "reviewer_field_id": selected_field.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + with self.assertRaisesRegex( + ValidationError, + "Validation reviewer field should be of the appropriate type", + ): + test_record.request_validation() + @tagged("at_install") class TierTierValidationView(CommonTierValidation): diff --git a/base_tier_validation/tests/tier_validation_tester.py b/base_tier_validation/tests/tier_validation_tester.py index 7e171e753e..85cc08a8d4 100644 --- a/base_tier_validation/tests/tier_validation_tester.py +++ b/base_tier_validation/tests/tier_validation_tester.py @@ -21,6 +21,10 @@ class TierValidationTester(models.Model): test_validation_field = fields.Integer(default=0) test_field = fields.Float() user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users") + group_id = fields.Many2one("res.groups", string="Assigned to (group)") + menu_id = fields.Many2one( + "ir.ui.menu", help="For testing choosing a wrong field type" + ) def action_confirm(self): self.write({"state": "confirmed"}) From a1ba918fabfb02dc645e6ecac4e1bb2016b1c418 Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Wed, 24 Sep 2025 19:00:22 -0500 Subject: [PATCH 2/9] [FIX] base_tier_validation: prevent error when trying to access review_ids in a one2many When the validations are in a model that is inside another model, after the reviews are approved, trying to open the one2many raises an error. This commit ensures that the value is taken from the correct record instead of env.model.root, which represents the main model and not the model that inherits tier.validation. --- .../src/components/tier_review_widget/tier_review_widget.esm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js index 7514d2ad4d..b9b87135af 100644 --- a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js @@ -12,7 +12,7 @@ export class ReviewsTable extends Component { } _getReviewData() { - const records = this.env.model.root.data.review_ids.records; + const records = this.props.record.data.review_ids.records; return records.map((record) => record.data); } From 25d6f5d591b457de46f2fc16b4ce13603816c4cf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 16 Oct 2025 10:33:43 +0000 Subject: [PATCH 3/9] [BOT] post-merge updates --- README.md | 2 +- base_tier_validation/README.rst | 2 +- base_tier_validation/__manifest__.py | 2 +- base_tier_validation/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 394a86099c..c43c498b57 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ addon | version | maintainers | summary [base_search_custom_field_filter](base_search_custom_field_filter/) | 18.0.1.0.0 | pedrobaeza | Add custom filters for fields via UI [base_substate](base_substate/) | 18.0.1.0.0 | | Base Sub State [base_technical_features](base_technical_features/) | 18.0.1.0.2 | | Access to technical features without activating debug mode -[base_tier_validation](base_tier_validation/) | 18.0.3.0.0 | LoisRForgeFlow | Implement a validation process based on tiers. +[base_tier_validation](base_tier_validation/) | 18.0.3.0.1 | LoisRForgeFlow | Implement a validation process based on tiers. [base_tier_validation_formula](base_tier_validation_formula/) | 18.0.1.0.0 | | Formulas for Base tier validation [base_tier_validation_forward](base_tier_validation_forward/) | 18.0.2.0.0 | kittiu | Forward option for base tiers [base_tier_validation_server_action](base_tier_validation_server_action/) | 18.0.1.0.0 | kittiu | Add option to call server action when a tier is validated diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst index 9e7da43fb8..5dba7bf38b 100644 --- a/base_tier_validation/README.rst +++ b/base_tier_validation/README.rst @@ -11,7 +11,7 @@ Base Tier Validation !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:6d11975caf64405a5a43026ff242109052744ce42ab068f3e50f93dd016d1208 + !! source digest: sha256:7e92c85959cd4ca3728411ad1d8f2c8469ef4b8087f611c95d07285ed4b8d0db !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png diff --git a/base_tier_validation/__manifest__.py b/base_tier_validation/__manifest__.py index 588e7a61dd..c49b0bd214 100644 --- a/base_tier_validation/__manifest__.py +++ b/base_tier_validation/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation", "summary": "Implement a validation process based on tiers.", - "version": "18.0.3.0.0", + "version": "18.0.3.0.1", "development_status": "Mature", "maintainers": ["LoisRForgeFlow"], "category": "Tools", diff --git a/base_tier_validation/static/description/index.html b/base_tier_validation/static/description/index.html index a9c8064f6d..14461e30c7 100644 --- a/base_tier_validation/static/description/index.html +++ b/base_tier_validation/static/description/index.html @@ -372,7 +372,7 @@

Base Tier Validation

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:6d11975caf64405a5a43026ff242109052744ce42ab068f3e50f93dd016d1208 +!! source digest: sha256:7e92c85959cd4ca3728411ad1d8f2c8469ef4b8087f611c95d07285ed4b8d0db !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Validating some operations is a common need across different areas in a From 82ede3e66f21bc92e0ba8b4c701ca323cf603344 Mon Sep 17 00:00:00 2001 From: "A.David-TSC" Date: Wed, 25 Jun 2025 17:34:10 +0300 Subject: [PATCH 4/9] [FIX] server_action_mass_edit: add onchange method for selection__ temp fields removals --- .../tests/test_mass_editing.py | 15 ++++++ .../wizard/mass_editing_wizard.py | 50 +++++++++++++++++++ .../wizard/mass_editing_wizard.py | 47 ----------------- 3 files changed, 65 insertions(+), 47 deletions(-) diff --git a/server_action_mass_edit/tests/test_mass_editing.py b/server_action_mass_edit/tests/test_mass_editing.py index 77ddc70338..e152df8a75 100644 --- a/server_action_mass_edit/tests/test_mass_editing.py +++ b/server_action_mass_edit/tests/test_mass_editing.py @@ -388,6 +388,21 @@ def test_onchanges(self): mass_edit_line_form.field_id = self.env.ref("base.field_res_users__country_id") self.assertFalse(mass_edit_line_form.widget_option) + def test_onchange_call(self): + """Onchange call does not error on dynamically added fields""" + self.env["mass.editing.wizard"].with_context( + active_ids=self.env.user.ids, + active_model=self.env.user._name, + server_action_id=self.mass_editing_user.id, + ).onchange( + values={}, + field_names={}, + fields_spec={ + "selection__email": {}, + "email": {}, + }, + ) + def test_onchange_model_id(self): """Test super call of `_onchange_model_id`""" diff --git a/server_action_mass_edit/wizard/mass_editing_wizard.py b/server_action_mass_edit/wizard/mass_editing_wizard.py index d87e91501e..0f3c235260 100644 --- a/server_action_mass_edit/wizard/mass_editing_wizard.py +++ b/server_action_mass_edit/wizard/mass_editing_wizard.py @@ -69,6 +69,56 @@ def default_get(self, fields): return res + def onchange(self, values, field_names, fields_spec): + # Make sure the values passed to the super cover the dynamic fields. + # No onchanges are defined, but Odoo will call the onchange with empty + # values for all fields when opening the wizard form view. + first_call = not field_names + if first_call: + field_names = [fname for fname in values if fname != "id"] + missing_names = [fname for fname in fields_spec if fname not in values] + defaults = self.default_get(missing_names) + for field_name in missing_names: + values[field_name] = defaults.get(field_name, False) + if field_name in defaults: + field_names.append(field_name) + + server_action_id = self.env.context.get("server_action_id") + server_action = self.env["ir.actions.server"].sudo().browse(server_action_id) + if not server_action: + return super().onchange(values, field_names, fields_spec) + dynamic_fields = {} + + for line in server_action.mapped("mass_edit_line_ids"): + values["selection__" + line.field_id.name] = "ignore" + values[line.field_id.name] = False + + # Make sure there is an entry for the default value retrieved above. + dynamic_fields["selection__" + line.field_id.name] = fields.Selection( + [("ignore", _("Don't touch"))], default="ignore" + ) + dynamic_fields[line.field_id.name] = fields.Text([()], default=False) + + self._fields.update(dynamic_fields) + + res = super().onchange(values, field_names, fields_spec) + if not res["value"]: + value = {key: value for key, value in values.items() if value is not False} + res["value"] = value + + for field in dynamic_fields: + self._fields.pop(field) + + view_temp = ( + self.env["ir.ui.view"] + .sudo() + .search([("name", "=", "Temporary Mass Editing Wizard")], limit=1) + ) + if view_temp: + view_temp.unlink() + + return res + @api.model def _prepare_fields(self, line, field, field_info): result = {} diff --git a/server_action_mass_edit_onchange/wizard/mass_editing_wizard.py b/server_action_mass_edit_onchange/wizard/mass_editing_wizard.py index f6e5065b76..b72d4843ee 100644 --- a/server_action_mass_edit_onchange/wizard/mass_editing_wizard.py +++ b/server_action_mass_edit_onchange/wizard/mass_editing_wizard.py @@ -24,53 +24,6 @@ def default_get(self, fields): ) return res - def onchange(self, values, field_names, fields_spec): - first_call = not field_names - if first_call: - field_names = [fname for fname in values if fname != "id"] - missing_names = [fname for fname in fields_spec if fname not in values] - defaults = self.default_get(missing_names) - for field_name in missing_names: - values[field_name] = defaults.get(field_name, False) - if field_name in defaults: - field_names.append(field_name) - - server_action_id = self.env.context.get("server_action_id") - server_action = self.env["ir.actions.server"].sudo().browse(server_action_id) - if not server_action: - return super().onchange(values, field_names, fields_spec) - dynamic_fields = {} - - for line in server_action.mapped("mass_edit_line_ids"): - values["selection__" + line.field_id.name] = "ignore" - values[line.field_id.name] = False - - dynamic_fields["selection__" + line.field_id.name] = fields.Selection( - [], default="ignore" - ) - - dynamic_fields[line.field_id.name] = fields.Text([()], default=False) - - self._fields.update(dynamic_fields) - - res = super().onchange(values, field_names, fields_spec) - if not res["value"]: - value = {key: value for key, value in values.items() if value is not False} - res["value"] = value - - for field in dynamic_fields: - self._fields.pop(field) - - view_temp = ( - self.env["ir.ui.view"] - .sudo() - .search([("name", "=", "Temporary Mass Editing Wizard")], limit=1) - ) - if view_temp: - view_temp.unlink() - - return res - def _exec_write(self, server_action, vals): active_ids = self.env.context.get("active_ids", []) model = self.env[server_action.model_id.model].with_context(mass_edit=True) From 95c283446d5e0fa610b433471e82a3575b9b839e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 17 Oct 2025 14:48:09 +0000 Subject: [PATCH 5/9] [BOT] post-merge updates --- README.md | 4 ++-- server_action_mass_edit/README.rst | 2 +- server_action_mass_edit/__manifest__.py | 2 +- server_action_mass_edit/static/description/index.html | 2 +- server_action_mass_edit_onchange/README.rst | 2 +- server_action_mass_edit_onchange/__manifest__.py | 2 +- .../static/description/index.html | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c43c498b57..f8342dd9b1 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,8 @@ addon | version | maintainers | summary [multi_step_wizard](multi_step_wizard/) | 18.0.1.0.0 | | Multi-Steps Wizards [sequence_check_digit](sequence_check_digit/) | 18.0.1.1.0 | | Adds a check digit on sequences [sequence_reset_period](sequence_reset_period/) | 18.0.1.0.0 | | Auto-generate yearly/monthly/weekly/daily sequence period ranges -[server_action_mass_edit](server_action_mass_edit/) | 18.0.1.1.0 | | Mass Editing -[server_action_mass_edit_onchange](server_action_mass_edit_onchange/) | 18.0.1.1.0 | | Extension of server_action_mass_edit +[server_action_mass_edit](server_action_mass_edit/) | 18.0.1.1.1 | | Mass Editing +[server_action_mass_edit_onchange](server_action_mass_edit_onchange/) | 18.0.1.1.1 | | Extension of server_action_mass_edit [template_content_swapper](template_content_swapper/) | 18.0.1.0.0 | yostashiro AungKoKoLin1997 | Template Content Swapper [//]: # (end addons) diff --git a/server_action_mass_edit/README.rst b/server_action_mass_edit/README.rst index 3a998a2389..2d5f61725c 100644 --- a/server_action_mass_edit/README.rst +++ b/server_action_mass_edit/README.rst @@ -11,7 +11,7 @@ Mass Editing !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ad5b24fa705bc1129ad8931d6df7ffede0b4bfc4740e526e137dffeaee8af422 + !! source digest: sha256:c1f6aa8b7cc70dd834b9fc4bfdf6715a737a8a9ab1ea49f4867d5731ad8632f8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/server_action_mass_edit/__manifest__.py b/server_action_mass_edit/__manifest__.py index f810236012..59d6f90f8c 100644 --- a/server_action_mass_edit/__manifest__.py +++ b/server_action_mass_edit/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Mass Editing", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "author": "Serpent Consulting Services Pvt. Ltd., " "Tecnativa, " "GRAP, " diff --git a/server_action_mass_edit/static/description/index.html b/server_action_mass_edit/static/description/index.html index 0f2bfaaec0..382a2ca420 100644 --- a/server_action_mass_edit/static/description/index.html +++ b/server_action_mass_edit/static/description/index.html @@ -372,7 +372,7 @@

Mass Editing

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

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

This module allows to edit several records at the same time in any Odoo diff --git a/server_action_mass_edit_onchange/README.rst b/server_action_mass_edit_onchange/README.rst index 040259c7ed..c99291990a 100644 --- a/server_action_mass_edit_onchange/README.rst +++ b/server_action_mass_edit_onchange/README.rst @@ -11,7 +11,7 @@ Server Action Mass Edit Onchange !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:4ecb83298926e7e790173247738d18205a50ef65a90e98d405627251de3de3ad + !! source digest: sha256:2f70ce6aa21a25dfd9ed1741f2fea8469e77fe5d91d0fa4ed7df629fcc0d07a4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/server_action_mass_edit_onchange/__manifest__.py b/server_action_mass_edit_onchange/__manifest__.py index 87f675fe86..875856a2fe 100644 --- a/server_action_mass_edit_onchange/__manifest__.py +++ b/server_action_mass_edit_onchange/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Server Action Mass Edit Onchange", "summary": """Extension of server_action_mass_edit""", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "license": "AGPL-3", "author": "Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/server-ux", diff --git a/server_action_mass_edit_onchange/static/description/index.html b/server_action_mass_edit_onchange/static/description/index.html index 0874d6a26b..1bd6fb2545 100644 --- a/server_action_mass_edit_onchange/static/description/index.html +++ b/server_action_mass_edit_onchange/static/description/index.html @@ -372,7 +372,7 @@

Server Action Mass Edit Onchange

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

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

This module is an extension of module Mass Editing to support playing From e8e2576497c4beef6c6c958f8fd0b7989a1227b5 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 20 Oct 2025 10:08:18 +0000 Subject: [PATCH 6/9] [UPD] Update base_tier_validation.pot --- base_tier_validation/i18n/base_tier_validation.pot | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/base_tier_validation/i18n/base_tier_validation.pot b/base_tier_validation/i18n/base_tier_validation.pot index 28c631a21a..1636308417 100644 --- a/base_tier_validation/i18n/base_tier_validation.pot +++ b/base_tier_validation/i18n/base_tier_validation.pot @@ -648,12 +648,6 @@ msgstr "" msgid "The review has been reset by %s." msgstr "" -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -814,6 +808,12 @@ msgstr "" msgid "Validation Status" msgstr "" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" From 0eaff63ac22a4f2705ac822986dde35596080791 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 20 Oct 2025 10:12:03 +0000 Subject: [PATCH 7/9] [BOT] post-merge updates --- README.md | 2 +- base_tier_validation/README.rst | 2 +- base_tier_validation/__manifest__.py | 2 +- base_tier_validation/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f8342dd9b1..8bc0b9eca9 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ addon | version | maintainers | summary [base_search_custom_field_filter](base_search_custom_field_filter/) | 18.0.1.0.0 | pedrobaeza | Add custom filters for fields via UI [base_substate](base_substate/) | 18.0.1.0.0 | | Base Sub State [base_technical_features](base_technical_features/) | 18.0.1.0.2 | | Access to technical features without activating debug mode -[base_tier_validation](base_tier_validation/) | 18.0.3.0.1 | LoisRForgeFlow | Implement a validation process based on tiers. +[base_tier_validation](base_tier_validation/) | 18.0.3.1.0 | LoisRForgeFlow | Implement a validation process based on tiers. [base_tier_validation_formula](base_tier_validation_formula/) | 18.0.1.0.0 | | Formulas for Base tier validation [base_tier_validation_forward](base_tier_validation_forward/) | 18.0.2.0.0 | kittiu | Forward option for base tiers [base_tier_validation_server_action](base_tier_validation_server_action/) | 18.0.1.0.0 | kittiu | Add option to call server action when a tier is validated diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst index 5dba7bf38b..ce33fce265 100644 --- a/base_tier_validation/README.rst +++ b/base_tier_validation/README.rst @@ -11,7 +11,7 @@ Base Tier Validation !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7e92c85959cd4ca3728411ad1d8f2c8469ef4b8087f611c95d07285ed4b8d0db + !! source digest: sha256:3e44413fd72f8949deba313c3f31047cbf30ba3b17d78342590d2376001d905f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png diff --git a/base_tier_validation/__manifest__.py b/base_tier_validation/__manifest__.py index c49b0bd214..005c6ca483 100644 --- a/base_tier_validation/__manifest__.py +++ b/base_tier_validation/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation", "summary": "Implement a validation process based on tiers.", - "version": "18.0.3.0.1", + "version": "18.0.3.1.0", "development_status": "Mature", "maintainers": ["LoisRForgeFlow"], "category": "Tools", diff --git a/base_tier_validation/static/description/index.html b/base_tier_validation/static/description/index.html index 14461e30c7..7b55c53b67 100644 --- a/base_tier_validation/static/description/index.html +++ b/base_tier_validation/static/description/index.html @@ -372,7 +372,7 @@

Base Tier Validation

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:7e92c85959cd4ca3728411ad1d8f2c8469ef4b8087f611c95d07285ed4b8d0db +!! source digest: sha256:3e44413fd72f8949deba313c3f31047cbf30ba3b17d78342590d2376001d905f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Validating some operations is a common need across different areas in a From c775680d75034f9c826eb06a235ce0fe770a5fce Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 20 Oct 2025 10:12:14 +0000 Subject: [PATCH 8/9] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: server-ux-18.0/server-ux-18.0-base_tier_validation Translate-URL: https://translation.odoo-community.org/projects/server-ux-18-0/server-ux-18-0-base_tier_validation/ --- base_tier_validation/i18n/es.po | 15 +++++++++------ base_tier_validation/i18n/es_MX.po | 15 +++++++++------ base_tier_validation/i18n/fr.po | 15 +++++++++------ base_tier_validation/i18n/it.po | 15 +++++++++------ base_tier_validation/i18n/nl.po | 15 +++++++++------ base_tier_validation/i18n/nl_NL.po | 15 +++++++++------ base_tier_validation/i18n/sv.po | 15 +++++++++------ base_tier_validation/i18n/tr.po | 15 +++++++++------ base_tier_validation/i18n/vi_VN.po | 12 ++++++------ base_tier_validation/i18n/zh_CN.po | 12 ++++++------ 10 files changed, 84 insertions(+), 60 deletions(-) diff --git a/base_tier_validation/i18n/es.po b/base_tier_validation/i18n/es.po index 1ba164005e..308529a112 100644 --- a/base_tier_validation/i18n/es.po +++ b/base_tier_validation/i18n/es.po @@ -681,12 +681,6 @@ msgstr "Estado" msgid "The review has been reset by %s." msgstr "La revisión ha sido reiniciada por %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "No hay res.usuarios en el campo seleccionado" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -847,6 +841,12 @@ msgstr "Fecha de Validación Formateada" msgid "Validation Status" msgstr "Estado de validación" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -910,6 +910,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "ej. Validación de Nivel por..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "No hay res.usuarios en el campo seleccionado" + #, python-format #~ msgid "Activity" #~ msgstr "Actividades" diff --git a/base_tier_validation/i18n/es_MX.po b/base_tier_validation/i18n/es_MX.po index b3dacca49a..6483283e1b 100644 --- a/base_tier_validation/i18n/es_MX.po +++ b/base_tier_validation/i18n/es_MX.po @@ -656,12 +656,6 @@ msgstr "Estatus" msgid "The review has been reset by %s." msgstr "%s ha restablecido la revisión." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "No hay res.users en el campo seleccionado" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -822,6 +816,12 @@ msgstr "" msgid "Validation Status" msgstr "" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -885,6 +885,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "p.ej. Validación de nivel para ..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "No hay res.users en el campo seleccionado" + #, python-format #~ msgid "" #~ "This action needs to be validated for at least one record. \n" diff --git a/base_tier_validation/i18n/fr.po b/base_tier_validation/i18n/fr.po index 5eef6fb330..8d6b934d06 100644 --- a/base_tier_validation/i18n/fr.po +++ b/base_tier_validation/i18n/fr.po @@ -659,12 +659,6 @@ msgstr "Statut" msgid "The review has been reset by %s." msgstr "Cette revue a été réinitialisée par %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "Le champ sélectionné ne référence pas des res.users" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -825,6 +819,12 @@ msgstr "Date de validation formatée" msgid "Validation Status" msgstr "" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -888,6 +888,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "par ex Niveau de validation pour..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Le champ sélectionné ne référence pas des res.users" + #, python-format #~ msgid "Activity" #~ msgstr "Activité" diff --git a/base_tier_validation/i18n/it.po b/base_tier_validation/i18n/it.po index 8b7ef87c30..b673bfcec6 100644 --- a/base_tier_validation/i18n/it.po +++ b/base_tier_validation/i18n/it.po @@ -688,12 +688,6 @@ msgstr "Stato" msgid "The review has been reset by %s." msgstr "L'approvazione è stata riavviata da %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "Non ci sono res.users nel campo selezionato" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -858,6 +852,12 @@ msgstr "Data formattata validazione" msgid "Validation Status" msgstr "Stato validazione" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -931,6 +931,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "es. Validazione livello per ..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Non ci sono res.users nel campo selezionato" + #, python-format #~ msgid "Activity" #~ msgstr "Attività" diff --git a/base_tier_validation/i18n/nl.po b/base_tier_validation/i18n/nl.po index bea044bf65..96229640f5 100644 --- a/base_tier_validation/i18n/nl.po +++ b/base_tier_validation/i18n/nl.po @@ -691,12 +691,6 @@ msgstr "Status" msgid "The review has been reset by %s." msgstr "De beoordeling is opnieuw ingesteld door %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "Er zijn geen res.users in het geselecteerde veld" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -861,6 +855,12 @@ msgstr "Validatie Datum" msgid "Validation Status" msgstr "Validatiestatus" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -933,3 +933,6 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form msgid "e.g. Tier Validation for..." msgstr "bijv. Niveau Validatie voor..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Er zijn geen res.users in het geselecteerde veld" diff --git a/base_tier_validation/i18n/nl_NL.po b/base_tier_validation/i18n/nl_NL.po index 055c755812..efb4b172ba 100644 --- a/base_tier_validation/i18n/nl_NL.po +++ b/base_tier_validation/i18n/nl_NL.po @@ -691,12 +691,6 @@ msgstr "Status" msgid "The review has been reset by %s." msgstr "De beoordeling is opnieuw gestart door %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "Er zijn geen res.users in het geselecteerde veld" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -861,6 +855,12 @@ msgstr "Validatie Datum" msgid "Validation Status" msgstr "Validatie Status" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -934,6 +934,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "bijv. Tier validatie voor..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Er zijn geen res.users in het geselecteerde veld" + #, python-format #~ msgid "Activity" #~ msgstr "Activiteit" diff --git a/base_tier_validation/i18n/sv.po b/base_tier_validation/i18n/sv.po index 76b8f7ebef..d7d4ff1370 100644 --- a/base_tier_validation/i18n/sv.po +++ b/base_tier_validation/i18n/sv.po @@ -682,12 +682,6 @@ msgstr "Status" msgid "The review has been reset by %s." msgstr "Granskningen har återställts av %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "Det finns inga res.users i det valda fältet" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -848,6 +842,12 @@ msgstr "Validering Formated Date" msgid "Validation Status" msgstr "Status för validering" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -911,6 +911,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "t.ex. attestvalidering för..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Det finns inga res.users i det valda fältet" + #, python-format #~ msgid "Activity" #~ msgstr "Aktivitet" diff --git a/base_tier_validation/i18n/tr.po b/base_tier_validation/i18n/tr.po index 9c80b66d1e..393a8fff84 100644 --- a/base_tier_validation/i18n/tr.po +++ b/base_tier_validation/i18n/tr.po @@ -686,12 +686,6 @@ msgstr "Durumu" msgid "The review has been reset by %s." msgstr "İnceleme %s tarafından sıfırlandı." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "Seçili alanda res.kullanıcı yok" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -855,6 +849,12 @@ msgstr "Doğrulama Format Tarihi" msgid "Validation Status" msgstr "Doğrulama Durumu" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" @@ -928,6 +928,9 @@ msgstr "" msgid "e.g. Tier Validation for..." msgstr "ör. Şunun için Seviye Doğrulaması..." +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Seçili alanda res.kullanıcı yok" + #, python-format #~ msgid "Activity" #~ msgstr "Aktivite" diff --git a/base_tier_validation/i18n/vi_VN.po b/base_tier_validation/i18n/vi_VN.po index 3ed155112c..99e64c83de 100644 --- a/base_tier_validation/i18n/vi_VN.po +++ b/base_tier_validation/i18n/vi_VN.po @@ -664,12 +664,6 @@ msgstr "" msgid "The review has been reset by %s." msgstr "Đánh giá đã được thiết lập lại bởi %s." -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -833,6 +827,12 @@ msgstr "" msgid "Validation Status" msgstr "" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" diff --git a/base_tier_validation/i18n/zh_CN.po b/base_tier_validation/i18n/zh_CN.po index 45a7fca376..21f90865a0 100644 --- a/base_tier_validation/i18n/zh_CN.po +++ b/base_tier_validation/i18n/zh_CN.po @@ -651,12 +651,6 @@ msgstr "状态" msgid "The review has been reset by %s." msgstr "" -#. module: base_tier_validation -#. odoo-python -#: code:addons/base_tier_validation/models/tier_review.py:0 -msgid "There are no res.users in the selected field" -msgstr "" - #. module: base_tier_validation #. odoo-python #: code:addons/base_tier_validation/models/tier_validation.py:0 @@ -819,6 +813,12 @@ msgstr "" msgid "Validation Status" msgstr "" +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids msgid "Validations" From 62f937e560bc1d3d36fffeef9af5449335678e6d Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 21 Oct 2025 06:44:47 +0000 Subject: [PATCH 9/9] Translated using Weblate (Italian) Currently translated at 100.0% (146 of 146 strings) Translation: server-ux-18.0/server-ux-18.0-base_tier_validation Translate-URL: https://translation.odoo-community.org/projects/server-ux-18-0/server-ux-18-0-base_tier_validation/it/ --- base_tier_validation/i18n/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base_tier_validation/i18n/it.po b/base_tier_validation/i18n/it.po index b673bfcec6..f464fabdba 100644 --- a/base_tier_validation/i18n/it.po +++ b/base_tier_validation/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-07-23 14:25+0000\n" +"PO-Revision-Date: 2025-10-21 09:43+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -856,7 +856,7 @@ msgstr "Stato validazione" #. odoo-python #: code:addons/base_tier_validation/models/tier_review.py:0 msgid "Validation reviewer field should be of the appropriate type" -msgstr "" +msgstr "Il campo del revisore di convalida deve essere del tipo appropriato" #. module: base_tier_validation #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids