private static void EmailUnpaidPromotersInvoicesToPromotersAndAccounts(DateTime fromDueDate, DateTime toDueDate) { try { // Get all promoterK's who have outstanding invoices within the date range Query promoterKQuery = new Query(); promoterKQuery.QueryCondition = new And(new Q(Invoice.Columns.Type, Invoice.Types.Invoice), new Q(Invoice.Columns.Paid, false), new Q(Invoice.Columns.PromoterK, QueryOperator.NotEqualTo, 0), new Q(Invoice.Columns.DueDateTime, QueryOperator.GreaterThanOrEqualTo, fromDueDate), new Q(Invoice.Columns.DueDateTime, QueryOperator.LessThanOrEqualTo, toDueDate)); promoterKQuery.Columns = new ColumnSet(Invoice.Columns.PromoterK); promoterKQuery.GroupBy = new GroupBy(Invoice.Columns.PromoterK); InvoiceSet promoterKInvoices = new InvoiceSet(promoterKQuery); Promoter promoter = null; // Foreach promoter, group together all their outstanding invoices within the date range and send one email with all invoices as attachments foreach (Invoice promoterKInvoice in promoterKInvoices) { try { promoter = new Promoter(promoterKInvoice.PromoterK); bool containsOverdue = false; promoter.ApplyAvailableMoneyToUnpaidInvoices(); Query outstandingInvoicesQuery = new Query(new And(new Q(Invoice.Columns.Type, Invoice.Types.Invoice), new Q(Invoice.Columns.Paid, false), new Q(Invoice.Columns.DueDateTime, QueryOperator.GreaterThanOrEqualTo, fromDueDate), new Q(Invoice.Columns.DueDateTime, QueryOperator.LessThanOrEqualTo, toDueDate), new Q(Invoice.Columns.PromoterK, promoterKInvoice.PromoterK))); outstandingInvoicesQuery.OrderBy = new OrderBy(Invoice.Columns.DueDateTime, OrderBy.OrderDirection.Ascending); InvoiceSet outstandingInvoices = new InvoiceSet(outstandingInvoicesQuery); Mailer mailer = new Mailer(); mailer.TemplateType = Mailer.TemplateTypes.AnotherSiteUser; decimal totalAmountDue = 0; foreach (Invoice invoice in outstandingInvoices) { totalAmountDue += Math.Round(invoice.AmountDue, 2); if (invoice.Paid == false && new DateTime(invoice.DueDateTime.Year, invoice.DueDateTime.Month, invoice.DueDateTime.Day) <= new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)) { containsOverdue = true; } } string nonUserEmailBody = ""; // If there are no outstanding/overdue invoices, then do not send warning message if (outstandingInvoices.Count > 0) { // For overdue invoices if (containsOverdue == true) { mailer.Subject = "DontStayIn overdue invoices require payment of " + totalAmountDue.ToString("c"); mailer.Body = "<p>DontStayIn overdue invoices. Amount due " + Utilities.MoneyToHTML(totalAmountDue) + ". Payment required immediately for the following invoices:</p>"; } // For outstanding invoices else { mailer.Subject = "DontStayIn outstanding invoices require payment of " + totalAmountDue.ToString("c"); mailer.Body = "<p>DontStayIn outstanding invoices. Amount due " + Utilities.MoneyToHTML(totalAmountDue) + ". Payment required before due date for the following invoices:</p>"; } nonUserEmailBody = mailer.Body + "<p>Promoter: " + promoter.Name + "</p><p>Please pay invoices now</p>"; mailer.Body += promoter.LinkEmailFull; Utilities.AddInvoicesToEmail(mailer, outstandingInvoices); mailer.Body += @"<p><a href=""[LOGIN(" + promoter.UrlApp("invoices", "pay", "true") + "\")]>Please pay invoices now</a>.</p>"; if (!Vars.DevEnv) { if (!promoter.SuspendReminderEmails) { foreach (Usr usr in promoter.AdminUsrs) { mailer.UsrRecipient = usr; mailer.RedirectUrl = promoter.UrlApp("invoices"); mailer.Send(); } } } if (!Vars.DevEnv && promoter.AccountsEmail != null && promoter.AccountsEmail.Length > 0) { try { Utilities.EmailToNonUser(promoter.AccountsEmail, mailer.Subject, nonUserEmailBody, mailer.Attachments.ToArray()); } catch (Exception ex) { string additionalDetails = "Occurred in Utilities.EmailAllPromoterOutstandingStatements(): Promoter.AccountsEmail = " + promoter.AccountsEmail; EmailException(ex, additionalDetails, promoter); } } // Change for internal use mailer.UsrRecipient = null; mailer.TemplateType = Mailer.TemplateTypes.AdminNote; mailer.Subject += " (" + promoter.Name + ")"; // now send to our accounts email address mailer.To = "*****@*****.**"; mailer.Send(); } } catch (Exception ex) { string additionalDetails = "Occurred in Utilities.EmailUnpaidPromotersInvoicesToPromotersAndAccounts(): Promoter K= "; if (promoterKInvoice != null) additionalDetails += promoterKInvoice.PromoterK.ToString(); else additionalDetails += "null"; EmailException(ex, additionalDetails, promoter); } } } catch (Exception ex) { EmailException(ex, "Occurred in Utilities.EmailUnpaidPromotersInvoicesToPromotersAndAccounts()"); } }