Ejemplo n.º 1
0
        public JsonResult SendEmail(ReportEmailBuilder reportEmailBuilder)
        {
            if (!CurrentUser.IsCompanyAdmin)
            {
                throw new HttpException(403, "Forbidden");
            }
            var company = _companyManager.Get(CompanyId);
            var report  = _reportManager.GetReport(CompanyId, reportEmailBuilder.ReportDate);

            reportEmailBuilder.IsSubscriptionActive = IsSubscriptionActive;
            reportEmailBuilder.EnableCommenting     = company.EnableCommenting;

            if (!reportEmailBuilder.SendPreview)
            {
                SaveReportEmailTemplateChanges(company, reportEmailBuilder);
            }

            if (reportEmailBuilder.SendEmail || reportEmailBuilder.SendPreview)
            {
                _reportEmailManager.SendReports(CurrentUser, company, report, reportEmailBuilder);

                if (reportEmailBuilder.SendEmail)
                {
                    this.SetNotificationMessage(NotificationType.Success, "Report sent successfully.");
                }
            }

            return(Json(new { success = true }));
        }
Ejemplo n.º 2
0
        public string ParseReportEmailBody(LiteUser currentUser, Company company, Report report, Recipient recipient,
                                           ReportEmailBuilder reportEmailBuilder)
        {
            // Get the preview banner if required
            var previewBanner = reportEmailBuilder.SendPreview ? _templateManager.GetTemplateText(TextTemplate.ReportEmailPreviewBanner) : String.Empty;

            // Parse the email body defined by the user.
            // Trim line breaks after variables (since we use the <pre> tag.
            var userBody = new StringBuilder(string.Format("{0}{1}", previewBanner, reportEmailBuilder.ReportEmailBody));

            userBody.Replace("[COMPANY_NAME]" + Environment.NewLine, "[COMPANY_NAME]");
            userBody.Replace("[REPORT_TITLE]" + Environment.NewLine, "[REPORT_TITLE]");
            userBody.Replace("[SUMMARY]" + Environment.NewLine, "[SUMMARY]");
            userBody.Replace("[REPORT_BUTTON]" + Environment.NewLine, "[REPORT_BUTTON]");
            userBody.Replace("[REPORT_DISCUSSION]" + Environment.NewLine, "[REPORT_DISCUSSION]");

            // Generate the report link.
            var reportLink = string.Format("{0}reports/{1}", ConfigUtil.BaseAppUrl, report.UniqueId);

            if (reportEmailBuilder.ReportEmailGuid != null)
            {
                reportLink = string.Format("{0}reports/email/{1}/{2}", ConfigUtil.BaseAppUrl, reportEmailBuilder.ReportEmailGuid, reportEmailBuilder.ReportEmailViewKey);
            }

            // Replace the placeholders with the values.
            userBody.Replace("[COMPANY_NAME]", GetReportEmailPart(TextTemplate.ReportEmailCompanyNameSnippet, company.Name));
            userBody.Replace("[REPORT_TITLE]", GetReportEmailPart(TextTemplate.ReportEmailTitleSnippet, company.ReportTitle));
            userBody.Replace("[SUMMARY]", GetReportEmailPart(TextTemplate.ReportEmailSummarySnippet, report.Summary));
            userBody.Replace("[REPORT_BUTTON]", GetReportEmailPart(TextTemplate.ReportEmailButtonSnippet, reportLink));
            userBody.Replace("[MONTH]", report.Date.ToString("MMMM", CultureInfo.InvariantCulture));
            userBody.Replace("[YEAR]", report.Date.Year.ToString(CultureInfo.InvariantCulture));
            userBody.Replace("[FIRSTNAME]", recipient.FirstName);
            userBody.Replace("[LASTNAME]", recipient.LastName);
            userBody.Replace("[SENDER_FIRSTNAME]", currentUser.FirstName);
            userBody.Replace("[SENDER_LASTNAME]", currentUser.LastName);
            string discussionText = string.Empty;

            if (reportEmailBuilder.EnableCommenting && reportEmailBuilder.IsSubscriptionActive)
            {
                discussionText = GetReportEmailPart(TextTemplate.ReportEmailDiscussion, ConfigUtil.BaseAppUrl);
            }
            userBody.Replace("[REPORT_DISCUSSION]", discussionText);

            // Replace the final
            var template = _templateManager.GetTemplateText(TextTemplate.ReportEmail);

            template = template.Replace("[BODY]", userBody.ToString());

            return(template);
        }
Ejemplo n.º 3
0
        public ActionResult ReportEmailBodyPreview(int year, int month, string userBody, string firstName, string lastName)
        {
            if (!CurrentUser.IsCompanyAdmin)
            {
                throw new HttpException(403, "Forbidden");
            }
            var reportDate = new DateTime(year, month, 1);
            var report     = _reportManager.GetReport(CompanyId, reportDate);
            var company    = _companyManager.Get(CompanyId);
            var recipient  = new Recipient {
                FirstName = firstName, LastName = lastName
            };
            var reportEmailBuilder = new ReportEmailBuilder {
                ReportEmailBody = userBody.Replace(Environment.NewLine, "<br>"), IsSubscriptionActive = IsSubscriptionActive, EnableCommenting = company.EnableCommenting
            };

            return(Content(_reportEmailManager.ParseReportEmailBody(CurrentUser, company, report, recipient, reportEmailBuilder)));
        }
Ejemplo n.º 4
0
        private void SaveReportEmailTemplateChanges(Company company, ReportEmailBuilder reportEmailBuilder)
        {
            if (!CurrentUser.IsCompanyAdmin)
            {
                throw new HttpException(403, "Forbidden");
            }
            // ### SUBJECT ###
            // update subject if it's changed from the default
            if (reportEmailBuilder.ReportEmailSubject != reportEmailBuilder.DefaultReportEmailSubject)
            {
                company.ReportEmailSubject = reportEmailBuilder.ReportEmailSubject;
            }
            else
            {
                //email subject is default, so set to null (overwrite any previous customisation)
                company.ReportEmailSubject = null;
            }

            // ### BODY ###
            // update body if it's changed from the default
            if (reportEmailBuilder.ReportEmailBody != reportEmailBuilder.DefaultReportEmailBody)
            {
                company.ReportEmailBody = reportEmailBuilder.ReportEmailBody;
            }
            else
            {
                //email body is default, so set to null (overwrite any previous customisation)
                company.ReportEmailBody = null;
            }

            // ### SENDER ###
            company.UseCustomSender   = reportEmailBuilder.UseCustomSender;
            company.CustomSenderEmail = reportEmailBuilder.CustomSenderEmail;
            company.CustomSenderName  = reportEmailBuilder.CustomSenderName;

            _companyManager.Update(company);
        }
Ejemplo n.º 5
0
        public void SendReports(LiteUser currentUser, Company company, Report report, ReportEmailBuilder reportEmailBuilder)
        {
            var subject = ParseReportEmailSubject(company, report, reportEmailBuilder.ReportEmailSubject);

            reportEmailBuilder.ReportEmailBody = reportEmailBuilder.ReportEmailBody.Replace(Environment.NewLine, "<br>");

            if (reportEmailBuilder.SendPreview)
            {
                var previewRecipient = new Recipient
                {
                    FirstName = reportEmailBuilder.PreviewFirstName,
                    LastName  = reportEmailBuilder.PreviewLastName,
                    Email     = reportEmailBuilder.PreviewAddress
                };
                var body = ParseReportEmailBody(currentUser, company, report, previewRecipient, reportEmailBuilder);

                QueueEmail(company, previewRecipient, subject, body);
            }
            else
            {
                var recipients = reportEmailBuilder.RecipientList.Where(s => s.IsSelected).ToList();
                foreach (var recipient in recipients)
                {
                    // log the email
                    var reportEmail = Create(new ReportEmail
                    {
                        RecipientId = recipient.Id,
                        ReportId    = report.Id,
                        CompanyId   = company.Id,
                        Status      = EmailStatus.Sent
                    });
                    reportEmailBuilder.ReportEmailGuid    = reportEmail.UniqueId;
                    reportEmailBuilder.ReportEmailViewKey = reportEmail.ViewKey;

                    var body = ParseReportEmailBody(currentUser, company, report, recipient, reportEmailBuilder);

                    QueueEmail(company, recipient, subject, body);
                }
            }
        }