From 086a1e273888f580af121ade55b8b381000a86cc Mon Sep 17 00:00:00 2001 From: Zach Aysan Date: Fri, 20 Sep 2024 14:32:39 +0000 Subject: [PATCH] Add project related methods --- api/features/workflows/core/models.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/api/features/workflows/core/models.py b/api/features/workflows/core/models.py index 7fdc7047f63b..198e9fc571e7 100644 --- a/api/features/workflows/core/models.py +++ b/api/features/workflows/core/models.py @@ -246,6 +246,21 @@ def _get_project(self) -> typing.Optional["Project"]: return self.project or (self.environment and self.environment.project) def is_approved(self): + if self.environment: + return self.is_approved_via_environment() + if self.project: + return self.is_approved_via_project() + raise RuntimeError( + "Unable to approve change request without environment or project" + ) + + def is_approved_via_project(self): + return self.project.minimum_change_request_approvals is None or ( + self.approvals.filter(approved_at__isnull=False).count() + >= self.project.minimum_change_request_approvals + ) + + def is_approved_via_environment(self): return self.environment.minimum_change_request_approvals is None or ( self.approvals.filter(approved_at__isnull=False).count() >= self.environment.minimum_change_request_approvals @@ -407,6 +422,9 @@ def get_audit_log_author(self, history_instance) -> "FFAdminUser": def _get_environment(self): return self.change_request.environment + def _get_project(self): + return self.change_request._get_project() + class ChangeRequestGroupAssignment(AbstractBaseExportableModel, LifecycleModel): change_request = models.ForeignKey(