private void Anadir_Clicked(object sender, EventArgs e)
        {
            try
            {
                //Añade un Articulo o Servicio
                if (!string.IsNullOrEmpty(txtReferencia.Text))
                {
                    if (!string.IsNullOrEmpty(txtNombre.Text) || !string.IsNullOrEmpty(txtCantidad.Text) || !string.IsNullOrEmpty(txtBase.Text))
                    {
                        nuevaLinea = new SAT_Lineas();
                        RepositorySatApp database = new RepositorySatApp();

                        Articulos Articulo;

                        if (bolEsArticulo)                                                 //Busqueda Articulos
                        {
                            Articulo = database.GetArticuloReferencia(txtReferencia.Text); //Busqueda por Referencia
                            nuevaLinea.Referencia  = Articulo.Referencia;
                            nuevaLinea.Descripcion = txtNombre.Text;
                            nuevaLinea.Cantidad    = decimal.Parse(txtCantidad.Text);
                            nuevaLinea.Precio      = decimal.Parse(txtBase.Text);
                            nuevaLinea.PrecioCoste = Articulo.Precio_Coste;

                            if (!string.IsNullOrEmpty(txtDto.Text))
                            {
                                nuevaLinea.DTO = decimal.Parse(txtDto.Text);
                            }


                            nuevaLinea.Iva     = decimal.Parse(txtTantoPorcierto.Text);
                            nuevaLinea.Recargo = decimal.Parse(Articulo.Recargo.ToString());
                            nuevaLinea.Importe = (nuevaLinea.Precio - (nuevaLinea.Precio * nuevaLinea.DTO / 100)) * nuevaLinea.Cantidad;

                            nuevaLinea.N_Parte = Variables.DatosParte.N_Parte;

                            nuevaLinea.Almacen = 1;

                            nuevaLinea.Orden_Linea    = database.GetAllLineasParte(Variables.DatosParte.N_Parte.ToString()).Count + 1;
                            nuevaLinea.TipoReferencia = "A";
                            nuevaLinea.VieneDeAPP     = true;
                        }
                        else//Busqueda por referencia
                        {
                            nuevaLinea.Referencia  = decimal.Parse(txtReferencia.Text);
                            nuevaLinea.Descripcion = txtNombre.Text;
                            nuevaLinea.Cantidad    = decimal.Parse(txtCantidad.Text);
                            nuevaLinea.Precio      = decimal.Parse(txtBase.Text);

                            if (!string.IsNullOrEmpty(txtDto.Text))
                            {
                                nuevaLinea.DTO = decimal.Parse(txtDto.Text);
                            }
                            nuevaLinea.Iva            = decimal.Parse(txtTantoPorcierto.Text);
                            nuevaLinea.Importe        = (nuevaLinea.Precio - (nuevaLinea.Precio * nuevaLinea.DTO / 100)) * nuevaLinea.Cantidad;
                            nuevaLinea.N_Parte        = Variables.DatosParte.N_Parte;
                            nuevaLinea.Orden_Linea    = database.GetAllLineasParte(Variables.DatosParte.N_Parte.ToString()).Count + 1;
                            nuevaLinea.TipoReferencia = "S";
                            nuevaLinea.VieneDeAPP     = true;
                        }

                        var btnAnadir = sender as Button;

                        var vm = BindingContext as ArtServParteSAT_VM;


                        vm?.EliminarLinea.Execute(nuevaLinea);                                                                                   // Elimina la linea de Observable Collection (la lista de articulos de la vista)
                        database.EliminarLineaParte(nuevaLinea);                                                                                 // Elimina la linea de la BD

                        var lineas = new ObservableCollection <SAT_Lineas>(database.GetAllLineasParte(Variables.DatosParte.N_Parte.ToString())); // Crea una nueva coleccion

                        database.EliminarLineasParte(Variables.DatosParte.N_Parte.ToString());                                                   // Elimina todas las lineas del parte

                        // Actualizala bd
                        var ordenLinea = 1;
                        foreach (var item in lineas)
                        {
                            item.Orden_Linea = ordenLinea;
                            database.Insert(item);
                            ordenLinea++;
                        }

                        vm.LineasSAT = new ObservableCollection <SAT_Lineas>(database.GetAllLineasParte(Variables.DatosParte.N_Parte.ToString()));
                        funciones.CalcularParte(Variables.DatosParte.N_Parte);

                        vm?.AnadirLinea.Execute(nuevaLinea);
                        database.Insert(nuevaLinea);


                        funciones.CalcularParte(Variables.DatosParte.N_Parte);

                        txtReferencia.Text     = "";
                        txtNombre.Text         = "";
                        txtBase.Text           = "";
                        txtCantidad.Text       = "";
                        txtDto.Text            = "";
                        txtTantoPorcierto.Text = "";

                        Busqueda.Text = "";

                        if (switchVarios.IsToggled == true)
                        {
                            switchVarios.IsToggled = false;
                        }
                        nuevaLinea = null;
                        database.CerrarConexion();
                    }
                    else
                    {
                        Application.Current.MainPage.DisplayAlert("Aviso", "Por favor, revise los datos introducidos. Hay valores incorrectos", "OK");
                    }
                }
                else
                {
                    Application.Current.MainPage.DisplayAlert("Aviso", "No hay articulo o servicio para añadir", "OK");
                    txtReferencia.Text = "";
                }
            }
            catch (Exception ex)
            {
                Application.Current.MainPage.DisplayAlert("Aviso ", ex.Message, " OK");
            }
        }
        private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
        {
            try
            {
                int Referencia;

                RepositorySatApp database = new RepositorySatApp();

                Articulos articulo = new Articulos();

                if (!string.IsNullOrEmpty(txtReferencia.Text))
                {
                    //Busqueda de articulos en caso de estar activo el botón Articulos
                    if (bolEsArticulo)
                    {
                        if (int.TryParse(txtReferencia.Text, out Referencia))
                        {
                            articulo = database.GetArticuloReferencia(txtReferencia.Text);//Busqueda por Referencia Or ReferenciaProveddor
                        }


                        if (articulo == null)
                        {
                            await Application.Current.MainPage.DisplayAlert("Aviso", "No se encontro ningun articulo con esa referencia o número de proveedor.", "OK");

                            txtReferencia.Text = "";
                        }

                        else
                        {
                            txtNombre.Text         = articulo.Articulo;
                            txtBase.Text           = articulo.PVP.ToString();
                            txtCantidad.Text       = "1";
                            txtTantoPorcierto.Text = articulo.IVA.ToString();
                        }
                    }

                    else//Busqueda de articulos en caso de estar activo el botón Servicios
                    {
                        if (int.TryParse(txtReferencia.Text, out Referencia))
                        {
                            var servicio = database.ObtenerServicio(int.Parse(txtReferencia.Text));

                            if (servicio != null)
                            {
                                txtNombre.Text         = servicio.Descripcion;
                                txtBase.Text           = servicio.Precio.ToString();
                                txtCantidad.Text       = "1";
                                txtTantoPorcierto.Text = servicio.IVA.ToString();
                            }
                            else
                            {
                                await Application.Current.MainPage.DisplayAlert("Aviso", "No existe el servicio.", "OK");
                            }
                        }
                        else
                        {
                            await Application.Current.MainPage.DisplayAlert("Aviso", "Referencia incorrecta", "OK");

                            txtReferencia.Text = "";
                        }
                    }
                }
                database.CerrarConexion();
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert("Aviso ", ex.Message, " OK");
            }
        }