示例#1
0
        public ActionResult WelcomeEmail(CastleClub.BackEnd.Models.WelcomeEmailVM model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            //bool sel = model.sites[0].SendWelcomeEmail;
            using (CastleClubEntities entities = new CastleClubEntities())
            {
                foreach (var item in model.sites)
                {
                    var site = entities.Sites.Where(x => x.Id == item.Id).FirstOrDefault();
                    site.SendWelcomeEmail  = item.SendWelcomeEmail;
                    site.WelcomeEmailDelay = item.WelcomeEmailDelay;
                    site.Email             = item.Email;
                    site.SmtpAddress       = item.SmtpAddress;
                    if (!string.IsNullOrEmpty(item.PasswordEmail))
                    {
                        site.PasswordEmail = item.PasswordEmail;
                    }
                }

                var parameter = entities.Parameters.FirstOrDefault();
                parameter.CapEmail = model.CapEmail;
                entities.SaveChanges();
            }

            return(View(model));
        }
示例#2
0
 public static List <StateDT> GetStates()
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         return(entities.States.OrderBy(s => s.Name).ToList().Select(s => s.GetDT()).ToList());
     }
 }
示例#3
0
 public static string GetStateName(string id)
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         return(entities.States.Where(s => s.Id == id).FirstOrDefault().Name);
     }
 }
示例#4
0
        public static string UpdatePassword(string passwordData)
        {
            int         updateCustomerId = 0;
            Hashtable   cusHash          = EncryptionHelper.Unpack(EncryptionHelper.Decrypt(passwordData, cryptKey));
            GCDCustomer retCus           = new GCDCustomer(cusHash);

            retCus.Success = false;
            if (cusHash.ContainsKey("CustomerID") && int.TryParse(cusHash["CustomerID"].ToString(), out updateCustomerId))
            {
                if (cusHash.ContainsKey("NewPassword"))
                {
                    string newPassword = cusHash["NewPassword"].ToString();
                    using (CastleClubEntities entities = new CastleClubEntities())
                    {
                        Customer customer = entities.Customers.Where(c => c.Id == updateCustomerId).FirstOrDefault();
                        Password password = new Password(newPassword);
                        customer.Password      = password.SaltedPassword;
                        customer.SaltKey       = password.SaltKey;
                        customer.UnEncryptPass = "";// newPassword;
                        entities.SaveChanges();
                        retCus.Success = true;
                    }
                }
            }
            return(EncryptionHelper.Encrypt(retCus.ToString(), cryptKey));
        }
示例#5
0
 public static bool EmailExists(string email)
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         return(entities.Users.Any(u => u.Email == email));
     }
 }
示例#6
0
 public static List <UserDT> GetUsers()
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         return(entities.Users.Where(u => u.Active).ToList().Select(u => u.GetDT()).ToList());
     }
 }
示例#7
0
 /// <summary>
 /// Return the customer's referrer.
 /// </summary>
 /// <param name="customerID">Customer Id.</param>
 /// <returns>Return referrer.</returns>
 public static ReferrerDT GetReferrerCustomer(int customerID)
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         return(entities.Customers.FirstOrDefault(x => x.Id == customerID).Referrer.GetDT());
     }
 }
示例#8
0
        public void SendEmail(TestVM model)
        {
            if (ModelState.IsValid && !string.IsNullOrEmpty(model.EmailToSend) && !string.IsNullOrEmpty(model.Name))
            {
                string body = "";


                #region Generate random string (result in result variable)

                // var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                //var random = new Random();
                var result = "";// new string(Enumerable.Repeat(chars, 8).Select(s => s[random.Next(s.Length)]).ToArray());

                #endregion

                SiteDT siteDT = SitesManager.GetSite(model.SiteID);
                using (CastleClubEntities entities = new CastleClubEntities())
                {
                    Customer customer = entities.Customers.Where(c => c.Email == model.EmailToSend && c.SiteId == siteDT.Id).FirstOrDefault();
                    if (customer != null)
                    {
                        result = customer.UnEncryptPass;

                        if (result == null)
                        {
                            var chars  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                            var random = new Random();
                            result = new string(Enumerable.Repeat(chars, 8).Select(s => s[random.Next(s.Length)]).ToArray());

                            Password p = new Password(result);
                            customer.Password      = p.SaltedPassword;
                            customer.UnEncryptPass = p.ClearPassword;
                            //customer.
                            customer.SaltKey = p.SaltKey;

                            entities.SaveChanges();
                        }
                    }
                }
                body = string.Format(Email.WelcomeBodyEmail(), model.Name,
                                     model.EmailToSend, result, siteDT.Name, siteDT.Name, "PartsGeek",
                                     siteDT.Price, siteDT.PricePerQuarter, siteDT.Phone, siteDT.Email, siteDT.OfferDomain);

                string subject = string.Format(Email.WelcomeSubjectEmail(), siteDT.Name);
                CastleClub.BusinessLogic.Utils.Email.SendEmailWithBCC(siteDT.Email, siteDT.PasswordEmail, siteDT.SmtpAddress, subject, body
                                                                      , new List <string>()
                {
                    model.EmailToSend
                }, new List <string>()
                {
                    siteDT.WelcomeEmailBCC
                }, true);
            }
        }
示例#9
0
 public static UserDT GetUser(int id)
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         User user = entities.Users.Where(u => u.Id == id).FirstOrDefault();
         if (user == null)
         {
             throw new InvalidUserException();
         }
         return(user.GetDT());
     }
 }
示例#10
0
 public static Referrer GetReferrerByName(string Name)
 {
     using (Data.CastleClubEntities entities = new CastleClubEntities())
     {
         var referrer = entities.Referrers.FirstOrDefault(x => x.Name.ToLower() == Name.ToLower());
         if (referrer == null)
         {
             throw new ExecutionEngineException();
         }
         return(referrer);
     }
 }
示例#11
0
 public static void DeleteUser(int id)
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         User user = entities.Users.Where(u => u.Id == id).FirstOrDefault();
         if (user == null)
         {
             throw new InvalidUserException();
         }
         user.Active = false;
         entities.SaveChanges();
     }
 }
示例#12
0
 /// <summary>
 /// Get a specific invoice.
 /// </summary>
 /// <param name="invoiceId">Id of the invoice for search.</param>
 /// <returns></returns>
 public static InvoiceDT GetInvoice(int invoiceId)
 {
     using (CastleClubEntities entities = new CastleClubEntities())
     {
         var invoice = entities.Invoices.FirstOrDefault(x => x.Id == invoiceId);
         if (invoice != null)
         {
             return(invoice.GetDT());
         }
         else
         {
             return(null);
         }
     }
 }
示例#13
0
        public static UserDT CreateUser(UserDT user)
        {
            using (CastleClubEntities entities = new CastleClubEntities())
            {
                User newUser = new User();
                newUser.Email     = user.Email;
                newUser.FirstName = user.FirstName;
                newUser.LastName  = user.LastName;
                newUser.Role      = user.Role;
                newUser.AspNetId  = user.AspNetId;
                newUser.Active    = true;

                entities.Users.Add(newUser);
                entities.SaveChanges();

                return(newUser.GetDT());
            }
        }
示例#14
0
        public ActionResult ActivateAllActiveCustomers()
        {
            AccessVM model = new AccessVM();

            using (CastleClubEntities entities = new CastleClubEntities())
            {
                //SiteDT site = entities.Sites.Where(s=> s.Active == true).ToList().Select(s => s.GetDT()).FirstOrDefault();
                //var today = DateTime.Today.AddDays(-2);
                SiteDT site = SitesManager.GetSite(3);
                // List<CustomerDT> customers = entities.Customers.Where(c => c.StatusId == "ACTIVE" && c.SiteId == site.Id).ToList().Select(c => c.GetDT(false)).ToList();
                List <CustomerDT> customers = entities.Customers.Where(c => c.SiteId == site.Id).ToList().Select(c => c.GetDT(false)).ToList();
                //List<CustomerDT> customers = entities.Customers.ToList().Select(c => c.GetDT(false)).ToList();

                /*List<int> idList = new List<int>()
                 * {
                 * };*/
                string customerAutoPriceDiscount = "";
                foreach (CustomerDT custom in customers)
                {
                    try
                    {
                        /*if (idList.Contains(custom.Id) && custom.Status == DataTypes.Enums.CustomerStatus.ACTIVE)
                         * {
                         *    //string response = CustomersManager.NewActivateMember(SitesManager.GetSite(custom.SiteId), custom, "CLOSED");
                         *    string response = CustomersManager.NewActivateMember(SitesManager.GetSite(custom.SiteId), custom, "OPEN");
                         * }
                         * else
                         * if (idList.Contains(custom.Id) && custom.Status != DataTypes.Enums.CustomerStatus.ACTIVE)
                         * {
                         *  string response = CustomersManager.NewActivateMember(SitesManager.GetSite(custom.SiteId), custom, "SUSPEND");
                         *  customerAutoPriceDiscount +=  custom.Id.ToString() + " \n ,";
                         * }
                         */
                    }
                    catch (Exception e)
                    {
                    }

                    // RootObject oMyclass = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(response);
                }
                return(View(model));
            }
        }
示例#15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="referrerID">0 for all referrers</param>
        /// <param name="onlyActive">Only active customer</param>
        /// <returns>Customer list of referrer</returns>
        public static List <CustomerDT> GetCustomers(int referrerID, bool onlyActive)
        {
            using (CastleClubEntities entitie = new CastleClubEntities())
            {
                List <CustomerDT> response     = new List <CustomerDT>();
                List <Customer>   customerList = referrerID == 0 ?
                                                 entitie.Customers.Where(x => ((!onlyActive) || (x.CancelledDate == null))).ToList()
                    : entitie.Referrers.FirstOrDefault(x => x.Id == referrerID).Customers.Where(x => ((!onlyActive) || (x.CancelledDate == null))).ToList();

                foreach (var customer in customerList)
                {
                    response.Add(new CustomerDT()
                    {
                        Address            = customer.Address,
                        AuthorizeProfileId = customer.AuthorizeProfileId,
                        BadLoginCount      = customer.BadLoginCount,
                        CancelledDate      = customer.CancelledDate,
                        City         = customer.City,
                        CreatedAt    = customer.CreatedAt,
                        Email        = customer.Email,
                        FirstName    = customer.FirstName,
                        Id           = customer.Id,
                        LastBillDate = customer.LastBillDate.HasValue ? customer.LastBillDate.Value : new DateTime(),
                        LastName     = customer.LastName,
                        NcId         = customer.NcId,
                        NextBillDate = customer.NextBillDate,
                        Phone        = customer.Phone,
                        Referrer     = customer.Referrer != null ? customer.Referrer.Name : string.Empty,
                        Refunded     = customer.Refunded,
                        Site         = customer.Site.Name,
                        SiteId       = customer.SiteId,
                        StateId      = customer.StateId,
                        Status       = customer.Status,
                        ZipCode      = customer.ZipCode,
                        EmailForm    = customer.EmailForm
                    });
                }

                return(response);
            }
        }
示例#16
0
        public static void CreateInvoices()
        {
            using (CastleClubEntities entities = new CastleClubEntities())
            {
                if (CastleClub.BusinessLogic.Data.GlobalParameters.Create)
                {
                    int             yearMin = CastleClub.BusinessLogic.Data.GlobalParameters.YearMin;
                    DateTime        min     = new DateTime(yearMin, 1, 1);
                    DateTime        max     = DateTime.Now.Date.AddDays(1).AddMinutes(-1);
                    List <Customer> list    = entities.Customers.Where(c => c.NextBillDate >= min && c.NextBillDate < max && c.StatusId == CustomerStatus.ACTIVE.ToString()).ToList();
                    foreach (Customer c in list)
                    {
                        try
                        {
                            while (c.NextBillDate <= DateTime.Now)
                            {
                                Invoice invoice = new Invoice();
                                invoice.CustomerId = c.Id;
                                invoice.Amount     = c.Site.PricePerQuarter;
                                invoice.Status     = InvoiceStatus.NEW;
                                invoice.CreatedAt  = DateTime.Now;

                                c.LastBillDate = DateTime.Now;
                                c.NextBillDate = c.NextBillDate.AddMonths(3);

                                entities.Invoices.Add(invoice);

                                entities.SaveChanges();
                            }
                        }
                        catch (Exception ex)
                        {
                            Utils.EventViewer.Writte("CastleClub", "PaymentTask - Creations", ex.ToString(), System.Diagnostics.EventLogEntryType.Error);
                        }
                    }
                }
            }
        }
示例#17
0
        public static bool CancelCustomer(string customerData)
        {
            bool      ret = false;
            int       cancelCustomerId = 0;
            Hashtable cusHash          = EncryptionHelper.Unpack(EncryptionHelper.Decrypt(customerData, cryptKey));

            if (cusHash.ContainsKey("CustomerID") && int.TryParse(cusHash["CustomerID"].ToString(), out cancelCustomerId))
            {
                using (CastleClubEntities entities = new CastleClubEntities())
                {
                    Customer customer = entities.Customers.FirstOrDefault(x => x.Id == cancelCustomerId);
                    if (customer != null)
                    {
                        customer.Status        = CustomerStatus.CANCELLED;
                        customer.CancelledDate = DateTime.Now;

                        entities.SaveChanges();
                        ret = true;
                    }
                }
            }
            return(ret);
        }
示例#18
0
        /// <summary>
        /// Resume all transaction of range. Successfull and Fail
        /// </summary>
        /// <param name="siteID">0 for all site.</param>
        /// <param name="from">From date</param>
        /// <param name="to">To date</param>
        /// <returns>Index 0 is successfull, and index 1 is fail.</returns>
        public static decimal[] TransactionReport(int siteID, DateTime from, DateTime to)
        {
            using (CastleClubEntities entities = new CastleClubEntities())
            {
                decimal[] resp = new decimal[2];
                resp[0] = 0;
                resp[1] = 0;

                if (siteID == 0)
                {
                    var sites = SitesManager.GetSites();
                    foreach (var site in sites)
                    {
                        GetTransactionReportFromAuthorizeForSite(site, from, to.Date.AddDays(1).AddSeconds(-1), resp, entities);
                    }
                }
                else
                {
                    GetTransactionReportFromAuthorizeForSite(SitesManager.GetSite(siteID), from, to.Date.AddDays(1).AddSeconds(-1), resp, entities);
                }

                return(resp);
            }
        }
示例#19
0
        public static string ResetPasswordByGroup(string resetData, string groupId, bool sendMail)
        {
            int         siteId  = 0;
            Hashtable   cusHash = EncryptionHelper.Unpack(EncryptionHelper.Decrypt(resetData, cryptKey));
            GCDCustomer retCus  = new GCDCustomer(cusHash);

            retCus.Success = false;

            if (cusHash.ContainsKey("Email") && int.TryParse(groupId, out siteId))
            {
                using (CastleClubEntities entities = new CastleClubEntities())
                {
                    Site site = entities.Sites.FirstOrDefault(x => x.GroupId == siteId.ToString());
                    if (site != null)
                    {
                        siteId = site.Id;
                        string   email    = cusHash["Email"].ToString();
                        Customer customer = entities.Customers.FirstOrDefault(c => c.SiteId == siteId && c.Email == email);
                        if (customer != null)
                        {
                            /*Password password = new Password();
                             * customer.Password = password.SaltedPassword;
                             * customer.SaltKey = password.SaltKey;
                             * entities.SaveChanges();
                             * retCus.Success = true;*/

                            if (sendMail && !string.IsNullOrEmpty(retCus.Password))
                            {
                                string smtpAddress   = CastleClub.BusinessLogic.Data.GlobalParameters.Smtp;
                                string emailFrom     = site.Email;
                                string passwordEmail = site.PasswordEmail; //CastleClub.BusinessLogic.Data.GlobalParameters.EmailPassword;
                                string subject       = string.Format(Properties.Resources.SetPasswordSubjectEmail, site.Name);
                                var    url           = string.Format(GlobalParameters.UrlResetPassword, retCus.Password, retCus.Validator);
                                //pasamos el dominio en password y el guid en validator
                                string body = string.Format(Properties.Resources.SetPasswordBodyEmail, url, site.Name);

                                Utils.Email.SendEmail(emailFrom, passwordEmail, smtpAddress, subject, body, new List <string>()
                                {
                                    customer.Email
                                }, true);
                                retCus.Success = true;
                            }
                            else if (!sendMail && !string.IsNullOrEmpty(retCus.Password))
                            {
                                Password password = new Password(retCus.Password);
                                customer.Password = password.SaltedPassword;
                                customer.SaltKey  = password.SaltKey;
                                entities.SaveChanges();
                                retCus.Success = true;
                            }
                        }
                        else
                        {
                            retCus.Messages = "Invalid Email";
                        }
                    }
                    else
                    {
                        retCus.Messages = "Invalid GroupId";
                    }
                }
            }
            else
            {
                retCus.Messages = "Invalid Email";
            }
            CastleClub.BusinessLogic.Utils.EventViewer.WriteToFile("Log Web Service", retCus.Messages, "c:\\users\\administrator\\desktop\\log.txt");
            return(EncryptionHelper.Encrypt(retCus.ToString(), cryptKey));
        }
示例#20
0
        public static string UpdateCustomer(string customerData, bool sendEmail)
        {
            int           updateCustomerId = 0;
            Hashtable     cusHash          = EncryptionHelper.Unpack(EncryptionHelper.Decrypt(customerData, cryptKey));
            GCDCustomer   retCus           = new GCDCustomer(cusHash);
            GCDCreditCard retCreditCard    = new GCDCreditCard(cusHash);

            retCus.Success = false;
            if (cusHash.ContainsKey("CustomerID") && int.TryParse(cusHash["CustomerID"].ToString(), out updateCustomerId))
            {
                using (CastleClubEntities entities = new CastleClubEntities())
                {
                    Customer customer = entities.Customers.Where(c => c.Id == updateCustomerId).FirstOrDefault();
                    if (customer != null)
                    {
                        Password passwordHash = new Password(cusHash["PasswordOld"].ToString(), customer.SaltKey);
                        if (customer.Password == passwordHash.SaltedPassword)
                        {
                            customer.FirstName = retCus.FirstName;
                            customer.LastName  = retCus.LastName;
                            customer.Address   = retCus.Address1;
                            customer.City      = retCus.City;
                            State state = entities.States.FirstOrDefault(s => s.Name.ToLower() == retCus.State.ToLower());
                            customer.StateId = state != null?state.Id.ToString() : string.Empty;

                            customer.Email   = retCus.Email;
                            customer.Phone   = retCus.Phone;
                            customer.ZipCode = retCus.Zip;

                            var creditCard = customer.CreditCards.FirstOrDefault();
                            if (creditCard != null && !string.IsNullOrEmpty(retCreditCard.CreditCard) && Utils.CreditCardHelper.Valid(retCreditCard.CreditCard, false))
                            {
                                var today = DateTime.Now;
                                if (today.Year > retCus.CreditCardYearExpired || (today.Year == retCus.CreditCardYearExpired && today.Month >= retCreditCard.Month))
                                {
                                    throw new Exception("The credit card is invalid.");
                                }

                                var    encryptData   = CastleClub.BusinessLogic.Utils.EncryptionHelper.EncryptRSACertificate("ccNum:" + retCreditCard.CreditCard + ";cVV:;ccExp:" + Utils.CreditCardHelper.GetExpDate(retCreditCard.Month, retCreditCard.Year));
                                string lastFourDigit = retCreditCard.CreditCard.Substring(retCreditCard.CreditCard.Length - 4, 4);
                                string type          = Utils.CreditCardHelper.GetCardType(retCreditCard.CreditCard);

                                creditCard.CreatedAt     = DateTime.Now;
                                creditCard.Data          = encryptData;
                                creditCard.LastFourDigit = lastFourDigit;
                                creditCard.Type          = type;

                                long   newPaymentProfile;
                                string message = string.Empty;
                                if (CastleClub.BusinessLogic.AuthorizeAPI.CIM.CreateNewCustomerPaymentProfile(customer.Site.GetDT(), customer.GetDT(false), retCreditCard.CreditCard, Utils.CreditCardHelper.GetExpDate(retCreditCard.Month, retCreditCard.Year), out newPaymentProfile, out message))
                                {
                                    creditCard.AuthorizePaymentProfileId = newPaymentProfile;
                                }
                                else
                                {
                                    throw new Exception(message);
                                }
                            }

                            bool setPassword = false;
                            if (!string.IsNullOrEmpty(retCus.PasswordNow))
                            {
                                Password password = new Password(retCus.PasswordNow);
                                customer.Password = password.SaltedPassword;
                                customer.SaltKey  = password.SaltKey;
                                setPassword       = true;
                            }

                            retCus.Success = true;

                            entities.SaveChanges();

                            if (sendEmail && setPassword)
                            {
                                string smtpAddress   = CastleClub.BusinessLogic.Data.GlobalParameters.Smtp;
                                string emailFrom     = customer.Site.Email;
                                string passwordEmail = customer.Site.PasswordEmail; //CastleClub.BusinessLogic.Data.GlobalParameters.EmailPassword;
                                string subject       = string.Format(Properties.Resources.SetPasswordSubjectEmail, customer.Site.Name);
                                string body          = string.Format(Properties.Resources.SetPasswordBodyEmail, customer.Site.Name, retCus.PasswordNow);

                                Utils.Email.SendEmail(emailFrom, passwordEmail, smtpAddress, subject, body, new List <string>()
                                {
                                    customer.Email
                                }, false);
                            }
                        }
                        else
                        {
                            retCus.Success  = false;
                            retCus.Messages = "The password for the customer not match.";
                        }
                    }
                    else
                    {
                        retCus.Messages = "Error custmer ID.";
                    }
                }
            }
            return(EncryptionHelper.Encrypt(retCus.ToString(), cryptKey));
        }
示例#21
0
        /// <summary>
        /// Get the resume of all transaction for a specific site.
        /// </summary>
        /// <param name="site">Site.</param>
        /// <param name="from">From date.</param>
        /// <param name="to">To date.</param>
        /// <param name="resp">Response, in index 0 is for successfull transactions, in index 1 is for failed transactions.</param>
        /// <param name="entities">Data base context.</param>
        private static void GetTransactionReportFromAuthorizeForSite(SiteDT site, DateTime from, DateTime to, decimal[] resp, CastleClubEntities entities)
        {
            var parameter    = new Dictionary <SiteDT, List <TransactionDT> >();
            var tmpList      = entities.Transactions.Where(x => x.Invoice.Customer.SiteId == site.Id && x.TypeId != "REFUND" && x.SubmitDate >= from && x.SubmitDate <= to).ToList();
            var tmpTransform = tmpList.Select(x => x.GetDT());
            var tmpToList    = tmpTransform.ToList();

            parameter.Add(site, tmpToList);

            decimal[] report = CIM.GetTransactionRange(parameter);

            resp[0] = resp[0] + report[0];
            resp[1] = resp[1] + report[1];
        }
示例#22
0
        /// <summary>
        /// Read all transaction from authorize report file.
        /// </summary>
        /// <param name="path">Authorize report file path.</param>
        /// <param name="onlyRefund">Indicate if only include refund transactions.</param>
        /// <returns>Indicate if all ok or was any error.</returns>
        public static bool ReadReportFile(string path, bool onlyRefund)
        {
            try
            {
                var reports = ReadFile(path, true, onlyRefund);

                Dictionary <int, int> map = new Dictionary <int, int>();

                using (CastleClubEntities entities = new CastleClubEntities())
                {
                    bool cancellCustomer = false;
                    foreach (var report in reports)
                    {
                        int invoiceID = map.ContainsKey(report.InvoiceID) ? map[report.InvoiceID] : report.InvoiceID;
                        if (report.SubmitDate >= new DateTime(2014, 11, 04))
                        {
                            var aux      = report.CustomerID;
                            var customer = entities.Customers.FirstOrDefault(x => x.Id == aux);
                            if (customer != null)
                            {
                                #region
                                aux = report.CustomerID;
                                var invoice = entities.Invoices.FirstOrDefault(x => x.Id == invoiceID && x.CustomerId == aux);
                                if (invoice != null)
                                {
                                    var auxLong     = report.TranscactionID;
                                    var transaction = entities.Transactions.FirstOrDefault(x => x.AuthorizeTransactionId == auxLong);
                                    if (transaction == null)
                                    {
                                        transaction = new Transaction()
                                        {
                                            AuthorizeTransactionId = report.TranscactionID,
                                            CreditCard             = customer.CreditCards.FirstOrDefault(),
                                            //Invoice = invoice,
                                            Message    = string.Empty,
                                            StatusId   = report.Status,
                                            SubmitDate = report.SubmitDate,
                                            TypeId     = report.TransactionType
                                        };
                                        entities.Transactions.Add(transaction);

                                        if ((report.Status == "SUCCESFULL") && (report.TransactionType == "SALE"))
                                        {
                                            invoice.BilledDate = report.SettlementDate;
                                            invoice.StatusId   = "BILLED";
                                            invoice.Transactions.Add(transaction);
                                            transaction.Invoice = invoice;
                                        }
                                        else if ((report.Status == "SUCCESFULL") && (report.TransactionType == "REFUND"))
                                        {
                                            if (customer.Invoices.Any())
                                            {
                                                var invoiceAux = customer.Invoices.Where(x => x.Transactions.Any(y => y.StatusId == "SUCCESFULL" && y.AuthorizeTransactionId == report.RefererTransactionID)).OrderByDescending(x => x.CreatedAt).FirstOrDefault();
                                                if (invoiceAux != null)
                                                {
                                                    invoice = invoiceAux;
                                                    transaction.RefundedTransactionId = invoice.Transactions.FirstOrDefault(x => x.AuthorizeTransactionId == report.RefererTransactionID).Id;
                                                }
                                            }
                                            invoice.RefundedDate = report.SettlementDate;
                                            invoice.StatusId     = "REFUNDED";
                                            invoice.Amount       = report.Amount;
                                            cancellCustomer      = true;

                                            transaction.Invoice = invoice;
                                            invoice.Transactions.Add(transaction);
                                        }
                                        else if ((report.Status == "FAILED") && (report.TransactionType == "SALE"))
                                        {
                                            invoice.StatusId   = "BILLEDFAIL";
                                            invoice.BilledDate = report.SettlementDate;
                                            invoice.Transactions.Add(transaction);
                                            transaction.Invoice = invoice;
                                        }
                                        else if ((report.Status == "FAILED") && (report.TransactionType == "REFUND"))
                                        {
                                            if (customer.Invoices.Any())
                                            {
                                                var invoiceAux = customer.Invoices.Where(x => x.Transactions.Any(y => y.StatusId == "SUCCESFULL" && y.AuthorizeTransactionId == report.RefererTransactionID)).OrderByDescending(x => x.CreatedAt).FirstOrDefault();
                                                if (invoiceAux != null)
                                                {
                                                    invoice = invoiceAux;
                                                    transaction.RefundedTransactionId = invoice.Transactions.FirstOrDefault(x => x.AuthorizeTransactionId == report.RefererTransactionID).Id;
                                                }
                                            }
                                            invoice.RefundedDate = report.SettlementDate;
                                            invoice.StatusId     = "REFUNDEDFAIL";
                                            invoice.Amount       = report.Amount;
                                            cancellCustomer      = true;

                                            invoice.Transactions.Add(transaction);
                                            transaction.Invoice = invoice;
                                            invoice.Transactions.Add(transaction);
                                        }

                                        if (cancellCustomer)
                                        {
                                            customer.CancelledDate = report.SubmitDate;
                                            customer.StatusId      = "CANCELLED";
                                        }

                                        try
                                        {
                                            entities.SaveChanges();
                                        }
                                        catch (Exception)
                                        {
                                            Utils.EventViewer.Writte("Castle Club Admin", "Authorize Synchronize", "The synchronize for customer: \"" + report.CustomerID + "\", with the transaction: \"" + report.TranscactionID + "\", and this date: \"" + report.SubmitDate + "\", failed.", System.Diagnostics.EventLogEntryType.Error);
                                        }
                                        if (!map.ContainsKey(report.InvoiceID))
                                        {
                                            map.Add(report.InvoiceID, invoice.Id);
                                        }
                                    }
                                }
                                else
                                {
                                    var auxlong     = report.TranscactionID;
                                    var transaction = entities.Transactions.FirstOrDefault(x => x.AuthorizeTransactionId == auxlong);
                                    if (transaction == null)
                                    {
                                        if (customer.Invoices.Count == 0)
                                        {
                                            invoice = new Invoice()
                                            {
                                                Amount       = report.Amount,
                                                BilledDate   = report.SubmitDate,
                                                CreatedAt    = report.SubmitDate,
                                                Customer     = customer,
                                                CustomerId   = report.CustomerID,
                                                FailCount    = 0,
                                                Transactions = new List <Transaction>(),
                                                Id           = invoiceID
                                            };
                                            customer.Invoices.Add(invoice);
                                            entities.Invoices.Add(invoice);
                                        }
                                        else
                                        {
                                            if (report.RefererTransactionID > 0 && customer.Invoices.Any(x => x.Transactions.Any(y => y.StatusId == "SUCCESFULL" && y.AuthorizeTransactionId == report.RefererTransactionID)))
                                            {
                                                invoice = customer.Invoices.Where(x => x.Transactions.Any(y => y.StatusId == "SUCCESFULL" && y.AuthorizeTransactionId == report.RefererTransactionID)).OrderByDescending(x => x.CreatedAt).FirstOrDefault();
                                            }
                                            else
                                            {
                                                invoice = new Invoice()
                                                {
                                                    Amount       = report.Amount,
                                                    BilledDate   = report.SubmitDate,
                                                    CreatedAt    = report.SubmitDate,
                                                    Customer     = customer,
                                                    CustomerId   = report.CustomerID,
                                                    FailCount    = 0,
                                                    Transactions = new List <Transaction>(),
                                                    Id           = invoiceID
                                                };
                                                customer.Invoices.Add(invoice);
                                                entities.Invoices.Add(invoice);
                                            }
                                        }

                                        transaction = new Transaction()
                                        {
                                            AuthorizeTransactionId = report.TranscactionID,
                                            CreditCard             = customer.CreditCards.FirstOrDefault(),
                                            Invoice    = invoice,
                                            Message    = string.Empty,
                                            StatusId   = report.Status,
                                            SubmitDate = report.SubmitDate,
                                            TypeId     = report.TransactionType
                                        };

                                        invoice.Transactions.Add(transaction);
                                        entities.Transactions.Add(transaction);

                                        if (report.TransactionType == "SALE")
                                        {
                                            if (report.Status == "SUCCESFULL")
                                            {
                                                invoice.StatusId = "BILLED";
                                            }
                                            else if (report.Status == "FAILED")
                                            {
                                                invoice.StatusId = "BILLEDFAIL";
                                            }
                                        }
                                        else if (report.TransactionType == "REFUND")
                                        {
                                            if (report.Status == "SUCCESFULL")
                                            {
                                                invoice.StatusId = "REFUNDED";
                                            }
                                            else if (report.Status == "FAILED")
                                            {
                                                invoice.StatusId = "REFUNDEDFAIL";
                                            }
                                            cancellCustomer = true;

                                            var transactionRefund = invoice.Transactions.FirstOrDefault(x => x.AuthorizeTransactionId == report.RefererTransactionID);
                                            if (transactionRefund != null)
                                            {
                                                transaction.RefundedTransactionId = transactionRefund.Id;
                                            }
                                        }

                                        if (cancellCustomer)
                                        {
                                            customer.CancelledDate = report.SubmitDate;
                                            customer.StatusId      = "CANCELLED";
                                        }

                                        try
                                        {
                                            entities.SaveChanges();
                                        }
                                        catch (Exception)
                                        {
                                            Utils.EventViewer.Writte("Castle Club Admin", "Authorize Synchronize", "The synchronize for customer: \"" + report.CustomerID + "\", with the transaction: \"" + report.TranscactionID + "\", and this date: \"" + report.SubmitDate + "\", failed.", System.Diagnostics.EventLogEntryType.Error);
                                        }

                                        if (!map.ContainsKey(report.InvoiceID))
                                        {
                                            map.Add(report.InvoiceID, invoice.Id);
                                        }
                                    }
                                }
                                #endregion
                            }
                        }
                    }
                }
                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
示例#23
0
        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);
                        }
                    }
                }
            }
        }
示例#24
0
        public static string LogonSecureByGroup(string logonData, string groupId)
        {
            GCDCustomer retCus = new GCDCustomer();

            retCus.Success       = false;
            retCus.AccountLocked = false;

            if (string.IsNullOrEmpty(groupId))
            {
                groupId = "1181";
            }

            using (CastleClubEntities entities = new CastleClubEntities())
            {
                Site site = entities.Sites.Where(s => s.GroupId == groupId).FirstOrDefault();
                if (site != null)
                {
                    string   li   = EncryptionHelper.Decrypt(logonData, cryptKey);
                    string[] linf = li.Split('&');

                    if (linf.Length == 2)
                    {
                        string[] cinf  = linf[0].Split('=');
                        string[] pinf  = linf[1].Split('=');
                        string   email = cinf[1];

                        if (cinf.Length == 2 && pinf.Length == 2)
                        {
                            Customer customer = entities.Customers.Where(c => c.SiteId == site.Id && c.Email == email).FirstOrDefault();
                            if (customer != null)
                            {
                                string   chkPass = pinf[1];
                                Password pwd     = new Password(chkPass, customer.SaltKey);
                                if (customer.BadLoginCount < 5 && customer.Password == pwd.SaltedPassword)
                                {
                                    if (customer.Status != CustomerStatus.ACTIVE)
                                    {
                                        retCus.Messages = "Customer Account Not Found, Invalid or Cancelled";
                                    }
                                    else
                                    {
                                        retCus.FirstName    = customer.FirstName;
                                        retCus.LastName     = customer.LastName;
                                        retCus.Address1     = customer.Address;
                                        retCus.Address2     = String.Empty;
                                        retCus.City         = customer.City;
                                        retCus.State        = entities.States.Where(s => s.Id == customer.StateId).FirstOrDefault().Name;
                                        retCus.Country      = "USA";
                                        retCus.Email        = customer.Email;
                                        retCus.Phone        = customer.Phone;
                                        retCus.CustomerID   = customer.Id;
                                        retCus.RegisterDate = customer.CreatedAt;
                                        retCus.MemberID     = "M" + site.GroupId + "-" + customer.Id;
                                        retCus.Validator    = logonData;
                                        retCus.Success      = true;
                                        retCus.Zip          = customer.ZipCode;

                                        retCus.CreatedAt = customer.CreatedAt;
                                        var creditCard = customer.CreditCards.FirstOrDefault();
                                        if (creditCard != null)
                                        {
                                            retCus.CreditCardNumber       = creditCard.LastFourDigit;
                                            retCus.CreditCardType         = creditCard.Type;
                                            retCus.CreditCardMonthExpired = 1;
                                            retCus.CreditCardYearExpired  = DateTime.Now.Year;
                                        }

                                        customer.BadLoginCount = 0;
                                        entities.SaveChanges();
                                    }
                                }
                                else
                                {
                                    retCus.Messages = "Logon Failed";
                                    if (customer.BadLoginCount > 4)
                                    {
                                        retCus.AccountLocked = true;
                                    }
                                    else
                                    {
                                        customer.BadLoginCount = customer.BadLoginCount + 1;
                                        entities.SaveChanges();

                                        retCus.AccountLocked = false;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        retCus.Messages = "Missing or Null Data Field";
                    }

                    if (retCus.Success == false && retCus.Messages.Length == 0)
                    {
                        retCus.Messages = "Logon Failed";
                    }
                    return(EncryptionHelper.Encrypt(retCus.ToString(), cryptKey));
                }
                else
                {
                    return(String.Empty);
                }
            }
        }