private RegistrodeMantenimiento LlenaClase()
        {
            RegistrodeMantenimiento registrodeMantenimiento = new RegistrodeMantenimiento();

            registrodeMantenimiento.MantenimientoId = Convert.ToInt32(mantenimientoIdNumericUpDown.Value);
            registrodeMantenimiento.VehiculoId      = Convert.ToInt32(vehiculoComboBox.SelectedValue);
            registrodeMantenimiento.Fecha           = fechaDateTimePicker.Value;
            registrodeMantenimiento.Subtotal        = Convert.ToDecimal(subtotaltextBox.Text);
            registrodeMantenimiento.itbis           = Convert.ToDecimal(ItbistextBox.Text);
            registrodeMantenimiento.Total           = Convert.ToDecimal(TotaltextBox.Text);



            //Agregar cada linea del Grid al detalle
            foreach (DataGridViewRow item in DetalledataGridView.Rows)
            {
                registrodeMantenimiento.AgregarDetalle
                    (ToInt(item.Cells["id"].Value),
                    registrodeMantenimiento.MantenimientoId,
                    ToInt(item.Cells["tallerId"].Value),
                    ToInt(item.Cells["articulosId"].Value),
                    Convert.ToString(item.Cells["articulo"].Value),
                    ToInt(item.Cells["cantidad"].Value),
                    ToDecimal(item.Cells["precio"].Value),
                    ToDecimal(item.Cells["importe"].Value)



                    );
            }
            return(registrodeMantenimiento);
        }
        public static bool Eliminar(int id)
        {
            bool     paso     = false;
            Contexto contexto = new Contexto();

            try
            {
                RegistrodeMantenimiento registrodeMantenimiento = contexto.registrodeMantenimientos.Find(id);


                if (registrodeMantenimiento != null)
                {
                    foreach (var item in registrodeMantenimiento.Detalle)
                    {
                        contexto.registrodeArticulos.Find(item.ArticulosId).Inventario += item.Cantidad;
                    }

                    contexto.vehiculos.Find(registrodeMantenimiento.VehiculoId).Mantenimiento -= registrodeMantenimiento.Total;

                    registrodeMantenimiento.Detalle.Count();
                    contexto.registrodeMantenimientos.Remove(registrodeMantenimiento);
                }



                if (contexto.SaveChanges() > 0)
                {
                    paso = true;
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(paso);
        }
        public static bool Guardar(RegistrodeMantenimiento registrodeMantenimiento)
        {
            bool     paso     = false;
            Contexto contexto = new Contexto();


            Vehiculos vehiculos = new Vehiculos();

            try
            {
                if (contexto.registrodeMantenimientos.Add(registrodeMantenimiento) != null)
                {
                    foreach (var item in registrodeMantenimiento.Detalle)
                    {
                        contexto.registrodeArticulos.Find(item.ArticulosId).Inventario -= item.Cantidad;
                    }


                    contexto.vehiculos.Find(registrodeMantenimiento.VehiculoId).Mantenimiento += registrodeMantenimiento.Total;

                    contexto.SaveChanges();
                    paso = true;
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(paso);
        }
        private void Buscarbutton_Click(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(mantenimientoIdNumericUpDown.Value);
            RegistrodeMantenimiento registrodemantenimiento = BLL.RegistrodeMantenimientoBLL.Buscar(id);

            if (registrodemantenimiento != null)
            {
                LlenarCampos(registrodemantenimiento);
            }
            else
            {
                MessageBox.Show("No se encontro!", "Fallo",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void LlenarCampos(RegistrodeMantenimiento registrodeMantenimiento)
        {
            Limpiar();
            mantenimientoIdNumericUpDown.Value = registrodeMantenimiento.MantenimientoId;
            fechaDateTimePicker.Value          = registrodeMantenimiento.Fecha;
            subtotaltextBox.Text = registrodeMantenimiento.Subtotal.ToString();
            ItbistextBox.Text    = registrodeMantenimiento.itbis.ToString();
            TotaltextBox.Text    = registrodeMantenimiento.Total.ToString();


            //Cargar el detalle al Grid
            DetalledataGridView.DataSource = registrodeMantenimiento.Detalle;

            NoColumnas();
        }
        private void Guardarbutton_Click(object sender, EventArgs e)
        {
            if (Validar(2))
            {
                MessageBox.Show("Debe Agregar Algun Producto al Grid", "Validación",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                RegistrodeMantenimiento registrodeMantenimiento = LlenaClase();
                bool Paso = false;

                //Determinar si es Guardar o Modificar


                if (mantenimientoIdNumericUpDown.Value == 0)
                {
                    Paso = BLL.RegistrodeMantenimientoBLL.Guardar(registrodeMantenimiento);
                    HayErrores.Clear();
                }
                else
                {
                    var V = BLL.RegistrodeMantenimientoBLL.Buscar(Convert.ToInt32(mantenimientoIdNumericUpDown.Value));

                    if (V != null)
                    {
                        Paso = BLL.RegistrodeMantenimientoBLL.Editar(registrodeMantenimiento);
                    }
                    HayErrores.Clear();
                }



                //Informar el resultado
                if (Paso)
                {
                    Limpiar();
                    MessageBox.Show("Guardado!!", "Exito",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("No se pudo guardar!!", "Fallo",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        public static RegistrodeMantenimiento Buscar(int id)
        {
            RegistrodeMantenimiento registrodeMantenimiento = new RegistrodeMantenimiento();
            Contexto contexto = new Contexto();

            try
            {
                registrodeMantenimiento = contexto.registrodeMantenimientos.Find(id);
                if (registrodeMantenimiento != null)
                {
                    registrodeMantenimiento.Detalle.Count();

                    foreach (var item in registrodeMantenimiento.Detalle)
                    {
                        string s = item.RegistrodeArticulos.Descripcion;
                    }
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(registrodeMantenimiento);
        }
        public static bool Editar(RegistrodeMantenimiento registrodeMantenimiento)
        {
            bool     paso     = false;
            Contexto contexto = new Contexto();



            try
            {
                var Mantenimiento = BLL.RegistrodeMantenimientoBLL.Buscar(registrodeMantenimiento.MantenimientoId);


                if (Mantenimiento != null)
                {
                    foreach (var item in Mantenimiento.Detalle)
                    {
                        contexto.registrodeArticulos.Find(item.ArticulosId).Inventario += item.Cantidad;



                        if (!registrodeMantenimiento.Detalle.ToList().Exists(v => v.Id == item.Id))
                        {
                            //  contexto.registrodeArticulos.Find(item.ArticulosId).Inventario -= item.Cantidad;

                            item.RegistrodeArticulos   = null;
                            contexto.Entry(item).State = EntityState.Deleted;
                        }
                    }


                    foreach (var item in registrodeMantenimiento.Detalle)
                    {
                        contexto.registrodeArticulos.Find(item.ArticulosId).Inventario -= item.Cantidad;

                        var estado = item.Id > 0 ? EntityState.Modified : EntityState.Added;
                        contexto.Entry(item).State = estado;
                    }



                    RegistrodeMantenimiento EntradaAnterior = BLL.RegistrodeMantenimientoBLL.Buscar(registrodeMantenimiento.MantenimientoId);


                    //identificar la diferencia ya sea restada o sumada
                    decimal diferencia;

                    diferencia = registrodeMantenimiento.Total - EntradaAnterior.Total;

                    //aplicar diferencia al inventario
                    Vehiculos vehiculos = BLL.VehiculosBLL.Buscar(registrodeMantenimiento.VehiculoId);
                    vehiculos.Mantenimiento += diferencia;
                    BLL.VehiculosBLL.Editar(vehiculos);



                    contexto.Entry(registrodeMantenimiento).State = EntityState.Modified;
                }



                if (contexto.SaveChanges() > 0)
                {
                    paso = true;
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(paso);
        }