From 7ef978c6c36b524e66107934650be625466830c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Mon, 9 Mar 2026 12:35:39 +0100 Subject: [PATCH 1/5] [IMP] base_tier_validation: Add cancel status to review Related to https://github.com/OCA/server-ux/issues/1245 TT61255 --- base_tier_validation/models/tier_review.py | 1 + .../models/tier_validation.py | 7 +++ .../tier_review_widget/tier_review_widget.xml | 2 +- .../tests/test_tier_validation.py | 54 ++++++++++++++++++- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/base_tier_validation/models/tier_review.py b/base_tier_validation/models/tier_review.py index ef64f2b029..34a6a017dc 100644 --- a/base_tier_validation/models/tier_review.py +++ b/base_tier_validation/models/tier_review.py @@ -23,6 +23,7 @@ class TierReview(models.Model): ("pending", "Pending"), ("rejected", "Rejected"), ("approved", "Approved"), + ("cancel", "Cancel"), ], default="waiting", ) diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py index fa4688a6b8..3247af78ed 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -692,6 +692,13 @@ def _rejected_tier(self, tiers=False): ) # We need to notify all pending users if there is approve sequence if tier_reviews and any(review.approve_sequence for review in tier_reviews): + # If there are waiting reviews that should be approved sequentially, + # they must be marked as canceled + waiting_reviews = self.review_ids.filtered( + lambda r: r.status == "waiting" and r.approve_sequence + ) + if waiting_reviews: + waiting_reviews.write({"status": "cancel"}) reviews_to_notify = self.review_ids.filtered( lambda r: r.status == "pending" and r.definition_id.notify_on_rejected ) diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml index 99582e540e..8798e5986b 100644 --- a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml @@ -50,7 +50,7 @@ t-key="review.id" > diff --git a/base_tier_validation/tests/test_tier_validation.py b/base_tier_validation/tests/test_tier_validation.py index 01357bb55f..74c0099bc1 100644 --- a/base_tier_validation/tests/test_tier_validation.py +++ b/base_tier_validation/tests/test_tier_validation.py @@ -194,7 +194,7 @@ def test_11_add_comment_rejection(self): )._notify_rejected_review_body() self.assertEqual(comment, "A review was rejected by John. (Test Comment)") - def test_12_approve_sequence(self): + def test_12_approve_sequence_validate(self): # Create new test record test_record = self.test_model.create({"test_field": 2.5}) # Create tier definitions @@ -239,6 +239,58 @@ def test_12_approve_sequence(self): record1.validate_tier() self.assertTrue(any(r.status == "approved" for r in record1.review_ids)) + def test_12_approve_sequence_reject(self): + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + tier_def_1 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 30, + } + ) + tier_def_2 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_2.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 20, + } + ) + tier_def_3 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_3_multi_company.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 10, + } + ) + # Request validation + self.assertFalse(self.test_record.review_ids) + reviews = test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + record = test_record.with_user(self.test_user_1.id) + self.assertTrue(record.can_review) + # User 1 validates the record, extra reviews should be cancel. + self.assertFalse(any(r.status == "approved" for r in record.review_ids)) + record.reject_tier() + self.assertTrue(any(r.status == "rejected" for r in record.review_ids)) + self.assertTrue(any(r.status == "cancel" for r in record.review_ids)) + review_1 = record.review_ids.filtered(lambda x: x.definition_id == tier_def_1) + self.assertEqual(review_1.status, "rejected") + review_2 = record.review_ids.filtered(lambda x: x.definition_id == tier_def_2) + self.assertEqual(review_2.status, "cancel") + review_3 = record.review_ids.filtered(lambda x: x.definition_id == tier_def_3) + self.assertEqual(review_3.status, "cancel") + def test_12_approve_sequence_same_user(self): """Similar to test_12_approve_sequence, but all same users, the approve_sequence still apply correctly""" From ca7dd94e2484f95bf0ef94a5d9bab1b028577196 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Mon, 13 Apr 2026 09:44:03 +0200 Subject: [PATCH 2/5] [FIX] checklog-odoo.cfg: ignore Killing chrome descendants-or-self warning Warning introduced in https://github.com/odoo/odoo/commit/d22e0b4e181de0940810b0f0a760bcfe288042a7. The previous warning apparently did not occur, as it was not featured in checklog-odoo.cfg. ``` 2026-04-13 06:39:49,548 745 WARNING odoo odoo.addons.base_import_security_group.tests.test_base_import_security_group.TestImportSecurityGroup.test_access_demo: Killing chrome descendants-or-self of 761: 6 remaining - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) 2026-04-13 06:40:08,196 745 WARNING odoo odoo.addons.base_import_security_group.tests.test_base_import_security_group.TestImportSecurityGroup.test_import_button: Killing chrome descendants-or-self of 881: 6 remaining - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) 2026-04-13 06:40:26,898 745 WARNING odoo odoo.addons.base_import_security_group.tests.test_base_import_security_group.TestImportSecurityGroup.test_no_import_button: Killing chrome descendants-or-self of 1008: 6 remaining - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) ``` --- checklog-odoo.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/checklog-odoo.cfg b/checklog-odoo.cfg index 0b55b7bf66..4864958554 100644 --- a/checklog-odoo.cfg +++ b/checklog-odoo.cfg @@ -1,3 +1,4 @@ [checklog-odoo] ignore= WARNING.* 0 failed, 0 error\(s\).* + WARNING .* Killing chrome descendants-or-self .* From 54629c1a80d6f08239e533b2d5f72963739318cf Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 28 Apr 2026 14:58:27 +0000 Subject: [PATCH 3/5] [UPD] Update base_tier_validation.pot --- base_tier_validation/i18n/base_tier_validation.pot | 1 + 1 file changed, 1 insertion(+) diff --git a/base_tier_validation/i18n/base_tier_validation.pot b/base_tier_validation/i18n/base_tier_validation.pot index 1636308417..a80120140d 100644 --- a/base_tier_validation/i18n/base_tier_validation.pot +++ b/base_tier_validation/i18n/base_tier_validation.pot @@ -184,6 +184,7 @@ msgid "" msgstr "" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "" From 40e2e137fd5a1240c7cb9836bea85f642a0edf1f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 28 Apr 2026 15:06:24 +0000 Subject: [PATCH 4/5] [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 31717b86e2..87d1889151 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ addon | version | maintainers | summary [base_search_custom_field_filter](base_search_custom_field_filter/) | 18.0.1.0.1 | pedrobaeza | Add custom filters for fields via UI [base_substate](base_substate/) | 18.0.1.0.2 | | 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.3.1 | LoisRForgeFlow | Implement a validation process based on tiers. +[base_tier_validation](base_tier_validation/) | 18.0.3.4.0 | LoisRForgeFlow | Implement a validation process based on tiers. [base_tier_validation_confirm_auth](base_tier_validation_confirm_auth/) | 18.0.1.0.0 | | Authentication confirmation for base tiers. [base_tier_validation_correction](base_tier_validation_correction/) | 18.0.1.0.1 | kittiu | Correct tier.review data after it has been created. [base_tier_validation_formula](base_tier_validation_formula/) | 18.0.1.0.1 | | Formulas for Base tier validation diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst index b54f257ca7..768af4a1ec 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:dc242d6c50cc357fbd98be3778c5e3013971e9ea0622db72e500fd72d0de7c80 + !! source digest: sha256:1823d16061ca83ece8322b77d320bb735e7462305d7ae60fd3e15819f3c6f276 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 c43098f954..a046a2d0ce 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.3.1", + "version": "18.0.3.4.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 54597067c6..94b4a40bc3 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:dc242d6c50cc357fbd98be3778c5e3013971e9ea0622db72e500fd72d0de7c80 +!! source digest: sha256:1823d16061ca83ece8322b77d320bb735e7462305d7ae60fd3e15819f3c6f276 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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 11c0dc82eacf11931cb365efc559665bafae55a0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 28 Apr 2026 15:07:10 +0000 Subject: [PATCH 5/5] 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/de.po | 7 ++++--- base_tier_validation/i18n/es.po | 1 + base_tier_validation/i18n/es_MX.po | 1 + base_tier_validation/i18n/fr.po | 1 + base_tier_validation/i18n/it.po | 1 + base_tier_validation/i18n/ja.po | 7 ++++--- base_tier_validation/i18n/nl.po | 1 + base_tier_validation/i18n/nl_NL.po | 1 + base_tier_validation/i18n/sv.po | 1 + base_tier_validation/i18n/tr.po | 1 + base_tier_validation/i18n/vi_VN.po | 1 + base_tier_validation/i18n/zh_CN.po | 1 + 12 files changed, 18 insertions(+), 6 deletions(-) diff --git a/base_tier_validation/i18n/de.po b/base_tier_validation/i18n/de.po index 115222a73b..3b700205bc 100644 --- a/base_tier_validation/i18n/de.po +++ b/base_tier_validation/i18n/de.po @@ -185,6 +185,7 @@ msgid "" msgstr "" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "" @@ -351,9 +352,9 @@ msgstr "" #. module: base_tier_validation #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending msgid "" -"If set, all possible reviewers will be notified by email when this status is" -" reached.Usefull in an Approve by sequence scenario. An notification request" -" to review is sent out when it's their turn to review." +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." msgstr "" #. module: base_tier_validation diff --git a/base_tier_validation/i18n/es.po b/base_tier_validation/i18n/es.po index 0e3439da84..aafa3c14de 100644 --- a/base_tier_validation/i18n/es.po +++ b/base_tier_validation/i18n/es.po @@ -204,6 +204,7 @@ msgstr "" " secuencia de aprobación se ha alcanzado" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Cancelar" diff --git a/base_tier_validation/i18n/es_MX.po b/base_tier_validation/i18n/es_MX.po index 6483283e1b..e6a6b74bbd 100644 --- a/base_tier_validation/i18n/es_MX.po +++ b/base_tier_validation/i18n/es_MX.po @@ -190,6 +190,7 @@ msgstr "" " se ha logrado aprobar la secuencia" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Cancelado" diff --git a/base_tier_validation/i18n/fr.po b/base_tier_validation/i18n/fr.po index fa9abeaaee..7194a9af0b 100644 --- a/base_tier_validation/i18n/fr.po +++ b/base_tier_validation/i18n/fr.po @@ -208,6 +208,7 @@ msgstr "" " qu'une séquence d'approbation a été effectuée" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Annuler" diff --git a/base_tier_validation/i18n/it.po b/base_tier_validation/i18n/it.po index e98b65eb5b..59a32d5479 100644 --- a/base_tier_validation/i18n/it.po +++ b/base_tier_validation/i18n/it.po @@ -206,6 +206,7 @@ msgstr "" " sequenza di approvazione è archiviata" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Annulla" diff --git a/base_tier_validation/i18n/ja.po b/base_tier_validation/i18n/ja.po index 4b1164f476..566517584a 100644 --- a/base_tier_validation/i18n/ja.po +++ b/base_tier_validation/i18n/ja.po @@ -185,6 +185,7 @@ msgid "" msgstr "" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "" @@ -351,9 +352,9 @@ msgstr "" #. module: base_tier_validation #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending msgid "" -"If set, all possible reviewers will be notified by email when this status is" -" reached.Usefull in an Approve by sequence scenario. An notification request" -" to review is sent out when it's their turn to review." +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." msgstr "" #. module: base_tier_validation diff --git a/base_tier_validation/i18n/nl.po b/base_tier_validation/i18n/nl.po index 96229640f5..efa95dd5b1 100644 --- a/base_tier_validation/i18n/nl.po +++ b/base_tier_validation/i18n/nl.po @@ -206,6 +206,7 @@ msgstr "" " goedkeuringssequentie is bereikt" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Annuleren" diff --git a/base_tier_validation/i18n/nl_NL.po b/base_tier_validation/i18n/nl_NL.po index efb4b172ba..2c8f26cf79 100644 --- a/base_tier_validation/i18n/nl_NL.po +++ b/base_tier_validation/i18n/nl_NL.po @@ -206,6 +206,7 @@ msgstr "" " goedkeuringssequentie is bereikt" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Annuleer" diff --git a/base_tier_validation/i18n/sv.po b/base_tier_validation/i18n/sv.po index d7d4ff1370..2bf1b6c087 100644 --- a/base_tier_validation/i18n/sv.po +++ b/base_tier_validation/i18n/sv.po @@ -203,6 +203,7 @@ msgstr "" " godkännandesekvensen har uppnåtts" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "Avbryt" diff --git a/base_tier_validation/i18n/tr.po b/base_tier_validation/i18n/tr.po index 64dce3576c..282bf3c7a5 100644 --- a/base_tier_validation/i18n/tr.po +++ b/base_tier_validation/i18n/tr.po @@ -205,6 +205,7 @@ msgstr "" " onay dizisi elde edildi" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "İptal" diff --git a/base_tier_validation/i18n/vi_VN.po b/base_tier_validation/i18n/vi_VN.po index 99e64c83de..3fede70220 100644 --- a/base_tier_validation/i18n/vi_VN.po +++ b/base_tier_validation/i18n/vi_VN.po @@ -200,6 +200,7 @@ msgid "" msgstr "" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "" diff --git a/base_tier_validation/i18n/zh_CN.po b/base_tier_validation/i18n/zh_CN.po index 21f90865a0..d5f9465c4d 100644 --- a/base_tier_validation/i18n/zh_CN.po +++ b/base_tier_validation/i18n/zh_CN.po @@ -187,6 +187,7 @@ msgid "" msgstr "" #. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__cancel #: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard msgid "Cancel" msgstr "取消"