Coverage for app/logic/volunteers.py: 96%
54 statements
« prev ^ index » next coverage.py v7.10.2, created at 2026-08-24 19:35 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2026-08-24 19:35 +0000
1from app.models.eventParticipant import EventParticipant
2from app.models.user import User
3from app.models.event import Event
4from app.models.eventRsvp import EventRsvp
5from app.models.program import Program
6from app.models.backgroundCheck import BackgroundCheck
7from app.models.programManager import ProgramManager
8from datetime import datetime, date
9from app.logic.createLogs import createActivityLog
10from flask import g
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- an ImmutableMultiDict 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
37 for username in participantData.getlist("username"):
38 userObject = User.get_or_none(User.username==username)
39 eventParticipant = EventParticipant.get_or_none(user=userObject, event=participantData['event'])
40 if userObject:
41 if participantData.get(f'checkbox_{username}'): #if the user is marked as present
42 inputHours = participantData.get(f'inputHours_{username}')
43 hoursEarned = float(inputHours) if inputHours else 0
44 if eventParticipant:
45 ((EventParticipant.update({EventParticipant.hoursEarned: hoursEarned})
46 .where(EventParticipant.event==event.id, EventParticipant.user==userObject.username))
47 .execute())
48 else:
49 EventParticipant.create(user=userObject, event=event, hoursEarned=hoursEarned)
50 else:
51 ((EventParticipant.delete()
52 .where(EventParticipant.user==userObject.username, EventParticipant.event==event.id))
53 .execute())
54 else:
55 return False
56 return True
58def addUserBackgroundCheck(user, bgType, bgStatus, dateCompleted):
59 """
60 Changes the status of a users background check depending on what was marked
61 on their volunteer profile.
62 """
63 today = date.today()
64 user = User.get_by_id(user)
65 if bgStatus == '' and dateCompleted == '':
66 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as 'Draft'.")
67 else:
68 if not dateCompleted:
69 dateCompleted = None
70 update = BackgroundCheck.create(user=user, type=bgType, backgroundCheckStatus=bgStatus, dateCompleted=dateCompleted, termSubmitted=g.current_term)
71 if bgStatus == 'Submitted':
72 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as submitted.")
73 elif bgStatus == 'Passed':
74 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as passed.")
75 else:
76 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as failed.")
78def deleteUserBackgroundCheck(bgCheckId, user):
79 """
80 Deletes the user's background check by marking it as deleted with a timestamp and user information.
81 """
82 bgCheck = BackgroundCheck.get_or_none(BackgroundCheck.id == bgCheckId)
84 if bgCheck:
85 (BackgroundCheck.update({BackgroundCheck.deletionDate: datetime.now(), BackgroundCheck.deletedBy: user})
86 .where(BackgroundCheck.id == bgCheck.id)
87 .execute())
89def setProgramManager(username, program_id, action):
90 '''
91 Assigns or removes a user as a student manager for a program.
93 param: username - a string
94 program_id - id
95 action: add, remove
97 '''
98 programManager = User.get(User.username==username)
99 if action == "add":
100 programManager.addProgramManager(program_id)
101 elif action == "remove":
102 programManager.removeProgramManager(program_id)