diff --git a/base_tier_validation_server_action/__init__.py b/base_tier_validation_server_action/__init__.py index 31660d6a96..93aa2c1f84 100644 --- a/base_tier_validation_server_action/__init__.py +++ b/base_tier_validation_server_action/__init__.py @@ -1,3 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import models +from . import wizard diff --git a/base_tier_validation_server_action/models/__init__.py b/base_tier_validation_server_action/models/__init__.py index d1a2d26ac7..2c43513f08 100644 --- a/base_tier_validation_server_action/models/__init__.py +++ b/base_tier_validation_server_action/models/__init__.py @@ -2,3 +2,4 @@ from . import tier_definition from . import tier_review +from . import tier_validation diff --git a/base_tier_validation_server_action/models/tier_review.py b/base_tier_validation_server_action/models/tier_review.py index 55c88ff221..b5c6e34a4e 100644 --- a/base_tier_validation_server_action/models/tier_review.py +++ b/base_tier_validation_server_action/models/tier_review.py @@ -9,13 +9,9 @@ class TierReview(models.Model): def write(self, vals): res = super().write(vals) - if vals.get("status") in ["approved", "rejected"]: + if vals.get("status") == "approved": for rec in self: - server_action = False - if rec.status == "approved": - server_action = rec.definition_id.server_action_id - if rec.status == "rejected": - server_action = rec.definition_id.rejected_server_action_id + server_action = rec.definition_id.server_action_id server_action_tier = self.env.context.get("server_action_tier") # Don't allow reentrant server action as it will lead to # recursive behaviour diff --git a/base_tier_validation_server_action/models/tier_validation.py b/base_tier_validation_server_action/models/tier_validation.py new file mode 100644 index 0000000000..92266d3e22 --- /dev/null +++ b/base_tier_validation_server_action/models/tier_validation.py @@ -0,0 +1,28 @@ +# Copyright 2022 Ecosoft (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class TierValidation(models.AbstractModel): + _inherit = "tier.validation" + + def reject_tier(self): + self.ensure_one() + res = super().reject_tier() + review = self.review_ids[-1] + server_action = review.definition_id.rejected_server_action_id + server_action_tier = self.env.context.get("server_action_tier") + # Don't allow reentrant server action as it will lead to + # recursive behaviour + if ( + not self.has_comment + and server_action + and (not server_action_tier or server_action_tier != server_action.id) + ): + server_action.with_context( + server_action_tier=server_action.id, + active_model=review.model, + active_id=review.res_id, + ).sudo().run() + return res diff --git a/base_tier_validation_server_action/wizard/__init__.py b/base_tier_validation_server_action/wizard/__init__.py new file mode 100644 index 0000000000..92bd0df50b --- /dev/null +++ b/base_tier_validation_server_action/wizard/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import comment_wizard diff --git a/base_tier_validation_server_action/wizard/comment_wizard.py b/base_tier_validation_server_action/wizard/comment_wizard.py new file mode 100644 index 0000000000..9e3a611196 --- /dev/null +++ b/base_tier_validation_server_action/wizard/comment_wizard.py @@ -0,0 +1,27 @@ +# Copyright 2022 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import models + + +class CommentWizard(models.TransientModel): + _inherit = "comment.wizard" + + def add_comment(self): + """For case reject only""" + res = super().add_comment() + validate_reject = self._context.get("default_validate_reject") + if validate_reject == "reject": + review = self.review_ids[-1] + reject_server_action = review.definition_id.rejected_server_action_id + server_action_tier = self.env.context.get("server_action_tier") + # Don't allow reentrant server action as it will lead to + # recursive behaviour + if reject_server_action and ( + not server_action_tier or server_action_tier != reject_server_action.id + ): + reject_server_action.with_context( + server_action_tier=reject_server_action.id, + active_model=review.model, + active_id=review.res_id, + ).sudo().run() + return res