/// <summary>
        /// Verifies the membership credit.
        /// </summary>
        /// <returns></returns>
        public static string CheckOutForSubscriptionPlan(long customerProfileId, long paymentProfileId)
        {
            try
            {
                if (BaseController.LoggedOnUser != null)
                {
                    if (BaseController.CurrentTransaction == null)
                    {
                        BaseController.CurrentTransaction = new Entities.TransactionQueueData();
                    }

                    BaseController.CurrentTransaction.Email       = BaseController.LoggedOnUser.Email;
                    BaseController.CurrentTransaction.OrderNumber = Guid.NewGuid().ToString();
                    BaseController.CurrentTransaction.ZipCode     = BaseController.LoggedOnUser.ZipCode;

                    BaseController.CurrentTransaction.CustomerProfileId = customerProfileId.ToString();
                    BaseController.CurrentTransaction.PaymentProfileID  = paymentProfileId.ToString();

                    if (BaseController.LoggedOnUser.BatteriesInPlan == 0)
                    {
                        int     subscriptionPlanId = BaseController.GetSubscriptionPlanId(BaseController.LoggedOnUser.NewBatteriesInPlan);
                        decimal price           = BaseController.GetPriceBySubscriptionPlanId(subscriptionPlanId);
                        decimal amount          = price - BaseController.LoggedOnUser.OutstandingCredit;
                        decimal newCreditAmount = 0;

                        if (amount > 0)
                        {
                            CreateTransaction(customerProfileId, paymentProfileId, price);
                            newCreditAmount = 0;
                        }
                        else
                        {
                            newCreditAmount = Math.Abs(amount);
                        }

                        MembershipRegistrationController.UpdateMembershipProfile(BaseController.LoggedOnUser.MemberId, BaseController.LoggedOnUser.CustomerProfileId, BaseController.LoggedOnUser.PaymentProfileId, BaseController.LoggedOnUser.NewBatteriesInPlan, newCreditAmount, true, false);
                    }
                    else
                    {
                        MembershipRegistrationController.UpdateMembershipProfile(BaseController.LoggedOnUser.MemberId, BaseController.LoggedOnUser.CustomerProfileId, BaseController.LoggedOnUser.PaymentProfileId, BaseController.LoggedOnUser.NewBatteriesInPlan, BaseController.LoggedOnUser.OutstandingCredit, true, true);
                    }
                }

                return(string.Empty);
            }
            catch (KioskException kioskException)
            {
                AlertController.TransactionFailureAlert(kioskException.CustomMessage);
                Logger.Log(EventLogEntryType.Error, kioskException, BaseController.StationId);
                BaseController.RaiseOnThrowExceptionEvent();
                return(kioskException.CustomMessage);
            }
            catch (Exception ex)
            {
                AlertController.TransactionFailureAlert(ex.Message);
                Logger.Log(EventLogEntryType.Error, ex, BaseController.StationId);
                BaseController.RaiseOnThrowExceptionEvent();
                return(Constants.Messages.YourCreditCardWasNotAuthorized);
            }
        }
        /// <summary>
        /// Memberships the checkout.
        /// </summary>
        /// <param name="cardInfo">The card info.</param>
        /// <returns></returns>
        public static string MembershipCheckout(string cardInfo)
        {
            try
            {
                if (BaseController.LoggedOnUser != null)
                {
                    if (BaseController.CurrentTransaction == null)
                    {
                        BaseController.CurrentTransaction = new Entities.TransactionQueueData();
                    }

                    BaseController.CurrentTransaction.Email       = BaseController.LoggedOnUser.Email;
                    BaseController.CurrentTransaction.OrderNumber = Guid.NewGuid().ToString();
                    BaseController.CurrentTransaction.ZipCode     = BaseController.LoggedOnUser.ZipCode;
                    decimal amount = 0;
                    if (BaseController.SelectedBettery != null)
                    {
                        BaseController.SelectedBettery.AaVendRemaining   = BaseController.SelectedBettery.AaVend;
                        BaseController.SelectedBettery.AaaVendRemaining  = BaseController.SelectedBettery.AaaVend;
                        BaseController.CurrentTransaction.AaVend         = BaseController.SelectedBettery.AaVend;
                        BaseController.CurrentTransaction.AaaVend        = BaseController.SelectedBettery.AaaVend;
                        BaseController.CurrentTransaction.AaReturn       = BaseController.SelectedBettery.AaReturn;
                        BaseController.CurrentTransaction.AaaReturn      = BaseController.SelectedBettery.AaaReturn;
                        BaseController.CurrentTransaction.SubTotalAmount = BaseController.SelectedBettery.SubTotalAmount;
                        if (BaseController.SelectedBettery.CalculatedReturnedAmount > 0)
                        {
                            BaseController.CurrentTransaction.ChargeAmount = -BaseController.SelectedBettery.CalculatedReturnedAmount;
                        }
                        else
                        {
                            BaseController.CurrentTransaction.ChargeAmount = BaseController.SelectedBettery.TotalAmount;
                        }
                        BaseController.CurrentTransaction.AaForgotVend  = BaseController.SelectedBettery.AaForgotDrainedVend;
                        BaseController.CurrentTransaction.AaaForgotVend = BaseController.SelectedBettery.AaaForgotDrainedVend;

                        BaseController.CurrentTransaction.PromoCode       = BaseController.SelectedBettery.PromotionCode;
                        BaseController.CurrentTransaction.PromoCodeAmount = BaseController.SelectedBettery.PromotionalAmount;
                        amount = BaseController.SelectedBettery.TotalAmount;
                        BaseController.CurrentTransaction.TaxAmount = BaseController.SelectedBettery.TotalTaxAmount;


                        BaseController.CurrentTransaction.BatteryPacksCheckedOut = BaseController.LoggedOnUser.BatteriesCheckedOut + BaseController.SelectedBettery.NewCartridges;
                    }
                    else
                    {
                        BaseController.CurrentTransaction.BatteryPacksCheckedOut = BaseController.LoggedOnUser.BatteriesCheckedOut;
                    }

                    // Use the Credit Card Helper to parse cc fields
                    CreditCard cc = new CreditCard(cardInfo, CreditCard.ExpireDateFormat.YYYY_MM);
                    BaseController.CurrentTransaction.CardInfo = cc.Number.Substring(cc.Number.Length - 4);

                    long customerProfileId        = CreateCustomerProfile(BaseController.CurrentTransaction.Email);
                    long customerPaymentProfileId = CreateCustomerPaymentProfile(customerProfileId, cc.Number, cc.ExpDate, BaseController.LoggedOnUser.MemberFirstName, BaseController.LoggedOnUser.MemberLastName, BaseController.LoggedOnUser.ZipCode);

                    BaseController.CurrentTransaction.CustomerProfileId = customerProfileId.ToString();
                    BaseController.CurrentTransaction.PaymentProfileID  = customerPaymentProfileId.ToString();

                    BaseController.LoggedOnUser.CustomerProfileId = customerProfileId.ToString();
                    BaseController.LoggedOnUser.PaymentProfileId  = customerPaymentProfileId.ToString();

                    if (amount > 0)
                    {
                        CreateTransaction(customerProfileId, customerPaymentProfileId, amount);
                    }

                    MembershipRegistrationController.UpdateMembershipProfile(BaseController.LoggedOnUser.MemberId,
                                                                             BaseController.LoggedOnUser.CustomerProfileId,
                                                                             BaseController.LoggedOnUser.PaymentProfileId);
                }

                return(string.Empty);
            }
            catch (KioskException kioskException)
            {
                AlertController.TransactionFailureAlert(kioskException.CustomMessage);
                Logger.Log(EventLogEntryType.Error, kioskException, BaseController.StationId);
                BaseController.RaiseOnThrowExceptionEvent();
                return(kioskException.CustomMessage);
            }
            catch (Exception ex)
            {
                AlertController.TransactionFailureAlert(ex.Message);
                Logger.Log(EventLogEntryType.Error, ex, BaseController.StationId);
                BaseController.RaiseOnThrowExceptionEvent();
                return(Constants.Messages.YourCreditCardWasNotAuthorized);
            }
        }