public async Task <IActionResult> GenPinCode([FromBody] PinCodeModel model)
        {
            model.PinCode = await m_auth_service.GeneratePinCode(model.Cellular, model.Email);

            if (string.IsNullOrWhiteSpace(model.PinCode))
            {
                return(Forbid());
            }


            bool wasSent = false;

            if (!string.IsNullOrWhiteSpace(model.Cellular))
            {
                wasSent |= await m_mail_service.Send(model.Cellular, model.PinCode);
            }

            if (!string.IsNullOrWhiteSpace(model.Email))
            {
                wasSent |= await m_mail_service.Send(model.Email, model.PinCode);
            }

            if (wasSent)
            {
                return(Ok(model));
            }

            return(BadRequest());
        }
        //[Authorize(Roles = "Admin")]
        public IActionResult Index()
        {
            _gen.GenCode();
            PinCodeModel m = new PinCodeModel();

            m.Code = _gen.Code;
            m.Exp  = _gen.GenTime.AddMinutes(5);
            return(View(m));
        }
        public async Task <IActionResult> LoginByPinCode([FromBody] PinCodeModel model)
        {
            IAccessToken accessToken = await m_auth_service.LoginByPinCode(model.Cellular, model.Email, model.PinCode);

            if (accessToken == null || accessToken.HasExpired)
            {
                return(Forbid());
            }

            return(Ok(new AccessTokenModel(accessToken)));
        }
        public ActionResult PayCard2(PinViewModel Pin)
        {
            var verifyCon = db.PinCodeModels.ToList();

            if (verifyCon.Count() < 1)
            {
                Pin.StartFrom = "000000";
            }

            for (int counter = 1; counter <= Pin.Quantity; counter++)
            {
                int length = Pin.Digit;

                //--------------Payment Reference Number-----------------------------
                int    maxSize = Pin.Digit;
                char[] chars   = new char[62];
                string numbers = "0123456789";
                chars = numbers.ToCharArray();
                int    size = maxSize;
                byte[] data = new byte[1];
                RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
                crypto.GetNonZeroBytes(data);
                size = maxSize;
                data = new byte[size];
                crypto.GetNonZeroBytes(data);
                StringBuilder result = new StringBuilder(size);
                foreach (byte b in data)
                {
                    result.Append(chars[b % (chars.Length - 1)]);
                }

                //ViewBag.Url = result.ToString();


                //*********************************
                int    limit = 1000000;
                string SerialNo;

                var maxValue = "";

                if (Pin.StartFrom == null)
                {
                    maxValue = db.PinCodeModels.OrderByDescending(x => x.PinCodeModelId).Where(x => x.SerialNumber.Contains(Pin.SerialCode.ToUpper())).FirstOrDefault().SerialNumber;
                }
                else
                {
                    maxValue = Pin.SerialCode.ToUpper() + "/" + Pin.StartFrom;
                }
                var defaultnumber = Pin.SerialCode.ToUpper() + "/" + "000000";
                if (maxValue == null)
                {
                    maxValue = defaultnumber;
                }
                maxValue = maxValue.Substring(5, 6);
                int    rst       = int.Parse(maxValue);
                int    NewNumber = limit + rst + 1;
                string val       = NewNumber.ToString();
                val      = val.Substring(1, 6);
                SerialNo = Pin.SerialCode.ToUpper() + "/" + val;
                //SerialNo = "SEMB/" + val;
                Pin.StartFrom = null;
                var year = DateTime.Now.Year;
                //**************************
                PinCodeModel cardNumber = db.PinCodeModels.Create();
                cardNumber.PinNumber    = result.ToString();
                cardNumber.SerialNumber = SerialNo;
                cardNumber.BatchNumber  = year.ToString() + Pin.BatchNumber.ToUpper();
                cardNumber.Usage        = 4;

                db.PinCodeModels.Add(cardNumber);
                db.SaveChanges();
                ViewBag.Success   = Pin.Quantity;
                TempData["Check"] = "Ok";
            }
            return(RedirectToAction("PayCard2", new { id = ViewBag.Success, batch = Pin.BatchNumber.ToUpper() }));
        }