public static void ProcessInvoices() { using (CastleClubEntities entities = new CastleClubEntities()) { if (CastleClub.BusinessLogic.Data.GlobalParameters.Procces) { int maxFailCount = CastleClub.BusinessLogic.Data.GlobalParameters.FailCount; int yearMin = CastleClub.BusinessLogic.Data.GlobalParameters.YearMin; DateTime min = new DateTime(yearMin, 1, 1); List <Invoice> list = entities.Invoices.Where(i => (i.Customer.CancelledDate == null) && (i.CreatedAt >= min) && (!i.FailCount.HasValue || i.FailCount.Value < maxFailCount) && (i.StatusId == InvoiceStatus.NEW.ToString() || i.StatusId == InvoiceStatus.BILLEDFAIL.ToString())).ToList(); foreach (Invoice invoice in list) { try { SiteDT siteDT = invoice.Customer.Site.GetDT(); InvoiceDT invoiceDT = invoice.GetDT(); CustomerDT customerDT = invoice.Customer.GetDT(false); CreditCardDT creditCardDT = invoice.Customer.CreditCards.FirstOrDefault().GetDT(); Transaction transaction = new Transaction(); transaction.InvoiceId = invoiceDT.Id; transaction.CreditCardId = creditCardDT.Id; transaction.AuthorizeTransactionId = 0; transaction.TypeId = TransactionType.SALE.ToString(); transaction.StatusId = TransactionStatus.FAILED.ToString(); transaction.SubmitDate = DateTime.Now; entities.Transactions.Add(transaction); entities.SaveChanges(); long transactionId = 0; string message = ""; string code = string.Empty; bool succesfull = CIM.CreateCustomerProfileTransactionAuthCapture(siteDT, invoiceDT, customerDT, creditCardDT, out transactionId, out message, out code); if (succesfull) { invoice.Status = InvoiceStatus.BILLED; invoice.BilledDate = DateTime.Now; transaction.Status = TransactionStatus.SUCCESFULL; transaction.AuthorizeTransactionId = transactionId; invoice.Customer.Referrer.BilledTotal++; invoice.Customer.Referrer.RevenueAmount += invoice.Amount; entities.SaveChanges(); } else { invoice.FailCount = invoice.FailCount.HasValue ? invoice.FailCount.Value + 1 : 1; transaction.Message = message + code; invoice.Status = InvoiceStatus.BILLEDFAIL; entities.SaveChanges(); if (invoice.FailCount >= maxFailCount && entities.NotificationProcess.Any()) { //To do some. //Send email for notification. string smtpAddress = CastleClub.BusinessLogic.Data.GlobalParameters.Smtp; int portNumber = 587; bool enableSSL = true; string emailFrom = CastleClub.BusinessLogic.Data.GlobalParameters.EmailAccount; string password = CastleClub.BusinessLogic.Data.GlobalParameters.EmailPassword; string subject = "Error an ocurred with invoice: " + invoiceDT.Id; string body = "Error ocurred at " + maxFailCount + " time with invoice: " + invoiceDT.Id + ", customerId: " + invoice.CustomerId + ", and with credit card: " + invoice.Customer.CreditCards.FirstOrDefault().Id; using (System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage()) { mail.From = new MailAddress(emailFrom); foreach (var emailTo in entities.NotificationProcess) { mail.To.Add(emailTo.To); } mail.Subject = subject; mail.Body = body; mail.IsBodyHtml = false; using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber)) { smtp.Credentials = new NetworkCredential(emailFrom, password); smtp.EnableSsl = enableSSL; smtp.Send(mail); } } } } } catch (Exception ex) { Utils.EventViewer.Writte("CastleClubAdmin", "PaymentTask - Process", ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } } } } }
public static void ProcessInvoices(int count, bool all) { using (CastleClubEntities entities = new CastleClubEntities()) { DateTime dateMin = DateTime.Now.Date; System.Console.WriteLine("\tCount is: " + count + ", and the total is: " + entities.Invoices.Count(i => (i.StatusId == "NEW") && (i.Customer.AuthorizeProfileId != 0 || all) && i.CreatedAt > dateMin) + "."); var list = entities.Invoices.Where(i => (i.StatusId == "NEW") && (i.Customer.AuthorizeProfileId != 0 || all) && i.CreatedAt > dateMin).Take(count).ToList(); foreach (var invoice in list) { if (invoice.StatusId == "NEW" && invoice.CreatedAt > new DateTime(2014, 1, 1)) { Console.WriteLine("\tProcess invoice: " + invoice.Id); Site siteDT = invoice.Customer.Site; Invoice invoiceDT = invoice; Customer customerDT = invoice.Customer; CreditCard creditCardDT = invoice.Customer.CreditCards.FirstOrDefault(); Transaction transaction = new Transaction(); transaction.InvoiceId = invoiceDT.Id; transaction.CreditCardId = creditCardDT.Id; transaction.AuthorizeTransactionId = 0; transaction.TypeId = "SALE"; transaction.StatusId = "FAILED"; transaction.SubmitDate = DateTime.Now; entities.Transactions.Add(transaction); entities.SaveChanges(); long transactionId = 0; string message = string.Empty; bool cancel = false; bool succesfull = CIM.CreateCustomerProfileTransactionAuthCapture(siteDT, invoiceDT, customerDT, creditCardDT, out transactionId, out message, out cancel); if (succesfull) { Console.WriteLine("\tCorrect process."); invoice.StatusId = "BILLED"; invoice.BilledDate = DateTime.Now; transaction.StatusId = "SUCCESFULL"; transaction.AuthorizeTransactionId = transactionId; invoice.Customer.Referrer.BilledTotal++; invoice.Customer.Referrer.RevenueAmount += invoice.Amount; entities.SaveChanges(); } else { Console.WriteLine("\tFail process."); invoice.FailCount = invoice.FailCount.HasValue ? invoice.FailCount.Value + 1 : 1; transaction.Message = message; invoice.StatusId = "BILLEDFAIL"; /* * if (cancel) * { * invoice.Customer.CancelledDate = DateTime.Now; * invoice.Customer.StatusId = "CANCELLED"; * } */ entities.SaveChanges(); CastleClub.BusinessLogic.Utils.EventViewer.Writte("Castle Club", "Payment Task", message.ToString(), System.Diagnostics.EventLogEntryType.Error); } } } } }