public IBankClient GetClient(string cardNumber)
        {
            var detector = new CreditCardDetector(cardNumber);

            switch (detector.Brand)
            {
            case CardIssuer.AmericanExpress:
            case CardIssuer.ChinaUnionPay:
            case CardIssuer.Dankort:
            case CardIssuer.DinersClub:
            case CardIssuer.Discover:
            case CardIssuer.Hipercard:
            case CardIssuer.JCB:
            case CardIssuer.Laser:
            case CardIssuer.Maestro:
            case CardIssuer.MasterCard:
            case CardIssuer.RuPay:
            case CardIssuer.Switch:
            case CardIssuer.Visa:
            case CardIssuer.Unknown:
                return(_client);

            default:
                return(_client);
            }
        }
        protected void ValidateCardNumber()
        {
            RuleFor(order => order)
            .Custom((order, context) =>
            {
                if (order.CardNumber == string.Empty)
                {
                    return;
                }

                var detector = new CreditCardDetector(order.CardNumber);
                if (!detector.IsValid())
                {
                    var failure = new ValidationFailure(nameof(order.CardNumber), "Número do cartão inválido")
                    {
                        ErrorCode = "003"
                    };
                    context.AddFailure(failure);
                }
            });

            RuleFor(order => order.CardNumber)
            .MaximumLength(22)
            .NotEmpty()
            .When(cmd => cmd.PaymentMethodId == default)
            .WithMessage("O número do cartão é obrigatório e deve conter ate 22 dígitos")
            .WithErrorCode("004");
        }
示例#3
0
        public IHttpActionResult Get(string number)
        {
            GeneralResponse oResponse = new GeneralResponse();

            try
            {
                CreditCardDetector detector = new CreditCardDetector(number);
                var response = new
                {
                    IsValid = detector.IsValid(),
                    Brand   = number.CreditCardBrandNameIgnoreLength(),
                };

                oResponse.Success = 1;
                oResponse.Message = "Exito - validacion de la tarjeta realizada";
                oResponse.Data    = response;

                return(Content(HttpStatusCode.OK, oResponse));
            } catch (Exception ex)
            {
                oResponse.Success = 0;
                oResponse.Message = "Error - no se pudo validar la tarjeta de credito";
                oResponse.Data    = ex.Message;

                return(Content(HttpStatusCode.BadRequest, oResponse));
            }
        }
示例#4
0
        public async Task <ActionResult <FulfillResponse> > Fulfill(FulfillRequest request)
        {
            var detector = new CreditCardDetector(request.CardNumber);

            if (!detector.IsValid())
            {
                _logger.LogError($"Invalid Card Number | Correlation Id: {request.CorrelationId}");
                return(BadRequest("Invalid card number"));
            }

            var merchantId = HttpContext.User.Identity.Name;
            var id         = await _paymentService.InitialiseAsync(request, merchantId);

            var bankRequest = new BankFulfillRequest
            {
                ExpiryMonthYear = request.ExpiryMonthYear,
                CardNumber      = request.CardNumber,
                Amount          = request.Amount,
                CurrencyCode    = request.CurrencyCode,
                CVV             = request.CVV,
                MerchantId      = merchantId
            };

            var result = await _clientFactory.GetClient(request.CardNumber).FulfillAsync(bankRequest);

            var status = GetStatus(result.Status);
            await _paymentService.FulfillAsync(id, status, result.TransactionId);

            return(Ok(new FulfillResponse
            {
                BankTransactionId = result.TransactionId,
                Status = status
            }));
        }
        public Response <ValidationResponse> Post([FromBody] ValidationRequest request)
        {
            var result = new Response <ValidationResponse>("payment/validate", 1);

            result.Data = new ValidationResponse();

            try
            {
                var detector = new CreditCardDetector(request.CreditCardNumber);

                result.Data.Status = detector.IsValid(CardIssuer.MasterCard, CardIssuer.Visa);

                if (!result.Data.Status)
                {
                    result.Data.Message = "credit card is not valid. currently supporting only mastercard and visa cards";
                }
            }
            catch (Exception e)
            {
                result.Data.Status  = false;
                result.Data.Message = e.Message;
            }

            return(result);
        }
        public Response <ValidationResponse> Post([FromBody] ValidationRequest request)
        {
            var result = new Response <ValidationResponse>("payment/validate", 2);

            result.Data = new ValidationResponse();

            try
            {
                var detector = new CreditCardDetector(request.CreditCardNumber);

                result.Data.Status = detector.IsValid(CardIssuer.MasterCard, CardIssuer.Maestro, CardIssuer.Visa, CardIssuer.AmericanExpress, CardIssuer.DinersClub, CardIssuer.Discover, CardIssuer.RuPay);

                if (!result.Data.Status)
                {
                    result.Data.Message = "credit card is not valid. currently supporting only mastercard, maestro, visa, americanexpress, dinersclub, discover and rupay cards";
                }
            }
            catch (Exception e)
            {
                result.Data.Status  = false;
                result.Data.Message = e.Message;
            }

            return(result);
        }
示例#7
0
        /// <summary>
        /// Card validation using CreditCardDetector package which usage Luhn algorithm.
        /// </summary>
        /// <param name="cardNumber"></param>
        /// <returns></returns>
        private static bool IsValidCard(string cardNumber)
        {
            cardNumber = cardNumber.Replace("-", "");
            cardNumber = cardNumber.Replace(" ", "");
            CreditCardDetector detector = new CreditCardDetector(cardNumber);

            return(detector.IsValid());
        }
示例#8
0
 public static CardIssuer GetCardType(string cardNumber)
 {
     if (!string.IsNullOrEmpty(cardNumber))
     {
         CreditCardDetector detector = new CreditCardDetector(cardNumber);
         return(detector.Brand);
     }
     return(CardIssuer.Unknown);
 }
            public void TestUnknownCardIssuerGeneration()
            {
                for (int i = 0; i < 10000; i++)
                {
                    var unkCard = CreditCardFactory.RandomCardNumber(CardIssuer.Unknown);

                    CreditCardDetector detector = new CreditCardDetector(unkCard);

                    detector.Brand.ShouldBe <CardIssuer>(CardIssuer.Unknown);
                }
            }
示例#10
0
        public ActionResult <Payment> Post([FromBody] Payment payment)
        {
            var card = new CreditCardDetector(payment.CardNumber);

            if (card.IsValid())
            {
                payment.BankSuccess       = true;
                payment.BankTransactionId = Guid.NewGuid().ToString();
            }

            return(Ok(payment));
        }
            public void GivenANumber_Constructor_CreatesANewInstance(KeyValuePair <string, string[]> data)
            {
                // Arrange.
                foreach (var number in data.Value)
                {
                    // Act.
                    var detector = new CreditCardDetector(number);

                    // Assert.
                    detector.IsValid().ShouldBe(true);
                    detector.Brand.ToString().ShouldBe(data.Key);
                }
            }
            public void GivenACardIssuer_RandomCardNumber_ReturnsAValidCard(CardIssuer cardIssuer)
            {
                // Arrange.

                // Act.
                var number = CreditCardFactory.RandomCardNumber(cardIssuer);

                // Assert.
                var detector = new CreditCardDetector(number);

                detector.Brand.ShouldBe(cardIssuer);
                detector.IsValid(cardIssuer).ShouldBe(true);
                detector.IsValid().ShouldBe(true);
            }
        public IActionResult Resolve(Home home)
        {
            CreditCardDetector validator = new CreditCardDetector(home.no);
            Home homeValidate            = new Home();

            homeValidate.no      = home.no;
            homeValidate.isValid = validator.IsValid();
            homeValidate.brand   = validator.BrandName;
            DateTime currentDate    = DateTime.UtcNow;
            DateTime creditCardDate = new DateTime(int.Parse(home.year), int.Parse(home.month), currentDate.Day);
            int      comparation    = DateTime.Compare(currentDate, creditCardDate);

            homeValidate.isExpired = comparation < 0;
            return(View("Index", homeValidate));
        }
示例#14
0
        void OnEntryTextChanged(object sender, TextChangedEventArgs args)
        {
            CreditCardDetector det = null;

            if (!String.IsNullOrEmpty(args.NewTextValue))
            {
                det     = new CreditCardDetector(args.NewTextValue);
                IsValid = det.IsValid();
                ((Entry)sender).Text = det.CardNumber;
            }
            else
            {
                IsValid = false;
            }
        }
示例#15
0
        private static bool CardNumberIsValid(AuthorizationInput authorizationInput, out string cardNumber)
        {
            cardNumber = authorizationInput.Card.CardNumber;
            if (cardNumber.Any(c => !char.IsDigit(c) && c != ' '))
            {
                return(false);
            }
            CreditCardDetector detector = new CreditCardDetector(authorizationInput.Card.CardNumber);

            if (detector.IsValid())
            {
                cardNumber = detector.CardNumber;
                return(true);
            }
            return(false);
        }
示例#16
0
        public void InvalidCardNumberDataRaisesError(string cardNumber)
        {
            //Arrange
            ValidationResult   result;
            CreditCardDetector creditCardDetector;
            var request = this.FakeValidRequestPayment();

            request.Card.CardNumber = cardNumber;

            //Act
            result = this.requestPaymentAggregateValidator.Validate(request);

            //Assert
            Assert.NotEmpty(result.Errors);
            Assert.Throws <ArgumentException>(() => creditCardDetector = new CreditCardDetector(""));
        }
            public void GivenACardIssuer_RandomCardNumber_ReturnsAValidCard_Length_MaxLength(CardIssuer cardIssuer)
            {
                // Arrange.
                var maxLength = TestHelperUtilities.Lengths(cardIssuer).Last();

                // Act.
                var number = CreditCardFactory.RandomCardNumber(cardIssuer, maxLength);

                // Assert.
                var detector = new CreditCardDetector(number);

                number.Length.ShouldBe(maxLength);
                detector.Brand.ShouldBe(cardIssuer);
                detector.IsValid(cardIssuer).ShouldBe(true);
                detector.IsValid().ShouldBe(true);
            }
示例#18
0
      public static void CheckCard()
      {
          Console.WriteLine("Please Enter the Credit Card Number: ");
          string CCNum  = Console.ReadLine();
          bool   result = CCNum.All(char.IsDigit);

          while (CCNum.Length < 14 || result == false)
          {
              Console.WriteLine("Incorrect Credit Card Number provided, please provide a valid number");
              CCNum  = Console.ReadLine();
              result = CCNum.All(char.IsDigit);
          }
          CreditCardDetector detector = new CreditCardDetector(CCNum);

          Console.WriteLine("Is the Credit Card valid? " + detector.IsValid());
          Console.ReadLine();
      }
示例#19
0
            /// <summary>
            /// Returns true if ... is valid.
            /// </summary>
            /// <param name="context">The context.</param>
            /// <returns>
            ///   <c>true</c> if the specified context is valid; otherwise, <c>false</c>.
            /// </returns>
            protected override bool IsValid(PropertyValidatorContext context)
            {
                var cardNumber = context.PropertyValue.ToString();

                if (string.IsNullOrEmpty(cardNumber))
                {
                    return(false);
                }

                if (!cardNumber.All(char.IsDigit))
                {
                    return(false);
                }

                var detector = new CreditCardDetector(cardNumber);

                return(detector.IsValid());
            }
            public void GivenACardIssuer_RandomCardNumber_ReturnsAValidCard_Length_MinLength(CardIssuer cardIssuer)
            {
                // Arrange.
                var lengths = TestHelperUtilities.Lengths(cardIssuer);

                foreach (var len in lengths)
                {
                    // Act.
                    var number = CreditCardFactory.RandomCardNumber(cardIssuer, len);

                    // Assert.
                    var detector = new CreditCardDetector(number);
                    number.Length.ShouldBe(len);
                    detector.Brand.ShouldBe(cardIssuer);
                    detector.IsValid(cardIssuer).ShouldBe(true);
                    detector.IsValid().ShouldBe(true);
                }
            }
        private void ProccessPayment(OrderCreatedEvent order)
        {
            var payment  = new Payment(order.Id, order.CreditCard.CardNumber, order.CreditCard.Expiration, order.CreditCard.Name);
            var detector = new CreditCardDetector(order.CreditCard.CardNumber);

            if (detector.IsValid())
            {
                payment.Apply(detector.BrandName);
            }
            else
            {
                payment.Deny();
            }

            var mongoClient   = new MongoClient(Environment.GetEnvironmentVariable("MONGOCONNECTION") ?? _configuration.GetSection("MongoSettings").GetSection("Connection").Value);
            var payCollection = mongoClient.GetDatabase(Environment.GetEnvironmentVariable("DATABASENAME") ?? _configuration.GetSection("MongoSettings").GetSection("DatabaseName").Value).GetCollection <Payment>("Payments");


            // Businness rules, validations... etc..
            payCollection.InsertOne(payment);
        }
示例#22
0
        public ActionResult Reservation(ReservationModelView rmv)
        {
            ViewBag.IdTicket = new SelectList(eventFactory.getTicketsForEvent(rmv.IdEvent).ToList(), "Id", "Name");

            if (String.IsNullOrEmpty(rmv.FullName) || String.IsNullOrEmpty(rmv.Email) || String.IsNullOrEmpty(rmv.number) || String.IsNullOrEmpty(rmv.FullName) || String.IsNullOrEmpty(rmv.expiry) || String.IsNullOrEmpty(rmv.cvc) || String.IsNullOrEmpty(rmv.name) || rmv.Quantity == 0)
            {
                rmv.ValidationMessage = "Sva polja moraju biti unesena.";
                return(View(rmv));
            }

            CreditCardDetector detector = new CreditCardDetector(rmv.number);

            if (detector.IsValid() == false)
            {
                rmv.ValidationMessage = "Kartica nije valjana.";
                return(View(rmv));
            }

            eventFactory.AddNewReservation(rmv);

            return(RedirectToAction("Details", "Event", new { IdEvent = rmv.IdEvent }));
        }
        public CreditCardValidity GetCreditCardInfo(string ccNumber)
        {
            var card = _creditCards.Find(c => c.CardNumber.Equals(decimal.Parse(ccNumber)));

            CreditCardDetector detector = new CreditCardDetector(ccNumber);

            var cardValidity = new CreditCardValidity()
            {
                BrandName = detector.BrandName, CardNumber = decimal.Parse(detector.CardNumber), IsValid = detector.IsValid()
            };

            if (!cardValidity.IsValid)
            {
                cardValidity.Error = "Unknown card and/or not valid card! ";
            }

            if (card == null)
            {
                cardValidity.Error += "Card doesn't exist on the database!";
            }

            return(cardValidity);
        }
        public CreditCardValidity GetCreditCardInfo(string ccNumber)
        {
            CreditCardDetector detector = new CreditCardDetector(ccNumber);

            CreditCardValidity validity = new CreditCardValidity()
            {
                CardNumber = decimal.Parse(detector.CardNumber), BrandName = detector.BrandName, IsValid = detector.IsValid()
            };

            if (!validity.IsValid)
            {
                validity.Error = "Unknown card and/or not valid card! ";
            }

            var ccInfo = _creditCardRepository.GetCreditCardInfo(decimal.Parse(ccNumber));

            if (ccInfo == null)
            {
                validity.Error += "Card doesn't exist on the database!";
            }

            return(validity);
        }
        public ActionResult <PaymentDetails> Post([FromBody] Card card)
        {
            var cardnumber = new CreditCardDetector(card.cardnumber.ToString());

            var payment = new PaymentDetails
            {
                cvv         = card.cvv,
                currency    = card.currency,
                ExpiryMonth = card.ExpiryMonth,
                cardnumber  = card.cardnumber,
                PaymentID   = Guid.NewGuid()
            };

            if (cardnumber.IsValid())
            {
                payment.statuscode = "Payment Successful";
            }
            else
            {
                payment.statuscode = "Payment unsuccessful";
            }

            return(Ok(payment));
        }
        private bool NumberValid(string cardNumber)
        {
            CreditCardDetector creditCardDetector = new CreditCardDetector(cardNumber);

            return(creditCardDetector.IsValid());
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            //--------------------------------------------------------------------------------------------------
            int idusr = 0;

            if (!IsPostBack)
            {
                CargaCombos(false);
            }

            txtNum4.TextChanged += (s, ea) =>
            {
                string num = "";
                if (!String.IsNullOrEmpty(txtNum1.Text) && !String.IsNullOrEmpty(txtNum2.Text) && !String.IsNullOrEmpty(txtNum3.Text) && !String.IsNullOrEmpty(txtNum4.Text))
                {
                    num = txtNum1.Text.Trim() + txtNum2.Text.Trim() + txtNum3.Text.Trim() + txtNum4.Text.Trim();
                    if (Session["tvm"] != null)
                    {
                        tvm = Session["tvm"] as TarjetasViewModel;
                    }
                    else
                    {
                        tvm = new TarjetasViewModel();
                    }

                    ccv = new CreditCardDetector(num);
                    if (ccv.IsValid())
                    {
                        tvm.idemisor      = SetEmisor(ccv.Brand);
                        tvm.NumeroTarjeta = num;
                        emisor.Value      = tvm.idemisor.ToString();
                    }
                    else
                    {
                        tvm.idemisor      = SetEmisor(ccv.Brand);
                        tvm.NumeroTarjeta = "";
                        emisor.Value      = tvm.idemisor.ToString();
                    }
                    Session["tvm"] = tvm;

                    ws         = Session["wsac"] as wsac.IsacClient;
                    jsonPa     = ws.GetCatalogo(2, "");                   //pais
                    jsonEmi    = ws.GetCatalogo(4, "");                   //emisor
                    jsonEdo    = ws.GetCatalogo(7, "");                   //estados
                    jsonCd     = ws.GetCatalogo(8, "order by municipio"); //ciudades
                    spnJS.Text = "<script>CargaCombos(); SetEmisor('" + tvm.idemisor.ToString() + "');</script>";
                }
            };

            /*btnCancelar.Click += (s, ea) =>
             * {
             *  Session["rvm"] = null;
             *  Session["tvm"] = null;
             *  Response.Redirect("index.aspx");
             * };*/
            btnGuardar.Click += (s, ea) =>
            {
                if (Session["tvm"] != null)
                {
                    tvm = Session["tvm"] as TarjetasViewModel;
                }
                else
                {
                    tvm = new TarjetasViewModel();
                }
                tvm.Idusuario  = 0; //int.Parse(Session["idusrlogged"].ToString());
                tvm.idpais     = int.Parse(hidPais.Value);
                tvm.ExpiraMM   = mes.Value;
                tvm.ExpiraYY   = anio.Value;
                tvm.Cvc        = cvc.Value;
                tvm.TitularFN  = nombre.Value;
                tvm.TitularLN  = apellidos.Value;
                tvm.CalleyNum  = domicilio.Value;
                tvm.IdEstado   = int.Parse(hidEstado.Value);
                tvm.IdCiudad   = int.Parse(hidCiudad.Value);
                tvm.CP         = codpostal.Value;
                Session["tvm"] = tvm;

                if (tvm.EsIncompleta())
                {
                    CargaCombos(true);
                }
                else
                {
                    if (tvm.ExpiraMM.Length < 2 || tvm.ExpiraYY.Length < 2)
                    {
                        CargaCombos(true);
                    }
                    else
                    {
                        RecargasViewModel rvm = Session["rvm"] as RecargasViewModel;
                        rvm.TipoTrans   = TipoTransaccion.PrimeraVez;
                        rvm.idFormaPago = 2; //tarjeta
                        Session["rvm"]  = rvm;
                        Response.Redirect("registro.aspx");
                    }
                }
            };
        }
示例#28
0
        /// <summary>
        /// Gestiona la validacion de la tarjeta de credito,
        /// y pasa los datos a la clase mvfactura
        /// </summary>
        private async void manipularTarjeta()
        {
            CreditCardDetector detector;

            try
            {
                if (numeroTarjeta.IsMaskFull)
                {
                    detector = new CreditCardDetector(numeroTarjeta.Text);
                    if (detector.IsValid())
                    {
                        if (caducidadTarjeta.IsMaskFull)
                        {
                            if (ccvTarjeta.IsMaskFull)
                            {
                                string[] caducidadSeparada = caducidadTarjeta.Text.Split('/');
                                int      mesCaducidad      = int.Parse(caducidadSeparada[0]);
                                int      anyoCaducidad     = int.Parse(caducidadSeparada[1]);

                                int anyoActual = int.Parse(DateTime.Now.ToString("yy"));
                                int mesActual  = int.Parse(DateTime.Now.ToString("MM"));

                                if (mesCaducidad > 12)
                                {
                                    await this.ShowMessageAsync("Informacion", "El mes de caducidad es erroneo, no existe el mes: " + mesCaducidad);
                                }
                                else
                                {
                                    if (anyoCaducidad == anyoActual)
                                    {
                                        if (mesCaducidad <= mesActual)
                                        {
                                            await this.ShowMessageAsync("Informacion", "La operacion no se puede completar porque la tarjeta esta caducada, mes: " + mesCaducidad);
                                        }
                                        else
                                        {
                                            this.DialogResult = true;
                                        }
                                    }
                                    else if (anyoCaducidad < anyoActual)
                                    {
                                        await this.ShowMessageAsync("Informacion", "La operacion no se puede completar porque la tarjeta esta caducada, año: " + anyoCaducidad);
                                    }
                                    else
                                    {
                                        this.DialogResult = true;
                                    }
                                }
                            }
                            else
                            {
                                await this.ShowMessageAsync("Informacion", "CCV Tarjeta incompleto");
                            }
                        }
                        else
                        {
                            await this.ShowMessageAsync("Informacion", "Fecha caducidad incompleta");
                        }
                    }
                    else
                    {
                        await this.ShowMessageAsync("Error", "El numero de tarjeta: " + numeroTarjeta.Text + " no es valido");
                    }
                }
                else
                {
                    await this.ShowMessageAsync("Informacion", "Numero Tarjeta incorrecto, compruebe su longitud, solo se acepta visa y mastercard");
                }
            }
            catch (ArgumentException ex)
            {
                logger.Error("Error en los argumentos de la tarjeta de credito en la interfazCobro del cliente", ex);
            }
            catch (Exception ex2)
            {
                logger.Error("Error excepcion desconocida en la interfaz de cobro", ex2);
            }
        }
示例#29
0
        /**
         *
         * ******************************************************************************************
         * This Action is used to Display Order Receipt.
         * ******************************************************************************************
         */

        public async Task <IActionResult> OrderConfirmation(String creditCard)
        {
            CreditCardDetector detector = new CreditCardDetector(creditCard);

            if (detector.IsValid())
            {
                var user = await _UserManagercontext.GetUserAsync(User);

                var  userid         = user.Id;
                bool save           = true;
                var  query          = _context.Cart.Where(x => x.CustomerID == userid).Select(x => x);
                var  storeInventory = _context.StoreInventory.Include(s => s.Product).Select(x => x);
                var  orderID        = 1;
                var  lastOrderID    = _context.OrdersHistory.FirstOrDefault();

                if (lastOrderID == null)
                {
                    orderID = 1;
                }
                else
                {
                    var lastOrder = _context.OrdersHistory.Select(x => x).ToList();
                    orderID = lastOrder.Count() + 1;
                }

                List <string> list    = new List <string>();
                OrderHistory  odrHist = new OrderHistory {
                    OrderID = orderID, CustomerID = userid
                };
                _context.Add(odrHist);

                foreach (var item in query)
                {
                    foreach (var product in storeInventory)
                    {
                        if (product.StoreID == item.StoreID)
                        {
                            if (product.ProductID == item.ProductID)
                            {
                                if (item.Quantity <= product.StockLevel)
                                {
                                    Order ord = new Order {
                                        OrderID = orderID, ProductID = item.ProductID, StoreID = item.StoreID, Quantity = item.Quantity
                                    };
                                    _context.Add(ord);
                                    product.StockLevel = (product.StockLevel - item.Quantity);
                                    Cart custCart = new Cart();
                                    custCart = _context.Cart.Where(s => s.CustomerID == userid).Where(s => s.ProductID == product.ProductID).Where(s => s.StoreID == product.StoreID).SingleOrDefault();
                                    _context.Cart.Remove(custCart);
                                }
                                else
                                {
                                    save = false;
                                    string str = product.Product.Name.ToString();
                                    list.Add(str);
                                }
                            }
                        }
                    }
                }
                if (save)
                {
                    await _context.SaveChangesAsync();

                    var confirm = _context.Orders.Include(s => s.Product).Include(s => s.Store).Where(s => s.OrderID == orderID).Select(x => x).OrderBy(s => s.StoreID);
                    ViewData["Creditcheck"] = orderID;
                    return(View(confirm.ToList()));
                }
                else
                {
                    return(View("InsufficientQuantity", list));
                }
            }

            else
            {
                ViewData["check"]   = creditCard;
                ViewData["Message"] = "Invalid Credit Card Number";
                return(View("CreditCard", creditCard));
            }
        }
示例#30
0
        public NuevaTarjeta(TipoAnadidor tipo, TarjetasViewModel _t, RecargasViewModel _r)
        {
            try
            {
                InitializeComponent();
                Title = "Nueva tarjeta";
                ToolbarItems.Add(new ToolbarItem("Ayuda", "ayuda2.png", () =>
                {
                    var page = new InfoAyuda("nuevat.html");
                    Navigation.PushPopupAsync(page);
                }));
#if __IOS__
                grdScanner.IsVisible = false;
#endif

                tvm = _t;
                rvm = _r;
                this.BindingContext = tvm;
                Refresh();
                tvm.Idusuario = App.usr.idusuario;
                if (App.usr.idpais != 0)
                {
                    tvm.idpais = App.usr.idpais;
                }
                txtNum.Completed       += (s, e) => txtMes.Focus();
                txtMes.Completed       += (s, e) => txtAno.Focus();
                txtAno.Completed       += (s, e) => txtCvc.Focus();
                txtCvc.Completed       += (s, e) => txtTitularFN.Focus();
                txtTitularFN.Completed += (s, e) => txtTitularLN.Focus();
                txtTitularLN.Completed += (s, e) => txtCalleNum.Focus();
                txtCalleNum.Completed  += (s, e) => txtCP.Focus();

                tvm.TarjetaIncompleta += (s, e) =>
                {
                    if (e.estaincompleta)
                    {
                        if (tvm.idpais == 0 || tvm.IdEstado == 0 || tvm.IdCiudad == 0)
                        {
                            lblvalGeo.IsVisible = true;
                        }
                        else
                        {
                            lblvalGeo.IsVisible = false;
                        }
                        btnGuardar.IsEnabled = false;
                    }
                    else
                    {
                        lblvalGeo.IsVisible  = false;
                        btnGuardar.IsEnabled = true;
                    }
                };

                txtNum.TextChanged += (sender, e) =>
                {
                    if (!String.IsNullOrEmpty(txtNum.Text))
                    {
                        if (cardval.IsValid)
                        {
                            CreditCardDetector det = new CreditCardDetector(txtNum.Text);
                            tvm.idemisor         = SetEmisor(det.Brand);
                            tvm.NumeroTarjeta    = txtNum.Text;
                            lblvalCard.IsVisible = false;                             //.Text = "";
                        }
                        else
                        {
                            CreditCardDetector det = new CreditCardDetector(txtNum.Text);
                            tvm.idemisor         = SetEmisor(det.Brand);
                            tvm.NumeroTarjeta    = "";
                            lblvalCard.IsVisible = true;                             //.Text = "El numero de tarjeta es obligatorio, y tal cual aparece en la tarjeta";
                        }
                    }
                };
                txtMes.TextChanged       += Valfecha;
                txtAno.TextChanged       += Valfecha;
                txtCvc.TextChanged       += Valfecha;
                txtTitularFN.TextChanged += (s, e) =>
                {
                    if (valTitulFN.IsValid)
                    {
                        lblvalTitular.IsVisible = false;                         //.Text = "";
                        tvm.TitularFN           = CleanString.UseRegex(txtTitularFN.Text);
                    }
                    else
                    {
                        lblvalTitular.IsVisible = true;                         //.Text = "El nombre del titular es obligatorio y tal cual aparece en la tarjeta";
                        tvm.TitularFN           = "";
                    }
                };
                txtTitularLN.TextChanged += (s, e) =>
                {
                    if (valTitulLN.IsValid)
                    {
                        lblvalTitular.IsVisible = false;                         //.Text = "";
                        tvm.TitularLN           = CleanString.UseRegex(txtTitularLN.Text);
                    }
                    else
                    {
                        lblvalTitular.IsVisible = true;                         //.Text = "El nombre del titular es obligatorio y tal cual aparece en la tarjeta";
                        tvm.TitularLN           = "";
                    }
                };
                txtCalleNum.TextChanged += (s, e) =>
                {
                    if (valCalle.IsValid)
                    {
                        lblvalCalle.IsVisible = false;                         //.Text = "";
                        tvm.CalleyNum         = CleanString.UseRegex(txtCalleNum.Text);
                    }
                    else
                    {
                        lblvalCalle.IsVisible = true;                         //.Text = "El nombre del titular es obligatorio y tal cual aparece en la tarjeta";
                        tvm.CalleyNum         = "";
                    }
                };
                txtCP.TextChanged += (s, e) =>
                {
                    if (cpval.IsValid)
                    {
                        lblvalCP.IsVisible = false;                         //.Text = "";
                        tvm.CP             = check.SafeSqlLiteral(txtCP.Text);
                    }
                    else
                    {
                        lblvalCP.IsVisible = true;                         //.Text = "El nombre del titular es obligatorio y tal cual aparece en la tarjeta";
                        tvm.CP             = "";
                    }
                };

                string title = ""; ListaOpciones lo;
                //grdPais.Tapped += async (object sender, EventArgs e) =>
                TapGestureRecognizer tapgrdPais = new TapGestureRecognizer();
                tapgrdPais.Tapped += async(s, e) =>
                {
                    grdPais.BackgroundColor = Color.FromHex("#e5e5e5");                     //Color.FromHex((App.Current.Resources["ButtonRojo"] as Style).Setters.Where(x => x.Property == BackgroundColorProperty).FirstOrDefault().Value.ToString()); //.Opacity = .5;
                    await Task.Delay(100);

                    grdPais.BackgroundColor = Color.Transparent;                     //grdEstado.Opacity = 1;
                    ls.Clear();
                    title = "Seleccione un país";
                    ls    = tvm.lsPais().Select(x => new Opcion {
                        idopc = x.idpais, opc = x.pais, imgopc = x.img
                    }).ToObservableCollection();
                    lo       = new ListaOpciones(ls, title, 2);
                    lo.IdOpc = 1;
                    await App.Nav.PushAsync(lo, Constantes.animated);
                };
                grdPais.GestureRecognizers.Add(tapgrdPais);

                TapGestureRecognizer tapgrdTipo = new TapGestureRecognizer();
                tapgrdTipo.Tapped += async(s, e) =>
                                                                        //grdTipo.Tapped += async (object sender, EventArgs e) =>
                {
                    grdTipo.BackgroundColor = Color.FromHex("#e5e5e5"); //Color.FromHex((App.Current.Resources["ButtonRojo"] as Style).Setters.Where(x => x.Property == BackgroundColorProperty).FirstOrDefault().Value.ToString()); //.Opacity = .5;
                    await Task.Delay(100);

                    grdTipo.BackgroundColor = Color.Transparent;                     //grdEstado.Opacity = 1;
                    ls.Clear();
                    title = "Seleccione emisor";
                    ls    = tvm.LsEmisores().Select(x => new Opcion {
                        idopc = x.idemisor, opc = x.emisor, imgopc = x.img
                    }).ToObservableCollection();
                    lo       = new ListaOpciones(ls, title, 2);
                    lo.IdOpc = 2;
                    await App.Nav.PushAsync(lo, Constantes.animated);
                };
                grdTipo.GestureRecognizers.Add(tapgrdTipo);

                TapGestureRecognizer tapgrdScanner = new TapGestureRecognizer();
                tapgrdScanner.Tapped += async(s, e) =>
                                                                           //vclScanner.Tapped += (s, e) =>
                {
                    grdScanner.BackgroundColor = Color.FromHex("#e5e5e5"); //Color.FromHex((App.Current.Resources["ButtonRojo"] as Style).Setters.Where(x => x.Property == BackgroundColorProperty).FirstOrDefault().Value.ToString()); //.Opacity = .5;
                    await Task.Delay(100);

                    grdScanner.BackgroundColor = Color.Transparent;                     //grdEstado.Opacity = 1;
#if __ANDROID__
                    var plataforma = DependencyService.Get <ICardReader>();
                    if (plataforma != null)
                    {
                        plataforma.CardFound = delegate(string FormattedCardNumber, int ExpiryMonth, int ExpiryYear, string CardholderName, Card.IO.CardType CardType)
                        {
                            txtNum.Text = FormattedCardNumber;
                            //txtTitular.Text = CardholderName;
                            txtMes.Text = (ExpiryMonth > 0 ? ExpiryMonth.ToString() : "");
                            if (ExpiryYear > 0)
                            {
                                if (ExpiryYear.ToString().Length > 2)
                                {
                                    txtAno.Text = ExpiryYear.ToString().Substring(2, 2);
                                }
                                else
                                {
                                    txtAno.Text = ExpiryYear.ToString();
                                }
                            }
                            else
                            {
                                txtAno.Text = "";
                            }
                        };
                        plataforma.ReadCard();
                    }
#endif
#if __IOS__
                    //var plataforma = DependencyService.Get<ICardReader>();
                    //if (plataforma != null)
                    //{
                    //	plataforma.CardFound = delegate (string FormattedCardNumber, int ExpiryMonth, int ExpiryYear, string CardholderName, Card.IO.CreditCardType CardType)
                    //	{
                    //		txtNum.Text = FormattedCardNumber;
                    //		//txtTitular.Text = CardholderName;
                    //		txtMes.Text = (ExpiryMonth > 0 ? ExpiryMonth.ToString() : "");
                    //		if (ExpiryYear > 0)
                    //		{
                    //			if (ExpiryYear.ToString().Length > 2)
                    //				txtAno.Text = ExpiryYear.ToString().Substring(2, 2);
                    //			else
                    //				txtAno.Text = ExpiryYear.ToString();
                    //		}
                    //		else
                    //			txtAno.Text = "";
                    //	};
                    //	plataforma.ReadCard();
                    //}
#endif
                };
                grdScanner.GestureRecognizers.Add(tapgrdScanner);

                TapGestureRecognizer tapgrdEstado = new TapGestureRecognizer();
                tapgrdEstado.Tapped += async(s, e) =>
                                                                          //grdEstado.Tapped += async (object sender, EventArgs e) =>
                {
                    grdEstado.BackgroundColor = Color.FromHex("#e5e5e5"); //Color.FromHex((App.Current.Resources["ButtonRojo"] as Style).Setters.Where(x => x.Property == BackgroundColorProperty).FirstOrDefault().Value.ToString()); //.Opacity = .5;
                    await Task.Delay(100);

                    grdEstado.BackgroundColor = Color.Transparent;                     //grdEstado.Opacity = 1;
                    ls.Clear();
                    title = "Seleccione estado";
                    ls    = tvm.lsEstados(tvm.idpais).Select(x => new Opcion {
                        idopc = x.idestado, opc = x.estado,
                    }).ToObservableCollection();
                    lo       = new ListaOpciones(ls, title, 2);
                    lo.IdOpc = 3;
                    await App.Nav.PushAsync(lo, Constantes.animated);
                };
                grdEstado.GestureRecognizers.Add(tapgrdEstado);

                TapGestureRecognizer tapgrdCiudad = new TapGestureRecognizer();
                tapgrdCiudad.Tapped += async(s, e) =>
                                       //btnCiudad.Clicked += async (s,e) =>
                                       //vclCiudad.Tapped += async (s, e) =>
                {
                    grdCiudad.BackgroundColor = Color.FromHex("#e5e5e5");
                    await Task.Delay(100);

                    grdCiudad.BackgroundColor = Color.Transparent;                     //grdEstado.Opacity = 1;
                    ls.Clear();
                    title = "Seleccione ciudad";
                    ls    = tvm.lsMunicipios(tvm.IdEstado).OrderBy(x => x.municipio).Select(x => new Opcion {
                        idopc = x.idmunicipio, opc = x.municipio,
                    }).ToObservableCollection();
                    lo       = new ListaOpciones(ls, title, 2);
                    lo.IdOpc = 4;
                    await App.Nav.PushAsync(lo, Constantes.animated);
                };
                grdCiudad.GestureRecognizers.Add(tapgrdCiudad);

                btnGuardar.Clicked += async(sender, e) =>
                {
                    if (tvm.EsIncompleta())
                    {
                        await DisplayAlert("Error", "Faltan capturar o seleccionar algunos campos", "OK");
                    }
                    else
                    {
                        if (txtAno.Text.Trim().Length < 2 || txtMes.Text.Trim().Length < 2)
                        {
                            await DisplayAlert("Error", "Revise mes y año de expiración", "OK");
                        }
                        else
                        {
                            int mm = int.Parse(txtMes.Text.Trim());
                            int yy = int.Parse(txtAno.Text.Trim());
                            if (mm < 1 || mm > 12 || yy < DateTime.Now.Year - 2000)
                            {
                                await DisplayAlert("Error", "Revise mes y año de expiración", "OK");
                            }
                            else
                            {
                                if (App.usr == null || (App.usr != null && (App.usr.email == null || App.usr.idusuario == 0)))
                                {
                                    var login = new Login(App.Current);
                                    await App.Nav.PushAsync(login, Constantes.animated);
                                }
                                else
                                {
                                    btnGuardar.IsEnabled = false;
                                    //tvm.TarjetaAlta += async (s, ea) =>
                                    //{
                                    //	UserDialogs.Instance.HideLoading();
                                    //	if (ea.Error != null || ea.Cancelled)
                                    //		await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar", "OK");
                                    //	else
                                    //		await App.Nav.PopAsync(Constantes.animated);
                                    //};
                                    //UserDialogs.Instance.ShowLoading("Guardando...");
                                    //tvm.Alta();
                                    rvm.idFormaPago = 2;                                     //tarjeta
                                    rvm.TipoTrans   = TipoTransaccion.PrimeraVez;
                                    rvm.IdTarjeta   = 0;
                                    Procesar pro = App.Nav.NavigationStack.OfType <Procesar>().FirstOrDefault();
                                    if (pro == null)
                                    {
                                        await App.Nav.PushAsync(new Procesar(rvm, tvm, TipoTransaccion.PrimeraVez), Constantes.animated);
                                    }
                                    else
                                    {
                                        pro.Refresh(rvm, tvm, TipoTransaccion.PrimeraVez);
                                        await App.Nav.PopAsync(Constantes.animated);                                         //boto nueva tarjeta (this)

                                        await App.Nav.PopAsync(Constantes.animated);                                         //boto medios pago
                                    }
                                }
                            }
                        }
                    }
                };
                tvm.ChecaIncompleta();
            }
            catch (Exception e)
            {
            }
        }