Coverage for app/logic/courseManagement.py: 79%
47 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-03-01 16:17 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-03-01 16:17 +0000
1from flask import flash
2from peewee import fn, JOIN
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.createLogs import createAdminLog
9from app.logic.fileHandler import FileHandler
10from app.logic.utils import getFilesFromRequest
11from app.models.course import Course
12from app.models.term import Term
13from app.models.user import User
16def unapprovedCourses(termId):
17 '''
18 Queries the database to get all the neccessary information for submitted courses.
19 '''
21 unapprovedCourses = (Course.select(Course, Term, CourseStatus, fn.GROUP_CONCAT(" " ,User.firstName, " ", User.lastName).alias('instructors'))
22 .join(CourseInstructor, JOIN.LEFT_OUTER)
23 .join(User, JOIN.LEFT_OUTER).switch(Course)
24 .join(CourseStatus).switch(Course)
25 .join(Term)
26 .where(Term.id == termId,
27 Course.status.in_([CourseStatus.SUBMITTED, CourseStatus.IN_PROGRESS]))
28 .group_by(Course, Term, CourseStatus)
29 .order_by(Course.status))
31 return unapprovedCourses
32def approvedCourses(termId):
33 '''
34 Queries the database to get all the neccessary information for
35 approved courses.
36 '''
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))
46 return approvedCourses
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)
54 return course
56def updateCourse(courseData, attachments=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(courseName=courseData["courseName"],
67 courseAbbreviation=courseData["courseAbbreviation"],
68 sectionDesignation=courseData["sectionDesignation"],
69 courseCredit=courseData["credit"],
70 isRegularlyOccurring=int(courseData["isRegularlyOccurring"]),
71 term=courseData['term'],
72 status=CourseStatus.SUBMITTED,
73 isPreviouslyApproved=int(courseData["isPreviouslyApproved"]),
74 previouslyApprovedDescription = courseData["previouslyApprovedDescription"],
75 isAllSectionsServiceLearning=("on" in courseData["slSectionsToggle"]),
76 serviceLearningDesignatedSections=courseData["slDesignation"],
77 isPermanentlyDesignated=("on" in courseData["permanentDesignation"]),
78 hasSlcComponent = int(courseData["hasSlcComponent"]))
79 .where(Course.id == course.id).execute())
80 for i in range(1, 7):
81 (CourseQuestion.update(questionContent=courseData[f"{i}"])
82 .where((CourseQuestion.questionNumber == i) &
83 (CourseQuestion.course==course)).execute())
84 instructorList = []
85 if 'instructor[]' in courseData:
86 instructorList = courseData.getlist('instructor[]')
87 CourseInstructor.delete().where(CourseInstructor.course == course).execute()
88 for instructor in instructorList:
89 CourseInstructor.create(course=course, user=instructor)
90 createAdminLog(f"Saved SLC proposal: {courseData['courseName']}")
91 if attachments:
92 addFile= FileHandler(attachments, courseId=course.id)
93 addFile.saveFiles()
94 return Course.get_by_id(course.id)
95 except Exception as e:
96 print(e)
97 transaction.rollback()
98 return False