Exemplo n.º 1
0
        private async Task SendEmailAsync(JumpStart jumpStart)
        {
            var company = await _dbContext.Companies.FirstOrDefaultAsync(item => item.Name == VolkswagenCompany.Name);

            var pdfUrl = await _jumpStartPdfService.CreatePdfUrlAsync(jumpStart);

            var emailTemplate = _jumpStartEmailTemplateService.GetEmailHtml(jumpStart.DateTime, jumpStart.Posts);

            var recipients = await GetRecipients(jumpStart.Id);

            var subject =
                $"Project Blue Delta - {jumpStart.DateTime.InZone(VolkswagenCompany.TimeZoneId, "MMMM d, yyyy")}";

            foreach (var batch in recipients.Batch(SendGridService.BatchSize))
            {
                var subjects = Enumerable.Repeat(subject, batch.Count).ToList();

                var substitutions = Enumerable.Repeat(new Dictionary <string, string>
                {
                    { "{{print_url}}", pdfUrl }
                }, batch.Count).ToList();

                await _sendGridService.SendEmail(company.Id, batch, subjects, emailTemplate, emailTemplate, substitutions,
                                                 jumpStart.DateTime);

                foreach (var recipient in batch)
                {
                    recipient.Status = EmailStatus.Sent;
                }

                await _dbContext.SaveChangesAsync();
            }
        }
Exemplo n.º 2
0
        private string GetTemplate(JumpStart jumpStart, List <Article> articles, string templateName, int maxMiddleCount,
                                   string?pdfUrl)
        {
            var data = GetData(jumpStart, articles, pdfUrl, maxMiddleCount);

            return(Compile(templateName, data));
        }
Exemplo n.º 3
0
        private async Task SendEmailAsync(JumpStart jumpStart)
        {
            var company = await _dbContext.Companies.FirstOrDefaultAsync(item => item.Name == VolkswagenCompany.Name);

            var pdfUrl = await _jumpStartPdfService.CreatePdfUrlAsync(jumpStart);

            var emailTemplate = _jumpStartEmailTemplateService.GetEmailHtml(jumpStart, jumpStart.Articles, pdfUrl);

            var recipients = await GetRecipients(jumpStart.Id);

            var subject =
                $"Project Blue Delta - {jumpStart.DateTime.InZone(VolkswagenCompany.TimeZoneId, "MMMM d, yyyy")}";

            foreach (var batch in recipients.Batch(SendGridService.BatchSize))
            {
                await _sendGridService.SendEmail(company.Id, batch, subject, emailTemplate, emailTemplate, jumpStart.DateTime);

                foreach (var recipient in batch)
                {
                    recipient.Status = EmailStatus.Sent;
                }

                await _dbContext.SaveChangesAsync();
            }
        }
Exemplo n.º 4
0
        public async Task CreateAsync(DateTime dateTime, List <string> distributionGroups, List <int> postIds)
        {
            var posts = await _dbContext.Posts.Where(item => postIds.Contains(item.Id))
                        .ToListAsync();

            var isValid = posts.All(item => item.Date.Date <= dateTime.Date && item.JumpStartId == null) &&
                          posts.Count == postIds.Count;

            if (!isValid)
            {
                throw new InvalidActionException("Invalid posts");
            }

            var jumpStart = new JumpStart
            {
                DateTime           = dateTime,
                DistributionGroups = string.Join(',', distributionGroups),
                Status             = JumpStartStatus.ReadyToSend,
                Posts = posts
            };

            foreach (var post in posts)
            {
                post.JumpStart = jumpStart;
                post.Order     = postIds.IndexOf(post.Id);
            }

            _dbContext.UpdateRange(posts);

            await _dbContext.SaveChangesAsync();

            _backgroundJobClient.Enqueue <JumpStartPdfService>(service =>
                                                               service.CreatePdfAsync(jumpStart.Id));
        }
Exemplo n.º 5
0
        protected override void ExecuteCombo(int id)
        {
            switch (id)
            {
            case 10:
                JumpStart?.Invoke();
                break;

            case 11:
                JumpEnd?.Invoke();
                break;

            case 20:
                DashStart?.Invoke();
                break;

            case 21:
                DashEnd?.Invoke();
                break;

            case 30:
                ShootHold?.Invoke();
                break;

            case 31:
                ShootRelease?.Invoke();
                break;
            }
        }
Exemplo n.º 6
0
        private async Task SendEmailAsync(JumpStart jumpStart, List <Article> articles)
        {
            var company = await _dbContext.Companies.FirstOrDefaultAsync(item => item.Name == VolkswagenCompany.Slug);

            var pdfUrl = await _jumpStartPdfJob.CreatePdfUrlAsync(jumpStart);

            var emailTemplate = _jumpStartEmailTemplateService.GetEmailHtml(jumpStart.DateTime.Date, articles, pdfUrl);

            var recipients = await GetRecipients(jumpStart.Id);

            var subject = $"Project Blue Delta - {jumpStart.DateTime:MMMM d, yyyy}";

            foreach (var batch in recipients.Batch(SendGridService.BatchSize))
            {
                await _sendGridService.SendEmail(company.Id, batch, subject, emailTemplate, emailTemplate,
                                                 nameof(EmailRecipient.MemoId), jumpStart.Id.ToString(), jumpStart.DateTime);

                foreach (var recipient in batch)
                {
                    recipient.Status = EmailStatus.Sent;
                }

                await _dbContext.SaveChangesAsync();
            }
        }
Exemplo n.º 7
0
        private Dictionary <string, object> GetData(JumpStart jumpStart, List <Article> articles, string?pdfUrl,
                                                    int maxMiddleCount)
        {
            var result = new Dictionary <string, object>();

            AddGeneralData(result, jumpStart.DateTime, pdfUrl);

            var remainingArticles = articles.ToList();

            var(answer, remains) = PickArticle(remainingArticles, item => item.Category.Slug == AnswersCategorySlug);
            remainingArticles    = remains;
            AddArticleToData("article0", result, answer);

            var(top, remaining) = PickArticles(remainingArticles, item => item.Category.Slug == PriorityCategorySlug);
            remainingArticles   = remaining;
            AddArticlesToData("articlesTop", result, top);

            var middle = remainingArticles.Take(maxMiddleCount);

            AddArticlesToData("articlesMiddle", result, middle);

            var bottom = remainingArticles.Skip(maxMiddleCount);

            AddArticlesToData("articlesBottom", result, bottom);

            return(result);
        }
Exemplo n.º 8
0
 public JumpStartResult(JumpStart jumpStart)
 {
     Id                 = jumpStart.Id;
     DateTime           = jumpStart.DateTime;
     DistributionGroups = jumpStart.DistributionGroups.Split(',').ToList();
     Articles           = jumpStart.Articles.Select(item => new ArticleResult(item)).ToList();
 }
Exemplo n.º 9
0
        private async Task <EmailInfo> GetEmailInfoAsync(JumpStart jumpStart, List <Data.Entity.Models.Email> emails, List <Article> articles)
        {
            var company = await _dbContext.Companies.FirstOrDefaultAsync(item => item.Name == VolkswagenCompany.Slug);

            var pdfUrl = await _jumpStartPdfJob.CreatePdfUrlAsync(jumpStart);

            var emailTemplate = _jumpStartEmailTemplateService.GetEmailHtml(jumpStart.DateTime.Date, articles, pdfUrl);

            return(new EmailInfo(company.Id, emails)
            {
                Subject = $"Project Blue Delta - {jumpStart.DateTime:MMMM d, yyyy}",
                HtmlContent = emailTemplate,
                PlainTextContent = emailTemplate,
                SendAt = jumpStart.DateTime
            });
        }
Exemplo n.º 10
0
        public async Task <byte[]> BuildPdfAsync(JumpStart jumpStart)
        {
            var emailTemplate = _jumpStartEmailTemplateService.GetPdfHtml(jumpStart);

            await using var browser = await GetBrowser();

            await using var page = await browser.NewPageAsync();

            await page.SetContentAsync(emailTemplate);

            var pdfData = await page.PdfDataAsync(new PdfOptions
            {
                PrintBackground = true
            });

            return(pdfData);
        }
Exemplo n.º 11
0
        private async Task SendEmailAsync(JumpStart jumpStart, List <Article> articles)
        {
            var emails = await GetRecipientsAsync(jumpStart.Id);

            //var recipients = emails.Select(item => Tuple.Create(item.EmailAddress, (string?) null)).ToList();

            var emailInfo = await GetEmailInfoAsync(jumpStart, emails, articles);

            await _sendGridService.SendEmailAsync(emailInfo);

            foreach (var emailRecipient in emails)
            {
                emailRecipient.Status = EmailStatus.Sent;
            }

            await _dbContext.SaveChangesAsync();
        }
Exemplo n.º 12
0
        public async Task <byte[]> BuildScreenshotAsync(JumpStart jumpStart, List <Article> articles)
        {
            var emailTemplate = _jumpStartEmailTemplateService.GetEmailHtml(jumpStart, articles, null);

            await using var browser = await GetBrowser();

            await using var page = await browser.NewPageAsync();

            await page.SetContentAsync(emailTemplate);

            var screenShotData = await page.ScreenshotDataAsync(new ScreenshotOptions
            {
                FullPage = true
            });

            return(screenShotData);
        }
Exemplo n.º 13
0
        private async Task <JumpStart> CreateAsync(DateTime dateTime, List <string> distributionGroups,
                                                   List <Article> articles)
        {
            var jumpStart = new JumpStart
            {
                DateTime           = dateTime,
                Status             = JumpStartStatus.Preview,
                DistributionGroups = distributionGroups
            };

            _dbContext.JumpStarts.Add(jumpStart);

            Rearrange(articles);

            await _dbContext.SaveChangesAsync();

            return(jumpStart);
        }
Exemplo n.º 14
0
        private async Task EnsureJumpStartExistAsync(DateTime date)
        {
            var jumpStart = await _dbContext.JumpStarts.FirstOrDefaultAsync(item =>
                                                                            item.DateTime.Date == date);

            if (jumpStart != null)
            {
                if (jumpStart.Status != JumpStartStatus.Preview)
                {
                    // This should never happen
                    throw new Exception();
                }

                return;
            }

            // TODO: Get default distribution group
            var emailRecipient = await _dbContext.Recipients.FirstOrDefaultAsync();

            var distributionGroup = emailRecipient?.DistributionGroup;

            if (distributionGroup is null)
            {
                throw new InvalidActionException(
                          "Cannot find any distribution group. Please import your recipients first.");
            }

            jumpStart = new JumpStart
            {
                // TODO: Get default send time
                DateTime           = date.AddHours(10).AddMinutes(14),
                Status             = JumpStartStatus.Preview,
                DistributionGroups = distributionGroup
            };

            _dbContext.JumpStarts.Add(jumpStart);
        }
Exemplo n.º 15
0
 public JumpStartInfo(JumpStart jumpStart, List <string> articles, ListStats listStats)
 {
     JumpStart = jumpStart;
     Articles  = articles;
     ListStats = listStats;
 }
Exemplo n.º 16
0
        public string GetEmailHtml(JumpStart jumpStart, List <Article> articles, string?pdfUrl)
        {
            var(templateName, maxMiddleCount) = GetTemplateName(articles, false);

            return(GetTemplate(jumpStart, articles, templateName, maxMiddleCount, pdfUrl));
        }
Exemplo n.º 17
0
        public string GetPdfHtml(JumpStart jumpStart)
        {
            var(templateName, maxMiddleCount) = GetTemplateName(jumpStart.Articles, true);

            return(GetTemplate(jumpStart, jumpStart.Articles, templateName, maxMiddleCount, null));
        }
Exemplo n.º 18
0
 private string GetName(JumpStart jumpStart)
 {
     return($"volkswagen_pdf/{jumpStart.DateTime.Date:yyyy_MM_dd}.pdf");
 }
Exemplo n.º 19
0
 private async Task UploadPdfAsync(JumpStart jumpStart, byte[] pdfData)
 {
     await _googleStorageService.UploadPdfAsync(GetName(jumpStart), pdfData);
 }
Exemplo n.º 20
0
 public Task <string> CreatePdfUrlAsync(JumpStart jumpStart)
 {
     return(_googleStorageService.CreateSignedUrlAsync(GetName(jumpStart), 24));
 }
Exemplo n.º 21
0
 private async Task UploadPdfAsync(JumpStart jumpStart, byte[] pdfData)
 {
     await _googleStorageService.UploadFileAsync(GetName(jumpStart), "application/pdf", new MemoryStream(pdfData));
 }