diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index e3ecc678e..143a65351 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -300,28 +300,6 @@ def session_constraint_expire(request,session): # ------------------------------------------------- -def assign_interim_session(form): - """Helper function to create a timeslot and assign the interim session""" - time = datetime.datetime.combine( - form.cleaned_data['date'], - form.cleaned_data['time']) - session = form.instance - if session.official_timeslotassignment(): - slot = session.official_timeslotassignment().timeslot - slot.time = time - slot.save() - else: - slot = TimeSlot.objects.create( - meeting=session.meeting, - type_id="session", - duration=session.requested_duration, - time=time) - SchedTimeSessAssignment.objects.create( - timeslot=slot, - session=session, - schedule=session.meeting.agenda) - - def can_approve_interim_request(meeting, user): '''Returns True if the user has permissions to approve an interim meeting request''' if meeting.type.slug != 'interim': @@ -657,6 +635,29 @@ def sessions_post_save(forms): if not form.has_changed(): continue if ('date' in form.changed_data) or ('time' in form.changed_data): - assign_interim_session(form) + update_interim_session_assignment(form) if 'agenda' in form.changed_data: form.save_agenda() + + +def update_interim_session_assignment(form): + """Helper function to create / update timeslot assigned to interim session""" + time = datetime.datetime.combine( + form.cleaned_data['date'], + form.cleaned_data['time']) + session = form.instance + if session.official_timeslotassignment(): + slot = session.official_timeslotassignment().timeslot + slot.time = time + slot.duration = session.requested_duration + slot.save() + else: + slot = TimeSlot.objects.create( + meeting=session.meeting, + type_id="session", + duration=session.requested_duration, + time=time) + SchedTimeSessAssignment.objects.create( + timeslot=slot, + session=session, + schedule=session.meeting.agenda) diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 5e7f73d02..6511eb238 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -1280,12 +1280,13 @@ class InterimTests(TestCase): form_initial = r.context['form'].initial formset_initial = r.context['formset'].forms[0].initial new_time = formset_initial['time'] + datetime.timedelta(hours=1) + new_duration = formset_initial['requested_duration'] + datetime.timedelta(hours=1) data = {'group':group.pk, 'meeting_type':'single', 'session_set-0-id':meeting.session_set.first().id, 'session_set-0-date':formset_initial['date'].strftime('%Y-%m-%d'), 'session_set-0-time':new_time.strftime('%H:%M'), - 'session_set-0-requested_duration':formset_initial['requested_duration'], + 'session_set-0-requested_duration':self.strfdelta(new_duration, '{hours}:{minutes}'), 'session_set-0-remote_instructions':formset_initial['remote_instructions'], #'session_set-0-agenda':formset_initial['agenda'], 'session_set-0-agenda_note':formset_initial['agenda_note'], @@ -1299,7 +1300,14 @@ class InterimTests(TestCase): session = meeting.session_set.first() timeslot = session.official_timeslotassignment().timeslot self.assertEqual(timeslot.time,new_time) - + self.assertEqual(timeslot.duration,new_duration) + + def strfdelta(self, tdelta, fmt): + d = {"days": tdelta.days} + d["hours"], rem = divmod(tdelta.seconds, 3600) + d["minutes"], d["seconds"] = divmod(rem, 60) + return fmt.format(**d) + def test_interim_request_details_permissions(self): make_meeting_test_data() meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first()