Skip to content

Commit 3cd5bea

Browse files
committed
Fix issue where editing interim meeting duration does not update underlying timeslot duration. Fixes ietf-tools#2203. Commit ready for merge.
- Legacy-Id: 13021
1 parent adee827 commit 3cd5bea

2 files changed

Lines changed: 34 additions & 25 deletions

File tree

ietf/meeting/helpers.py

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -300,28 +300,6 @@ def session_constraint_expire(request,session):
300300
# -------------------------------------------------
301301

302302

303-
def assign_interim_session(form):
304-
"""Helper function to create a timeslot and assign the interim session"""
305-
time = datetime.datetime.combine(
306-
form.cleaned_data['date'],
307-
form.cleaned_data['time'])
308-
session = form.instance
309-
if session.official_timeslotassignment():
310-
slot = session.official_timeslotassignment().timeslot
311-
slot.time = time
312-
slot.save()
313-
else:
314-
slot = TimeSlot.objects.create(
315-
meeting=session.meeting,
316-
type_id="session",
317-
duration=session.requested_duration,
318-
time=time)
319-
SchedTimeSessAssignment.objects.create(
320-
timeslot=slot,
321-
session=session,
322-
schedule=session.meeting.agenda)
323-
324-
325303
def can_approve_interim_request(meeting, user):
326304
'''Returns True if the user has permissions to approve an interim meeting request'''
327305
if meeting.type.slug != 'interim':
@@ -657,6 +635,29 @@ def sessions_post_save(forms):
657635
if not form.has_changed():
658636
continue
659637
if ('date' in form.changed_data) or ('time' in form.changed_data):
660-
assign_interim_session(form)
638+
update_interim_session_assignment(form)
661639
if 'agenda' in form.changed_data:
662640
form.save_agenda()
641+
642+
643+
def update_interim_session_assignment(form):
644+
"""Helper function to create / update timeslot assigned to interim session"""
645+
time = datetime.datetime.combine(
646+
form.cleaned_data['date'],
647+
form.cleaned_data['time'])
648+
session = form.instance
649+
if session.official_timeslotassignment():
650+
slot = session.official_timeslotassignment().timeslot
651+
slot.time = time
652+
slot.duration = session.requested_duration
653+
slot.save()
654+
else:
655+
slot = TimeSlot.objects.create(
656+
meeting=session.meeting,
657+
type_id="session",
658+
duration=session.requested_duration,
659+
time=time)
660+
SchedTimeSessAssignment.objects.create(
661+
timeslot=slot,
662+
session=session,
663+
schedule=session.meeting.agenda)

ietf/meeting/tests_views.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,12 +1280,13 @@ def test_interim_request_edit(self):
12801280
form_initial = r.context['form'].initial
12811281
formset_initial = r.context['formset'].forms[0].initial
12821282
new_time = formset_initial['time'] + datetime.timedelta(hours=1)
1283+
new_duration = formset_initial['requested_duration'] + datetime.timedelta(hours=1)
12831284
data = {'group':group.pk,
12841285
'meeting_type':'single',
12851286
'session_set-0-id':meeting.session_set.first().id,
12861287
'session_set-0-date':formset_initial['date'].strftime('%Y-%m-%d'),
12871288
'session_set-0-time':new_time.strftime('%H:%M'),
1288-
'session_set-0-requested_duration':formset_initial['requested_duration'],
1289+
'session_set-0-requested_duration':self.strfdelta(new_duration, '{hours}:{minutes}'),
12891290
'session_set-0-remote_instructions':formset_initial['remote_instructions'],
12901291
#'session_set-0-agenda':formset_initial['agenda'],
12911292
'session_set-0-agenda_note':formset_initial['agenda_note'],
@@ -1299,7 +1300,14 @@ def test_interim_request_edit(self):
12991300
session = meeting.session_set.first()
13001301
timeslot = session.official_timeslotassignment().timeslot
13011302
self.assertEqual(timeslot.time,new_time)
1302-
1303+
self.assertEqual(timeslot.duration,new_duration)
1304+
1305+
def strfdelta(self, tdelta, fmt):
1306+
d = {"days": tdelta.days}
1307+
d["hours"], rem = divmod(tdelta.seconds, 3600)
1308+
d["minutes"], d["seconds"] = divmod(rem, 60)
1309+
return fmt.format(**d)
1310+
13031311
def test_interim_request_details_permissions(self):
13041312
make_meeting_test_data()
13051313
meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first()

0 commit comments

Comments
 (0)