Coverage for app/controllers/admin/minor.py: 30%
27 statements
« prev ^ index » next coverage.py v7.2.7, created at 2025-07-22 20:03 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2025-07-22 20:03 +0000
1from flask import render_template, g, abort, request, redirect, url_for, send_file
3from app.models.user import User
5from app.controllers.admin import admin_bp
7from app.logic.minor import getMinorInterest, getMinorProgress, toggleMinorInterest, getMinorSpreadsheet, getDeclaredMinorStudents
9@admin_bp.route('/admin/cceMinor', methods=['GET','POST'])
10def manageMinor():
11 if not g.current_user.isAdmin:
12 abort(403)
14 if request.method == 'POST':
15 interestedStudents = request.form.getlist('interestedStudents[]')
16 for student in interestedStudents:
17 user = User.get(username=student)
18 if not user.minorInterest:
19 toggleMinorInterest(student, True)
21 return redirect(url_for("admin.manageMinor"))
25 interestedStudentsList = getMinorInterest()
26 interestedStudentEmailString = ';'.join([student['email'] for student in interestedStudentsList])
27 sustainedEngagement = getMinorProgress()
28 declaredStudentsList = getDeclaredMinorStudents()
29 declaredStudentEmailString = ';'.join([student['email'] for student in declaredStudentsList])
31 return render_template('/admin/cceMinor.html',
32 interestedStudentsList = interestedStudentsList,
33 declaredStudentsList = declaredStudentsList,
34 interestedStudentEmailString = interestedStudentEmailString,
35 declaredStudentEmailString = declaredStudentEmailString,
36 sustainedEngagement = sustainedEngagement,
37 )
39@admin_bp.route("/admin/cceMinor/download")
40def downloadSpreadsheet():
41 if not g.current_user.isCeltsAdmin:
42 abort(403)
44 newfile = getMinorSpreadsheet()
45 return send_file(open(newfile, 'rb'), download_name='minor_progress.xlsx', as_attachment=True)