Beispiel #1
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);
            }
        }
Beispiel #2
0
        public static bool CreateNewCustomerPaymentProfile(SiteDT site, CustomerDT customer, string cardNumber, string expirationDate, out long paymentProfile, out string message)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            using (ServiceSoapClient client = new ServiceSoapClient())
            {
                paymentProfile = 0;
                message        = string.Empty;

                var merchant = new MerchantAuthenticationType()
                {
                    name           = site.AuthorizeLoginId,
                    transactionKey = site.AuthorizeTransactionKey
                };

                CustomerPaymentProfileType customerPPT = new CustomerPaymentProfileType();
                customerPPT.customerType          = CustomerTypeEnum.individual;
                customerPPT.customerTypeSpecified = true;
                customerPPT.billTo = new CustomerAddressType()
                {
                    firstName = customer.FirstName,
                    lastName  = customer.LastName,
                    address   = customer.Address,
                    city      = customer.City,
                    country   = "USA",
                    state     = customer.StateId,
                    zip       = customer.ZipCode
                };

                CreditCardType ccT = new CreditCardType();
                ccT.cardNumber     = cardNumber;
                ccT.expirationDate = expirationDate;
                ccT.cardCode       = string.Empty;

                PaymentType payment = new PaymentType();
                payment.Item = ccT;

                customerPPT.payment = payment;

                var resp = client.CreateCustomerPaymentProfile(merchant, customer.AuthorizeProfileId, customerPPT, ValidationModeEnum.testMode);

                if (resp.resultCode == MessageTypeEnum.Ok)
                {
                    paymentProfile = resp.customerPaymentProfileId;
                    return(true);
                }
                else
                {
                    message = resp.messages.Select(x => x.code + ": " + x.text).Aggregate((a, b) => a + "\n" + b);
                }

                return(false);
            }
        }
Beispiel #3
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];
        }
Beispiel #4
0
        public static bool CreateCustomerProfileTransactionAuthCapture(SiteDT site, InvoiceDT invoice, CustomerDT customer, CreditCardDT creditCard, out long transactionId, out string message, out string code)
        {
            MerchantAuthenticationType merchantAT = new MerchantAuthenticationType();

            merchantAT.name           = site.AuthorizeLoginId;
            merchantAT.transactionKey = site.AuthorizeTransactionKey;

            ProfileTransactionType      profileTT   = new ProfileTransactionType();
            ProfileTransAuthCaptureType profileTACT = new ProfileTransAuthCaptureType();

            OrderExType orderET = new OrderExType();

            orderET.invoiceNumber = invoice.Id.ToString();

            profileTACT.amount                   = invoice.Amount;
            profileTACT.customerProfileId        = customer.AuthorizeProfileId;
            profileTACT.customerPaymentProfileId = creditCard.AuthorizePaymentProfileId;
            profileTACT.order = orderET;

            profileTT.Item = profileTACT;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServiceSoapClient client = new ServiceSoapClient();
            CreateCustomerProfileTransactionResponseType resp = client.CreateCustomerProfileTransaction(merchantAT, profileTT, String.Empty);

            code = string.Empty;

            if (resp.directResponse != null)
            {
                PaymentGatewayResponse paymentGatewayResponse = new PaymentGatewayResponse(resp.directResponse);
                transactionId = paymentGatewayResponse.TransactionId;
                message       = paymentGatewayResponse.ResponseReasonText;

                code = resp.messages != null && resp.messages.Count() > 0 ? resp.messages.Select(x => x.code + " - " + x.text).Aggregate((a, b) => a + "; " + b) : string.Empty;
            }
            else
            {
                transactionId = 0;
                if (resp.messages.Length > 0)
                {
                    message = resp.messages[0].text;
                }
                else
                {
                    message = "";
                }
            }

            return(resp.resultCode == MessageTypeEnum.Ok);
        }
Beispiel #5
0
        public ActionResult PreviewEmail(int ID)
        {
            var model = new PreviewEmailVM();
            //int ID = 14;
            SiteDT siteDT = SitesManager.GetSite(ID);
            string name   = "Alexander Broderick";
            string email  = "*****@*****.**";
            var    chars  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            var    random = new Random();
            var    result = new string(Enumerable.Repeat(chars, 8).Select(s => s[random.Next(s.Length)]).ToArray());

            model.HtmlEmail = string.Format(Email.WelcomeBodyEmail(), name,
                                            email, result, siteDT.Name, siteDT.Name, "PartsGeek",
                                            siteDT.Price, siteDT.PricePerQuarter, siteDT.Phone, siteDT.Email, siteDT.OfferDomain);
            return(View(model));
        }
Beispiel #6
0
        public SiteDT GetDT()
        {
            SiteDT res = new SiteDT();

            res.Id                            = Id;
            res.Name                          = Name;
            res.AltNames                      = AltNames;
            res.Subtitle                      = Subtitle;
            res.SignupDomain                  = SignupDomain;
            res.OfferDomain                   = OfferDomain;
            res.PricePerQuarter               = PricePerQuarter;
            res.GroupId                       = GroupId;
            res.AuthorizeLoginId              = AuthorizeLoginId;
            res.AuthorizeTransactionKey       = AuthorizeTransactionKey;
            res.Active                        = Active;
            res.Phone                         = Phone;
            res.OfficeHours                   = OfficeHours;
            res.CSSOuterColor                 = CSSOuterColor;
            res.CSSBlueColor                  = CSSBlueColor;
            res.CSSEmphasizeColor             = CSSEmphasizeColor;
            res.ParticipatingPropertiesLogos  = ParticipatingPropertiesLogos;
            res.BusinessSector                = BusinessSector;
            res.LastUpdate                    = LastUpdate;
            res.Benefits                      = Benefits;
            res.WeHaveAmassed                 = WeHaveAmassed;
            res.Email                         = Email;
            res.MailAddress                   = MailAddress;
            res.ShortName                     = ShortName;
            res.Price                         = Price;
            res.MasterCardEmailFormPercentage = (int)MasterCardEmailFormPercentage;
            res.VisaEmailFormPercentage       = (int)VisaEmailFormPercentage;
            res.DiscoverEmailFormPercentage   = (int)DiscoverEmailFormPercentage;
            res.MasterCardEmailFormCount      = MasterCardEmailFormCount;
            res.VisaEmailFormCount            = VisaEmailFormCount;
            res.DiscoverEmailFormCount        = DiscoverEmailFormCount;
            res.MasterCardEmailFormTotal      = MasterCardEmailFormTotal;
            res.VisaEmailFormTotal            = VisaEmailFormTotal;
            res.DiscoverEmailFormTotal        = DiscoverEmailFormTotal;
            res.SmtpAddress                   = SmtpAddress;
            res.SendWelcomeEmail              = (bool)SendWelcomeEmail;
            res.PasswordEmail                 = PasswordEmail;
            res.WelcomeEmailDelay             = WelcomeEmailDelay;
            res.SignUpFormat                  = SignUpFormat;
            res.WelcomeEmailBCC               = WelcomeEmailBCC;
            res.ShortAddress                  = ShortAddress;
            return(res);
        }
Beispiel #7
0
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                SiteDT site = SitesManager.GetSiteFromHostname(filterContext.HttpContext.Request.Url.Host);

                filterContext.Controller.ViewBag.Site = site;

                if (filterContext.HttpContext.Request.QueryString.AllKeys.Contains("s"))
                {
                    filterContext.Controller.ViewBag.Referrer = ReferrersManagers.GetReferrer(filterContext.HttpContext.Request.QueryString["s"]).Name;
                }
                else
                {
                    filterContext.Controller.ViewBag.Referrer = "PartsGeek.com";
                }

                base.OnActionExecuting(filterContext);
            }
Beispiel #8
0
        public ActionResult Welcome()
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            if (CastleClub.BusinessLogic.Data.GlobalParameters.EmailWelcome)
            {
                SiteDT     site     = ViewBag.Site;
                CustomerDT customer = ViewBag.Customer;

                CastleClub.BusinessLogic.Utils.Email.SendEmail(site.Email, CastleClub.BusinessLogic.Data.GlobalParameters.EmailPassword,
                                                               CastleClub.BusinessLogic.Data.GlobalParameters.Smtp, string.Format(Properties.Resources.EmailWelcomeSubjet, site.Name),
                                                               string.Format(Properties.Resources.EmailWelcomeBody, customer.FirstName + " " + customer.LastName, customer.Email, customer.ClearPassword,
                                                                             site.Name, site.ShortName, "PartsGeek", site.Price, site.PricePerQuarter, site.Phone, site.Email, site.OfferDomain), new List <string>()
                {
                    customer.Email
                }, true);
            }
            return(View("Welcome"));
        }
Beispiel #9
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));
            }
        }
Beispiel #10
0
        private static void SendEmail(int SiteID, CustomerDT Customer, string ClearPassword)
        {
            SiteDT siteDT = SitesManager.GetSite(SiteID);
            string body   = string.Format(Email.WelcomeBodyEmail(), Customer.FirstName,
                                          Customer.Email, ClearPassword, 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>()
            {
                Customer.Email
            }, new List <string>()
            {
                siteDT.WelcomeEmailBCC
            }, true);
            /**/
        }
Beispiel #11
0
        public static bool UpdateCustomerPaymentProfile(SiteDT site, CustomerDT customer, CreditCardDT creditCard)
        {
            using (ServiceSoapClient client = new ServiceSoapClient())
            {
                var merchant = new MerchantAuthenticationType()
                {
                    name           = site.AuthorizeLoginId,
                    transactionKey = site.AuthorizeTransactionKey
                };
                var paymentProfileResponse = client.GetCustomerPaymentProfile(merchant, customer.AuthorizeProfileId, creditCard.AuthorizePaymentProfileId);

                if (paymentProfileResponse.resultCode == MessageTypeEnum.Ok)
                {
                    CreditCardType creditCardType = new CreditCardType()
                    {
                        cardCode       = string.Empty,
                        cardNumber     = creditCard.CardNumber,
                        expirationDate = creditCard.ExpDate
                    };

                    var customerUpdate = new CustomerPaymentProfileExType()
                    {
                        billTo = paymentProfileResponse.paymentProfile.billTo,
                        customerPaymentProfileId = paymentProfileResponse.paymentProfile.customerPaymentProfileId,
                        payment = new PaymentType()
                        {
                            Item = creditCardType
                        }
                    };


                    var updateResponse = client.UpdateCustomerPaymentProfile(merchant, customer.AuthorizeProfileId, null, ValidationModeEnum.none);
                    if (updateResponse.resultCode == MessageTypeEnum.Ok)
                    {
                        return(true);
                    }
                }

                return(false);
            }
        }
Beispiel #12
0
        public static bool CreateCustomerProfileTransactionRefund(SiteDT site, InvoiceDT invoice, TransactionDT transaction, CustomerDT customer, CreditCardDT creditCard, out long transactionId, out string message)
        {
            //This datetime is when system change.
            int deployYear  = CastleClub.BusinessLogic.Data.GlobalParameters.DeployYear;
            int deployMonth = CastleClub.BusinessLogic.Data.GlobalParameters.DeployMonth;
            int deployDay   = CastleClub.BusinessLogic.Data.GlobalParameters.DeployDay;

            if (invoice.BilledDate >= new DateTime(deployYear, deployMonth, deployDay))
            {
                MerchantAuthenticationType merchantAT = new MerchantAuthenticationType();
                merchantAT.name           = site.AuthorizeLoginId;
                merchantAT.transactionKey = site.AuthorizeTransactionKey;

                ProfileTransactionType profileTT  = new ProfileTransactionType();
                ProfileTransRefundType profileTRT = new ProfileTransRefundType();

                OrderExType orderET = new OrderExType();
                orderET.invoiceNumber = invoice.Id.ToString();

                profileTRT.amount                            = invoice.Amount;
                profileTRT.transId                           = transaction.AuthorizeTransactionId.ToString();
                profileTRT.customerProfileId                 = customer.AuthorizeProfileId;
                profileTRT.customerProfileIdSpecified        = true;
                profileTRT.customerPaymentProfileId          = creditCard.AuthorizePaymentProfileId;
                profileTRT.customerPaymentProfileIdSpecified = true;
                profileTRT.order = orderET;


                profileTT.Item = profileTRT;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                ServiceSoapClient client = new ServiceSoapClient();
                CreateCustomerProfileTransactionResponseType resp = client.CreateCustomerProfileTransaction(merchantAT, profileTT, String.Empty);

                if (resp.directResponse != null)
                {
                    PaymentGatewayResponse paymentGatewayResponse = new PaymentGatewayResponse(resp.directResponse);
                    transactionId = paymentGatewayResponse.TransactionId;
                    message       = paymentGatewayResponse.ResponseReasonText;
                }
                else
                {
                    transactionId = 0;
                    if (resp.messages.Length > 0)
                    {
                        message = resp.messages[0].text;
                    }
                    else
                    {
                        message = "";
                    }
                }

                return(resp.resultCode == MessageTypeEnum.Ok);
            }
            else
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                using (ServiceSoapClient client = new ServiceSoapClient())
                {
                    MerchantAuthenticationType merchant = new MerchantAuthenticationType()
                    {
                        name           = site.AuthorizeLoginId,
                        transactionKey = site.AuthorizeTransactionKey
                    };

                    ProfileTransactionType profileTT  = new ProfileTransactionType();
                    ProfileTransRefundType profileTRT = new ProfileTransRefundType();

                    profileTRT.amount  = invoice.Amount;
                    profileTRT.transId = transaction.AuthorizeTransactionId.ToString();
                    profileTRT.creditCardNumberMasked = "XXXX" + creditCard.LastFourDigit;

                    profileTT.Item = profileTRT;

                    var resp = client.CreateCustomerProfileTransaction(merchant, profileTT, string.Empty);
                    if (resp.resultCode == MessageTypeEnum.Ok)
                    {
                        PaymentGatewayResponse paymentGatewayResponse = new PaymentGatewayResponse(resp.directResponse);
                        transactionId = paymentGatewayResponse.TransactionId;
                        message       = paymentGatewayResponse.ResponseReasonText;
                    }
                    else
                    {
                        transactionId = 0;
                        message       = string.Empty;
                        message       = resp.messages != null && resp.messages.Count() > 0 ? resp.messages.Select(a => a.text).Aggregate((a, b) => a + " - " + b) : string.Empty;
                    }

                    return(resp.resultCode == MessageTypeEnum.Ok);
                }
            }
        }
Beispiel #13
0
        public static bool CreateCustomerProfile(SiteDT site, CustomerDT customer, CreditCardDT cc, out long customerProfileId, out long customerPaymentProfileId)
        {
            // if (1 == 0) {
            MerchantAuthenticationType merchantAT = new MerchantAuthenticationType();

            merchantAT.name           = site.AuthorizeLoginId;
            merchantAT.transactionKey = site.AuthorizeTransactionKey;

            CustomerProfileType customerPT = new CustomerProfileType();

            customerPT.merchantCustomerId = customer.Id.ToString();
            customerPT.email           = customer.Email;
            customerPT.paymentProfiles = new CustomerPaymentProfileType[1];

            CustomerPaymentProfileType customerPPT = new CustomerPaymentProfileType();

            customerPPT.customerType          = CustomerTypeEnum.individual;
            customerPPT.customerTypeSpecified = true;
            customerPPT.billTo = new CustomerAddressType()
            {
                firstName = customer.FirstName,
                lastName  = customer.LastName,
                address   = customer.Address,
                city      = customer.City,
                country   = "USA",
                state     = customer.StateId,
                zip       = customer.ZipCode
            };

            CreditCardType ccT = new CreditCardType();

            ccT.cardNumber     = cc.CardNumber;
            ccT.expirationDate = cc.ExpDate;
            ccT.cardCode       = cc.CVV;

            PaymentType payment = new PaymentType();

            payment.Item = ccT;

            customerPPT.payment                  = payment;
            customerPT.paymentProfiles[0]        = customerPPT;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServiceSoapClient client = new ServiceSoapClient();
            CreateCustomerProfileResponseType resp = client.CreateCustomerProfile(merchantAT, customerPT, ValidationModeEnum.testMode);

            customerProfileId        = resp.customerProfileId;
            customerPaymentProfileId = resp.customerPaymentProfileIdList.Length == 1 ? resp.customerPaymentProfileIdList[0] : 0;
            if (resp.resultCode != MessageTypeEnum.Ok)
            {
                string errorValidate = resp.validationDirectResponseList != null && resp.validationDirectResponseList.Count() > 0 ? resp.validationDirectResponseList.ToList().Aggregate((a, b) => a + " || " + b) : string.Empty;
                string error         = resp.messages != null && resp.messages.Count() > 0 ? resp.messages.ToList().Select(a => a.text).Aggregate((a, b) => a + " || " + b) : string.Empty;
                LoggingUtilities.Logger.LogEntry("Resp Error code:" + resp.resultCode.ToString() + ". Errors: " + error + "Error V: " + errorValidate);
            }

            return(resp.resultCode == MessageTypeEnum.Ok);


            /* }
             *
             * else
             * {
             *  customerProfileId = 1;
             *   customerPaymentProfileId = 1;
             *   return true;
             * }*/
        }
Beispiel #14
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);
                        }
                    }
                }
            }
        }