private void EliminarLinea_Tapped(object sender, EventArgs e)
        {
            //Elimina la linea de un parte
            try
            {
                var imagen = sender as Image;
                var linea  = imagen?.BindingContext as SAT_Lineas;
                var vm     = BindingContext as ArtServParteSAT_VM;


                vm?.EliminarLinea.Execute(linea);

                RepositorySatApp database = new RepositorySatApp();
                database.EliminarLineaParte(linea);

                var lineas = new ObservableCollection <SAT_Lineas>(database.GetAllLineasParte(Variables.DatosParte.N_Parte.ToString()));

                database.EliminarLineasParte(Variables.DatosParte.N_Parte.ToString());

                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);

                database.CerrarConexion();
            }
            catch (Exception ex)
            {
                Application.Current.MainPage.DisplayAlert("Aviso", ex.Message, "OK");
            }
        }
        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");
            }
        }