Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public int SendFinancialManagerEmails([FromBody] FinancialManagerReportOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            var result = Provider.Billing.Report.SendFinancialManagerReport(options);

            return(result.TotalEmailsSent);
        }
Esempio n. 3
0
 public IEnumerable <ReportEmail> GetFinancialManagerReportEmails([FromBody] FinancialManagerReportOptions options)
 {
     using (DA.StartUnitOfWork())
         return(ServiceProvider.Current.Billing.Report.GetFinancialManagerReportEmails(options));
 }
Esempio n. 4
0
 public SendMonthlyUserUsageEmailsProcessResult SendFinancialManagerReport([FromBody] FinancialManagerReportOptions options)
 {
     using (DA.StartUnitOfWork())
         return(ServiceProvider.Current.Billing.Report.SendFinancialManagerReport(options));
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public IEnumerable <FinancialManagerReportEmail> GetMonthlyUserUsageEmails(FinancialManagerReportOptions options)
 {
     return(_report.GetFinancialManagerReportEmails(options));
 }
Esempio n. 7
0
 public SendMonthlyUserUsageEmailsProcessResult SendMonthlyFinancialReport(FinancialManagerReportOptions options)
 {
     return(SendMonthlyUserUsageEmails(options));
 }
Esempio n. 8
0
 public IEnumerable <FinancialManagerReportEmail> GetFinancialManagerReportEmails(FinancialManagerReportOptions options)
 {
     return(Post <List <FinancialManagerReportEmail> >("webapi/billing/report/financial-manager/view", options));
 }
Esempio n. 9
0
 public SendMonthlyUserUsageEmailsProcessResult SendFinancialManagerReport(FinancialManagerReportOptions options)
 {
     return(Post <SendMonthlyUserUsageEmailsProcessResult>("webapi/billing/report/financial-manager", options));
 }
Esempio n. 10
0
        public SendMonthlyUserUsageEmailsProcessResult SendFinancialManagerReport(FinancialManagerReportOptions options)
        {
            var fm = new FinancialManagers(this);

            return(fm.SendMonthlyUserUsageEmails(options));
        }
Esempio n. 11
0
        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);
        }