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