Merged in [15715] from rcross@amsl.com:

Fix issue where new non-session location field value isn't saved.  Fixes #2625.
 - Legacy-Id: 15756
Note: SVN reference [15715] has been migrated to Git commit a47fba833f
This commit is contained in:
Henrik Levkowetz 2018-11-12 13:35:17 +00:00
commit e471386cf2
4 changed files with 43 additions and 20 deletions

View file

@ -282,6 +282,29 @@ class SecrMeetingTestCase(TestCase):
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_meetings_nonsession_add_valid(self):
meeting = make_meeting_test_data()
room = meeting.room_set.first()
group = Group.objects.get(acronym='secretariat')
url = reverse('ietf.secr.meetings.views.non_session',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
self.client.login(username="secretary", password="secretary+password")
response = self.client.post(url, {
'day':'1',
'time':'08:00',
'duration':'02:00',
'name':'Testing',
'short':'test',
'type':'reg',
'group':group.pk,
'location': room.pk,
})
print response.content
self.assertRedirects(response, url)
session = Session.objects.filter(meeting=meeting, name='Testing').first()
self.assertTrue(session)
self.assertEqual(session.timeslotassignments.first().timeslot.location, room)
def test_meetings_nonsession_add_invalid(self):
make_meeting_test_data()
group = Group.objects.get(acronym='secretariat')
@ -396,4 +419,3 @@ class SecrMeetingTestCase(TestCase):
values = [ x[0] for x in times ]
self.assertTrue(times)
self.assertTrue(timeslot.time.strftime('%H%M') in values)

View file

@ -434,10 +434,9 @@ def non_session(request, meeting_id, schedule_name):
check_nonsession(meeting,schedule)
slots = TimeSlot.objects.filter(meeting=meeting)
slots = slots.filter(sessionassignments__schedule=schedule)
slots = slots.filter(type__in=('break','reg','other','plenary','lead'))
slots = slots.order_by('-type__name','time')
non_session_types = ('break','reg','other','plenary','lead')
assignments = schedule.assignments.filter(timeslot__type__in=non_session_types)
assignments = assignments.order_by('-timeslot__type__name','timeslot__time')
if request.method == 'POST':
form = NonSessionForm(request.POST, meeting=meeting)
@ -448,6 +447,7 @@ def non_session(request, meeting_id, schedule_name):
type = form.cleaned_data['type']
group = form.cleaned_data['group']
duration = form.cleaned_data['duration']
location = form.cleaned_data['location']
# create TimeSlot object
timeslot = TimeSlot.objects.create(type=type,
@ -455,6 +455,7 @@ def non_session(request, meeting_id, schedule_name):
name=name,
time=time,
duration=duration,
location=location,
show_location=form.cleaned_data['show_location'])
if timeslot.type.slug not in ('other','plenary','lead'):
@ -485,7 +486,7 @@ def non_session(request, meeting_id, schedule_name):
messages.warning(request, 'There are non-session items which do not have a room assigned')
return render(request, 'meetings/non_session.html', {
'slots': slots,
'assignments': assignments,
'form': form,
'meeting': meeting,
'schedule': schedule},

View file

@ -5,7 +5,7 @@
<div class="module">
<h2>TimeSlots</h2>
{% if slots %}
{% if assignments %}
<table id="nonsessions" class="full-width">
<thead>
<tr>
@ -23,19 +23,19 @@
</tr>
</thead>
<tbody>
{% for item in slots %}
{% for assignment in assignments %}
<tr class="{% cycle row1 row2 %}{% ifchanged item.type %} break{% endifchanged %}{% if item.session.status.slug == "canceled" %} cancelled{% endif %}">
<td>{{ item.time|date:"D" }}</td>
<td>{{ item.time|date:"H:i" }}-{{ item.end_time|date:"H:i" }}</td>
<td>{{ item.name }}</td>
<td>{{ item.session.short }}</td>
<td>{{ item.session.group.acronym }}</td>
<td>{{ item.location }}</td>
<td>{{ item.show_location }}</td>
<td>{{ item.type }}</td>
<td><a href="{% url "ietf.secr.meetings.views.non_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Edit</a></td>
<td><a href="{% url "ietf.secr.meetings.views.non_session_cancel" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Cancel</a></td>
<td><a href="{% url "ietf.secr.meetings.views.non_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Delete</a></td>
<td>{{ assignment.timeslot.time|date:"D" }}</td>
<td>{{ assignment.timeslot.time|date:"H:i" }}-{{ assignment.timeslot.end_time|date:"H:i" }}</td>
<td>{{ assignment.timeslot.name }}</td>
<td>{{ assignment.session.short }}</td>
<td>{{ assignment.session.group.acronym }}</td>
<td>{{ assignment.timeslot.location }}</td>
<td>{{ assignment.timeslot.show_location }}</td>
<td>{{ assignment.timeslot.type }}</td>
<td><a href="{% url "ietf.secr.meetings.views.non_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Edit</a></td>
<td><a href="{% url "ietf.secr.meetings.views.non_session_cancel" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Cancel</a></td>
<td><a href="{% url "ietf.secr.meetings.views.non_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Delete</a></td>
</tr>
{% endfor %}
</tbody>

View file

@ -225,7 +225,7 @@ class Command(BaseCommand):
# update later
# Permissions will be handled during permission update later.
return env, ""
except TracError as e:
except (TracError, IOError) as e:
msg = "While creating Trac instance for %s: %s" % (group, e)
self.log(msg)
return None, msg