Maintainers
+Maintainers
This module is maintained by the OCA.
@@ -652,6 +647,5 @@ diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst index 9e7da43fb8..a5e3c2f1b8 100644 --- a/base_tier_validation/README.rst +++ b/base_tier_validation/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ==================== Base Tier Validation ==================== @@ -17,7 +13,7 @@ Base Tier Validation .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png :target: https://odoo-community.org/page/development-status :alt: Mature -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |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 diff --git a/base_tier_validation/__manifest__.py b/base_tier_validation/__manifest__.py index 588e7a61dd..56ddea6ab8 100644 --- a/base_tier_validation/__manifest__.py +++ b/base_tier_validation/__manifest__.py @@ -23,6 +23,7 @@ "views/tier_review_view.xml", "views/tier_validation_exception_view.xml", "wizard/comment_wizard_view.xml", + "wizard/password_wizard_view.xml", "templates/tier_validation_templates.xml", ], "assets": { diff --git a/base_tier_validation/models/tier_definition.py b/base_tier_validation/models/tier_definition.py index 5f5d221774..c0d2110c39 100644 --- a/base_tier_validation/models/tier_definition.py +++ b/base_tier_validation/models/tier_definition.py @@ -108,6 +108,10 @@ def _get_tier_validation_model_names(self): help="Bypassed (auto validated), if previous tier was validated " "by same reviewer", ) + require_password = fields.Boolean( + help="If checked, the user will be asked to enter " + "the password to validate the tier.", + ) @api.onchange("review_type") def onchange_review_type(self): diff --git a/base_tier_validation/models/tier_review.py b/base_tier_validation/models/tier_review.py index cd5dc3bf4f..3af56da5e9 100644 --- a/base_tier_validation/models/tier_review.py +++ b/base_tier_validation/models/tier_review.py @@ -68,6 +68,10 @@ class TierReview(models.Model): related="definition_id.approve_sequence_bypass" ) last_reminder_date = fields.Datetime(readonly=True) + require_password = fields.Boolean( + related="definition_id.require_password", readonly=True + ) + password_confirmed = fields.Boolean() @api.depends("status") def _compute_display_status(self): diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py index 6479bb5bff..042ab76384 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -79,6 +79,14 @@ class TierValidation(models.AbstractModel): ) next_review = fields.Char(compute="_compute_next_review") hide_reviews = fields.Boolean(compute="_compute_hide_reviews") + require_password = fields.Boolean(compute="_compute_require_password") + + def _compute_require_password(self): + for rec in self: + require_password = rec.review_ids.filtered( + lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids) + ).mapped("require_password") + rec.require_password = True in require_password def _compute_has_comment(self): for rec in self: @@ -623,6 +631,24 @@ def _add_comment(self, validate_reject, reviews): }, } + def _confirm_password(self, validate_reject, reviews): + wizard = self.env.ref("base_tier_validation.view_password_confirm_wizard") + return { + "name": self.env._("Password Confirmation"), + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "password.wizard", + "views": [(wizard.id, "form")], + "view_id": wizard.id, + "target": "new", + "context": { + "default_res_id": self.id, + "default_res_model": self._name, + "default_review_ids": reviews.ids, + "default_validate_reject": validate_reject, + }, + } + def validate_tier(self): self.ensure_one() sequences = self._get_sequences_to_approve(self.env.user) @@ -634,6 +660,11 @@ def validate_tier(self): lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids) ) return self._add_comment("validate", user_reviews) + elif self.require_password: + user_reviews = reviews.filtered( + lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids) + ) + return self._confirm_password("validate", user_reviews) self._validate_tier(reviews) self._update_counter({"review_deleted": True}) @@ -643,6 +674,8 @@ def reject_tier(self): reviews = self.review_ids.filtered(lambda x: x.sequence in sequences) if self.has_comment: return self._add_comment("reject", reviews) + elif self.require_password: + return self._confirm_password("reject", reviews) self._rejected_tier(reviews) self._update_counter({"review_deleted": True}) diff --git a/base_tier_validation/security/ir.model.access.csv b/base_tier_validation/security/ir.model.access.csv index 82c76c65ba..6e68f5518b 100644 --- a/base_tier_validation/security/ir.model.access.csv +++ b/base_tier_validation/security/ir.model.access.csv @@ -7,5 +7,6 @@ access_tier_review,access.tier.review,model_tier_review,base.group_user,1,1,1,1 access_tier_definition_all,tier.definition.all,model_tier_definition,base.group_user,1,0,0,0 access_tier_definition_settings,tier.definition.settings,model_tier_definition,base.group_erp_manager,1,1,1,1 access_comment_wizard,access.comment.wizard,model_comment_wizard,base.group_user,1,1,1,1 +access_password_wizard,access.password.wizard,model_password_wizard,base.group_user,1,1,1,1 access_tier_validation_exceptions_all,tier.validation.exceptions,model_tier_validation_exception,base.group_user,1,0,0,0 access_tier_validation_exceptions_settings,tier.validation.exceptions,model_tier_validation_exception,base.group_system,1,1,1,1 diff --git a/base_tier_validation/static/description/index.html b/base_tier_validation/static/description/index.html index a9c8064f6d..b1d5d01e8c 100644 --- a/base_tier_validation/static/description/index.html +++ b/base_tier_validation/static/description/index.html @@ -3,7 +3,7 @@
-Validating some operations is a common need across different areas in a company and sometimes it also involves several people and stages in the process. With this module you will be able to define your custom @@ -426,7 +421,7 @@
To configure this module, you need to:
This is the list of known issues for this module. Any proposal for improvement will be very valuable.
Migrated to Odoo 17. Merged module with tier_validation_waiting. To support sending messages in a validation sequence when it is their turn to validate.
Fixes:
Fixes:
New features:
New features:
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 @@ -599,15 +594,15 @@
Do not contact contributors directly about support or help with technical issues.
The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp.