diff --git a/opentech/apply/funds/models/submissions.py b/opentech/apply/funds/models/submissions.py index d92fc2e17934e2c9c06a2067fc8e2e9b18de0d9d..593bca48a04f9752bbb0ec6d1b44cad49289e7ab 100644 --- a/opentech/apply/funds/models/submissions.py +++ b/opentech/apply/funds/models/submissions.py @@ -39,6 +39,7 @@ from ..workflow import ( STAGE_CHANGE_ACTIONS, UserPermissions, WORKFLOWS, + COMMUNITY_REVIEW_PHASES, ) @@ -556,6 +557,10 @@ class ApplicationSubmission( self.draft_revision = first_revision self.save() + @property + def community_review(self): + return self.status in COMMUNITY_REVIEW_PHASES + @property def missing_reviewers(self): reviews_submitted = self.reviews.submitted().values('author') @@ -588,6 +593,9 @@ class ApplicationSubmission( if user in self.partners_not_reviewed: return True + if user.is_community_reviewer and self.community_review and not self.reviewed_by(user): + return True + return False def can_review(self, user): diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py index 51c2f5e50287379829e71a1cfd1ff83377b1d52a..f4a638a9bec5c88317e410e9022a619244f05b18 100644 --- a/opentech/apply/funds/views.py +++ b/opentech/apply/funds/views.py @@ -477,6 +477,9 @@ class ReviewerSubmissionDetailView(ReviewContextMixin, ActivityContextMixin, Del partner_has_access = submission.partners.filter(pk=request.user.pk).exists() if not partner_has_access: raise PermissionDenied + # Only allow community reviewers in submission with a community review state. + if request.user.is_community_reviewer and not submission.community_review: + raise PermissionDenied return super().dispatch(request, *args, **kwargs) diff --git a/opentech/apply/funds/workflow.py b/opentech/apply/funds/workflow.py index c28f764fd933c8997c73ed14df204c1745873bcb..76958755c06ec00360f7d7accdd61c8a29703bb0 100644 --- a/opentech/apply/funds/workflow.py +++ b/opentech/apply/funds/workflow.py @@ -980,3 +980,7 @@ PHASES_MAPPING = { OPEN_CALL_PHASES = [ 'com_open_call', ] + +COMMUNITY_REVIEW_PHASES = [ + 'com_community_review', +] diff --git a/opentech/apply/utils/views.py b/opentech/apply/utils/views.py index 4bbfe7ccc453408f6fe161790c864bdc05a852f7..d8968aa8dd83a17c06c28d85ff91abb0b0dc1aea 100644 --- a/opentech/apply/utils/views.py +++ b/opentech/apply/utils/views.py @@ -25,7 +25,7 @@ class ViewDispatcher(View): return request.user.is_apply_staff def reviewer_check(self, request): - return request.user.is_reviewer or request.user.is_partner + return request.user.is_reviewer or request.user.is_partner or request.user.is_community_reviewer def dispatch(self, request, *args, **kwargs): view = self.applicant_view