Coverage for app/controllers/admin/minor.py: 29%

38 statements  

« prev     ^ index     » next       coverage.py v7.10.2, created at 2025-12-18 19:28 +0000

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

2from app.logic.minor import getMinorProgress 

3from app.models.user import User 

4 

5from app.controllers.admin import admin_bp 

6 

7from app.logic.minor import getMinorInterest, getMinorProgress, toggleMinorInterest, getMinorSpreadsheet, getDeclaredMinorStudents 

8 

9@admin_bp.route('/profile/<username>/cceMinorChart', methods=['GET']) 

10def cceMinorChart(username): 

11 if not g.current_user.isAdmin: 

12 abort(403) 

13 else: 

14 progressList = getMinorProgress() 

15 turnToChart = [] 

16 for progress in progressList: 

17 turnToChart.append({'name':progress["firstName"] + " " + progress["lastName"], "engagementCount" : progress['engagementCount'], "completeSummer": "Yes" if progress['hasSummer'] == "Completed" else "No", "termDescription": progress['engagementTerm']}) 

18 return jsonify(turnToChart) 

19 

20@admin_bp.route('/admin/cceMinor', methods=['GET','POST']) 

21def manageMinor(): 

22 if not g.current_user.isAdmin: 

23 abort(403) 

24 

25 if request.method == 'POST': 

26 interestedStudents = request.form.getlist('interestedStudents[]') 

27 for student in interestedStudents: 

28 user = User.get(username=student) 

29 if not user.minorInterest: 

30 toggleMinorInterest(student, True) 

31 

32 return redirect(url_for("admin.manageMinor")) 

33 

34 

35 

36 interestedStudentsList = getMinorInterest() 

37 interestedStudentEmailString = ';'.join([student['email'] for student in interestedStudentsList]) 

38 sustainedEngagement = getMinorProgress() 

39 declaredStudentsList = getDeclaredMinorStudents() 

40 declaredStudentEmailString = ';'.join([student['email'] for student in declaredStudentsList]) 

41 adminUsername = g.current_user.username 

42 

43 return render_template('/admin/cceMinor.html', 

44 interestedStudentsList = interestedStudentsList, 

45 declaredStudentsList = declaredStudentsList, 

46 interestedStudentEmailString = interestedStudentEmailString, 

47 declaredStudentEmailString = declaredStudentEmailString, 

48 sustainedEngagement = sustainedEngagement, 

49 adminUsername = adminUsername, 

50 ) 

51 

52@admin_bp.route("/admin/cceMinor/download") 

53def downloadSpreadsheet(): 

54 if not g.current_user.isCeltsAdmin: 

55 abort(403) 

56 

57 newfile = getMinorSpreadsheet() 

58 return send_file(open(newfile, 'rb'), download_name='minor_progress.xlsx', as_attachment=True) 

59 

60