Coverage for app/logic/volunteers.py: 96%

57 statements  

« prev     ^ index     » next       coverage.py v7.10.2, created at 2026-04-29 19:36 +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, createRsvpLog 

10 

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 

22 

23 

24def updateEventParticipants(participantData): 

25 """ 

26 Create new entry in event participant table if user does not exist. Otherwise, updates the record. 

27 

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 

34 

35 

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 try: 

50 createRsvpLog(event.id, f"Marked {userObject.fullName} as attended.") 

51 except Exception: 

52 pass 

53 else: 

54 ((EventParticipant.delete() 

55 .where(EventParticipant.user==userObject.username, EventParticipant.event==event.id)) 

56 .execute()) 

57 else: 

58 return False 

59 return True 

60 

61def addUserBackgroundCheck(user, bgType, bgStatus, dateCompleted): 

62 """ 

63 Changes the status of a users background check depending on what was marked 

64 on their volunteer profile. 

65 """ 

66 today = date.today() 

67 user = User.get_by_id(user) 

68 if bgStatus == '' and dateCompleted == '': 

69 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as 'Draft'.") 

70 else: 

71 if not dateCompleted: 

72 dateCompleted = None 

73 update = BackgroundCheck.create(user=user, type=bgType, backgroundCheckStatus=bgStatus, dateCompleted=dateCompleted) 

74 if bgStatus == 'Submitted': 

75 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as submitted.") 

76 elif bgStatus == 'Passed': 

77 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as passed.") 

78 else: 

79 createActivityLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as failed.") 

80 

81def deleteUserBackgroundCheck(bgCheckId, user): 

82 """ 

83 Deletes the user's background check by marking it as deleted with a timestamp and user information. 

84 """ 

85 bgCheck = BackgroundCheck.get_or_none(BackgroundCheck.id == bgCheckId) 

86 

87 if bgCheck: 

88 (BackgroundCheck.update({BackgroundCheck.deletionDate: datetime.now(), BackgroundCheck.deletedBy: user}) 

89 .where(BackgroundCheck.id == bgCheck.id) 

90 .execute()) 

91 

92def setProgramManager(username, program_id, action): 

93 ''' 

94 Assigns or removes a user as a student manager for a program. 

95 

96 param: username - a string 

97 program_id - id 

98 action: add, remove 

99 

100 ''' 

101 programManager = User.get(User.username==username) 

102 if action == "add": 

103 programManager.addProgramManager(program_id) 

104 elif action == "remove": 

105 programManager.removeProgramManager(program_id)