Coverage for app/controllers/admin/volunteers.py: 31%
123 statements
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-24 14:13 +0000
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-24 14:13 +0000
1from flask import request, render_template, redirect, url_for, request, flash, abort, g, json, jsonify
2from datetime import datetime
3from peewee import DoesNotExist
4from playhouse.shortcuts import model_to_dict
5from app.controllers.admin import admin_bp
6from app.models.event import Event
7from app.models.program import Program
8from app.models.user import User
9from app.models.eventParticipant import EventParticipant
10from app.logic.searchUsers import searchUsers
11from app.logic.volunteers import updateEventParticipants, addVolunteerToEventRsvp, getEventLengthInHours, addUserBackgroundCheck, setProgramManager
12from app.logic.participants import trainedParticipants, getEventParticipants, addPersonToEvent
13from app.logic.events import getPreviousRecurringEventData
14from app.models.eventRsvp import EventRsvp
15from app.models.backgroundCheck import BackgroundCheck
16from app.models.programManager import ProgramManager
17from app.logic.adminLogs import createLog
18from app.logic.users import getBannedUsers, isBannedFromEvent
22@admin_bp.route('/searchVolunteers/<query>', methods = ['GET'])
23def getVolunteers(query):
24 '''Accepts user input and queries the database returning results that matches user search'''
26 return json.dumps(searchUsers(query))
28@admin_bp.route('/eventsList/<eventID>/track_volunteers', methods=['GET'])
29def trackVolunteersPage(eventID):
30 try:
31 event = Event.get_by_id(eventID)
32 except DoesNotExist as e:
33 print(f"No event found for {eventID}")
34 abort(404)
36 eventData = model_to_dict(event, recurse=False)
37 eventData["program"] = event.singleProgram
38 trainedParticipantsList = trainedParticipants(event.singleProgram, g.current_term)
39 eventParticipants = getEventParticipants(event)
40 isProgramManager = g.current_user.isProgramManagerForEvent(event)
41 bannedUsers = [row.user for row in getBannedUsers(event.singleProgram)]
42 if not (g.current_user.isCeltsAdmin or (g.current_user.isCeltsStudentStaff and isProgramManager)):
43 abort(403)
45 eventRsvpData = list(EventRsvp.select().where(EventRsvp.event==event).order_by(EventRsvp.rsvpTime))
46 eventParticipantData = list(EventParticipant.select().where(EventParticipant.event==event))
47 participantsAndRsvp = (eventParticipantData + eventRsvpData)
48 eventVolunteerData = []
49 volunteerUser = []
50 for volunteer in participantsAndRsvp:
51 if volunteer.user not in volunteerUser:
52 eventVolunteerData.append(volunteer)
53 volunteerUser.append(volunteer.user)
54 eventLengthInHours = getEventLengthInHours(event.timeStart, event.timeEnd, event.startDate)
56 recurringEventID = event.recurringId # query Event Table to get recurringId using Event ID.
57 recurringEventStartDate = event.startDate
58 recurringVolunteers = getPreviousRecurringEventData(recurringEventID)
60 return render_template("/events/trackVolunteers.html",
61 eventData = eventData,
62 eventVolunteerData = eventVolunteerData,
63 eventParticipants = eventParticipants,
64 eventLength = eventLengthInHours,
65 event = event,
66 recurringEventID = recurringEventID,
67 recurringEventStartDate = recurringEventStartDate,
68 recurringVolunteers = recurringVolunteers,
69 bannedUsers = bannedUsers,
70 trainedParticipantsList = trainedParticipantsList)
72@admin_bp.route('/eventsList/<eventID>/track_volunteers', methods=['POST'])
73def updateVolunteerTable(eventID):
74 try:
75 event = Event.get_by_id(eventID)
76 except DoesNotExist as e:
77 print(f"No event found for {eventID}")
78 abort(404)
80 program = event.singleProgram
82 volunteerUpdated = updateEventParticipants(request.form)
83 if volunteerUpdated:
84 flash("Volunteer table succesfully updated", "success")
85 else:
86 flash("Error adding volunteer", "danger")
87 return redirect(url_for("admin.trackVolunteersPage", eventID=eventID))
90@admin_bp.route('/addVolunteersToEvent/<eventId>', methods = ['POST'])
91def addVolunteer(eventId):
92 event = Event.get_by_id(eventId)
93 successfullyAddedVolunteer = False
94 usernameList = []
95 eventParticipants = getEventParticipants(eventId)
96 usernameList = request.form.getlist("volunteer[]")
98 successfullyAddedVolunteer = False
99 for user in usernameList:
100 userObj = User.get_by_id(user)
101 successfullyAddedVolunteer = addPersonToEvent(userObj, event)
102 if successfullyAddedVolunteer == "already in":
103 flash(f"{userObj.fullName} already in table.", "warning")
104 else:
105 if successfullyAddedVolunteer:
106 flash(f"{userObj.fullName} added successfully.", "success")
107 else:
108 flash(f"Error when adding {userObj.fullName} to event." ,"danger")
110 if 'ajax' in request.form and request.form['ajax']:
111 return ''
113 return redirect(url_for('admin.trackVolunteersPage', eventID = eventId))
115@admin_bp.route('/addVolunteersToEvent/<username>/<eventId>/isBanned', methods = ['GET'])
116def isVolunteerBanned(username, eventId):
117 return {"banned":1} if isBannedFromEvent(username, eventId) else {"banned":0}
119@admin_bp.route('/removeVolunteerFromEvent/<user>/<eventID>', methods = ['POST'])
120def removeVolunteerFromEvent(user, eventID):
121 (EventParticipant.delete().where(EventParticipant.user==user, EventParticipant.event==eventID)).execute()
122 (EventRsvp.delete().where(EventRsvp.user==user, EventRsvp.event==eventID)).execute()
123 flash("Volunteer successfully removed", "success")
124 return ""
126@admin_bp.route('/addBackgroundCheck', methods = ['POST'])
127def addBackgroundCheck():
128 if g.current_user.isCeltsAdmin:
129 eventData = request.form
130 user = eventData['user']
131 bgStatus = eventData['bgStatus']
132 type = eventData['bgType']
133 dateCompleted = eventData['bgDate']
134 addUserBackgroundCheck(user, type, bgStatus, dateCompleted)
135 return " "
137@admin_bp.route('/deleteBackgroundCheck', methods = ['POST'])
138def deleteBackgroundCheck():
139 if g.current_user.isCeltsAdmin:
140 eventData = request.form
141 bgToDelete = BackgroundCheck.get_by_id(eventData['bgID'])
142 BackgroundCheck.delete().where(BackgroundCheck.id == bgToDelete).execute()
143 return ""
145@admin_bp.route('/updateProgramManager', methods=["POST"])
146def updateProgramManager():
147 if g.current_user.isCeltsAdmin:
148 data =request.form
149 username = User.get(User.username == data["user_name"])
150 program = Program.get_by_id(data['program_id'])
151 setProgramManager(data["user_name"], data["program_id"], data["action"])
152 createLog(f'{username.firstName} has been {data["action"]}ed as a Program Manager for {program.programName}')
153 return ""
154 else:
155 abort(403)
157@admin_bp.route("/updatePhone", methods=["POST"])
158def updatePhone():
159 newinfo=request.form
160 User.update(phoneNumber=newinfo["phoneNumber"]).where(User.username==newinfo["username"]).execute()
161 return ""