Coverage for app/logic/serviceLearningCoursesData.py: 94%
52 statements
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-24 14:13 +0000
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-24 14:13 +0000
1from app.models.course import Course
2from app.models.user import User
3from app.models.term import Term
4from app.models.courseInstructor import CourseInstructor
5from app.models.courseParticipant import CourseParticipant
6from app.models.courseStatus import CourseStatus
7from app.models.courseQuestion import CourseQuestion
8from app.models.questionNote import QuestionNote
9from app.models.note import Note
10from app.models.attachmentUpload import AttachmentUpload
11from app.models.term import Term
12from app.models import DoesNotExist
13from app.logic.adminLogs import createLog
14from app.logic.fileHandler import FileHandler
16def getServiceLearningCoursesData(user):
17 """Returns dictionary with data used to populate Service-Learning proposal table"""
18 courses = (Course.select(Course, Term, User, CourseStatus)
19 .join(CourseInstructor).switch()
20 .join(Term).switch()
21 .join(CourseStatus).switch()
22 .join(User)
23 .where((CourseInstructor.user==user)|(Course.createdBy==user))
24 .order_by(Course.term.desc(), Course.status))
26 courseDict = {}
27 for course in courses:
28 otherInstructors = (CourseInstructor.select(CourseInstructor, User).join(User).where(CourseInstructor.course==course))
29 faculty = [f"{instructor.user.firstName} {instructor.user.lastName}" for instructor in otherInstructors]
32 courseDict[course.id] = {
33 "id":course.id,
34 "creator":f"{course.createdBy.firstName} {course.createdBy.lastName}",
35 "name":course.courseName,
36 "faculty": faculty,
37 "term": course.term,
38 "status": course.status.status}
39 return courseDict
41def withdrawProposal(courseID):
42 """Withdraws proposal of ID passed in. Removes foreign keys first.
43 Key Dependencies: QuestionNote, CourseQuestion, CourseParticipant,
44 CourseInstructor, Note"""
46 # delete syllabus
47 try:
48 syllabi = AttachmentUpload.select().where(AttachmentUpload.course==courseID)
49 for syllabus in syllabi:
50 FileHandler(courseId = courseID).deleteFile(syllabus.id)
52 except DoesNotExist:
53 print(f"File, {AttachmentUpload.fileName}, does not exist.")
55 # delete course object
56 course = Course.get(Course.id == courseID)
57 courseName = course.courseName
58 questions = CourseQuestion.select().where(CourseQuestion.course == course)
59 notes = list(Note.select(Note.id)
60 .join(QuestionNote)
61 .where(QuestionNote.question.in_(questions))
62 .distinct())
63 course.delete_instance(recursive=True)
64 for note in notes:
65 note.delete_instance()
67 createLog(f"Withdrew SLC proposal: {courseName}")
69def renewProposal(courseID, term):
70 """
71 Renews proposal of ID passed in for the selected term.
72 Sets status to in progress.
73 """
74 oldCourse = Course.get_by_id(courseID)
75 newCourse = Course.get_by_id(courseID)
76 newCourse.id = None
77 newCourse.term = Term.get_by_id(term)
78 newCourse.status = CourseStatus.IN_PROGRESS
79 newCourse.isPreviouslyApproved = True
80 newCourse.save()
81 questions = CourseQuestion.select().where(CourseQuestion.course==oldCourse)
82 for question in questions:
83 CourseQuestion.create(course=newCourse.id,
84 questionContent=question.questionContent,
85 questionNumber=question.questionNumber)
87 instructors = CourseInstructor.select().where(CourseInstructor.course==oldCourse.id)
88 for instructor in instructors:
89 CourseInstructor.create(course=newCourse.id,
90 user=instructor.user)
92 return newCourse