コード例 #1
0
        public static bool Modificar(Facturacion facturacion)
        {
            bool     paso     = false;
            Contexto contexto = new Contexto();

            try
            {
                //todo: buscar las entidades que no estan para removerlas
                var visitaant = FacturacionBLL.Buscar(facturacion.FacturaID);

                foreach (var item in visitaant.Detalle)//recorrer el detalle aterior
                {
                    //restar todas las visitas
                    contexto.Articulos.Find(item.ArticuloID).Vigencia += item.Cantidad;



                    //determinar si el item no esta en el detalle actual
                    if (!facturacion.Detalle.ToList().Exists(v => v.ID == item.ID))
                    {
                        //   contexto.Articulos.Find(item.ArticulosID).Inventario -= item.Cantidad;
                        item.Articulos             = null; //quitar la ciudad para que EF no intente hacerle nada
                        contexto.Entry(item).State = EntityState.Deleted;
                    }
                }
                var inversion = contexto.inversion.Find(facturacion.InversionID);

                if (facturacion.Total == facturacion.Abono)
                {
                    inversion.Monto += facturacion.Total;
                    contexto.Entry(inversion).State = EntityState.Modified;
                }
                else
                {
                    contexto.Cliente.Find(facturacion.ClienteID).Total += facturacion.Total;
                    inversion.Monto -= facturacion.Total;


                    Cliente EntradaAnterior = BLL.ClienteBLL.Buscar(facturacion.ClienteID);
                    //identificar la diferencia ya sea restada o sumada
                    decimal diferencia;

                    diferencia = facturacion.Total - EntradaAnterior.Total;

                    //aplicar diferencia al inventario
                    Cliente cliente = BLL.ClienteBLL.Buscar(facturacion.ClienteID);
                    cliente.Total += diferencia;
                    ClienteBLL.Modificar(cliente);



                    Facturacion EntradaAnteri = BLL.FacturacionBLL.Buscar(facturacion.FacturaID);


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

                    diferenc = facturacion.Total - EntradaAnteri.Total;

                    //aplicar diferencia al inventario
                    Inversion fact = BLL.InversionBLL.Buscar(facturacion.InversionID);
                    fact.Monto += diferenc;
                    InversionBLL.Modificar(fact);
                }
                //recorrer el detalle

                foreach (var item in facturacion.Detalle)
                {
                    //Sumar todas las visitas
                    contexto.Articulos.Find(item.ArticuloID).Vigencia -= item.Cantidad;

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



                Facturacion EntradaAnterio = BLL.FacturacionBLL.Buscar(facturacion.FacturaID);


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

                diferenci = facturacion.Total - EntradaAnterio.Total;

                //aplicar diferencia al inventario
                Inversion factu = BLL.InversionBLL.Buscar(facturacion.InversionID);
                factu.Monto += diferenci;
                InversionBLL.Modificar(factu);

                //Idicar que se esta modificando el encabezado
                contexto.Entry(facturacion).State = EntityState.Modified;

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