public ActionResult ChangePrimary(string phone_number)
        {
            string delete_status = FreebieStatus.MobileDeleted();

            AccountMobile am = db.AccountMobiles.Where(x => x.Mobile_Number.Equals(phone_number)).Where(x => !x.Status_Cd.Equals(delete_status)).SingleOrDefault();

            if (am == null)
            {
                return(HttpNotFound());
            }

            int     account_id = am.Account_Id;
            Account account    = db.Accounts.SingleOrDefault(x => x.Account_Id == account_id);

            IEnumerable <AccountMobile> account_numbers = db.AccountMobiles.Where(x => x.Account_Id.Equals(account_id)).Where(x => !x.Status_Cd.Equals(delete_status));

            foreach (var number in account_numbers)
            {
                if (number.Mobile_Number.Equals(phone_number))
                {
                    number.Primary_Flag = true;
                }
                else
                {
                    number.Primary_Flag = false;
                }
                number.Updated_By   = System.Configuration.ConfigurationManager.AppSettings["SystemUsername"];
                number.Updated_Dttm = DateTime.Now;
            }

            db.SaveChanges();
            FreebieEvent.UpdateMobile(account, phone_number, "A04", Permission.f_update_number_page_id);
            return(RedirectToAction("ViewNumber", "AccInfo"));
        }
        public ActionResult ViewNumber()
        {
            int account_id = Convert.ToInt32(Session["Account_Id"].ToString());
            var account    = db.Accounts.SingleOrDefault(x => x.Account_Id == account_id);

            if (account == null)
            {
                return(HttpNotFound());
            }
            string status          = FreebieStatus.MobileActive();
            var    account_numbers = db.AccountMobiles.Where(x => x.Account_Id.Equals(account.Account_Id)).Where(x => x.Status_Cd.Equals(status)).OrderByDescending(x => x.Primary_Flag);

            return(View(account_numbers.ToList()));
        }
        public ActionResult RemoveNumber(string phone_number)
        {
            string        delete_status = FreebieStatus.MobileDeleted();
            AccountMobile am            = db.AccountMobiles.Where(x => x.Mobile_Number.Equals(phone_number)).Where(x => !x.Status_Cd.Equals(delete_status)).SingleOrDefault();

            if (am == null)
            {
                return(HttpNotFound());
            }
            else
            {
                // db.AccountMobiles.Remove(am);
                am.Status_Cd    = FreebieStatus.MobileDeleted();
                am.Updated_By   = System.Configuration.ConfigurationManager.AppSettings["SystemUsername"];
                am.Updated_Dttm = DateTime.Now;
                db.SaveChanges();
                FreebieEvent.UpdateMobile(am.Account, phone_number, "A05", Permission.f_update_number_page_id);
            }
            return(RedirectToAction("ViewNumber", "AccInfo"));
        }
        public ActionResult Index()
        {
            if (Session["Account_Id"] == null)
            {
                return(RedirectToAction("~/Users/Login"));
            }
            int account_id = Convert.ToInt32(Session["Account_Id"].ToString());
            var account    = db.Accounts.SingleOrDefault(x => x.Account_Id == account_id);

            if (account == null)
            {
                return(HttpNotFound());
            }
            // var primary_number = db.AccountMobiles.Where(x => x.Account_Id.Equals(account.Account_Id)).Where(x => x.Primary_Flag).SingleOrDefault();
            string delete_status = FreebieStatus.MobileDeleted();
            //var numbers = db.AccountMobiles.Where(x => x.Account_Id.Equals(account.Account_Id)).Where(x => !x.Status_Cd.Equals(delete_status)).Where(x => !x.Primary_Flag).OrderBy(x => x.Created_Dttm);

            string primary_number   = "";
            string secondary_number = "";

            var account_numbers = db.AccountMobiles.Where(x => x.Account_Id.Equals(account.Account_Id)).Where(x => !x.Status_Cd.Equals(delete_status)).OrderByDescending(x => x.Primary_Flag);
            IEnumerable <AccountMobile> list_account_numbers = account_numbers.ToList();

            foreach (var number in list_account_numbers)
            {
                if (number.Primary_Flag)
                {
                    primary_number = number.Mobile_Number;
                }
                else
                {
                    secondary_number += number.Mobile_Number;
                    if (number != list_account_numbers.Last() && (list_account_numbers.Count() - 1) > 0)
                    {
                        secondary_number += ", ";
                    }
                }
            }

            //IEnumerable<AccountQuota> aqs = db.AccountQuotas.Where(x => x.Account_Id.Equals(account.Account_Id));

            //if (aqs.Count() > 0) {
            //    Quota q = aqs.Last().Quota;
            //    ViewBag.Quota = q;
            //    ViewBag.Remaining = q.Quota_Freq_Val;
            //}
            ViewBag.PNumber = primary_number;
            ViewBag.SNumber = secondary_number;
            var today = DateTime.Now;
            AccountQuotaUsedCur qu = db.AccountQuotaUsedCurs.Where(x => x.Date.Equals(today.Date)).Where(x => x.Account_Id == account.Account_Id).SingleOrDefault();

            if (qu != null)
            {
                int remaining = (Convert.ToInt16(qu.Quota_Freq_Val) - Convert.ToInt16(qu.Quota_Freq_Used_Val));
                if (remaining < 0)
                {
                    remaining = 0;
                }
                ViewBag.Remaining = remaining;
                ViewBag.Freq      = qu.Quota_Freq_Val;
                ViewBag.Dur       = qu.Quota_Dur_Val;
            }



            return(View(account));
        }
        public ActionResult AddNumber(string phoneNumber)
        {
            string password = Request.Form["Password"];

            phoneNumber = GetCookie("Acct", "phone_number");
            bool flag = true;

            if (string.IsNullOrEmpty(phoneNumber))
            {
                ViewBag.ValidNumber = false;
                ViewBag.PhoneNumber = "";
                flag = false;
            }

            ViewBag.PhoneNumber = phoneNumber;

            string otp = Request.Form["Password"];

            if (flag && (string.IsNullOrEmpty(otp) || otp.Length < 4))
            {
                ViewBag.ValidNumber  = true;
                ViewBag.Error        = true;
                ViewBag.ErrorMessage = System.Configuration.ConfigurationManager.AppSettings["Validate010"];
                flag = false;
            }

            if (flag)
            {
                int result = OTPHandler.ValidateOTP(phoneNumber, otp);
                switch (result)
                {
                case 0:
                    int account_id = Convert.ToInt32(Session["Account_Id"].ToString());
                    var account    = db.Accounts.SingleOrDefault(x => x.Account_Id == account_id);
                    if (account == null)
                    {
                        return(HttpNotFound());
                    }
                    AccountMobile am           = db.AccountMobiles.Where(x => x.Account_Id.Equals(account.Account_Id)).Where(x => x.Mobile_Number.Equals(phoneNumber)).SingleOrDefault();
                    bool          first_create = false;

                    if (am == null)
                    {
                        am               = new AccountMobile();
                        am.Account_Id    = account.Account_Id;
                        am.Status_Cd     = FreebieStatus.MobileActive();
                        am.Mobile_Number = phoneNumber;
                        am.Primary_Flag  = false;
                        am.Created_Dttm  = DateTime.Now;
                        am.Updated_Dttm  = DateTime.Now;
                        first_create     = true;
                    }

                    if (first_create)
                    {
                        db.AccountMobiles.Add(am);
                    }
                    else
                    {
                        am.Status_Cd       = FreebieStatus.MobileActive();
                        am.Created_Dttm    = DateTime.Now;
                        am.Updated_Dttm    = DateTime.Now;
                        db.Entry(am).State = EntityState.Modified;
                    }


                    OTP otp_request = db.OTPs.SingleOrDefault(x => x.PhoneNumber.Equals(phoneNumber));
                    if (otp_request != null)
                    {
                        db.OTPs.Remove(otp_request);
                    }
                    db.SaveChanges();
                    FreebieEvent.UpdateMobile(account, phoneNumber, "A03", Permission.f_update_number_page_id);
                    RemoveCoookie("Acct");
                    return(RedirectToAction("ViewNumber", "AccInfo"));

                case 1:
                    ViewBag.Error        = true;
                    ViewBag.ValidNumber  = true;
                    ViewBag.ErrorMessage = System.Configuration.ConfigurationManager.AppSettings["Validate007"];
                    ViewBag.ShowPwd      = true;
                    break;

                case 2:
                    ViewBag.ValidNumber = false;
                    ViewBag.PhoneNumber = "";
                    ViewBag.ResetOTP    = System.Configuration.ConfigurationManager.AppSettings["Otp03"];
                    RemoveCoookie("Acct");
                    break;

                case 3:
                    ViewBag.ValidNumber = false;
                    ViewBag.PhoneNumber = "";
                    ViewBag.ResetOTP    = System.Configuration.ConfigurationManager.AppSettings["Otp04"];
                    RemoveCoookie("Acct");
                    break;

                default:
                    break;
                }
            }
            ViewBag.ShowPwd = true;
            return(View());
        }