Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }