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:
parent
c1cc1d639f
commit
adf28c922f
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue