Coverage for app/logic/volunteers.py: 85%
62 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 app.models.eventParticipant import EventParticipant
2from app.models.user import User
3from app.models.event import Event
4from app.models.program import Program
5from app.models.programEvent import ProgramEvent
6from app.models.backgroundCheck import BackgroundCheck
7from app.models.programManager import ProgramManager
8from datetime import datetime, date
9from app.logic.adminLogs import createLog
10from app.logic.events import getEvents
12def getEventLengthInHours(startTime, endTime, eventDate):
13 """
14 Converts the event length hours into decimal
15 parameters: startTime- start time event (type: time)
16 endTime- end time event (type: time)
17 eventDate- date of the event (type: datetime)
18 """
19 #can only subtract datetime objects, not time objects. So convert time into datetime
20 eventLength = datetime.combine(eventDate, endTime) - datetime.combine(eventDate, startTime)
21 eventLengthInHours = round(eventLength.seconds/3600, 2)
22 return eventLengthInHours
25def updateEventParticipants(participantData):
26 """
27 Create new entry in event participant table if user does not exist. Otherwise, updates the record.
29 param: participantData- a dictionary that contains data from every row of the page along with the associated username.
30 """
31 event = Event.get_or_none(Event.id==participantData['event'])
32 if not event:
33 raise Exception("Event does not exist.") # ???
34 return False
36 for user in range(1, len(participantData)):
37 if f'username{user}' in participantData:
38 username = participantData[f'username{user}']
39 userObject = User.get_or_none(User.username==username)
40 eventParticipant = EventParticipant.get_or_none(user=userObject, event=participantData['event'])
41 if userObject:
42 try:
43 if participantData[f'checkbox_{username}']: #if the user is marked as present
44 hoursEarned = float(participantData['inputHours_'+ username])
45 if eventParticipant:
46 ((EventParticipant
47 .update({EventParticipant.hoursEarned: hoursEarned})
48 .where(EventParticipant.event==event.id, EventParticipant.user==userObject.username))
49 .execute())
50 else:
51 EventParticipant.create(user=userObject, event=event, hoursEarned=hoursEarned)
52 except (KeyError):
53 if eventParticipant:
54 ((EventParticipant.delete()
55 .where(
56 EventParticipant.user==userObject.username,
57 EventParticipant.event==event.id))
58 .execute())
59 else:
60 return False
61 else:
62 break
63 return True
66def addVolunteerToEventRsvp(user, volunteerEventID):
67 '''
68 Adds a volunteer to event rsvp table when a user rsvps and when they are
69 added through the track volunteer page by an admin.
71 param: user - a string containing username
72 volunteerEventID - id of the event the volunteer is being registered for
73 '''
74 try:
75 if not EventRsvp.get_or_none(user=user, event=volunteerEventID):
76 EventRsvp.create(user=user, event=volunteerEventID)
77 return True
79 except Exception as e:
80 return False
82def addUserBackgroundCheck(user, bgType, bgStatus, dateCompleted):
83 """
84 Changes the status of a users background check depending on what was marked
85 on their volunteer profile.
86 """
87 today = date.today()
88 user = User.get_by_id(user)
89 if bgStatus == '' and dateCompleted == '':
90 createLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as 'in progress'.")
91 else:
92 if not dateCompleted:
93 dateCompleted = None
94 update = BackgroundCheck.create(user=user, type=bgType, backgroundCheckStatus=bgStatus, dateCompleted=dateCompleted)
95 if bgStatus == 'Submitted':
96 createLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as submitted.")
97 elif bgStatus == 'Passed':
98 createLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as passed.")
99 else:
100 createLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as failed.")
102def setProgramManager(username, program_id, action):
103 '''
104 adds and removes the studentstaff from program that makes them student manager.
106 param: uername - a string
107 program_id - id
108 action: add, remove
110 '''
111 studentstaff=User.get(User.username==username)
112 if action == "add" and studentstaff.isCeltsStudentStaff==True:
113 studentstaff.addProgramManager(program_id)
114 elif action == "remove":
115 studentstaff.removeProgramManager(program_id)