Coverage for app/logic/courseManagement.py: 78%

46 statements  

« prev     ^ index     » next       coverage.py v7.2.5, created at 2023-05-24 14:13 +0000

1from flask import flash 

2from peewee import fn, JOIN 

3 

4from app.models import mainDB 

5from app.models.courseInstructor import CourseInstructor 

6from app.models.courseQuestion import CourseQuestion 

7from app.models.courseStatus import CourseStatus 

8from app.logic.adminLogs import createLog 

9from app.logic.fileHandler import FileHandler 

10from app.models.course import Course 

11from app.models.term import Term 

12from app.models.user import User 

13 

14 

15def unapprovedCourses(termId): 

16 ''' 

17 Queries the database to get all the neccessary information for submitted courses. 

18 ''' 

19 

20 unapprovedCourses = (Course.select(Course, Term, CourseStatus, fn.GROUP_CONCAT(" " ,User.firstName, " ", User.lastName).alias('instructors')) 

21 .join(CourseInstructor, JOIN.LEFT_OUTER) 

22 .join(User, JOIN.LEFT_OUTER).switch(Course) 

23 .join(CourseStatus).switch(Course) 

24 .join(Term) 

25 .where(Term.id == termId, 

26 Course.status.in_([CourseStatus.SUBMITTED, 

27 CourseStatus.IN_PROGRESS])) 

28 .group_by(Course, Term, CourseStatus) 

29 .order_by(Course.status)) 

30 

31 return unapprovedCourses 

32def approvedCourses(termId): 

33 ''' 

34 Queries the database to get all the neccessary information for 

35 approved courses. 

36 ''' 

37 

38 approvedCourses = (Course.select(Course, Term, CourseStatus, fn.GROUP_CONCAT(" " ,User.firstName, " ", User.lastName).alias('instructors')) 

39 .join(CourseInstructor, JOIN.LEFT_OUTER) 

40 .join(User, JOIN.LEFT_OUTER).switch(Course) 

41 .join(CourseStatus).switch(Course) 

42 .join(Term) 

43 .where(Term.id == termId, Course.status == CourseStatus.APPROVED) 

44 .group_by(Course, Term, CourseStatus)) 

45 

46 return approvedCourses 

47 

48def createCourse(creator="No user provided"): 

49 """ Create an empty, in progress course """ 

50 course = Course.create(status=CourseStatus.IN_PROGRESS, createdBy=creator) 

51 for i in range(1, 7): 

52 CourseQuestion.create( course=course, questionNumber=i) 

53 

54 return course 

55 

56def updateCourse(courseData, attachment=None): 

57 """ 

58 This function will take in courseData for the SLC proposal page and a dictionary 

59 of instuctors assigned to the course and update the information in the db. 

60 """ 

61 with mainDB.atomic() as transaction: 

62 try: 

63 course = Course.get_by_id(courseData['courseID']) 

64 for toggler in ["slSectionsToggle", "permanentDesignation"]: 

65 courseData.setdefault(toggler, "off") 

66 Course.update( 

67 courseName=courseData["courseName"], 

68 courseAbbreviation=courseData["courseAbbreviation"], 

69 sectionDesignation=courseData["sectionDesignation"], 

70 courseCredit=courseData["credit"], 

71 isRegularlyOccurring=int(courseData["isRegularlyOccurring"]), 

72 term=courseData['term'], 

73 status=CourseStatus.SUBMITTED, 

74 isPreviouslyApproved=int(courseData["isPreviouslyApproved"]), 

75 previouslyApprovedDescription = courseData["previouslyApprovedDescription"], 

76 isAllSectionsServiceLearning=("on" in courseData["slSectionsToggle"]), 

77 serviceLearningDesignatedSections=courseData["slDesignation"], 

78 isPermanentlyDesignated=("on" in courseData["permanentDesignation"]), 

79 hasSlcComponent = int(courseData["hasSlcComponent"]) 

80 ).where(Course.id == course.id).execute() 

81 for i in range(1, 7): 

82 (CourseQuestion.update(questionContent=courseData[f"{i}"]) 

83 .where((CourseQuestion.questionNumber == i) & 

84 (CourseQuestion.course==course)).execute()) 

85 instructorList = [] 

86 if 'instructor[]' in courseData: 

87 instructorList = courseData.getlist('instructor[]') 

88 CourseInstructor.delete().where(CourseInstructor.course == course).execute() 

89 for instructor in instructorList: 

90 CourseInstructor.create(course=course, user=instructor) 

91 createLog(f"Saved SLC proposal: {courseData['courseName']}") 

92 if attachment: 

93 addFile= FileHandler(attachment, courseId=course.id) 

94 addFile.saveFiles() 

95 return Course.get_by_id(course.id) 

96 except Exception as e: 

97 print(e) 

98 transaction.rollback() 

99 return False