public static ScriptHost.Result MonthlyFinancialEmails(string date, IDictionary <object, object> args) { ScriptHost.Result result = new ScriptHost.Result(); QueryParameters queryParams = QueryParameters.Create(args); DateTime d = DateTime.Parse(date); var opt = new FinancialManagerReportOptions { ClientID = 0, ManagerOrgID = 0, Period = d, IncludeManager = queryParams.GetValue("IncludeManager", true), Message = queryParams.GetValue("Message", string.Empty) }; var processResult = Provider.Billing.Report.SendFinancialManagerReport(opt); var count = processResult.TotalEmailsSent; result.Success = true; result.Message = string.Format("sent {0} emails", count); result.Data = null; return(result); }
public int SendFinancialManagerEmails([FromBody] FinancialManagerReportOptions options) { if (options == null) { throw new ArgumentNullException("options"); } var result = Provider.Billing.Report.SendFinancialManagerReport(options); return(result.TotalEmailsSent); }
public IEnumerable <ReportEmail> GetFinancialManagerReportEmails([FromBody] FinancialManagerReportOptions options) { using (DA.StartUnitOfWork()) return(ServiceProvider.Current.Billing.Report.GetFinancialManagerReportEmails(options)); }
public SendMonthlyUserUsageEmailsProcessResult SendFinancialManagerReport([FromBody] FinancialManagerReportOptions options) { using (DA.StartUnitOfWork()) return(ServiceProvider.Current.Billing.Report.SendFinancialManagerReport(options)); }
public SendMonthlyUserUsageEmailsProcessResult SendMonthlyUserUsageEmails(FinancialManagerReportOptions options) { DateTime startedAt = DateTime.Now; if (options == null) { throw new ArgumentNullException("options"); } //With noEmail set to true, nothing really happens here. The appropriate users are selected and logged //but no email is actually sent. This is just for testing/debugging purposes. //Get managers list and associated clients info var emails = GetMonthlyUserUsageEmails(options); var queryCount = emails.Count(); var data = new List <string>(); int totalEmailsSent = 0; foreach (var e in emails) { string statusMessage = string.Empty; var to = new List <string>(); var cc = new List <string>(); var bcc = new List <string>(); if (e.ToAddress != null && options.IncludeManager) { to.AddRange(e.ToAddress); } if (e.CcAddress != null) { cc.AddRange(e.CcAddress); } if (e.BccAddress != null) { bcc.AddRange(e.BccAddress); } if (to.Count + cc.Count + bcc.Count > 0) { try { SendEmail.Send(0, "LNF.Billing.FinancialManagerUtility.SendMonthlyUserUsageEmails", e.Subject, e.Body, e.FromAddress, to, cc, bcc, e.IsHtml); statusMessage = $"Email to {string.Join(",", e.ToAddress)} sent OK"; ++totalEmailsSent; } catch (Exception ex) { statusMessage = ex.Message; } } else { statusMessage = $"Email to {string.Join(",", e.ToAddress)} not sent, NoEmail = True"; } data.Add(statusMessage); } var result = new SendMonthlyUserUsageEmailsProcessResult(startedAt, data) { QueryCount = queryCount, TotalEmailsSent = totalEmailsSent }; return(result); }
public IEnumerable <FinancialManagerReportEmail> GetMonthlyUserUsageEmails(FinancialManagerReportOptions options) { return(_report.GetFinancialManagerReportEmails(options)); }
public SendMonthlyUserUsageEmailsProcessResult SendMonthlyFinancialReport(FinancialManagerReportOptions options) { return(SendMonthlyUserUsageEmails(options)); }
public IEnumerable <FinancialManagerReportEmail> GetFinancialManagerReportEmails(FinancialManagerReportOptions options) { return(Post <List <FinancialManagerReportEmail> >("webapi/billing/report/financial-manager/view", options)); }
public SendMonthlyUserUsageEmailsProcessResult SendFinancialManagerReport(FinancialManagerReportOptions options) { return(Post <SendMonthlyUserUsageEmailsProcessResult>("webapi/billing/report/financial-manager", options)); }
public SendMonthlyUserUsageEmailsProcessResult SendFinancialManagerReport(FinancialManagerReportOptions options) { var fm = new FinancialManagers(this); return(fm.SendMonthlyUserUsageEmails(options)); }
public IEnumerable <FinancialManagerReportEmail> GetFinancialManagerReportEmails(FinancialManagerReportOptions options) { var result = new List <FinancialManagerReportEmail>(); string[] ccAddr = GetFinancialManagerReportRecipients(); //Get managers list and associated clients info var dt = Session.Command() .Param("Period", options.Period) .Param("ClientID", options.ClientID > 0, options.ClientID) .Param("ManagerOrgID", options.ManagerOrgID > 0, options.ManagerOrgID) .FillDataTable("dbo.Report_MonthlyFinacialManager"); var managerOrgIds = dt.AsEnumerable() .Where(x => !string.IsNullOrEmpty(x.Field <string>("Accounts"))) .Select(x => x.Field <int>("ManagerOrgID")) .Distinct().ToArray(); var tpl = GetTemplate("financial-manager-email.handlebars"); var companyName = GlobalSettings.Current.CompanyName; var period = options.Period; var message = string.IsNullOrEmpty(options.Message) ? null : options.Message; foreach (int moid in managerOrgIds) { var rows = dt.Select($"ManagerOrgID = {moid}"); // there is at least one row becuase managerOrgIds is created from the same DataTable var managerName = rows[0].Field <string>("ManagerName"); var clients = rows.Select(x => new { clientName = x.Field <string>("ClientName"), accounts = x.Field <string>("Accounts") }).ToArray(); var body = tpl(new { companyName, period, message, managerName, clients }); var toAddr = new string[] { rows[0].Field <string>("ManagerEmail") }; var subj = $"{companyName} Charges - {options.Period:M/yyyy} [Manager: {managerName}]"; result.Add(new FinancialManagerReportEmail { ClientID = rows[0].Field <int>("ClientID"), ManagerOrgID = rows[0].Field <int>("ManagerOrgID"), DisplayName = managerName, FromAddress = "*****@*****.**", ToAddress = toAddr, CcAddress = ccAddr, Subject = subj, Body = body, IsHtml = true }); } return(result); }