Fix issue where editing interim meeting duration does not update underlying timeslot duration. Fixes #2203. Commit ready for merge.
- Legacy-Id: 13021
This commit is contained in:
parent
adee827726
commit
3cd5bea78b
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue