//Billing
        public ActionResult CreateStripeCustomer(string token)
        {
            var          email           = Session["Email"].ToString();
            var          subscription    = new StripeSubscription();
            var          customerDetails = new StripeCustomer();
            var          userInfo        = new UpdateUserInfo();
            string       msg             = "";
            var          cardStatus      = 0;
            DataTable    userData;
            StripeCharge charge = null;

            try
            {
                if (token != null)
                {
                    var ds = new AccountData().ValidateEmailAndGetUserinfo(email);
                    userData = ds.Tables[0];
                    var custID = Convert.ToString(userData.Rows[0]["stp_custId"]);
                    if (userData.Rows.Count > 0 && !string.IsNullOrWhiteSpace(custID))                                 //update
                    {
                        var customerUpdateOptions = new StripeCustomerUpdateOptions
                        {
                            Email       = email,
                            Description = Session["FirstName"] + " " + Session["LastName"],
                            SourceToken = token
                        };

                        //updated customer
                        customerDetails = StripeHelper.UpdateCustomer(custID, customerUpdateOptions);

                        //add a test charge for $1
                        var makeTestCharge = new StripeChargeCreateOptions
                        {
                            CustomerId  = customerDetails.Id,
                            Amount      = 100,
                            Currency    = "usd",
                            Description = "Card verification charge",
                            SourceTokenOrExistingSourceId = customerDetails.DefaultSourceId
                        };
                        charge = StripeHelper.MakePayment(makeTestCharge);
                        if (charge != null)
                        {
                            var refund = StripeHelper.RefundCharge(charge.Id);
                            cardStatus      = 1;
                            userInfo.CustId = customerDetails.Id;
                            userInfo.CardId = customerDetails.DefaultSourceId;
                            userInfo.UserId = Convert.ToInt32(Session["UserID"]);
                            AccountData.UpdateStripeCardData(userInfo);
                            if ((SessionData.PlanID == 1 && SessionData.TrialEndOn < DateTime.Now) || SessionData.PlanStatus == 0) //When trail was expired || Unsubscribed and adding a card since payments are not succesfull
                            {
                                msg = StripeServices.SubscribePlan(SessionData.StripeCustId, userInfo.CardId);
                            }
                            if (String.IsNullOrWhiteSpace(msg))
                            {
                                SessionData.PlanStatus   = 1; //Default subscription
                                SessionData.StripeCustId = customerDetails.Id;
                                SessionData.StripeCardId = customerDetails.DefaultSourceId;
                            }
                        }
                        else
                        {
                            StripeHelper.DeleteCard(customerDetails.DefaultSourceId, custID);
                            cardStatus = 0;
                        }
                    }
                    customerDetails = StripeHelper.GetStripeCustomer(customerDetails.Id);
                }

                var respo = new { Status = cardStatus, Message = msg, CustomerDetails = customerDetails };
                return(Json(respo, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                LogFile.WriteLog("CreateCustomer - " + ex.Message.ToString());
                return(Json(null, JsonRequestBehavior.AllowGet));
            }
        }
        //[ValidateAntiForgeryToken]
        public ActionResult Login(LoginViewModel model, String returnUrl)
        {
            String    msg    = "";
            Int32     UserID = 0;
            DataSet   ds;
            DataTable dt, dtbl;
            DataRow   dr = null, dr1 = null;

            if (ModelState.IsValid)
            {
                String email = model.Email.Trim();
                ds = userregistrationData.ValidateEmailAndGetUserinfo(email);

                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    dt     = ds.Tables[0];
                    dr     = dt.Rows[0];
                    UserID = Convert.ToInt32(dr["MppUserID"]);
                    msg    = userregistrationData.CheckUserLogin(UserID, model.Password);

                    if (msg == "")
                    {
                        dtbl = ds.Tables[1];
                        dr1  = dtbl.Rows[0];
                        String CustmId, CardId;

                        SessionData.UserID = UserID;

                        String FirstName = Convert.ToString(dr["FirstName"]);
                        SessionData.LastName = Convert.ToString(dr["LastName"]);
                        String   PlanDate = Convert.ToString(dr1["PlanDate"]);
                        DateTime?Today, NextPlanDate = DateTime.MaxValue;
                        Today = DateTime.Now;

                        DateTime StartDate = Convert.ToDateTime(dr["StartDate"]);

                        if (!String.IsNullOrWhiteSpace(PlanDate))
                        {
                            NextPlanDate = Convert.ToDateTime(PlanDate);
                        }

                        SessionData.StartDate         = StartDate.ToString("yyyy/MM/dd hh:mm:ss tt");
                        SessionData.PlanStatus        = Convert.ToInt32(dr["PlanStatus"]);
                        SessionData.PlanID            = Convert.ToInt32(dr["PlanID"]);
                        SessionData.FormulaAccess     = Convert.ToInt16(dr["IsSetFormula"]);
                        SessionData.TrialEndOn        = Convert.ToDateTime(dr["TrailEndDate"]);
                        SessionData.Email             = email;
                        SessionData.IsAgreementAccept = Convert.ToInt16(dr["IsAgreementConfirm"]);
                        SessionData.ProfileAccess     = Convert.ToInt16(dr["ProfileAccess"]);
                        SessionData.AlertCount        = Convert.ToInt32(dr1["total_alerts"]);
                        CustmId = Convert.ToString(dr["stp_custId"]);
                        CardId  = Convert.ToString(dr["stp_cardId"]);

                        if (!String.IsNullOrWhiteSpace(CustmId))
                        {
                            FormsAuthentication.SetAuthCookie(FirstName, false);
                            var custm = StripeHelper.GetStripeCustomer(CustmId);
                            if (!String.IsNullOrWhiteSpace(custm.DefaultSourceId) && String.IsNullOrWhiteSpace(CardId))
                            {
                                StripeHelper.DeleteCard(custm.DefaultSourceId, CustmId);
                            }
                            SessionData.StripeCardId = CardId;
                            SessionData.StripeCustId = CustmId;

                            if (((SessionData.PlanID == 1 && SessionData.TrialEndOn < Today && !String.IsNullOrWhiteSpace(CardId)) || NextPlanDate < Today) && SessionData.PlanStatus == 1) // When plan was expired
                            {
                                if (String.IsNullOrWhiteSpace(CardId))
                                {
                                    return(RedirectToAction("Plan", "Settings"));
                                }
                                else
                                {
                                    msg = StripeServices.SubscribePlan(CustmId, CardId);
                                }
                                if (!String.IsNullOrWhiteSpace(msg))
                                {
                                    TempData["IsValid"] = msg;
                                    return(RedirectToAction("Login", "UserAccount"));
                                }
                            }

                            if (SessionData.PlanID != 1)
                            {
                                if (SessionData.PlanStatus == 0) // handles unsubscribed status after trial period
                                {
                                    return(RedirectToAction("Plan", "Settings"));
                                }
                                else if (String.IsNullOrWhiteSpace(CardId) && SessionData.PlanStatus == 1) // When CardId was not found and Plan was not trail
                                {
                                    return(RedirectToAction("Cards", "Settings"));
                                }
                            }
                        }
                        else
                        {
                            return(View("Error"));
                        }

                        if (Url.IsLocalUrl(returnUrl))
                        {
                            return(Redirect(returnUrl));
                        }
                        else
                        {
                            return(RedirectToAction("Dashboard", "Main"));
                        }
                    }
                }
                else
                {
                    msg = "Invalid login attempt!";
                }

                TempData["IsValid"] = msg;
                return(RedirectToAction("Login", "UserAccount"));
            }
            return(View(model));
        }