public async Task Handle(RequestApprovedNotification notification, CancellationToken cancellationToken) { Request request = notification.Request; RequestDataForEmail model = new RequestDataForEmail { AuthorFullName = $"{request.User.FirstName} {request.User.LastName}".Trim(), RequestType = request.Type.ToString(), StartDate = request.StartDate.Date.ToString("dd/MM/yyyy"), EndDate = request.EndDate.Date.ToString("dd/MM/yyyy"), Comment = request.Comment, Duration = request.EndDate.Date.Subtract(request.StartDate.Date).Days + 1, }; User author = await _userManager.FindByIdAsync(request.UserId.ToString()); model.AuthorFullName = $"{author.FirstName} {author.LastName}".Trim(); IEnumerable <Review> reviews = await _reviewRepository.FilterAsync(rev => rev.RequestId == request.Id); foreach (var review in reviews) { review.Reviewer = await _userManager.FindByIdAsync(review.ReviewerId.ToString()); } var approvedPeopleNames = reviews.Select(r => $"{r.Reviewer.FirstName} {r.Reviewer.LastName}".Trim()).ToList(); model.ApprovedFullNames = string.Join(", ", approvedPeopleNames); var dataForViewModel = new RequestEmailViewModel(model); { //Author mail string authorAddress = author.Email; string authorTheme = string.Format( model.StartDate, model.EndDate); string authorBody = await _razorViewToStringRenderer.RenderViewToStringAsync("/Views/Emails/RequestApprove/RequestApproveForAuthor.cshtml", dataForViewModel); await _mailer.SendEmailAsync(authorAddress, authorTheme, authorBody); } { //Accountant mail string accountantAddress = reviews.FirstOrDefault().Reviewer.Email; string accountantTheme = string.Format( model.AuthorFullName, model.StartDate, model.EndDate); string accountantBody = await _razorViewToStringRenderer.RenderViewToStringAsync("/Views/Emails/RequestApprove/RequestApprove.cshtml", dataForViewModel); await _mailer.SendEmailAsync(accountantAddress, accountantTheme, accountantBody); } }
public async Task Handle(RequestUpdatedNotification notification, CancellationToken cancellationToken) { Request request = notification.Request; RequestDataForEmail model = new RequestDataForEmail { AuthorFullName = $"{request.User.FirstName} {request.User.LastName}".Trim(), RequestType = request.Type.ToString(), StartDate = request.StartDate.Date.ToString("dd/MM/yyyy"), EndDate = request.EndDate.Date.ToString("dd/MM/yyyy"), Comment = request.Comment, Duration = request.EndDate.Date.Subtract(request.StartDate.Date).Days + 1, }; User author = await _userManager.FindByIdAsync(request.UserId.ToString()); model.AuthorFullName = $"{author.FirstName} {author.LastName}".Trim(); IEnumerable <Review> reviews = await _reviewRepository.FilterAsync(rev => rev.RequestId == request.Id); foreach (var review in reviews) { review.Reviewer = await _userManager.FindByIdAsync(review.ReviewerId.ToString()); } var approvedPeopleNames = reviews.Where(r => r.IsApproved == true).Select(r => $"{r.Reviewer.FirstName} {r.Reviewer.LastName}".Trim()).ToList(); model.ApprovedFullNames = string.Join(", ", approvedPeopleNames); var curReview = reviews.Where(r => r.IsApproved == null).FirstOrDefault(); string address = curReview.Reviewer.Email; string theme = string.Format( model.AuthorFullName, model.StartDate, model.EndDate ); string reference = _uiConfig.Url + $"/reviews"; var dataForViewModel = new RequestEmailViewModel(model, reference); string body = await _razorViewToStringRenderer.RenderViewToStringAsync("/Views/Emails/RequestUpdate/RequestUpdate.cshtml", dataForViewModel); await _mailer.SendEmailAsync(address, theme, body); }