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

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

2 

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('/admin/cceMinor', methods=['GET','POST']) 

10def manageMinor(): 

11 if not g.current_user.isAdmin: 

12 abort(403) 

13 

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) 

20 

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

22 

23 

24 

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

30 

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

32 interestedStudentsList = interestedStudentsList, 

33 declaredStudentsList = declaredStudentsList, 

34 interestedStudentEmailString = interestedStudentEmailString, 

35 declaredStudentEmailString = declaredStudentEmailString, 

36 sustainedEngagement = sustainedEngagement, 

37 ) 

38 

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

40def downloadSpreadsheet(): 

41 if not g.current_user.isCeltsAdmin: 

42 abort(403) 

43 

44 newfile = getMinorSpreadsheet() 

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

46 

47