private void LoadDocumentos()
 {
     TSSalesApp.vTipoDocuments = new ObservableCollection <TipoComprobate>
     {
         new TipoComprobate()
         {
             Nombre = TSSalesInput.Boleta().Nombre,
             Nro    = TSSalesInput.Boleta().Nro
         },
         new TipoComprobate()
         {
             Nombre = TSSalesInput.Factura().Nombre,
             Nro    = TSSalesInput.Factura().Nro
         },
         new TipoComprobate()
         {
             Nombre = TSSalesInput.NotaDeDespacho().Nombre,
             Nro    = TSSalesInput.NotaDeDespacho().Nro
         },
         new TipoComprobate()
         {
             Nombre = TSSalesInput.Serafin().Nombre,
             Nro    = TSSalesInput.Serafin().Nro
         },
     };
 }
        private void _SalesCorrelativo(TSSales respuesta)
        {
            TSSalesApp.SalesCorrelativo -= _SalesCorrelativo;
            Device.BeginInvokeOnMainThread(async() =>
            {
                busyindicator.IsVisible = false;

                if (respuesta.EstadoRespuesta == SalesEstado.InformacionNoObtenida)
                {
                    await DisplayAlert("Aviso", respuesta.vSales.Mensaje, "Aceptar");
                    return;
                }
                if (respuesta.EstadoRespuesta == SalesEstado.ErrorSistema)
                {
                    await DisplayAlert("Aviso", "Hubo un problema en la comunicación con el servidor, por favor intente después.", "Aceptar");
                    return;
                }
                if (respuesta.EstadoRespuesta == SalesEstado.InformacionObtenida)
                {
                    if (TSCustomerApp.TipoComprobante.Nombre == TSSalesInput.Boleta().Nombre)
                    {
                        lblNroComprobante.Text = respuesta.vCorrelativo.boleta;
                        TSSalesApp.Correlativo = respuesta.vCorrelativo.boleta;
                    }
                    if (TSCustomerApp.TipoComprobante.Nombre == TSSalesInput.Factura().Nombre)
                    {
                        lblNroComprobante.Text = respuesta.vCorrelativo.factura;
                        TSSalesApp.Correlativo = respuesta.vCorrelativo.factura;
                    }
                }
            });
        }
        protected async override void OnAppearing()
        {
            base.OnAppearing();
            if (Cargado)
            {
                return;
            }
            Cargado = true;
            IndicadorDeCarga.IsVisible = false;
            var flag = TSSalesApp.vParemetros.flg_pideplacatb ?? false;

            if (TSCustomerApp.TipoComprobante.Nombre == TSSalesInput.Factura().Nombre || flag)
            {
                if (string.IsNullOrEmpty(TSSalesApp.vCabecera.nroplaca))
                {
                    await RegexExpresion.SolicitarPlaca(this.Navigation);

                    if (string.IsNullOrEmpty(TSSalesApp.vCabecera.nroplaca) || string.IsNullOrEmpty(TSSalesApp.vCabecera.odometro))
                    {
                        await Navigation.PopAsync();

                        return;
                    }
                }
            }

            List <TS_BEPagoInput> cPago = ObtenerPago();

            TSSalesApp.cPagoInput      = new TS_BEPagoInput[] { };
            TSSalesApp.cPagoInput      = cPago.ToArray();
            TSSalesApp.TipoVenta       = "";
            IndicadorDeCarga.IsVisible = true;
            SalesEstado resultado = SalesEstado.ErrorSistema;
            await Task.Run(delegate
            {
                TSSalesApp.SalesGrabarVenta += _SalesGrabarVenta;;
                resultado = TSSalesApp.GrabarVenta(false, false, false).Result;
            });

            if (resultado != SalesEstado.EsperandoRespuesta)
            {
                switch (resultado)
                {
                case SalesEstado.ErrorInternet:
                    await DisplayAlert("Aviso", "Su dispositivo no cuenta con internet en estos momentos.", "Aceptar");

                    break;

                case SalesEstado.ErrorSistema:
                    await DisplayAlert("Aviso", "Hubo un problema de comunicación con el servidor, por favor intente después.", "Aceptar");

                    break;
                }
            }
        }
        private async void BtnSaveEfectivo_Clicked(object sender, EventArgs e)
        {
            if (IsEvent)
            {
                List <TS_BEPagoInput> cPagos = ObtenerPago();
                if (cPagos.Count == 0)
                {
                    await DisplayAlert("Aviso", "Debe seleccionar al menos un pago", "Aceptar");

                    return;
                }
                List <TerminalSIGES.Models.Pago> pagos = new List <TerminalSIGES.Models.Pago>();

                foreach (TS_BEPagoInput item in cPagos)
                {
                    pagos.Add(new TerminalSIGES.Models.Pago()
                    {
                        Codigo     = item.cdtppago,
                        Tipo       = item.cdtppago,
                        Referencia = item.nrotarjeta,
                        Soles      = Convert.ToDecimal(item.mtopagosol),
                        Dolares    = Convert.ToDecimal(item.mtopagodol)
                    });
                }

                OnReponse(pagos);
                await Navigation.PopAsync();

                return;
            }

            CalcularTotales();
            var flag = TSSalesApp.vParemetros.flg_pideplacatb ?? false;

            if (TSCustomerApp.TipoComprobante.Nombre == TSSalesInput.Factura().Nombre || flag)
            {
                flagPlaca = true;
                string result = await RegexExpresion.SolicitarPlaca(this.Navigation);

                if (string.IsNullOrEmpty(TSSalesApp.vCabecera.nroplaca) || string.IsNullOrEmpty(TSSalesApp.vCabecera.odometro))
                {
                    await DisplayAlert("Aviso", "Ingrese placa y odómetro", "ok");

                    return;
                }
            }

            List <TS_BEPagoInput> cPago = ObtenerPago();

            TSSalesApp.cPagoInput = new TS_BEPagoInput[] { };

            if (cPago == null)
            {
                //await DisplayAlert("Aviso", "Por favor, ingresar el monto pagado", "Aceptar");
                return;
            }
            TSSalesApp.cPagoInput = cPago.ToArray();
            if (cPago.Count <= 0)
            {
                await DisplayAlert("Aviso", "Por favor, ingresar el monto pagado", "Aceptar");

                return;
            }
            if (TSSalesApp.vCabecera.mtototal > TSSalesApp.vCabecera.mtorecaudo)
            {
                await DisplayAlert("Aviso", "Por favor, falta completar el monto a pagar", "Aceptar");

                return;
            }

            TSSalesApp.TipoVenta    = "";
            busyindicator.IsVisible = true;
            ToolBarItems(false);
            SalesEstado resultado = SalesEstado.ErrorSistema;
            await Task.Run(() =>
            {
                TSSalesApp.SalesGrabarVenta += _SalesGrabarVenta;;
                resultado = TSSalesApp.GrabarVenta(Convert.ToBoolean(this.ConIgv.IsChecked ?? false), false, false).Result;
            });

            if (resultado != SalesEstado.EsperandoRespuesta)
            {
                busyindicator.IsVisible = false;
                ToolBarItems(true);
                switch (resultado)
                {
                case SalesEstado.ErrorInternet:
                    await DisplayAlert("Aviso", "Su dispositivo no cuenta con internet en estos momentos.", "Aceptar");

                    break;

                case SalesEstado.ErrorSistema:
                    await DisplayAlert("Aviso", "Hubo un problema de comunicación con el servidor, por favor intente después.", "Aceptar");

                    break;
                }
            }
        }
        private void BtnSave_Clicked(object sender, EventArgs e)
        {
            /** INICIO DE VALIDACIONES DE TARJETAS DE ACUMULACION DE PUNTOS **/
            if ((this.txtTarjetaAfiliacion.Text ?? "").Length > 0)
            {
                if (TSCustomerApp.vTarjetasBuscadas.Count == 0)
                {
                    DisplayAlert("Aviso", "Debe buscar la tarjeta seleccionada", "Aceptar");
                    return;
                }
                else
                {
                    foreach (string tarjeta in TSCustomerApp.vTarjetasBloqueadas)
                    {
                        if (tarjeta.Equals(txtTarjetaAfiliacion.Text))
                        {
                            DisplayAlert("Aviso", "La tarjeta descrita en la busqueda esta bloqueada", "Aceptar");
                            return;
                        }
                    }
                    bool isbuscado = false;
                    foreach (string tarjeta in TSCustomerApp.vTarjetasBuscadas)
                    {
                        if ((tarjeta ?? "").Trim().Equals((txtTarjetaAfiliacion.Text ?? "").Trim()))
                        {
                            isbuscado = true;
                        }
                    }
                    if (isbuscado == false)
                    {
                        DisplayAlert("Aviso", "Debe buscar la tarjeta descrita", "Aceptar");
                        return;
                    }
                }
            }
            /**FIN VALIDACIONES DE TARJETAS DE PUNTOS**/

            /** INICIO DE VALIDACIONES DE TIPO DE DOCUMENTO**/

            if ((this.txtCodigo.Text ?? "").Trim().Length == 11 || (this.txtRuc.Text ?? "").Trim().Length == 11)
            {
                TS_BEMensaje validacion = validateFactura();
                if (validacion.Ok)
                {
                    TSCustomerApp.TipoComprobante = TSSalesInput.Factura();
                }
                else
                {
                    DisplayAlert("Aviso", validacion.mensaje, "Aceptar");
                    return;
                }
            }
            else if ((this.txtCodigo.Text ?? "").Trim().Length != 11 && (this.txtRuc.Text ?? "").Trim().Length != 11)
            {
                TS_BEMensaje validacion = validateBoleta();
                if (validacion.Ok)
                {
                    TSCustomerApp.TipoComprobante = TSSalesInput.Boleta();
                }
                else
                {
                    DisplayAlert("Aviso", validacion.mensaje, "Aceptar");
                    return;
                }
            }

            /** FIN DE VALIDACIONES DE TIPO DE DOCUMENTO **/
            /** INICIO DE VALIDACIONES DE TARJETA CREDITO EN CLIENTES **/
            if (TSCustomerApp.vCodigoBloqueado.Count > 0)
            {
                foreach (string tarjeta in TSCustomerApp.vCodigoBloqueado)
                {
                    if (tarjeta.Equals((this.txtCodigo.Text ?? "").Trim()))
                    {
                        DisplayAlert("Aviso", "No puede utilizar una tarjeta credito en pagos al contado", "Aceptar");
                        return;
                    }
                }
            }
            var varVerificaCodigo = (txtCodigo.Text ?? "").Trim();

            if (varVerificaCodigo.Length > 0)
            {
                string creditoCorp  = (TSSalesApp.vParemetros.prefcredcorp ?? "").Trim();
                string creditoLocal = (TSSalesApp.vParemetros.prefcredlocal ?? "").Trim();
                string creditoFlot  = (TSSalesApp.vParemetros.prefflotlocal ?? "").Trim();
                if (varVerificaCodigo.Length >= creditoCorp.Length)
                {
                    if (varVerificaCodigo.Substring(0, creditoCorp.Length).Equals(creditoCorp))
                    {
                        DisplayAlert("Aviso", "No puede pasar una tarjeta coorporativa en ventas al contado", "Aceptar");
                        return;
                    }
                }
                if (varVerificaCodigo.Length >= creditoLocal.Length)
                {
                    if (varVerificaCodigo.Substring(0, creditoLocal.Length).Equals(creditoLocal))
                    {
                        DisplayAlert("Aviso", "No puede pasar una tarjeta de credito local en ventas al contado", "Aceptar");
                        return;
                    }
                }
                if (varVerificaCodigo.Length >= creditoFlot.Length)
                {
                    if (varVerificaCodigo.Substring(0, creditoFlot.Length).Equals(creditoFlot))
                    {
                        DisplayAlert("Aviso", "No puede pasar una tarjeta de flota en ventas al contado", "Aceptar");
                        return;
                    }
                }
            }
            /** FIN DE VALIDACIONES DE TARJETA CREDITO EN CLIENTES **/

            TSCustomerApp.ClientOuput.rscliente      = this.txtRscliente.Text;
            TSCustomerApp.ClientOuput.drcliente      = this.txtDireccion.Text;
            TSCustomerApp.ClientOuput.ruccliente     = this.txtRuc.Text;
            TSCustomerApp.ClientOuput.emcliente      = this.txtEmail.Text;
            TSCustomerApp.ClientOuput.cdcliente      = this.txtCodigo.Text;
            TSCustomerApp.ClientOuput.tarjafiliacion = this.txtTarjetaAfiliacion.Text;
            TSCustomerApp.ClientOuput.puntos         = (this.txtTarjetaAfiliacion.Text ?? "").Equals((cliente.tarjafiliacion ?? "").Trim()) ? cliente.puntos : 0;
            TSCustomerApp.ClientOuput.valoracumula   = (this.txtTarjetaAfiliacion.Text ?? "").Equals((cliente.tarjafiliacion ?? "").Trim()) ? cliente.valoracumula : 0;
            TSCustomerApp.ClientOuput.isafiliacion   = (this.txtTarjetaAfiliacion.Text ?? "").Equals((cliente.tarjafiliacion ?? "").Trim());
            TSSalesApp.vCabecera.nroplaca            = this.txtPlaca.Text;
            TSCustomerApp.FlagSearch = true;
            Navigation.PopAsync();
        }