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

1from flask import session, g 

2from playhouse.shortcuts import model_to_dict 

3from app.logic.createLogs import createActivityLog 

4from app.models.term import Term 

5 

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() 

13 

14 newYear = int(prevYear) + 1 if prevSemester == "Fall" else int(prevYear) 

15 

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 

26 

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 ) 

37 

38 newTerm.save() 

39 

40 return newTerm 

41 

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 

50 

51 isSummer = "Summer" in semester 

52 newDescription=f"{semester} {year}" 

53 orderTerm = Term.convertDescriptionToTermOrder(newDescription) 

54 

55 createdOldTerm = Term.create(description= newDescription, 

56 year=year, 

57 academicYear=academicYear, 

58 isSummer=isSummer, 

59 termOrder=orderTerm) 

60 createdOldTerm.save() 

61 return createdOldTerm 

62 

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()) 

69 

70 # get new term data 

71 newCurrentTerm = Term.get_by_id(term) 

72 newCurrentTerm.isCurrentTerm = True 

73 session["current_term"] = model_to_dict(newCurrentTerm) 

74 

75 # finalize switch 

76 if switchTerm: 

77 newCurrentTerm.save() 

78 createActivityLog(f"Changed Current Term to {newCurrentTerm.description}") 

79 

80 return newCurrentTerm