SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 786dd03e authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Move vote eligibility check to class method

parent 790eaec4
No related branches found
No related tags found
No related merge requests found
......@@ -57,6 +57,18 @@ class PotentialFellowship(models.Model):
def __str__(self):
return '%s, %s' % (self.profile.__str__(), self.get_status_display())
def can_vote(self, user):
"""
Determines whether user can vote on election for this PotentialFellow.
Qualifying conditions (either of the following):
* is Admin
* is in AdvisoryBoard for this College's Academic Field
* is a Senior Fellow in the College proposed
"""
return (user.contributor.is_sp_admin() or
user.contributor.is_in_advisory_board and user.contributor.profile.acad_field == self.college.acad_field or
user.contributor.fellowships.senior().filter(college=self.college).exists())
def latest_event_details(self):
event = self.potentialfellowshipevent_set.order_by('-noted_on').first()
if not event:
......
......@@ -32,17 +32,3 @@ def fellowship_or_admin_required():
return True
raise PermissionDenied
return user_passes_test(test)
def can_vote_on_potential_fellowship_for_college(user, college):
"""
Qualifying conditions (either of the following):
* is Admin
* is in AdvisoryBoard for this College's Academic Field
* is a Senior Fellow in this College
"""
if is_in_group(user, 'SciPost Administrators'):
return True
if is_in_group(user, 'Advisory Board') and user.contributor.profile.acad_field == college.acad_field:
return True
return user.contributor.fellowships.senior().filter(college=college).exists()
......@@ -463,8 +463,7 @@ class PotentialFellowshipDetailView(PermissionsMixin, DetailView):
@permission_required('scipost.can_vote_on_potentialfellowship', raise_exception=True)
def vote_on_potential_fellowship(request, potfel_id, vote):
potfel = get_object_or_404(PotentialFellowship, pk=potfel_id)
from colleges.permissions import can_vote_on_potential_fellowship_for_college
if not can_vote_on_potential_fellowship_for_college(request.user, potfel.college):
if not potfel.can_vote(request.user):
raise Http404
potfel.in_agreement.remove(request.user.contributor)
potfel.in_abstain.remove(request.user.contributor)
......
......@@ -130,6 +130,11 @@ class Contributor(models.Model):
return (self.user.groups.filter(name='Editorial Administrators').exists()
or self.user.is_superuser)
def is_in_advisory_board(self):
"""Check if Contributor is in the Advisory Board."""
return (self.user.groups.filter(name='Advisory Board').exists()
or self.user.is_superuser)
def is_active_fellow(self):
"""Check if Contributor is a member of the Editorial College."""
return self.fellowships.active().exists() or self.user.is_superuser
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment