33import pytz , datetime
44from urlparse import urljoin
55import copy
6+ import os
7+
68import debug
79
810from django .db import models
@@ -463,6 +465,11 @@ def __unicode__(self):
463465 def base_url (self ):
464466 return "/meeting/%s/agenda/%s" % (self .meeting .number , self .name )
465467
468+ # temporary property to pacify the places where Schedule.scheduledsession_set is used
469+ @property
470+ def scheduledsession_set (self ):
471+ return self .assignments
472+
466473# def url_edit(self):
467474# return "/meeting/%s/agenda/%s/edit" % (self.meeting.number, self.name)
468475#
@@ -584,6 +591,15 @@ def calc_badness1(self, assignments):
584591 self .badness = badness
585592 return badness
586593
594+ def area_list (self ):
595+ return ( self .assignments .filter (session__group__type__slug__in = ['wg' , 'rg' , 'ag' ],
596+ session__group__parent__isnull = False )
597+ .order_by ('session__group__parent__acronym' )
598+ .values_list ('session__group__parent__acronym' , flat = True )
599+ .distinct () )
600+
601+ def groups (self ):
602+ return Group .objects .filter (type__slug__in = ['wg' , 'rg' , 'ag' ], session__scheduledsession__schedule = self ).distinct ().order_by ('parent__acronym' , 'acronym' )
587603
588604class ScheduledSession (models .Model ):
589605 """
@@ -593,13 +609,16 @@ class ScheduledSession(models.Model):
593609 """
594610 timeslot = models .ForeignKey ('TimeSlot' , null = False , blank = False , help_text = u"" )
595611 session = models .ForeignKey ('Session' , null = True , default = None , help_text = u"Scheduled session" )
596- schedule = models .ForeignKey ('Schedule' , null = False , blank = False , help_text = u"Who made this agenda" )
612+ schedule = models .ForeignKey ('Schedule' , null = False , blank = False , related_name = 'assignments' )
597613 extendedfrom = models .ForeignKey ('ScheduledSession' , null = True , default = None , help_text = u"Timeslot this session is an extension of" )
598614 modified = models .DateTimeField (default = datetime .datetime .now )
599615 notes = models .TextField (blank = True )
600616 badness = models .IntegerField (default = 0 , blank = True , null = True )
601617 pinned = models .BooleanField (default = False , help_text = "Do not move session during automatic placement" )
602618
619+ class Meta :
620+ ordering = ["timeslot__time" , "session__group__parent__name" , "session__group__acronym" , "session__name" , ]
621+
603622 # use to distinguish this from FakeScheduledSession in placement.py
604623 faked = "real"
605624
@@ -724,7 +743,6 @@ def json_dict(self, selfurl):
724743 ss ["pinned" ] = self .pinned
725744 return ss
726745
727-
728746class Constraint (models .Model ):
729747 """
730748 Specifies a constraint on the scheduling.
@@ -1142,3 +1160,20 @@ def badness_fast(self, timeslot, scheduleslot, session_pk_list):
11421160 self .badness_log (1 , "badgroup: %s badness = %u\n " % (self .group .acronym , badness ))
11431161 return badness
11441162
1163+ def agenda_text (self ):
1164+ doc = self .agenda ()
1165+ if doc :
1166+ path = os .path .join (settings .AGENDA_PATH , self .meeting .number , "agenda" , doc .external_url )
1167+ if os .path .exists (path ):
1168+ with open (path ) as f :
1169+ return f .read ()
1170+ else :
1171+ "No agenda file found"
1172+ else :
1173+ return "The agenda has not been uploaded yet."
1174+
1175+ def type (self ):
1176+ if self .group .type .slug in [ "wg" ]:
1177+ return "BOF" if self .group .state .slug in ["bof" , "bof-conc" ] else "WG"
1178+ else :
1179+ return ""
0 commit comments