Merged in [12541] from rjsparks@nostrum.com:

Provide default filters for reviewer settings. Fixes #2093.
 - Legacy-Id: 12546
Note: SVN reference [12541] has been migrated to Git commit df86798cf3
This commit is contained in:
Henrik Levkowetz 2016-12-15 21:57:46 +00:00
parent b14e981e66
commit fa684cf6d2
3 changed files with 18 additions and 6 deletions

View file

@ -25,7 +25,8 @@ from ietf.review.utils import (can_manage_review_requests_for_team,
email_reviewer_availability_change, email_reviewer_availability_change,
reviewer_rotation_list, reviewer_rotation_list,
latest_review_requests_for_reviewers, latest_review_requests_for_reviewers,
augment_review_requests_with_events) augment_review_requests_with_events,
get_default_filter_re,)
from ietf.doc.models import LastCallDocEvent from ietf.doc.models import LastCallDocEvent
from ietf.group.models import Role from ietf.group.models import Role
from ietf.group.utils import get_group_or_404, construct_group_menu_context from ietf.group.utils import get_group_or_404, construct_group_menu_context
@ -488,8 +489,10 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
or can_manage_review_requests_for_team(request.user, group)): or can_manage_review_requests_for_team(request.user, group)):
return HttpResponseForbidden("You do not have permission to perform this action") return HttpResponseForbidden("You do not have permission to perform this action")
settings = (ReviewerSettings.objects.filter(person=reviewer, team=group).first() settings = ReviewerSettings.objects.filter(person=reviewer, team=group).first()
or ReviewerSettings(person=reviewer, team=group)) if not settings:
settings = ReviewerSettings(person=reviewer, team=group)
settings.filter_re = get_default_filter_re(reviewer)
back_url = request.GET.get("next") back_url = request.GET.get("next")
if not back_url: if not back_url:

View file

@ -56,7 +56,7 @@ from ietf.ietfauth.utils import role_required
from ietf.mailinglists.models import Subscribed, Whitelisted from ietf.mailinglists.models import Subscribed, Whitelisted
from ietf.person.models import Person, Email, Alias from ietf.person.models import Person, Email, Alias
from ietf.review.models import ReviewRequest, ReviewerSettings, ReviewWish from ietf.review.models import ReviewRequest, ReviewerSettings, ReviewWish
from ietf.review.utils import unavailable_periods_to_list from ietf.review.utils import unavailable_periods_to_list, get_default_filter_re
from ietf.utils.mail import send_mail from ietf.utils.mail import send_mail
from ietf.doc.fields import SearchableDocumentField from ietf.doc.fields import SearchableDocumentField
@ -433,7 +433,7 @@ def review_overview(request):
roles = { o.group_id: o for o in Role.objects.filter(name="reviewer", person__user=request.user, group__in=teams) } roles = { o.group_id: o for o in Role.objects.filter(name="reviewer", person__user=request.user, group__in=teams) }
for t in teams: for t in teams:
t.reviewer_settings = settings.get(t.pk) or ReviewerSettings(team=t) t.reviewer_settings = settings.get(t.pk) or ReviewerSettings(team=t,filter_re = get_default_filter_re(request.user.person))
t.unavailable_periods = unavailable_periods.get(t.pk, []) t.unavailable_periods = unavailable_periods.get(t.pk, [])
t.role = roles.get(t.pk) t.role = roles.get(t.pk)

View file

@ -694,6 +694,15 @@ def setup_reviewer_field(field, review_req):
field.choices = choices field.choices = choices
def get_default_filter_re(person):
if type(person) != Person:
person = Person.objects.get(id=person)
groups_to_avoid = [r.group for r in person.role_set.filter(name='chair',group__type__in=['wg','rg'])]
if not groups_to_avoid:
return '^draft-%s-.*$' % ( person.last_name().lower(), )
else:
return '^draft-(%s|%s)-.*$' % ( person.last_name().lower(), '|'.join(['ietf-%s' % g.acronym for g in groups_to_avoid]))
def make_assignment_choices(email_queryset, review_req): def make_assignment_choices(email_queryset, review_req):
doc = review_req.doc doc = review_req.doc
team = review_req.team team = review_req.team
@ -711,7 +720,7 @@ def make_assignment_choices(email_queryset, review_req):
for p in possible_person_ids: for p in possible_person_ids:
if p not in reviewer_settings: if p not in reviewer_settings:
reviewer_settings[p] = ReviewerSettings(team=team) reviewer_settings[p] = ReviewerSettings(team=team, filter_re = get_default_filter_re(p))
# frequency # frequency
days_needed_for_reviewers = days_needed_to_fulfill_min_interval_for_reviewers(team) days_needed_for_reviewers = days_needed_to_fulfill_min_interval_for_reviewers(team)