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

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 

15 

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

25 

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] 

30 

31 

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 

40 

41def withdrawProposal(courseID): 

42 """Withdraws proposal of ID passed in. Removes foreign keys first. 

43 Key Dependencies: QuestionNote, CourseQuestion, CourseParticipant, 

44 CourseInstructor, Note""" 

45 

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) 

51 

52 except DoesNotExist: 

53 print(f"File, {AttachmentUpload.fileName}, does not exist.") 

54 

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

66 

67 createLog(f"Withdrew SLC proposal: {courseName}") 

68 

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) 

86 

87 instructors = CourseInstructor.select().where(CourseInstructor.course==oldCourse.id) 

88 for instructor in instructors: 

89 CourseInstructor.create(course=newCourse.id, 

90 user=instructor.user) 

91 

92 return newCourse