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

55 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-02-15 21:27 +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 

9 

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 

21 

22 

23def updateEventParticipants(participantData): 

24 """ 

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

26 

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 

33 

34 

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 

55 

56 

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. 

61 

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 

69 

70 except Exception as e: 

71 return False 

72 

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.") 

92 

93def setProgramManager(username, program_id, action): 

94 ''' 

95 adds and removes the studentstaff from program that makes them student manager. 

96 

97 param: uername - a string 

98 program_id - id 

99 action: add, remove 

100 

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)