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

            try
            {
                CotizacionArticulos cotizacionArticulos = contexto.Cotizacion.Find(id);


                if (cotizacionArticulos != null)
                {
                    cotizacionArticulos.Detalle.Count();
                    contexto.Cotizacion.Remove(cotizacionArticulos);
                }



                if (contexto.SaveChanges() > 0)
                {
                    paso = true;
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(paso);
        }
        private CotizacionArticulos LlenaClase()
        {
            CotizacionArticulos cotizacionArticulos = new CotizacionArticulos();

            cotizacionArticulos.CotizacionArticulosId = Convert.ToInt32(cotizacionArticulosIdnumericUpDown.Value);
            cotizacionArticulos.Fecha         = fechaDateTimePicker.Value;
            cotizacionArticulos.Observaciones = observacionesTextBox.Text;


            //Agregar cada linea del Grid al detalle
            foreach (DataGridViewRow item in detalledataGridView.Rows)
            {
                cotizacionArticulos.AgregarDetalle
                    (ToInt(item.Cells["id"].Value),
                    cotizacionArticulos.CotizacionArticulosId,
                    ToInt(item.Cells["PersonaId"].Value),
                    ToInt(item.Cells["ArticuloId"].Value),
                    Convert.ToString(item.Cells["Descripcion"].Value),
                    ToInt(item.Cells["Cantidad"].Value),
                    ToDecimal(item.Cells["Precio"].Value),
                    ToDecimal(item.Cells["Importe"].Value)
                    // Convert.ToString(item.Cells["articulos"].Value)



                    );
            }
            return(cotizacionArticulos);
        }
        private void Buscarbutton_Click(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(cotizacionArticulosIdnumericUpDown.Value);
            CotizacionArticulos cotizacionArticulos = BLL.CotizacionArticulosBLL.Buscar(id);

            if (cotizacionArticulos != null)
            {
                LlenarCampos(cotizacionArticulos);
            }
            else
            {
                MessageBox.Show("No se encontro!", "Fallo",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public static bool Editar(CotizacionArticulos cotizacionArticulos)
        {
            bool     paso     = false;
            Contexto contexto = new Contexto();

            try
            {
                var cotizaciones = CotizacionArticulosBLL.Buscar(cotizacionArticulos.CotizacionArticulosId);



                if (cotizaciones != null)
                {
                    foreach (var item in cotizaciones.Detalle)//recorrer el detalle aterior
                    {
                        //restar todas las visitas
                        contexto.articulos.Find(item.ArticuloId).Cantidad -= item.Cantidad;

                        //determinar si el item no esta en el detalle actual
                        if (!cotizacionArticulos.Detalle.ToList().Exists(v => v.Id == item.Id))
                        {
                            contexto.articulos.Find(item.ArticuloId).Cantidad -= item.Cantidad;
                            item.articulos             = null; //quitar la ciudad para que EF no intente hacerle nada
                            contexto.Entry(item).State = EntityState.Deleted;
                        }
                    }

                    foreach (var item in cotizacionArticulos.Detalle)
                    {
                        //Muy importante indicar que pasara con la entidad del detalle
                        var estado = item.Id > 0 ? EntityState.Modified : EntityState.Added;
                        contexto.Entry(item).State = estado;
                    }

                    contexto.Entry(cotizacionArticulos).State = EntityState.Modified;
                }
                //recorrer el detalle


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

            try
            {
                if (contexto.Cotizacion.Add(CotizacionArticulos) != null)
                {
                    contexto.SaveChanges();
                    paso = true;
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(paso);
        }
        private void Guardarbutton_Click(object sender, EventArgs e)
        {
            CotizacionArticulos cotizacionArticulos = LlenaClase();
            bool Paso = false;

            if (Validar())
            {
                MessageBox.Show("Favor revisar todos los campos", "Validación",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }



            //Determinar si es Guardar o Modificar


            if (cotizacionArticulosIdnumericUpDown.Value == 0)
            {
                Paso = BLL.CotizacionArticulosBLL.Guardar(cotizacionArticulos);
                HayErrores.Clear();
            }
            else
            {
                Paso = BLL.CotizacionArticulosBLL.Editar(cotizacionArticulos);
                HayErrores.Clear();
            }

            //Esto es para en caso de que se elimine algun elemento del datagrid y se modifique que elimine el detalle



            //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);
            }
        }
        private void Agregarbutton_Click(object sender, EventArgs e)
        {
            List <CotizacionArticulosDetalle> detalle = new List <CotizacionArticulosDetalle>();
            CotizacionArticulos cotizacionArticulos   = new CotizacionArticulos();

            if (detalledataGridView.DataSource != null)
            {
                cotizacionArticulos.Detalle = (List <CotizacionArticulosDetalle>)detalledataGridView.DataSource;
            }

            //Agregar un nuevo detalle con los datos introducidos.

            if (string.IsNullOrEmpty(importeTextBox.Text))
            {
                MessageBox.Show("Importe esta vacio , Llene cantidad", "Validacion", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                cotizacionArticulos.Detalle.Add(
                    new CotizacionArticulosDetalle(
                        id: 0,
                        personaId: (int)personaComboBox.SelectedValue,
                        cotizacionArticulosId: (int)Convert.ToInt32(cotizacionArticulosIdnumericUpDown.Value),
                        articuloId: (int)articuloComboBox.SelectedValue,
                        descripcion: (string)BLL.ArticulosBLL.RetornarDescripcion(articuloComboBox.Text),
                        cantidad: (int)Convert.ToInt32(cantidadnumericUpDown.Value),
                        precio: (decimal)Convert.ToDecimal(precioTextBox.Text),
                        importe: (decimal)Convert.ToDecimal(importeTextBox.Text)
                        //Articulo: new Articulos(articuloComboBox.Text)
                        ));


                //Cargar el detalle al Grid
                detalledataGridView.DataSource = null;
                detalledataGridView.DataSource = cotizacionArticulos.Detalle;


                importe += BLL.CotizacionArticulosBLL.CalcularImporte(Convert.ToDecimal(precioTextBox.Text), Convert.ToInt32(cantidadnumericUpDown.Value));



                TotaltextBox.Text = importe.ToString();
            }
        }
        private void LlenarCampos(CotizacionArticulos cotizacionArticulos)
        {
            importe = 0;
            cotizacionArticulosIdnumericUpDown.Value = cotizacionArticulos.CotizacionArticulosId;
            fechaDateTimePicker.Value = cotizacionArticulos.Fecha;
            observacionesTextBox.Text = cotizacionArticulos.Observaciones;

            foreach (var item in cotizacionArticulos.Detalle)
            {
                importe += item.Importe;
            }
            TotaltextBox.Text = importe.ToString();
            //Cargar el detalle al Grid
            detalledataGridView.DataSource = cotizacionArticulos.Detalle;

            //Ocultar columnas
            detalledataGridView.Columns["Id"].Visible                    = false;
            detalledataGridView.Columns["PersonaId"].Visible             = false;
            detalledataGridView.Columns["CotizacionArticulosId"].Visible = false;
            detalledataGridView.Columns["articulos"].Visible             = false;
        }
        public static CotizacionArticulos Buscar(int id)
        {
            CotizacionArticulos cotizacionArticulos = new CotizacionArticulos();
            Contexto            contexto            = new Contexto();

            try
            {
                cotizacionArticulos = contexto.Cotizacion.Find(id);
                if (cotizacionArticulos != null)
                {
                    cotizacionArticulos.Detalle.Count();

                    foreach (var item in cotizacionArticulos.Detalle)
                    {
                        string s = item.articulos.Nombre;
                    }
                }
                contexto.Dispose();
            }
            catch (Exception) { throw; }
            return(cotizacionArticulos);
        }