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

Fix issue where cancelling one break session causes other breaks to get cancelled.  Fixes #2699.
 - Legacy-Id: 16090
Note: SVN reference [16085] has been migrated to Git commit 2842ad12bb
This commit is contained in:
Henrik Levkowetz 2019-03-23 16:31:17 +00:00
commit f635b2f973
2 changed files with 55 additions and 28 deletions

View file

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-03-23 06:11
from __future__ import unicode_literals
import datetime
from django.db import migrations
def copy_session(session):
session.pk = None
session.save()
return session
def forward(apps, schema_editor):
Meeting = apps.get_model('meeting', 'Meeting')
today = datetime.datetime.today()
meetings = Meeting.objects.filter(date__gt=today, type='ietf')
for meeting in meetings:
sessions = meeting.session_set.filter(type__in=['break', 'reg'])
for session in sessions:
assignments = session.timeslotassignments.filter(schedule=meeting.agenda)
if assignments.count() > 1:
ids = [ a.id for a in assignments ]
first_assignment = session.timeslotassignments.get(id=ids[0])
original_session = first_assignment.session
for assignment in session.timeslotassignments.filter(id__in=ids[1:]):
assignment.session = copy_session(original_session)
assignment.save()
def backward(apps, schema_editor):
return
class Migration(migrations.Migration):
dependencies = [
('meeting', '0011_auto_20190114_0550'),
]
operations = [
migrations.RunPython(forward, backward),
]

View file

@ -97,39 +97,24 @@ def build_nonsession(meeting,schedule):
delta = meeting.date - last_meeting.date
system = Person.objects.get(name='(System)')
secretariat = Group.objects.get(acronym='secretariat')
for slot in TimeSlot.objects.filter(meeting=last_meeting,type__in=('break','reg','other','plenary','lead')):
new_time = slot.time + delta
session = None
# create Session object for Tutorials to hold materials
if slot.type.slug in ('other','plenary'):
session = Session(meeting=meeting,
name=slot.name,
short=get_session(slot).short,
group=get_session(slot).group,
requested_by=system,
status_id='sched',
type=slot.type,
)
else:
session, __ = Session.objects.get_or_create(meeting=meeting,
name=slot.name,
group=secretariat,
requested_by=system,
status_id='sched',
type=slot.type,
)
session.save()
session = Session.objects.create(meeting=meeting,
name=slot.name,
short=get_session(slot).short,
group=get_session(slot).group,
requested_by=system,
status_id='sched',
type=slot.type)
ts = TimeSlot.objects.create(type=slot.type,
meeting=meeting,
name=slot.name,
time=new_time,
duration=slot.duration,
show_location=slot.show_location)
if session:
SchedTimeSessAssignment.objects.create(schedule=schedule,session=session,timeslot=ts)
meeting=meeting,
name=slot.name,
time=new_time,
duration=slot.duration,
show_location=slot.show_location)
SchedTimeSessAssignment.objects.create(schedule=schedule,session=session,timeslot=ts)
def check_nonsession(meeting,schedule):
'''