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