Coverage for app/controllers/minor/routes.py: 30%

63 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2025-03-12 21:45 +0000

1from flask import g, render_template, request, abort, flash, redirect, url_for, jsonify 

2from peewee import DoesNotExist 

3from datetime import datetime 

4 

5from app.controllers.minor import minor_bp 

6from app.models.user import User 

7from app.models.term import Term 

8from app.logic.fileHandler import FileHandler 

9from app.logic.utils import selectSurroundingTerms, getFilesFromRequest 

10from app.logic.minor import createOtherEngagementRequest, setCommunityEngagementForUser, getSummerTerms, getSummerExperience, getEngagementTotal, createSummerExperience, getProgramEngagementHistory, getCourseInformation, getCommunityEngagementByTerm 

11 

12@minor_bp.route('/profile/<username>/cceMinor', methods=['GET']) 

13def viewCceMinor(username): 

14 """ 

15 Load minor management page with community engagements and summer experience 

16 """ 

17 if not (g.current_user.isAdmin): 

18 return abort(403) 

19 

20 sustainedEngagementByTerm = getCommunityEngagementByTerm(username) 

21 selectedSummerTerm, summerExperience = getSummerExperience(username) 

22 

23 latestYear = datetime.now().year + 2 

24 

25 summerYears = [latestYear - i for i in range(5)] 

26 

27 return render_template("minor/profile.html", 

28 user = User.get_by_id(username), 

29 summerYears = summerYears, 

30 sustainedEngagementByTerm = sustainedEngagementByTerm, 

31 summerExperience = summerExperience if summerExperience else "", 

32 selectedSummerTerm = selectedSummerTerm, 

33 totalSustainedEngagements = getEngagementTotal(sustainedEngagementByTerm), 

34 summerTerms = getSummerTerms(), 

35 allTerms = getSummerExperience(username)) 

36 

37@minor_bp.route('/cceMinor/<username>/addSummerExperience', methods=['POST']) 

38def createOrUpdateSummerExperience(username): 

39 formData = request.form 

40 try: 

41 createSummerExperience(username, formData) 

42 flash(f'Summer Experience successfully created by {username}', 'success') 

43 except Exception as e: 

44 flash(f'An error occurred while adding the summer experience: {e}', 'danger') 

45 print(f'An error occurred while adding the summer experience: {e}') 

46 return "" 

47 

48@minor_bp.route('/cceMinor/<username>/getEngagementInformation/<type>/<term>/<id>', methods=['GET']) 

49def getEngagementInformation(username, type, id, term): 

50 """ 

51 For a particular engagement activity (program or course), get the participation history or course information respectively. 

52 """ 

53 if type == "program": 

54 information = getProgramEngagementHistory(id, username, term) 

55 else: 

56 information = getCourseInformation(id) 

57 

58 return information 

59 

60@minor_bp.route('/cceMinor/<username>/modifyCommunityEngagement', methods=['PUT','DELETE']) 

61def modifyCommunityEngagement(username): 

62 """ 

63 Saving a term participation/activities for sustained community engagement 

64 """ 

65 if not g.current_user.isCeltsAdmin: 

66 abort(403) 

67 

68 action = 'add' if request.method == 'PUT' else 'remove' 

69 try: 

70 setCommunityEngagementForUser(action, request.form, g.current_user) 

71 except DoesNotExist: 

72 return "There are already 4 Sustained Community Engagement records." 

73 

74 return "" 

75 

76@minor_bp.route('/cceMinor/<username>/requestOtherCommunityEngagement', methods=['GET', 'POST']) 

77def requestOtherEngagement(username): 

78 """ 

79 Load the "request other" form and submit it. 

80 """ 

81 user = User.get_by_id(username) 

82 terms = selectSurroundingTerms(g.current_term) 

83 

84 latestYear = datetime.now().year + 2 

85 

86 summerYears = [latestYear - i for i in range(5)] 

87 

88 if request.method == 'POST': 

89 filename = None 

90 attachment = request.files.get("attachmentObject") 

91 if attachment: 

92 addFile = FileHandler(getFilesFromRequest(request)) 

93 addFile.saveFiles() 

94 filename = attachment.filename 

95 formData = request.form.copy() 

96 formData["filename"] = filename 

97 createOtherEngagementRequest(username, formData) 

98 flash("Other community engagement request submitted.", "success") 

99 return redirect(url_for("minor.viewCceMinor", username=user)) 

100 

101 

102 return render_template("/minor/requestOtherEngagement.html", 

103 user=user, 

104 summerYears = summerYears, 

105 terms=terms)