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 })); }
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); }
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))); }
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); }
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); } } }