Coverage for app/logic/term.py: 76%
50 statements
« prev ^ index » next coverage.py v7.10.2, created at 2026-08-24 19:35 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2026-08-24 19:35 +0000
1from flask import session, g
2from playhouse.shortcuts import model_to_dict
3from app.logic.createLogs import createActivityLog
4from app.models.term import Term
6def addNextTerm():
7 newSemesterMap = {"Spring":"Summer",
8 "Summer":"Fall",
9 "Fall":"Spring"}
10 terms = list(Term.select().order_by(Term.termOrder))
11 prevTerm = terms[-1]
12 prevSemester, prevYear = prevTerm.description.split()
14 newYear = int(prevYear) + 1 if prevSemester == "Fall" else int(prevYear)
16 newDescription = newSemesterMap[prevSemester] + " " + str(newYear)
17 newAY = prevTerm.academicYear
18 volunteerHandbook = None
19 laborHandbook = None
20 if prevSemester == "Summer": # we only change academic year when the latest term in the table is Summer
21 year1, year2 = prevTerm.academicYear.split("-")
22 newAY = year2 + "-" + str(int(year2)+1)
23 else: # if the previous term is fall or spring, make sure we copy the handbook
24 volunteerHandbook = prevTerm.volunteerHandbook
25 laborHandbook = prevTerm.laborHandbook
27 semester = newDescription.split()[0]
28 summer= "Summer" in semester
29 newTerm = Term.create(description=newDescription,
30 year=newYear,
31 academicYear=newAY,
32 isSummer= summer,
33 termOrder=Term.convertDescriptionToTermOrder(newDescription),
34 volunteerHandbook=volunteerHandbook,
35 laborHandbook=laborHandbook
36 )
38 newTerm.save()
40 return newTerm
42def addPastTerm(description):
43 semester, year = description.split()
44 if 'May' in semester:
45 semester = "Summer"
46 if semester == "Fall":
47 academicYear = year + "-" + str(int(year) + 1)
48 elif semester == "Summer" or "Spring":
49 academicYear= str(int(year) - 1) + "-" + year
51 isSummer = "Summer" in semester
52 newDescription=f"{semester} {year}"
53 orderTerm = Term.convertDescriptionToTermOrder(newDescription)
55 createdOldTerm = Term.create(description= newDescription,
56 year=year,
57 academicYear=academicYear,
58 isSummer=isSummer,
59 termOrder=orderTerm)
60 createdOldTerm.save()
61 return createdOldTerm
63def changeCurrentTerm(term, refreshOnly=False):
64 switchTerm = not refreshOnly
65 # change old terms
66 if switchTerm:
67 activeTerms = Term.select().where(Term.isCurrentTerm)
68 nterms = (Term.update(isCurrentTerm = False).where(Term.isCurrentTerm).execute())
70 # get new term data
71 newCurrentTerm = Term.get_by_id(term)
72 newCurrentTerm.isCurrentTerm = True
73 session["current_term"] = model_to_dict(newCurrentTerm)
75 # finalize switch
76 if switchTerm:
77 newCurrentTerm.save()
78 createActivityLog(f"Changed Current Term to {newCurrentTerm.description}")
80 return newCurrentTerm