Example #1
0
        private Dictionary <string, string> BuildSubstitutions(LeaveRequest leaveRequest,
                                                               Person requestedBy,
                                                               Person supervisor,
                                                               Person approver,
                                                               LeaveUsage leaveUsage)
        {
            //this is a list of substitutions available in the email template
            //these are used for all leave requests
            //$LEAVE-SUBSTITUTIONS$
            var substitutions = new Dictionary <string, string>
            {
                { "type", leaveRequest.Type.ToString().SplitCamelCase() },
                { "approve", $"{_settings.BaseUrl}/api/leaveRequest/approve/{leaveRequest.Id}" },
                { "supervisorCalendarLink", $"{_settings.BaseUrl}/calendar/supervisor" },
                { "requestLink", $"{_settings.BaseUrl}/leave-request/edit/{leaveRequest.Id}" },
                { "supervisor", PersonFullName(supervisor) },
                { "approver", PersonFullName(approver) },
                { "requester", PersonFullName(requestedBy) },
                { "start", leaveRequest.StartDate.ToString("MMM d yyyy") },
                { "end", leaveRequest.EndDate.ToString("MMM d yyyy") },
                { "time", $"{leaveRequest.Days} Day{PluralSuffix(leaveRequest.Days)}" },
                { "reason", leaveRequest.Reason }
            };

            if (leaveUsage != null)
            {
                substitutions.Add("totalDays", $"{leaveUsage.TotalAllowed} Day{PluralSuffix(leaveUsage.TotalAllowed)}");
                substitutions.Add("left", $"{leaveUsage.Left} Day{PluralSuffix(leaveUsage.Left)}");
            }

            return(substitutions);
        }
Example #2
0
        public async Task SendLeaveRequestEmails(LeaveRequest leaveRequest,
                                                 PersonWithStaff requestedBy,
                                                 PersonWithStaff toApprove,
                                                 IEnumerable <PersonWithStaff> toNotify,
                                                 LeaveUsage leaveUsage)
        {
            if (toApprove == null)
            {
                throw new UserError(
                          $"Unable to find Supervisor for: {requestedBy.PreferredName} {requestedBy.LastName}");
            }
            await _leaveRequestEmailService.SendRequestApproval(leaveRequest,
                                                                requestedBy,
                                                                toApprove,
                                                                leaveUsage);

            await Task.WhenAll(toNotify.Where(person => person.Id != toApprove?.Id).Select(supervisor =>
                                                                                           _leaveRequestEmailService.NotifyOfLeaveRequest(leaveRequest,
                                                                                                                                          requestedBy,
                                                                                                                                          supervisor,
                                                                                                                                          toApprove,
                                                                                                                                          leaveUsage)));

            await _leaveRequestEmailService.NotifyHr(leaveRequest, requestedBy, toApprove, leaveUsage);
        }
Example #3
0
 public static bool ShouldNotifyHr(LeaveRequest leaveRequest, LeaveUsage leaveUsage)
 {
     if (leaveRequest.Type == LeaveType.Other)
     {
         return(true);
     }
     return(leaveUsage.Left < leaveRequest.Days);
 }
Example #4
0
        public Task SendRequestApproval(LeaveRequest leaveRequest,
                                        PersonWithStaff requestedBy,
                                        PersonWithStaff supervisor,
                                        LeaveUsage leaveUsage)
        {
            var substitutions = BuildSubstitutions(leaveRequest, requestedBy, supervisor, supervisor, leaveUsage);

            return(_emailService.SendTemplateEmail(substitutions,
                                                   $"{PersonFullName(requestedBy)} Leave request approval",
                                                   EmailTemplate.RequestLeaveApproval,
                                                   requestedBy,
                                                   supervisor));
        }
Example #5
0
 public async Task NotifyOfLeaveRequest(LeaveRequest leaveRequest,
                                        PersonWithStaff requestedBy,
                                        PersonWithStaff supervisor,
                                        PersonWithStaff approver,
                                        LeaveUsage leaveUsage)
 {
     var substitutions = BuildSubstitutions(leaveRequest, requestedBy, supervisor, approver, leaveUsage);
     await _emailService.SendTemplateEmail(substitutions,
                                           $"{PersonFullName(requestedBy)} has requested leave",
                                           EmailTemplate.NotifyLeaveRequest,
                                           requestedBy,
                                           supervisor);
 }
Example #6
0
 public async Task NotifyHr(LeaveRequest leaveRequest,
                            PersonWithStaff requestedBy,
                            PersonExtended supervisor,
                            LeaveUsage leaveUsage)
 {
     if (!ShouldNotifyHr(leaveRequest, leaveUsage))
     {
         return;
     }
     var substitutions = BuildSubstitutions(leaveRequest, requestedBy, supervisor, supervisor, leaveUsage);
     await _emailService.SendTemplateEmail(substitutions,
                                           $"{PersonFullName(requestedBy)} has requested leave",
                                           EmailTemplate.NotifyHrLeaveRequest,
                                           requestedBy,
                                           _personRepository.GetStaffNotifyHr());
 }