changes, timeslot should always have scheduled session

- Legacy-Id: 5766
This commit is contained in:
Ryan Cross 2013-05-30 20:11:47 +00:00
parent a667b0b95f
commit 613746fceb

View file

@ -31,6 +31,30 @@ import datetime
# --------------------------------------------------
# Helper Functions
# --------------------------------------------------
def assign(session,timeslot,meeting):
'''
Robust function to assign a session to a timeslot
'''
qs = timeslot.scheduledsession_set.filter(schedule=meeting.agenda)
# this should never happen, but just in case
if not qs:
ScheduledSession.objects.create(schedule=meeting.agenda,
session=session,
timeslot=timeslot)
else:
# find the first unassigned scheduled session or create a new one
for ss in qs:
if not ss.session:
ss.session = session
ss.save()
break
else:
ScheduledSession.objects.create(schedule=meeting.agenda,
session=session,
timeslot=timeslot)
session.status_id = 'sched'
session.save()
def build_timeslots(request,meeting,room=None):
'''
This function takes a Meeting object and an optional room argument. If room isn't passed we
@ -38,6 +62,7 @@ def build_timeslots(request,meeting,room=None):
If room is passed pre-create timeslots for the new room. Call this after saving new rooms
or adding a room.
'''
schedule = get_schedule(request,meeting)
slots = meeting.timeslot_set.filter(type='session')
if room:
rooms = [room]
@ -68,6 +93,7 @@ def build_timeslots(request,meeting,room=None):
time=new_time,
location=room,
duration=t.duration)
ScheduledSession.objects.create(schedule=schedule,timeslot=ts)
def build_nonsession(request, meeting):
'''
@ -98,10 +124,7 @@ def build_nonsession(request, meeting):
time=new_time,
duration=slot.duration,
show_location=slot.show_location)
ScheduledSession.create(schedule=schedule,
session=session,
timeslot=ts)
ScheduledSession.create(schedule=schedule,session=session,timeslot=ts)
def get_last_meeting(meeting):
last_number = int(meeting.number) - 1
@ -207,10 +230,8 @@ def sort_groups(meeting):
groups_with_sessions = [ s.group for s in sessions if s.group.type.slug in ('wg','rg','ag') ]
gset = set(groups_with_sessions)
sorted_groups_with_sessions = sorted(gset, key = lambda instance: instance.acronym)
slots = TimeSlot.objects.filter(meeting=meeting,
scheduledsession__schedule=meeting.agenda,
scheduledsession__session__isnull=False)
groups_with_timeslots = [ get_session(s).group for s in slots ]
scheduled_sessions = ScheduledSession.objects.filter(schedule=meeting.agenda,session__isnull=False)
groups_with_timeslots = [ x.session.group for x in scheduled_sessions ]
for group in sorted_groups_with_sessions:
if group in groups_with_timeslots:
scheduled_groups.append(group)
@ -621,7 +642,7 @@ def schedule(request, meeting_id, acronym):
d['day'] = timeslot.time.isoweekday() % 7 + 1 # adjust to django week_day
d['time'] = timeslot.time.strftime('%H%M')
else:
d['day'] = 2
d['day'] = 2 # default
if is_combined(s,meeting):
d['combine'] = True
initial.append(d)
@ -663,17 +684,15 @@ def schedule(request, meeting_id, acronym):
if any(x in form.changed_data for x in ('day','time','room')):
# clear the old association
if initial_timeslot:
initial_timeslot.scheduledsession_set.filter(schedule=meeting.agenda,session=session).delete()
# get SS record(s) and unschedule by removing the session reference
for ss in session.scheduledsession_set.filter(schedule=meeting.agenda):
ss.session = None
ss.save()
if timeslot:
# create association
ScheduledSession.objects.create(schedule=meeting.agenda,
session=session,
timeslot=timeslot)
assign(session,timeslot,meeting)
if timeslot.sessions.all().count() > 1:
messages.warning(request, 'WARNING: There are now two sessions scheduled for the timeslot: %s' % timeslot)
session.status_id = 'sched'
messages.warning(request, 'WARNING: There are now multiple sessions scheduled for the timeslot: %s' % timeslot)
else:
session.status_id = 'schedw'
@ -689,11 +708,11 @@ def schedule(request, meeting_id, acronym):
if 'combine' in form.changed_data:
next_slot = get_next_slot(timeslot)
if combine:
ScheduledSession.objects.create(schedule=meeting.agenda,
session=session,
timeslot=next_slot)
assign(session,next_slot,meeting)
else:
next_slot.scheduledsession_set.filter(schedule=meeting.agenda,session=session).delete()
for ss in next_slot.scheduledsession_set.filter(schedule=meeting.agenda,session=session):
ss.session = None
ss.save()
# ---------------------------------------
@ -812,12 +831,13 @@ def times(request, meeting_id):
return HttpResponseRedirect(url)
for room in meeting.room_set.all():
TimeSlot.objects.create(type_id='session',
meeting=meeting,
name=name,
time=new_time,
location=room,
duration=duration)
ts = TimeSlot.objects.create(type_id='session',
meeting=meeting,
name=name,
time=new_time,
location=room,
duration=duration)
ScheduledSession.objects.create(schedule=meeting.agenda,timeslot=ts)
messages.success(request, 'Timeslots created')
url = reverse('meetings_times', kwargs={'meeting_id':meeting_id})