Add group field to Roles add form validation. Fixes #2292. Commit ready for merge.
- Legacy-Id: 13276
This commit is contained in:
parent
462fc1a2e5
commit
4d9bdcad6a
|
@ -182,10 +182,14 @@ class RoleForm(forms.Form):
|
|||
person = cleaned_data['person']
|
||||
email = cleaned_data['email']
|
||||
name = cleaned_data['name']
|
||||
group_acronym = cleaned_data['group_acronym']
|
||||
|
||||
if Role.objects.filter(name=name,group=self.group,person=person,email=email):
|
||||
raise forms.ValidationError('ERROR: This is a duplicate entry')
|
||||
|
||||
if not group_acronym:
|
||||
raise forms.ValidationError('You must select a group.')
|
||||
|
||||
return cleaned_data
|
||||
|
||||
class SearchForm(forms.Form):
|
||||
|
|
|
@ -124,7 +124,8 @@ class GroupsTest(TestCase):
|
|||
person = Person.objects.get(name='Areað Irector')
|
||||
group = Group.objects.filter(acronym='mars')[0]
|
||||
url = reverse('ietf.secr.groups.views.people', kwargs={'acronym':group.acronym})
|
||||
post_data = {'name':'chair',
|
||||
post_data = {'group_acronym':group.acronym,
|
||||
'name':'chair',
|
||||
'person':'Joe Smith - (%s)' % person.id,
|
||||
'email':person.email_set.all()[0].address,
|
||||
'submit':'Add'}
|
||||
|
|
|
@ -347,7 +347,7 @@ def people(request, acronym):
|
|||
messages.success(request, 'New %s added successfully!' % name)
|
||||
return redirect('ietf.secr.groups.views.people', acronym=group.acronym)
|
||||
else:
|
||||
form = RoleForm(initial={'name':'chair'},group=group)
|
||||
form = RoleForm(initial={'name':'chair', 'group_acronym':group.acronym}, group=group)
|
||||
|
||||
return render(request, 'groups/people.html', {
|
||||
'form':form,
|
||||
|
|
|
@ -88,6 +88,14 @@ class TimeChoiceField(forms.ChoiceField):
|
|||
#----------------------------------------------------------
|
||||
# Forms
|
||||
#----------------------------------------------------------
|
||||
class MeetingSelectForm(forms.Form):
|
||||
meeting = forms.ChoiceField()
|
||||
|
||||
def __init__(self,*args,**kwargs):
|
||||
choices = kwargs.pop('choices')
|
||||
super(MeetingSelectForm, self).__init__(*args,**kwargs)
|
||||
self.fields['meeting'].widget.choices = choices
|
||||
|
||||
class MeetingModelForm(forms.ModelForm):
|
||||
idsubmit_cutoff_time_utc = ietf.utils.fields.DurationField()
|
||||
idsubmit_cutoff_warning_days = ietf.utils.fields.DurationField()
|
||||
|
|
|
@ -43,10 +43,14 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_main(self):
|
||||
"Main Test"
|
||||
meeting = make_meeting_test_data()
|
||||
url = reverse('ietf.secr.meetings.views.main')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response = self.client.post(url, {'meeting':meeting.number})
|
||||
url = reverse('ietf.secr.meetings.views.view', kwargs={'meeting_id':meeting.number})
|
||||
self.assertRedirects(response,url)
|
||||
|
||||
def test_view(self):
|
||||
"View Test"
|
||||
|
|
|
@ -20,7 +20,7 @@ from ietf.meeting.models import Meeting, Session, Room, TimeSlot, SchedTimeSessA
|
|||
from ietf.group.models import Group, GroupEvent
|
||||
from ietf.person.models import Person
|
||||
from ietf.secr.meetings.blue_sheets import create_blue_sheets
|
||||
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm,
|
||||
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm, MeetingSelectForm,
|
||||
MeetingRoomForm, NewSessionForm, NonSessionEditForm, NonSessionForm, TimeSlotForm,
|
||||
UploadBlueSheetForm, get_next_slot )
|
||||
from ietf.secr.proceedings.views import build_choices
|
||||
|
@ -433,10 +433,10 @@ def main(request):
|
|||
meetings = Meeting.objects.filter(type='ietf').order_by('-number')
|
||||
|
||||
if request.method == 'POST':
|
||||
return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['group'])
|
||||
return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['meeting'])
|
||||
|
||||
choices = [ (str(x.number),str(x.number)) for x in meetings ]
|
||||
form = GroupSelectForm(choices=choices)
|
||||
form = MeetingSelectForm(choices=choices)
|
||||
|
||||
return render(request, 'meetings/main.html', {
|
||||
'form': form,
|
||||
|
|
|
@ -52,3 +52,17 @@ class SecrRolesMainTestCase(TestCase):
|
|||
self.assertRedirects(response, target)
|
||||
self.failUnless('added successfully' in response.content)
|
||||
|
||||
def test_roles_add_no_group(self):
|
||||
make_test_data()
|
||||
augment_data()
|
||||
person = Person.objects.get(name='Areað Irector')
|
||||
url = reverse('ietf.secr.roles.views.main')
|
||||
post_data = {'group_acronym':'',
|
||||
'name':'chair',
|
||||
'person':'Joe Smith - (%s)' % person.id,
|
||||
'email':person.email_set.all()[0].address,
|
||||
'submit':'Add'}
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data,follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.failUnless('You must select a group' in response.content)
|
||||
|
|
|
@ -12,7 +12,7 @@ from ietf.ietfauth.utils import has_role, role_required
|
|||
from ietf.meeting.models import Meeting, Session, Constraint, ResourceAssociation
|
||||
from ietf.meeting.helpers import get_meeting
|
||||
from ietf.name.models import SessionStatusName, ConstraintName
|
||||
from ietf.secr.sreq.forms import SessionForm, GroupSelectForm, ToolStatusForm
|
||||
from ietf.secr.sreq.forms import SessionForm, ToolStatusForm
|
||||
from ietf.secr.utils.decorators import check_permissions
|
||||
from ietf.secr.utils.group import groups_by_session
|
||||
from ietf.utils.mail import send_mail
|
||||
|
@ -487,14 +487,6 @@ def main(request):
|
|||
'message': message},
|
||||
)
|
||||
|
||||
# TODO this is not currently used in the main template
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Group will not meet':
|
||||
return redirect('ietf.secr.sreq.views.no_session', acronym=request.POST['group'])
|
||||
else:
|
||||
return redirect('ietf.secr.sreq.views.new', acronym=request.POST['group'])
|
||||
|
||||
meeting = get_meeting()
|
||||
scheduled_groups,unscheduled_groups = groups_by_session(request.user, meeting, types=['wg','rg','ag'])
|
||||
|
||||
|
@ -502,11 +494,6 @@ def main(request):
|
|||
if not scheduled_groups and not unscheduled_groups:
|
||||
messages.warning(request, 'The account %s is not associated with any groups. If you have multiple Datatracker accounts you may try another or report a problem to ietf-action@ietf.org' % request.user)
|
||||
|
||||
# load form select with unscheduled groups
|
||||
choices = zip([ g.pk for g in unscheduled_groups ],
|
||||
[ str(g) for g in unscheduled_groups ])
|
||||
form = GroupSelectForm(choices=choices)
|
||||
|
||||
# add session status messages for use in template
|
||||
for group in scheduled_groups:
|
||||
sessions = group.session_set.filter(meeting=meeting)
|
||||
|
@ -522,7 +509,6 @@ def main(request):
|
|||
|
||||
return render(request, 'sreq/main.html', {
|
||||
'is_locked': is_locked,
|
||||
'form': form,
|
||||
'meeting': meeting,
|
||||
'scheduled_groups': scheduled_groups,
|
||||
'unscheduled_groups': unscheduled_groups},
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
<h3>Add Role</h3>
|
||||
<form id="groups-people" action="" method="post">{% csrf_token %}
|
||||
{{ form.non_field_errors }}
|
||||
{{ form.group_acronym }}
|
||||
<table class="full-width">
|
||||
<tr>
|
||||
<td>{{ form.name.errors }}{{ form.name }}</td>
|
||||
|
|
Loading…
Reference in a new issue