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/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 "" 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 "取消" 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 6e85ec4345..97ff5bea43 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -690,6 +690,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/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 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 94cbc12fc9..0f5033f07e 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""" 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 .*