Coverage for app/logic/volunteers.py: 86%
56 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-06-11 15:49 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-06-11 15:49 +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 createAdminLog
11def getEventLengthInHours(startTime, endTime, eventDate):
12 """
13 Converts the event length hours into decimal
14 parameters: startTime- start time event (type: time)
15 endTime- end time event (type: time)
16 eventDate- date of the event (type: datetime)
17 """
18 #can only subtract datetime objects, not time objects. So convert time into datetime
19 eventLength = datetime.combine(eventDate, endTime) - datetime.combine(eventDate, startTime)
20 eventLengthInHours = round(eventLength.seconds/3600, 2)
21 return eventLengthInHours
24def updateEventParticipants(participantData):
25 """
26 Create new entry in event participant table if user does not exist. Otherwise, updates the record.
28 param: participantData- an ImmutableMultiDict that contains data from every row of the page along with the associated username.
29 """
30 event = Event.get_or_none(Event.id==participantData['event'])
31 if not event:
32 raise Exception("Event does not exist.") # ???
33 return False
36 for username in participantData.getlist("username"):
37 userObject = User.get_or_none(User.username==username)
38 eventParticipant = EventParticipant.get_or_none(user=userObject, event=participantData['event'])
39 if userObject:
40 if participantData.get(f'checkbox_{username}'): #if the user is marked as present
41 inputHours = participantData.get(f'inputHours_{username}')
42 hoursEarned = float(inputHours) if inputHours else 0
43 if eventParticipant:
44 ((EventParticipant.update({EventParticipant.hoursEarned: hoursEarned})
45 .where(EventParticipant.event==event.id, EventParticipant.user==userObject.username))
46 .execute())
47 else:
48 EventParticipant.create(user=userObject, event=event, hoursEarned=hoursEarned)
49 else:
50 ((EventParticipant.delete()
51 .where(EventParticipant.user==userObject.username, EventParticipant.event==event.id))
52 .execute())
53 else:
54 return False
55 return True
58def addVolunteerToEventRsvp(user, volunteerEventID):
59 '''
60 Adds a volunteer to event rsvp table when a user rsvps and when they are
61 added through the track volunteer page by an admin.
63 param: user - a string containing username
64 volunteerEventID - id of the event the volunteer is being registered for
65 '''
66 try:
67 if not EventRsvp.get_or_none(user=user, event=volunteerEventID):
68 EventRsvp.create(user=user, event=volunteerEventID)
69 return True
71 except Exception as e:
72 return False
74def addUserBackgroundCheck(user, bgType, bgStatus, dateCompleted):
75 """
76 Changes the status of a users background check depending on what was marked
77 on their volunteer profile.
78 """
79 today = date.today()
80 user = User.get_by_id(user)
81 if bgStatus == '' and dateCompleted == '':
82 createAdminLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as 'in progress'.")
83 else:
84 if not dateCompleted:
85 dateCompleted = None
86 update = BackgroundCheck.create(user=user, type=bgType, backgroundCheckStatus=bgStatus, dateCompleted=dateCompleted)
87 if bgStatus == 'Submitted':
88 createAdminLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as submitted.")
89 elif bgStatus == 'Passed':
90 createAdminLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as passed.")
91 else:
92 createAdminLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as failed.")
94def setProgramManager(username, program_id, action):
95 '''
96 adds and removes the studentstaff from program that makes them student manager.
98 param: uername - a string
99 program_id - id
100 action: add, remove
102 '''
103 studentstaff=User.get(User.username==username)
104 if action == "add" and studentstaff.isCeltsStudentStaff==True:
105 studentstaff.addProgramManager(program_id)
106 elif action == "remove":
107 studentstaff.removeProgramManager(program_id)