Skip to content

Commit 5612a3f

Browse files
committed
Merged in [12082] from rcross@amsl.com:
Fix issue where interim meeting request form didn't list research groups when user was a working group chair and a research group chair. - Legacy-Id: 12093 Note: SVN reference [12082] has been migrated to Git commit adf28c9
2 parents e31bdff + adf28c9 commit 5612a3f

2 files changed

Lines changed: 31 additions & 8 deletions

File tree

ietf/meeting/forms.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from django import forms
77
from django.core.validators import ValidationError
8+
from django.db.models import Q
89
from django.forms.fields import Field
910
from django.utils.encoding import force_text
1011
from django.utils import six
@@ -190,14 +191,17 @@ def set_group_options(self):
190191
'''Set group options based on user accessing the form'''
191192
if has_role(self.user, "Secretariat"):
192193
return # don't reduce group options
194+
q_objects = Q()
193195
if has_role(self.user, "Area Director"):
194-
queryset = Group.objects.filter(type="wg", state__in=("active", "proposed", "bof")).order_by('acronym')
195-
elif has_role(self.user, "IRTF Chair"):
196-
queryset = Group.objects.filter(type="rg", state__in=("active", "proposed")).order_by('acronym')
197-
elif has_role(self.user, "WG Chair"):
198-
queryset = Group.objects.filter(type="wg", state__in=("active", "proposed", "bof"), role__person=self.person, role__name="chair").distinct().order_by('acronym')
199-
elif has_role(self.user, "RG Chair"):
200-
queryset = Group.objects.filter(type="rg", state__in=("active", "proposed"), role__person=self.person, role__name="chair").distinct().order_by('acronym')
196+
q_objects.add(Q(type="wg", state__in=("active", "proposed", "bof")), Q.OR)
197+
if has_role(self.user, "IRTF Chair"):
198+
q_objects.add(Q(type="rg", state__in=("active", "proposed")), Q.OR)
199+
if has_role(self.user, "WG Chair"):
200+
q_objects.add(Q(type="wg", state__in=("active", "proposed", "bof"), role__person=self.person, role__name="chair"), Q.OR)
201+
if has_role(self.user, "RG Chair"):
202+
q_objects.add(Q(type="rg", state__in=("active", "proposed"), role__person=self.person, role__name="chair"), Q.OR)
203+
204+
queryset = Group.objects.filter(q_objects).distinct().order_by('acronym')
201205
self.fields['group'].queryset = queryset
202206

203207
# if there's only one possibility make it the default

ietf/meeting/tests_views.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from StringIO import StringIO
1616

1717
from ietf.doc.models import Document
18-
from ietf.group.models import Group
18+
from ietf.group.models import Group, Role
1919
from ietf.meeting.helpers import can_approve_interim_request, can_view_interim_request
2020
from ietf.meeting.helpers import send_interim_approval_request
2121
from ietf.meeting.helpers import send_interim_cancellation_notice
@@ -716,7 +716,26 @@ def test_interim_request_options(self):
716716
q = PyQuery(r.content)
717717
self.assertEqual(Group.objects.filter(type__in=('wg', 'rg'), state__in=('active', 'proposed')).count(),
718718
len(q("#id_group option")) - 1) # -1 for options placeholder
719+
self.client.logout()
719720

721+
# wg chair
722+
self.client.login(username="marschairman", password="marschairman+password")
723+
r = self.client.get("/meeting/interim/request/")
724+
self.assertEqual(r.status_code, 200)
725+
q = PyQuery(r.content)
726+
user = User.objects.get(username='marschairman')
727+
person = user.person
728+
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
729+
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
730+
731+
# wg AND rg chair
732+
group = Group.objects.get(acronym='irg')
733+
Role.objects.create(name_id='chair',group=group,person=person,email=person.email())
734+
r = self.client.get("/meeting/interim/request/")
735+
self.assertEqual(r.status_code, 200)
736+
q = PyQuery(r.content)
737+
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
738+
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
720739

721740
def test_interim_request_single_virtual(self):
722741
make_meeting_test_data()

0 commit comments

Comments
 (0)