예제 #1
0
        public PartialViewResult ResumenDeProducto(ParametrosMovProdViewModel parametros)
        {
            var fIni             = parametros.FechaInicio.Date;
            var fFin             = parametros.FechaFin.Date.AddHours(23).AddMinutes(59);
            var productoConcreto = _db.Set <ProductoConcreto>()
                                   .FirstOrDefault(p => p.ProductoId == parametros.ProductoId);
            var compras = _db.Set <EntradaAlmacen>().Where(e => e.DiaContable.Fecha >= fIni &&
                                                           e.DiaContable.Fecha <= fFin &&
                                                           e.ProductoId == productoConcreto.Id).ToList();

            var ventas = _db.Set <DetalleDeVenta>().Include(d => d.Venta).Include(d => d.Elaboracion).Include(d => d.Agregados).Where(e => e.Venta.DiaContable.Fecha >= fIni &&
                                                                                                                                      e.Venta.DiaContable.Fecha <= fFin &&
                                                                                                                                      (e.Elaboracion.Productos.Any(p => p.ProductoId == parametros.ProductoId) ||
                                                                                                                                       e.Agregados.Any(a => a.Agregado.ProductoId == parametros.ProductoId))).ToList();

            var ventasNormales =
                ventas.Where(
                    d =>
                    d.Venta.Importe > 0 && (d.Venta.Observaciones == null || !d.Venta.Observaciones.Contains("Venta al costo")) &&
                    d.Venta.EstadoDeVenta != EstadoDeVenta.PagadaPorFactura).ToList();

            var ventasAlCosto =
                ventas.Where(d => d.Venta.Observaciones != null && d.Venta.Observaciones.Contains("Venta al costo"));
            var ventasPorLaCasa =
                ventas.Where(d => d.Venta.Importe == 0);
            var ventasPorFactura =
                ventas.Where(d => d.Venta.EstadoDeVenta == EstadoDeVenta.PagadaPorFactura);

            var mermas =
                _db.Set <MovimientoDeProducto>().Include(e => e.Tipo).Include(e => e.Usuario).Include(e => e.CentroDeCosto).Include(e => e.Producto).Include(e => e.Producto.UnidadDeMedida).Where(e => e.DiaContable.Fecha >= fIni &&
                                                                                                                                                                                                   e.DiaContable.Fecha <= fFin && e.ProductoId == parametros.ProductoId && e.Tipo.Descripcion == TipoDeMovimientoConstantes.Merma).ToList();

            var entradasAjustes =
                _db.Set <MovimientoDeProducto>().Include(e => e.Tipo).Include(e => e.Usuario).Include(e => e.CentroDeCosto).Include(e => e.Producto).Include(e => e.Producto.UnidadDeMedida).Where(e => e.DiaContable.Fecha >= fIni &&
                                                                                                                                                                                                   e.DiaContable.Fecha <= fFin && e.ProductoId == parametros.ProductoId && e.Tipo.Descripcion == TipoDeMovimientoConstantes.EntradaPorAjuste).ToList();

            var salidasAjustes =
                _db.Set <MovimientoDeProducto>().Include(e => e.Tipo).Include(e => e.Usuario).Include(e => e.CentroDeCosto).Include(e => e.Producto).Include(e => e.Producto.UnidadDeMedida).Where(e => e.DiaContable.Fecha >= fIni &&
                                                                                                                                                                                                   e.DiaContable.Fecha <= fFin && e.ProductoId == parametros.ProductoId && e.Tipo.Descripcion == TipoDeMovimientoConstantes.SalidaPorAjuste).ToList();

            ViewBag.Entrada = compras;
            ViewBag.Ventas  = ventas.Select(d => new ResumenProductoVM
            {
                Fecha    = d.Venta.DiaContable.Fecha,
                Comanda  = d.VentaId,
                Cantidad = d.Elaboracion.Productos.Where(p => p.ProductoId == parametros.ProductoId).Sum(p => d.Cantidad * p.Cantidad * productoConcreto.UnidadDeMedida.FactorDeConversion / p.UnidadDeMedida.FactorDeConversion) +
                           d.Agregados.Where(a => a.Agregado.ProductoId == parametros.ProductoId).Sum(a => a.Cantidad * (a.Agregado.Cantidad * (productoConcreto.UnidadDeMedida.FactorDeConversion / a.Agregado.UnidadDeMedida.FactorDeConversion)))
            }).ToList();
            ViewBag.VentasNormales = ventasNormales.Select(d => new ResumenProductoVM
            {
                Fecha    = d.Venta.DiaContable.Fecha,
                Comanda  = d.VentaId,
                Cantidad = d.Elaboracion.Productos.Where(p => p.ProductoId == parametros.ProductoId).Sum(p => d.Cantidad * p.Cantidad * productoConcreto.UnidadDeMedida.FactorDeConversion / p.UnidadDeMedida.FactorDeConversion) +
                           d.Agregados.Where(a => a.Agregado.ProductoId == parametros.ProductoId).Sum(a => a.Cantidad * (a.Agregado.Cantidad * (productoConcreto.UnidadDeMedida.FactorDeConversion / a.Agregado.UnidadDeMedida.FactorDeConversion)))
            }).ToList();
            ViewBag.AlCosto = ventasAlCosto.Select(d => new ResumenProductoVM
            {
                Fecha    = d.Venta.DiaContable.Fecha,
                Comanda  = d.VentaId,
                Cantidad = d.Elaboracion.Productos.Where(p => p.ProductoId == parametros.ProductoId).Sum(p => d.Cantidad * p.Cantidad * productoConcreto.UnidadDeMedida.FactorDeConversion / p.UnidadDeMedida.FactorDeConversion) +
                           d.Agregados.Where(a => a.Agregado.ProductoId == parametros.ProductoId).Sum(a => a.Cantidad * (a.Agregado.Cantidad * (productoConcreto.UnidadDeMedida.FactorDeConversion / a.Agregado.UnidadDeMedida.FactorDeConversion)))
            }).ToList();
            ViewBag.PorLaCasa = ventasPorLaCasa.Select(d => new ResumenProductoVM
            {
                Fecha    = d.Venta.DiaContable.Fecha,
                Comanda  = d.VentaId,
                Cantidad = d.Elaboracion.Productos.Where(p => p.ProductoId == parametros.ProductoId).Sum(p => d.Cantidad * p.Cantidad * productoConcreto.UnidadDeMedida.FactorDeConversion / p.UnidadDeMedida.FactorDeConversion) +
                           d.Agregados.Where(a => a.Agregado.ProductoId == parametros.ProductoId).Sum(a => a.Cantidad * (a.Agregado.Cantidad * (productoConcreto.UnidadDeMedida.FactorDeConversion / a.Agregado.UnidadDeMedida.FactorDeConversion)))
            }).ToList();
            ViewBag.PorFactura = ventasPorFactura.Select(d => new ResumenProductoVM
            {
                Fecha    = d.Venta.DiaContable.Fecha,
                Comanda  = d.VentaId,
                Cantidad = d.Elaboracion.Productos.Where(p => p.ProductoId == parametros.ProductoId).Sum(p => d.Cantidad * p.Cantidad * productoConcreto.UnidadDeMedida.FactorDeConversion / p.UnidadDeMedida.FactorDeConversion) +
                           d.Agregados.Where(a => a.Agregado.ProductoId == parametros.ProductoId).Sum(a => a.Cantidad * (a.Agregado.Cantidad * (productoConcreto.UnidadDeMedida.FactorDeConversion / a.Agregado.UnidadDeMedida.FactorDeConversion)))
            }).ToList();
            ViewBag.Merma             = mermas;
            ViewBag.EntradasPorAjuste = entradasAjustes;
            ViewBag.SalidasPorAjuste  = salidasAjustes;
            ViewBag.ProductoId        = parametros.ProductoId;
            return(PartialView("_ResumenDeProductoPartial"));
        }
예제 #2
0
        public PartialViewResult MovimientosDeProductos(ParametrosMovProdViewModel parametros)
        {
            var fIni = parametros.FechaInicio.Date;
            var fFin = parametros.FechaFin.Date.AddHours(23).AddMinutes(59);

            if (parametros.Lugar == "Almacen")
            {
                var entradas =
                    _db.Set <EntradaAlmacen>().Where(e => e.DiaContable.Fecha >= fIni &&
                                                     e.DiaContable.Fecha <= fFin && e.ProductoId == parametros.ProductoId).ToList();
                var salidas =
                    _db.Set <DetalleSalidaAlmacen>()
                    .Where(e => e.Vale.DiaContable.Fecha >= fIni && e.Vale.DiaContable.Fecha <= fFin &&
                           e.Producto.ProductoId == parametros.ProductoId)
                    .ToList();
                var mermas =
                    _db.Set <SalidaPorMerma>()
                    .Where(e => e.DiaContable.Fecha >= fIni && e.DiaContable.Fecha <= fFin &&
                           e.ExistenciaAlmacen.ProductoId == parametros.ProductoId)
                    .ToList();

                var result = entradas.Select(ent => new DetalleMovimientoProductoViewModel()
                {
                    Fecha            = ent.Fecha,
                    Lugar            = ent.Almacen.Descripcion,
                    TipoDeMovimiento = "Entrada Almacen",
                    Cantidad         = ent.Cantidad,
                    Unidad           = ent.Producto.UnidadDeMedida.Siglas,
                    Usuario          = ent.Usuario.UserName,
                }).ToList();
                result.AddRange(salidas.Select(sal => new DetalleMovimientoProductoViewModel()
                {
                    Fecha            = sal.Vale.Fecha,
                    Lugar            = sal.Vale.CentroDeCosto.Nombre,
                    TipoDeMovimiento = "Salida",
                    Cantidad         = -sal.Cantidad,
                    Unidad           = sal.Producto.Producto.UnidadDeMedida.Siglas,
                    Usuario          = sal.Vale.Usuario.UserName,
                }));
                result.AddRange(mermas.Select(merma => new DetalleMovimientoProductoViewModel()
                {
                    Fecha            = merma.Fecha,
                    Lugar            = "Almacen",
                    TipoDeMovimiento = "Merma",
                    Cantidad         = -merma.Cantidad,
                    Unidad           = merma.ExistenciaAlmacen.Producto.UnidadDeMedida.Siglas,
                    Usuario          = merma.Usuario.UserName,
                }));
                ViewBag.SaldoAnterior = (_db.Set <EntradaAlmacen>().Any(e => e.DiaContable.Fecha < fIni && e.ProductoId == parametros.ProductoId) ?
                                         _db.Set <EntradaAlmacen>().Where(e => e.DiaContable.Fecha < fIni && e.ProductoId == parametros.ProductoId).Sum(e => e.Cantidad) : 0m) -
                                        (_db.Set <DetalleSalidaAlmacen>().Any(e => e.Vale.DiaContable.Fecha < fIni && e.Producto.ProductoId == parametros.ProductoId) ?
                                         _db.Set <DetalleSalidaAlmacen>().Where(e => e.Vale.DiaContable.Fecha < fIni && e.Producto.ProductoId == parametros.ProductoId).Sum(e => e.Cantidad) : 0m) -
                                        (_db.Set <SalidaPorMerma>().Any(e => e.DiaContable.Fecha < fIni && e.ExistenciaAlmacen.ProductoId == parametros.ProductoId) ?
                                         _db.Set <SalidaPorMerma>().Where(e => e.DiaContable.Fecha < fIni && e.ExistenciaAlmacen.ProductoId == parametros.ProductoId).Sum(e => e.Cantidad * (e.ExistenciaAlmacen.Producto.UnidadDeMedida.FactorDeConversion / e.UnidadDeMedida.FactorDeConversion)) : 0m);
                return(PartialView("_MovDeProductosPartial", result.OrderBy(r => r.Fecha)));
            }
            else
            {
                var movimientos =
                    _db.Set <MovimientoDeProducto>().Include(e => e.Tipo).Include(e => e.Usuario).Include(e => e.CentroDeCosto).Include(e => e.Producto).Include(e => e.Producto.UnidadDeMedida).Where(e => e.DiaContable.Fecha >= fIni &&
                                                                                                                                                                                                       e.DiaContable.Fecha <= fFin && e.ProductoId == parametros.ProductoId && e.CentroDeCosto.Nombre == parametros.Lugar).ToList();

                var result = movimientos.Select(m => new DetalleMovimientoProductoViewModel()
                {
                    Fecha            = m.Fecha,
                    Lugar            = m.CentroDeCosto.Nombre,
                    TipoDeMovimiento = m.Tipo.Descripcion,
                    Cantidad         = m.Tipo.Factor * (m.Cantidad),
                    Unidad           = m.Producto.UnidadDeMedida.Siglas,
                    Usuario          = m.Usuario.UserName,
                }).ToList();

                ViewBag.SaldoAnterior = (_db.Set <MovimientoDeProducto>().Any(e => e.DiaContable.Fecha < fIni &&
                                                                              e.ProductoId == parametros.ProductoId && e.CentroDeCosto.Nombre == parametros.Lugar) ?
                                         _db.Set <MovimientoDeProducto>().Where(e => e.DiaContable.Fecha < fIni &&
                                                                                e.ProductoId == parametros.ProductoId && e.CentroDeCosto.Nombre == parametros.Lugar).Sum(e => e.Cantidad * e.Tipo.Factor) : 0m);
                return(PartialView("_MovDeProductosPartial", result.OrderBy(r => r.Fecha)));
            }
            //return PartialView("_MovDeProductosPartial");
        }