Fix issue where interim meeting request form didn't list research groups when user was a working group chair and a research group chair. Commit ready for merge.

- Legacy-Id: 12082
This commit is contained in:
Ryan Cross 2016-10-04 23:42:18 +00:00
parent c1cc1d639f
commit adf28c922f
2 changed files with 31 additions and 8 deletions

View file

@ -5,6 +5,7 @@ import codecs
from django import forms
from django.core.validators import ValidationError
from django.db.models import Q
from django.forms.fields import Field
from django.utils.encoding import force_text
from django.utils import six
@ -190,14 +191,17 @@ class InterimMeetingModelForm(forms.ModelForm):
'''Set group options based on user accessing the form'''
if has_role(self.user, "Secretariat"):
return # don't reduce group options
q_objects = Q()
if has_role(self.user, "Area Director"):
queryset = Group.objects.filter(type="wg", state__in=("active", "proposed", "bof")).order_by('acronym')
elif has_role(self.user, "IRTF Chair"):
queryset = Group.objects.filter(type="rg", state__in=("active", "proposed")).order_by('acronym')
elif has_role(self.user, "WG Chair"):
queryset = Group.objects.filter(type="wg", state__in=("active", "proposed", "bof"), role__person=self.person, role__name="chair").distinct().order_by('acronym')
elif has_role(self.user, "RG Chair"):
queryset = Group.objects.filter(type="rg", state__in=("active", "proposed"), role__person=self.person, role__name="chair").distinct().order_by('acronym')
q_objects.add(Q(type="wg", state__in=("active", "proposed", "bof")), Q.OR)
if has_role(self.user, "IRTF Chair"):
q_objects.add(Q(type="rg", state__in=("active", "proposed")), Q.OR)
if has_role(self.user, "WG Chair"):
q_objects.add(Q(type="wg", state__in=("active", "proposed", "bof"), role__person=self.person, role__name="chair"), Q.OR)
if has_role(self.user, "RG Chair"):
q_objects.add(Q(type="rg", state__in=("active", "proposed"), role__person=self.person, role__name="chair"), Q.OR)
queryset = Group.objects.filter(q_objects).distinct().order_by('acronym')
self.fields['group'].queryset = queryset
# if there's only one possibility make it the default

View file

@ -15,7 +15,7 @@ from pyquery import PyQuery
from StringIO import StringIO
from ietf.doc.models import Document
from ietf.group.models import Group
from ietf.group.models import Group, Role
from ietf.meeting.helpers import can_approve_interim_request, can_view_interim_request
from ietf.meeting.helpers import send_interim_approval_request
from ietf.meeting.helpers import send_interim_cancellation_notice
@ -709,7 +709,26 @@ class InterimTests(TestCase):
q = PyQuery(r.content)
self.assertEqual(Group.objects.filter(type__in=('wg', 'rg'), state__in=('active', 'proposed')).count(),
len(q("#id_group option")) - 1) # -1 for options placeholder
self.client.logout()
# wg chair
self.client.login(username="marschairman", password="marschairman+password")
r = self.client.get("/meeting/interim/request/")
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
user = User.objects.get(username='marschairman')
person = user.person
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
# wg AND rg chair
group = Group.objects.get(acronym='irg')
Role.objects.create(name_id='chair',group=group,person=person,email=person.email())
r = self.client.get("/meeting/interim/request/")
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
def test_interim_request_single_virtual(self):
make_meeting_test_data()