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

62 statements  

« prev     ^ index     » next       coverage.py v7.2.5, created at 2023-05-24 14:13 +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.programEvent import ProgramEvent 

6from app.models.backgroundCheck import BackgroundCheck 

7from app.models.programManager import ProgramManager 

8from datetime import datetime, date 

9from app.logic.adminLogs import createLog 

10from app.logic.events import getEvents 

11 

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 

23 

24 

25def updateEventParticipants(participantData): 

26 """ 

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

28 

29 param: participantData- a dictionary 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 

35 

36 for user in range(1, len(participantData)): 

37 if f'username{user}' in participantData: 

38 username = participantData[f'username{user}'] 

39 userObject = User.get_or_none(User.username==username) 

40 eventParticipant = EventParticipant.get_or_none(user=userObject, event=participantData['event']) 

41 if userObject: 

42 try: 

43 if participantData[f'checkbox_{username}']: #if the user is marked as present 

44 hoursEarned = float(participantData['inputHours_'+ username]) 

45 if eventParticipant: 

46 ((EventParticipant 

47 .update({EventParticipant.hoursEarned: hoursEarned}) 

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

49 .execute()) 

50 else: 

51 EventParticipant.create(user=userObject, event=event, hoursEarned=hoursEarned) 

52 except (KeyError): 

53 if eventParticipant: 

54 ((EventParticipant.delete() 

55 .where( 

56 EventParticipant.user==userObject.username, 

57 EventParticipant.event==event.id)) 

58 .execute()) 

59 else: 

60 return False 

61 else: 

62 break 

63 return True 

64 

65 

66def addVolunteerToEventRsvp(user, volunteerEventID): 

67 ''' 

68 Adds a volunteer to event rsvp table when a user rsvps and when they are 

69 added through the track volunteer page by an admin. 

70 

71 param: user - a string containing username 

72 volunteerEventID - id of the event the volunteer is being registered for 

73 ''' 

74 try: 

75 if not EventRsvp.get_or_none(user=user, event=volunteerEventID): 

76 EventRsvp.create(user=user, event=volunteerEventID) 

77 return True 

78 

79 except Exception as e: 

80 return False 

81 

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

83 """ 

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

85 on their volunteer profile. 

86 """ 

87 today = date.today() 

88 user = User.get_by_id(user) 

89 if bgStatus == '' and dateCompleted == '': 

90 createLog(f"Marked {user.firstName} {user.lastName}'s background check for {bgType} as 'in progress'.") 

91 else: 

92 if not dateCompleted: 

93 dateCompleted = None 

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

95 if bgStatus == 'Submitted': 

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

97 elif bgStatus == 'Passed': 

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

99 else: 

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

101 

102def setProgramManager(username, program_id, action): 

103 ''' 

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

105 

106 param: uername - a string 

107 program_id - id 

108 action: add, remove 

109 

110 ''' 

111 studentstaff=User.get(User.username==username) 

112 if action == "add" and studentstaff.isCeltsStudentStaff==True: 

113 studentstaff.addProgramManager(program_id) 

114 elif action == "remove": 

115 studentstaff.removeProgramManager(program_id)