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
« 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
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
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)
20 sustainedEngagementByTerm = getCommunityEngagementByTerm(username)
21 selectedSummerTerm, summerExperience = getSummerExperience(username)
23 latestYear = datetime.now().year + 2
25 summerYears = [latestYear - i for i in range(5)]
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))
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 ""
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)
58 return information
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)
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."
74 return ""
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)
84 latestYear = datetime.now().year + 2
86 summerYears = [latestYear - i for i in range(5)]
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))
102 return render_template("/minor/requestOtherEngagement.html",
103 user=user,
104 summerYears = summerYears,
105 terms=terms)