Пример #1
0
def create_fake_semester(strm):
    """
    Create a close-enough Semester object for testing
    """
    strm = str(strm)
    if Semester.objects.filter(name=strm):
        return
    s = Semester(name=strm)
    yr = int(strm[0:3]) + 1900
    if strm[3] == '1':
        mo = 1
    elif strm[3] == '4':
        mo = 5
    elif strm[3] == '7':
        mo = 9

    s.start = datetime.date(yr, mo, 5)
    s.end = datetime.date(yr, mo + 3, 1)
    s.save()

    sw = SemesterWeek(semester=s, week=1)
    mon = s.start
    while mon.weekday() != 0:
        mon -= datetime.timedelta(days=1)
    sw.monday = mon
    sw.save()

    return s
Пример #2
0
def create_fake_semester(strm):
    """
    Create a close-enough Semester object for testing
    """
    strm = str(strm)
    if Semester.objects.filter(name=strm):
        return
    s = Semester(name=strm)
    yr = int(strm[0:3]) + 1900
    if strm[3] == '1':
        mo = 1
    elif strm[3] == '4':
        mo = 5
    elif strm[3] == '7':
        mo = 9

    s.start = datetime.date(yr,mo,5)
    s.end = datetime.date(yr,mo+3,1)
    s.save()

    sw = SemesterWeek(semester=s, week=1)
    mon = s.start
    while mon.weekday() != 0:
        mon -= datetime.timedelta(days=1)
    sw.monday = mon
    sw.save()

    return s
Пример #3
0
def get_or_create_semester(strm):
    if not (isinstance(strm, basestring) and strm.isdigit() and len(strm)==4):
        raise ValueError, "Bad strm: " + repr(strm)
    oldsem = Semester.objects.filter(name=strm)
    if oldsem:
        return oldsem[0]

    db = SIMSConn()
    db.execute("SELECT strm, term_begin_dt, term_end_dt FROM ps_term_tbl WHERE strm=%s", (strm,))
    row = db.fetchone()
    if row is None:
        raise ValueError, "Not Found: %r" % (strm)
    strm, st, en = row
    
    # create Semester object
    st = datetime.datetime.strptime(st, "%Y-%m-%d").date()
    en = datetime.datetime.strptime(en, "%Y-%m-%d").date()
    sem = Semester(name=strm, start=st, end=en)
    sem.save()
    
    # also create SemesterWeek object for the first week
    first_monday = st
    while first_monday.weekday() != 0:
        first_monday += datetime.timedelta(days=1)    
    wk = SemesterWeek(semester=sem, week=1, monday=first_monday)
    wk.save()
    
    return sem
Пример #4
0
def old_semester_test_data( ):
    sems = [{'start': datetime.date(1990, 1, 1), 'end': datetime.date(1990, 4, 30), 'name': '0901'}, {'start': datetime.date(1991, 1, 1), 'end': datetime.date(1991, 4, 30), 'name': '0911'}, {'start': datetime.date(1991, 9, 1), 'end': datetime.date(1991, 12, 31), 'name': '0917'}, {'start': datetime.date(1992, 1, 1), 'end': datetime.date(1992, 4, 30), 'name': '0921'}, {'start': datetime.date(1992, 9, 1), 'end': datetime.date(1992, 12, 31), 'name': '0927'}, {'start': datetime.date(1993, 1, 1), 'end': datetime.date(1993, 4, 30), 'name': '0931'}, {'start': datetime.date(1993, 9, 1), 'end': datetime.date(1993, 12, 31), 'name': '0937'}, {'start': datetime.date(1994, 1, 1), 'end': datetime.date(1994, 4, 30), 'name': '0941'}, {'start': datetime.date(1994, 5, 1), 'end': datetime.date(1994, 8, 31), 'name': '0944'}, {'start': datetime.date(1994, 9, 1), 'end': datetime.date(1994, 12, 31), 'name': '0947'}, {'start': datetime.date(1995, 1, 1), 'end': datetime.date(1995, 4, 30), 'name': '0951'}, {'start': datetime.date(1995, 5, 1), 'end': datetime.date(1995, 8, 31), 'name': '0954'}, {'start': datetime.date(1995, 9, 1), 'end': datetime.date(1995, 12, 31), 'name': '0957'}, {'start': datetime.date(1996, 1, 1), 'end': datetime.date(1996, 4, 30), 'name': '0961'}, {'start': datetime.date(1996, 5, 1), 'end': datetime.date(1996, 8, 31), 'name': '0964'}, {'start': datetime.date(1996, 9, 1), 'end': datetime.date(1996, 12, 31), 'name': '0967'}, {'start': datetime.date(1997, 1, 1), 'end': datetime.date(1997, 4, 30), 'name': '0971'}, {'start': datetime.date(1997, 5, 1), 'end': datetime.date(1997, 8, 31), 'name': '0974'}, {'start': datetime.date(1997, 9, 1), 'end': datetime.date(1997, 12, 31), 'name': '0977'}, {'start': datetime.date(1998, 1, 1), 'end': datetime.date(1998, 4, 30), 'name': '0981'}, {'start': datetime.date(1998, 5, 1), 'end': datetime.date(1998, 8, 31), 'name': '0984'}, {'start': datetime.date(1998, 9, 1), 'end': datetime.date(1998, 12, 31), 'name': '0987'}, {'start': datetime.date(1999, 1, 1), 'end': datetime.date(1999, 4, 30), 'name': '0991'}, {'start': datetime.date(1999, 5, 1), 'end': datetime.date(1999, 8, 31), 'name': '0994'}, {'start': datetime.date(1999, 9, 1), 'end': datetime.date(1999, 12, 31), 'name': '0997'}, {'start': datetime.date(2000, 1, 1), 'end': datetime.date(2000, 4, 30), 'name': '1001'}, {'start': datetime.date(2000, 5, 1), 'end': datetime.date(2000, 8, 31), 'name': '1004'}, {'start': datetime.date(2000, 9, 1), 'end': datetime.date(2000, 12, 31), 'name': '1007'}, {'start': datetime.date(2001, 1, 1), 'end': datetime.date(2001, 4, 30), 'name': '1011'}, {'start': datetime.date(2001, 5, 1), 'end': datetime.date(2001, 8, 31), 'name': '1014'}, {'start': datetime.date(2001, 9, 1), 'end': datetime.date(2001, 12, 31), 'name': '1017'}, {'start': datetime.date(2002, 1, 3), 'end': datetime.date(2002, 4, 30), 'name': '1021'}, {'start': datetime.date(2002, 5, 6), 'end': datetime.date(2002, 8, 31), 'name': '1024'}, {'start': datetime.date(2002, 9, 1), 'end': datetime.date(2002, 12, 31), 'name': '1027'}, {'start': datetime.date(2003, 1, 1), 'end': datetime.date(2003, 4, 30), 'name': '1031'}, {'start': datetime.date(2003, 5, 1), 'end': datetime.date(2003, 8, 31), 'name': '1034'}, {'start': datetime.date(2003, 9, 1), 'end': datetime.date(2003, 12, 31), 'name': '1037'}, {'start': datetime.date(2004, 1, 1), 'end': datetime.date(2004, 4, 30), 'name': '1041'}, {'start': datetime.date(2004, 5, 1), 'end': datetime.date(2004, 8, 31), 'name': '1044'}, {'start': datetime.date(2004, 9, 1), 'end': datetime.date(2004, 12, 31), 'name': '1047'}, {'start': datetime.date(2005, 1, 10), 'end': datetime.date(2005, 4, 30), 'name': '1051'}, {'start': datetime.date(2005, 5, 2), 'end': datetime.date(2005, 8, 31), 'name': '1054'}, {'start': datetime.date(2005, 9, 6), 'end': datetime.date(2005, 12, 31), 'name': '1057'}, {'start': datetime.date(2006, 1, 9), 'end': datetime.date(2006, 4, 30), 'name': '1061'}, {'start': datetime.date(2006, 5, 8), 'end': datetime.date(2006, 8, 31), 'name': '1064'}, {'start': datetime.date(2006, 9, 5), 'end': datetime.date(2006, 12, 31), 'name': '1067'}, {'start': datetime.date(2007, 1, 8), 'end': datetime.date(2007, 4, 30), 'name': '1071'}, {'start': datetime.date(2007, 5, 7), 'end': datetime.date(2007, 8, 31), 'name': '1074'}, {'start': datetime.date(2007, 9, 4), 'end': datetime.date(2007, 12, 31), 'name': '1077'}, {'start': datetime.date(2008, 1, 7), 'end': datetime.date(2008, 4, 30), 'name': '1081'}, {'start': datetime.date(2008, 5, 5), 'end': datetime.date(2008, 8, 31), 'name': '1084'}, {'start': datetime.date(2008, 9, 2), 'end': datetime.date(2008, 12, 31), 'name': '1087'}, {'start': datetime.date(2009, 1, 5), 'end': datetime.date(2009, 4, 30), 'name': '1091'}, {'start': datetime.date(2009, 5, 4), 'end': datetime.date(2009, 8, 4), 'name': '1094'}, {'start': datetime.date(2009, 9, 8), 'end': datetime.date(2009, 12, 7), 'name': '1097'}, {'start': datetime.date(2010, 1, 4), 'end': datetime.date(2010, 4, 16), 'name': '1101'}, {'start': datetime.date(2010, 5, 12), 'end': datetime.date(2010, 8, 11), 'name': '1104'}, {'start': datetime.date(2010, 9, 7), 'end': datetime.date(2010, 12, 6), 'name': '1107'}, {'start': datetime.date(2011, 1, 4), 'end': datetime.date(2011, 4, 7), 'name': '1111'}, {'start': datetime.date(2011, 5, 9), 'end': datetime.date(2011, 8, 8), 'name': '1114'}, {'start': datetime.date(2011, 9, 6), 'end': datetime.date(2011, 12, 5), 'name': '1117'}, {'start': datetime.date(2012, 1, 5), 'end': datetime.date(2012, 4, 11), 'name': '1121'}, {'start': datetime.date(2012, 5, 7), 'end': datetime.date(2012, 8, 3), 'name': '1124'}, {'start': datetime.date(2012, 9, 4), 'end': datetime.date(2012, 12, 3), 'name': '1127'}, {'start': datetime.date(2013, 1, 7), 'end': datetime.date(2013, 4, 12), 'name': '1131'}, {'start': datetime.date(2013, 5, 6), 'end': datetime.date(2013, 8, 2), 'name': '1134'}, {'start': datetime.date(2013, 9, 1), 'end': datetime.date(2013, 12, 31), 'name': '1137'}, {'start': datetime.date(2014, 1, 1), 'end': datetime.date(2014, 4, 30), 'name': '1141'}, {'start': datetime.date(2014, 5, 1), 'end': datetime.date(2014, 8, 30), 'name': '1144'}, {'start': datetime.date(2014, 9, 1), 'end': datetime.date(2014, 12, 30), 'name': '1147'}, {'start': datetime.date(2015, 1, 1), 'end': datetime.date(2015, 4, 30), 'name': '1151'}, {'start': datetime.date(2015, 5, 1), 'end': datetime.date(2015, 8, 30), 'name': '1154'}, {'start': datetime.date(2015, 9, 1), 'end': datetime.date(2015, 12, 30), 'name': '1157'}, {'start': datetime.date(2016, 1, 1), 'end': datetime.date(2016, 4, 30), 'name': '1161'}, {'start': datetime.date(2016, 5, 1), 'end': datetime.date(2016, 8, 30), 'name': '1164'}, {'start': datetime.date(2016, 9, 1), 'end': datetime.date(2016, 12, 30), 'name': '1167'}, {'start': datetime.date(2017, 1, 1), 'end': datetime.date(2017, 4, 30), 'name': '1171'}, {'start': datetime.date(2017, 5, 1), 'end': datetime.date(2017, 8, 30), 'name': '1174'}, {'start': datetime.date(2017, 9, 1), 'end': datetime.date(2017, 12, 30), 'name': '1177'}]
    for sem in sems: 
        try:
            s = Semester.objects.get(name=sem['name'])
        except Semester.DoesNotExist:
            s = Semester(name=sem['name'], start=sem['start'], end=sem['end'])
            print('Creating ', s)
            s.save()
Пример #5
0
    def setUp(self):
        p1 = Person(emplid=210012345,
                    userid="test1",
                    last_name="Lname",
                    first_name="Fname",
                    pref_first_name="Fn",
                    middle_name="M")
        p1.save()

        s = Semester(name="1077",
                     start=date(2007, 9, 4),
                     end=date(2007, 12, 3))
        s.save()

        unit = Unit.objects.get(label="CMPT")
        self.co1 = CourseOffering(owner=unit,
                                  subject="CMPT",
                                  number="120",
                                  section="D100",
                                  semester=s,
                                  component="LEC",
                                  graded=True,
                                  crse_id=11111,
                                  class_nbr=22222,
                                  campus='BRNBY',
                                  title="Computer Stuff",
                                  enrl_cap=100,
                                  enrl_tot=99,
                                  wait_tot=2)

        self.co2 = CourseOffering(owner=unit,
                                  subject="CMPT",
                                  number="165",
                                  section="D100",
                                  semester=s,
                                  component="LEC",
                                  graded=True,
                                  crse_id=22222,
                                  class_nbr=11111,
                                  campus='SURRY',
                                  title="Web Stuff",
                                  enrl_cap=85,
                                  enrl_tot=80,
                                  wait_tot=4)
        self.co1.save()
        self.co2.save()
Пример #6
0
 def setUp(self):
     p1 = Person(emplid=210012345, userid="test1",
             last_name="Lname", first_name="Fname", pref_first_name="Fn", middle_name="M")
     p1.save()
     
     s = Semester(name="1077", start=date(2007,9,4), end=date(2007,12,3))
     s.save()
 
     unit = Unit.objects.get(label="CMPT")
     self.co1 = CourseOffering(owner=unit, subject="CMPT", number="120", section="D100", semester=s, component="LEC",
                         graded=True, crse_id=11111, class_nbr=22222, campus='BRNBY', title="Computer Stuff",
                         enrl_cap=100, enrl_tot=99, wait_tot=2)
     
     self.co2 = CourseOffering(owner=unit, subject="CMPT", number="165", section="D100", semester=s, component="LEC",
                         graded=True, crse_id=22222, class_nbr=11111, campus='SURRY', title="Web Stuff",
                         enrl_cap=85, enrl_tot=80, wait_tot=4)
     self.co1.save()
     self.co2.save()
Пример #7
0
def create_semester():
    s = Semester(name="1077", start=date(2007, 9, 4), end=date(2007, 12, 3))
    s.save()
    return s
Пример #8
0
def create_semesters():
    semester_1124 = Semester(name="1124",
                             start=date(2012, 4, 4),
                             end=date(2012, 9, 3))
    semester_1124.save()
    semester_1127 = Semester(name="1127",
                             start=date(2012, 9, 4),
                             end=date(2012, 12, 3))
    semester_1127.save()
    semester_1131 = Semester(name="1131",
                             start=date(2013, 1, 4),
                             end=date(2013, 4, 3))
    semester_1131.save()
    semester_1134 = Semester(name="1134",
                             start=date(2013, 4, 4),
                             end=date(2013, 9, 3))
    semester_1134.save()
    semester_1137 = Semester(name="1137",
                             start=date(2013, 9, 4),
                             end=date(2013, 12, 3))
    semester_1137.save()
    semester_1141 = Semester(name="1141",
                             start=date(2014, 1, 4),
                             end=date(2014, 4, 3))
    semester_1141.save()
    semester_1144 = Semester(name="1144",
                             start=date(2014, 4, 4),
                             end=date(2014, 9, 3))
    semester_1144.save()
    semester_1147 = Semester(name="1147",
                             start=date(2014, 9, 4),
                             end=date(2014, 12, 3))
    semester_1147.save()
    semester_1151 = Semester(name="1151",
                             start=date(2015, 1, 4),
                             end=date(2015, 4, 3))
    semester_1151.save()
    semester_1154 = Semester(name="1154",
                             start=date(2015, 4, 4),
                             end=date(2015, 9, 3))
    semester_1154.save()
    semester_1157 = Semester(name="1157",
                             start=date(2015, 9, 4),
                             end=date(2015, 12, 3))
    semester_1157.save()
    semester_1161 = Semester(name="1161",
                             start=date(2016, 1, 4),
                             end=date(2016, 4, 3))
    semester_1161.save()
    semester_1164 = Semester(name="1164",
                             start=date(2016, 4, 4),
                             end=date(2016, 9, 3))
    semester_1164.save()
    semester_1167 = Semester(name="1167",
                             start=date(2016, 9, 4),
                             end=date(2016, 12, 3))
    semester_1167.save()
Пример #9
0
 def setUp(self):
     """
         Build a TACategory, TAContract, and two TACourses
     """
     unit = Unit(label="TEST", name="A Fake Unit for Testing") 
     unit.save()
     person = Person(emplid="300000000",
                     userid="testy",
                     first_name="Testy",
                     last_name="Testerson")
     person.save()
     semester = Semester(name="1147",
                         start=datetime.date.today(),
                         end=datetime.date.today())
     semester.save()
     course1 = Course(subject="TEST", 
                     number="100",
                     title="Intro to Testing")
     course1.save()
     course2 = Course(subject="TEST", 
                     number="200",
                     title="Advanced Testing")
     course2.save()
     courseoffering1 = CourseOffering(subject="TEST",
                                      number="100",
                                      section="D100",
                                      semester=semester,
                                      component="LEC",
                                      owner=unit,
                                      title="Intro to Testing",
                                      campus="BRNBY",
                                      enrl_cap=100,
                                      enrl_tot=100,
                                      wait_tot=50,
                                      course=course1)
     courseoffering1.save()
     courseoffering2 = CourseOffering(subject="TEST",
                                      number="200",
                                      section="D200",
                                      semester=semester,
                                      component="LEC",
                                      owner=unit,
                                      title="Advanced Testing",
                                      campus="BRNBY",
                                      enrl_cap=100,
                                      enrl_tot=100,
                                      wait_tot=50,
                                      course=course2)
     courseoffering2.save()
     account = Account(unit=unit, 
                       account_number=1337, 
                       position_number=5,
                       title="A Fake Account for Testing")
     account.save()
     four_weeks_later = datetime.date.today() + datetime.timedelta(days=28)
     hiring_semester = HiringSemester(semester=semester,
                               unit=unit,
                               deadline_for_acceptance=datetime.date.today(),
                               pay_start=datetime.date.today(),
                               pay_end=four_weeks_later,
                               payperiods=2.5)
     hiring_semester.save()
     category = TACategory(account=account,
                           hiring_semester=hiring_semester,
                           code="TST",
                           title="Test Contract Category",
                           hours_per_bu=decimal.Decimal("42"),
                           holiday_hours_per_bu=decimal.Decimal("1.1"),
                           pay_per_bu=decimal.Decimal("125.00"),
                           scholarship_per_bu=decimal.Decimal("25.00"),
                           bu_lab_bonus=decimal.Decimal("0.17"))
     category.save()
     contract = TAContract(category=category,
                           person=person,
                           status="NEW",
                           sin="123456789",
                           deadline_for_acceptance=datetime.date.today(),
                           pay_start=datetime.date.today(),
                           pay_end=datetime.date.today() + datetime.timedelta(days=10),
                           payperiods=2.5,
                           appointment="INIT",
                           conditional_appointment=True,
                           created_by="classam",
                           tssu_appointment=True)
     contract.save()
     tacourse = TACourse(course=courseoffering1,
                         contract=contract,
                         bu=decimal.Decimal('3.0'),
                         labtut=True)
     tacourse.save()
     tacourse2 = TACourse(course=courseoffering2,
                          contract=contract,
                          bu=decimal.Decimal('2.0'),
                          labtut=False)
     tacourse2.save()
Пример #10
0
def create_semester():
    s = Semester(name="1077", start=date(2007,9,4), end=date(2007,12,3))
    s.save()
    return s
Пример #11
0
def create_semesters():
    semester_1124 = Semester(name="1124", start=date(2012,4,4), end=date(2012,9,3))
    semester_1124.save()
    semester_1127 = Semester(name="1127", start=date(2012,9,4), end=date(2012,12,3))
    semester_1127.save()
    semester_1131 = Semester(name="1131", start=date(2013,1,4), end=date(2013,4,3))
    semester_1131.save()
    semester_1134 = Semester(name="1134", start=date(2013,4,4), end=date(2013,9,3))
    semester_1134.save()
    semester_1137 = Semester(name="1137", start=date(2013,9,4), end=date(2013,12,3))
    semester_1137.save()
    semester_1141 = Semester(name="1141", start=date(2014,1,4), end=date(2014,4,3))
    semester_1141.save()
    semester_1144 = Semester(name="1144", start=date(2014,4,4), end=date(2014,9,3))
    semester_1144.save()
    semester_1147 = Semester(name="1147", start=date(2014,9,4), end=date(2014,12,3))
    semester_1147.save()
    semester_1151 = Semester(name="1151", start=date(2015,1,4), end=date(2015,4,3))
    semester_1151.save()
    semester_1154 = Semester(name="1154", start=date(2015,4,4), end=date(2015,9,3))
    semester_1154.save()
    semester_1157 = Semester(name="1157", start=date(2015,9,4), end=date(2015,12,3))
    semester_1157.save()
    semester_1161 = Semester(name="1161", start=date(2016,1,4), end=date(2016,4,3))
    semester_1161.save()
    semester_1164 = Semester(name="1164", start=date(2016,4,4), end=date(2016,9,3))
    semester_1164.save()
    semester_1167 = Semester(name="1167", start=date(2016,9,4), end=date(2016,12,3))
    semester_1167.save()
Пример #12
0
def import_semester_info(verbose=False, dry_run=False, long_long_ago=False, bootstrap=False):
    """
    Update information on Semester objects from SIMS

    Finding the reference is tricky. Try Googling 'sfu calendar {{year}} "academic dates"'

    long_long_ago: import from the beginning of time
    bootstrap: don't assume Semester.current() will work, for bootstrapping test data creation
    """
    output = []
    semester_start = semester_first_day()
    semester_end = semester_last_day()
    sims_holidays = [(datetime.datetime.strptime(d, "%Y-%m-%d").date(), h) for d,h in all_holidays()]

    if not bootstrap:
        # we want semesters 5 years into the future: that's a realistic max horizon for grad promises
        current = Semester.current()
        strms = [current.offset_name(i) for i in range(15)]
    else:
        strms = []

    if long_long_ago:
        strms = sorted(list(set(strms) | set(semester_start.keys())))
    semesters = dict((s.name, s) for s in Semester.objects.filter(name__in=strms))

    semester_weeks = itertools.groupby(
                SemesterWeek.objects.filter(semester__name__in=strms).select_related('semester'),
                lambda sw: sw.semester.name)
    semester_weeks = dict((k,list(v)) for k,v in semester_weeks)

    holidays = itertools.groupby(
                Holiday.objects.filter(semester__name__in=strms, holiday_type='FULL').select_related('semester'),
                lambda h: h.semester.name)
    holidays = dict((k,list(v)) for k,v in holidays)

    for strm in strms:
        url = settings.BASE_ABS_URL + reverse('sysadmin:edit_semester', kwargs={'semester_name': strm})

        # Semester object
        try:
            semester = semesters[strm]
        except KeyError:
            semester = Semester(name=strm)
            semesters[strm] = semester
            output.append("Creating %s." % (strm,))

        # class start and end dates
        try:
            start = datetime.datetime.strptime(semester_start[strm], "%Y-%m-%d").date()
        except KeyError:
            # No data found about this semester: if there's a date already around, honour it
            # Otherwise, guess "same day as this semester last year" which is probably wrong but close.
            start = semester.start
            if not semester.start:
                lastyr = semesters[semester.offset_name(-3)]
                start = lastyr.start.replace(year=lastyr.start.year+1)
                output.append("Guessing start date for %s." % (strm,))

        try:
            end = datetime.datetime.strptime(semester_end[strm], "%Y-%m-%d").date()
        except KeyError:
            # no classes scheduled yet? Assume 13 weeks exactly
            end = start + datetime.timedelta(days=91)

        if semester.start != start:
            output.append("Changing start date for %s from %s to %s." % (strm, semester.start, start))
            semester.start = start
        if semester.end != end:
            output.append("Changing end date for %s from %s to %s." % (strm, semester.end, end))
            semester.end = end

        if not dry_run:
            semester.save()

        # SemesterWeeks
        weeks = semester_weeks.get(strm, [])
        if not weeks:
            sw = SemesterWeek(semester=semester, week=1, monday=first_monday(start))
            weeks.append(sw)
            assert sw.monday.weekday() == 0
            output.append("Creating week 1 for %s on %s." % (strm, sw.monday))
            if not dry_run:
                sw.save()
        elif weeks[0].monday != first_monday(start):
            sw = weeks[0]
            sw.monday = first_monday(start)
            output.append("Changing first Monday of %s to %s." % (strm, sw.monday))
            if not dry_run:
                sw.save()

        length = semester.end - semester.start
        if not bootstrap and length > datetime.timedelta(days=92) and len(weeks) < 2 \
                and semester.start - datetime.date.today() < datetime.timedelta(days=365):
            # semester is longer than 13 weeks: insist that the user specify reading week reasonably-soon before the semester starts
            message = "Semester %s is long (%s) but has no reading week specified. Please have a look here: %s\n\nYou probably want to enter the Monday of week 5/6/7/8 as the Monday after reading week, a week later than it would otherwise be." % (strm, length, url)
            if verbose:
                output.append('*** ' + message)
            else:
                import_admin_email(source='coredata.importer.import_semester_info', message=message)
        elif not bootstrap:
            # also check that the last day of classes is at a coherent time. Might reveal problems with reading week specification.
            endweek,_ = semester.week_weekday(semester.end, weeks=weeks)
            if endweek not in [12, 13, 14]:
                message = "Semester %s ends in week %i (should be 13 or 14). That's weird. Have a look here to see if things are coherent: %s" % (strm, endweek, url)
                if verbose:
                    output.append('*** ' + message)
                else:
                    import_admin_email(source='coredata.importer.import_semester_info', message=message)

        # Holidays
        hs = holidays.get(strm, [])
        h_start, h_end = Semester.start_end_dates(semester)
        for dt, desc in [(d,h) for d,h in sims_holidays if h_start <= d <= h_end]:
            existing = [h for h in hs if h.date == dt]
            if existing:
                holiday = existing[0]
            else:
                holiday = Holiday(semester=semester, date=dt, holiday_type='FULL')
                output.append("Adding holiday %s on %s." % (desc, dt))

            holiday.description = desc
            if not dry_run:
                holiday.save()



    if verbose:
        print '\n'.join(output)
Пример #13
0
 def setUp(self):
     """
         Build a TACategory, TAContract, and two TACourses
     """
     unit = Unit(label="TEST", name="A Fake Unit for Testing") 
     unit.save()
     person = Person(emplid="300000000",
                     userid="testy",
                     first_name="Testy",
                     last_name="Testerson")
     person.save()
     semester = Semester(name="1147",
                         start=datetime.date.today(),
                         end=datetime.date.today())
     semester.save()
     course1 = Course(subject="TEST", 
                     number="100",
                     title="Intro to Testing")
     course1.save()
     course2 = Course(subject="TEST", 
                     number="200",
                     title="Advanced Testing")
     course2.save()
     courseoffering1 = CourseOffering(subject="TEST",
                                      number="100",
                                      section="D100",
                                      semester=semester,
                                      component="LEC",
                                      owner=unit,
                                      title="Intro to Testing",
                                      campus="BRNBY",
                                      enrl_cap=100,
                                      enrl_tot=100,
                                      wait_tot=50,
                                      course=course1)
     courseoffering1.save()
     courseoffering2 = CourseOffering(subject="TEST",
                                      number="200",
                                      section="D200",
                                      semester=semester,
                                      component="LEC",
                                      owner=unit,
                                      title="Advanced Testing",
                                      campus="BRNBY",
                                      enrl_cap=100,
                                      enrl_tot=100,
                                      wait_tot=50,
                                      course=course2)
     courseoffering2.save()
     account = Account(unit=unit, 
                       account_number=1337, 
                       position_number=5,
                       title="A Fake Account for Testing")
     account.save()
     four_weeks_later = datetime.date.today() + datetime.timedelta(days=28)
     hiring_semester = HiringSemester(semester=semester,
                               unit=unit,
                               deadline_for_acceptance=datetime.date.today(),
                               pay_start=datetime.date.today(),
                               pay_end=four_weeks_later,
                               payperiods=2.5)
     hiring_semester.save()
     category = TACategory(account=account,
                           hiring_semester=hiring_semester,
                           code="TST",
                           title="Test Contract Category",
                           hours_per_bu=decimal.Decimal("42"),
                           holiday_hours_per_bu=decimal.Decimal("1.1"),
                           pay_per_bu=decimal.Decimal("100.00"),
                           scholarship_per_bu=decimal.Decimal("25.00"),
                           bu_lab_bonus=decimal.Decimal("0.17"))
     category.save()
     contract = TAContract(category=category,
                           person=person,
                           status="NEW",
                           sin="123456789",
                           deadline_for_acceptance=datetime.date.today(),
                           pay_start=datetime.date.today(),
                           pay_end=datetime.date.today() + datetime.timedelta(days=10),
                           payperiods=2.5,
                           appointment="INIT",
                           conditional_appointment=True,
                           created_by="classam",
                           tssu_appointment=True)
     contract.save()
     tacourse = TACourse(course=courseoffering1,
                         contract=contract,
                         bu=decimal.Decimal('3.0'),
                         labtut=True)
     tacourse.save()
     tacourse2 = TACourse(course=courseoffering2,
                          contract=contract,
                          bu=decimal.Decimal('2.0'),
                          labtut=False)
     tacourse2.save()
Пример #14
0
def import_semester_info(verbose=False, dry_run=False, long_long_ago=False, bootstrap=False):
    """
    Update information on Semester objects from SIMS

    Finding the reference is tricky. Try Googling 'sfu calendar {{year}} "academic dates"'

    long_long_ago: import from the beginning of time
    bootstrap: don't assume Semester.current() will work, for bootstrapping test data creation
    """
    output = []
    semester_start = semester_first_day()
    semester_end = semester_last_day()
    sims_holidays = all_holidays()

    if not bootstrap:
        # we want semesters 5 years into the future: that's a realistic max horizon for grad promises
        current = Semester.current()
        strms = [current.offset_name(i) for i in range(15)]
    else:
        strms = []

    if long_long_ago:
        strms = sorted(list(set(strms) | set(semester_start.keys())))
    semesters = dict((s.name, s) for s in Semester.objects.filter(name__in=strms))

    semester_weeks = itertools.groupby(
                SemesterWeek.objects.filter(semester__name__in=strms).select_related('semester'),
                lambda sw: sw.semester.name)
    semester_weeks = dict((k,list(v)) for k,v in semester_weeks)

    holidays = itertools.groupby(
                Holiday.objects.filter(semester__name__in=strms, holiday_type='FULL').select_related('semester'),
                lambda h: h.semester.name)
    holidays = dict((k,list(v)) for k,v in holidays)

    for strm in strms:
        url = settings.BASE_ABS_URL + reverse('sysadmin:edit_semester', kwargs={'semester_name': strm})

        # Semester object
        try:
            semester = semesters[strm]
        except KeyError:
            semester = Semester(name=strm)
            semesters[strm] = semester
            output.append("Creating %s." % (strm,))

        # class start and end dates
        try:
            start = semester_start[strm]
        except KeyError:
            # No data found about this semester: if there's a date already around, honour it
            # Otherwise, guess "same day as this semester last year" which is probably wrong but close.
            start = semester.start
            if not semester.start:
                lastyr = semesters[semester.offset_name(-3)]
                start = lastyr.start.replace(year=lastyr.start.year+1)
                output.append("Guessing start date for %s." % (strm,))

        try:
            end = semester_end[strm]
        except KeyError:
            # no classes scheduled yet? Assume 13 weeks exactly
            end = start + datetime.timedelta(days=91)

        if semester.start != start:
            output.append("Changing start date for %s from %s to %s." % (strm, semester.start, start))
            semester.start = start
        if semester.end != end:
            output.append("Changing end date for %s from %s to %s." % (strm, semester.end, end))
            semester.end = end

        if not dry_run:
            semester.save()

        # SemesterWeeks
        weeks = semester_weeks.get(strm, [])
        if not weeks:
            sw = SemesterWeek(semester=semester, week=1, monday=first_monday(start))
            weeks.append(sw)
            assert sw.monday.weekday() == 0
            output.append("Creating week 1 for %s on %s." % (strm, sw.monday))
            if not dry_run:
                sw.save()
        elif weeks[0].monday != first_monday(start):
            sw = weeks[0]
            sw.monday = first_monday(start)
            output.append("Changing first Monday of %s to %s." % (strm, sw.monday))
            if not dry_run:
                sw.save()

        length = semester.end - semester.start
        if not bootstrap and length > datetime.timedelta(days=92) and len(weeks) < 2 \
                and semester.start - datetime.date.today() < datetime.timedelta(days=365):
            # semester is longer than 13 weeks: insist that the user specify reading week reasonably-soon before the semester starts
            message = "Semester %s is long (%s) but has no reading week specified. Please have a look here: %s\n\nYou probably want to enter the Monday of week 5/6/7/8 as the Monday after reading week, a week later than it would otherwise be." % (strm, length, url)
            if verbose:
                output.append('*** ' + message)
            else:
                import_admin_email(source='coredata.importer.import_semester_info', message=message)
        elif not bootstrap:
            # also check that the last day of classes is at a coherent time. Might reveal problems with reading week specification.
            endweek,_ = semester.week_weekday(semester.end, weeks=weeks)
            if endweek not in [12, 13, 14]:
                message = "Semester %s ends in week %i (should be 13 or 14). That's weird. Have a look here to see if things are coherent: %s" % (strm, endweek, url)
                if verbose:
                    output.append('*** ' + message)
                else:
                    import_admin_email(source='coredata.importer.import_semester_info', message=message)

        # Holidays
        hs = holidays.get(strm, [])
        h_start, h_end = Semester.start_end_dates(semester)
        for dt, desc in [(d,h) for d,h in sims_holidays if h_start <= d <= h_end]:
            existing = [h for h in hs if h.date == dt]
            if existing:
                holiday = existing[0]
            else:
                holiday = Holiday(semester=semester, date=dt, holiday_type='FULL')
                output.append("Adding holiday %s on %s." % (desc, dt))

            holiday.description = desc
            if not dry_run:
                holiday.save()



    if verbose:
        print('\n'.join(output))