Esempio n. 1
0
		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()");
			}
		}