public ActionResult Listado() { var productos = new List <ProductoConcretoViewModel>(); foreach (var prod in _db.Set <ProductoConcreto>().Where(p => p.Producto.Activo).ToList()) { var prodConcreto = new ProductoConcretoViewModel() { Producto = prod }; if (_db.Set <ExistenciaCentroDeCosto>().Any(e => e.ProductoId == prod.Id)) { prodConcreto.Existencias = _db.Set <ExistenciaCentroDeCosto>() .Include(e => e.CentroDeCosto) .Where(e => e.ProductoId == prod.Id) .Select(e => new ExistenciaViewModel() { Lugar = e.CentroDeCosto.Nombre, Cantidad = e.Cantidad }).ToList(); } if (_db.Set <ExistenciaAlmacen>().Any(e => e.ProductoId == prod.Id)) { var existencias = _db.Set <ExistenciaAlmacen>() .Include(e => e.Almacen) .Where(e => e.ProductoId == prod.Id) .Select(e => new ExistenciaViewModel() { Lugar = e.Almacen.Descripcion, Cantidad = e.ExistenciaEnAlmacen }).ToList(); foreach (var ex in existencias) { prodConcreto.Existencias.Add(ex); } } productos.Add(prodConcreto); } return(View(productos)); }
public ActionResult Historial(int?id) { var producto = _db.Set <ProductoConcreto>().Find(id); var entradasAlmacen = _db.Set <EntradaAlmacen>().Where(e => e.ProductoId == id); var salidasDeAlmacen = _db.Set <DetalleSalidaAlmacen>().Where(d => d.Producto.ProductoId == id); var mermasDeAlmacen = _db.Set <SalidaPorMerma>().Where(d => d.ExistenciaAlmacen.Producto.ProductoId == id); var movimientos = _db.Set <MovimientoDeProducto>().Include(m => m.Tipo).Include(m => m.Usuario).Include(m => m.Producto).Where(m => m.ProductoId == id).ToList(); var resumenMov = new List <DetalleMovimientoProductoViewModel>(); resumenMov.AddRange(salidasDeAlmacen.Select(s => new DetalleMovimientoProductoViewModel() { Fecha = s.Vale.DiaContable.Fecha, Cantidad = s.Cantidad, Usuario = s.Vale.Usuario.UserName, Lugar = "Almacen", TipoDeMovimiento = "Salida de almacen", Unidad = s.Producto.Producto.UnidadDeMedida.Siglas, Detalle = "entrada a " + s.Vale.CentroDeCosto.Nombre })); resumenMov.AddRange(entradasAlmacen.Select(e => new DetalleMovimientoProductoViewModel() { Fecha = e.DiaContable.Fecha, Cantidad = e.Cantidad, Usuario = e.Usuario.UserName, Lugar = "Almacen", TipoDeMovimiento = "Entrada", Unidad = e.Producto.UnidadDeMedida.Siglas, Detalle = "" })); resumenMov.AddRange(movimientos.Select(s => new DetalleMovimientoProductoViewModel() { Fecha = s.Fecha, Cantidad = s.Cantidad, Usuario = s.Usuario.UserName, Lugar = s.CentroDeCosto.Nombre, TipoDeMovimiento = s.Tipo.Descripcion == TipoDeMovimientoConstantes.SalidaAProduccion?"Venta":s.Tipo.Descripcion, Unidad = s.Producto.UnidadDeMedida.Siglas, Detalle = "" })); resumenMov.AddRange(mermasDeAlmacen.Select(s => new DetalleMovimientoProductoViewModel() { Fecha = s.Fecha, Cantidad = s.Cantidad, Usuario = s.Usuario.UserName, Lugar = "Almacen", TipoDeMovimiento = "Merma", Unidad = s.UnidadDeMedida.Siglas, Detalle = "" })); var existencia = _db.Set <ExistenciaCentroDeCosto>().Where(e => e.ProductoId == id).Select(e => new ExistenciaViewModel() { Lugar = e.CentroDeCosto.Nombre, Cantidad = e.Cantidad }).ToList(); existencia.Add(new ExistenciaViewModel() { Lugar = "Almacen", Cantidad = _db.Set <ExistenciaAlmacen>().Any(a => a.ProductoId == id)? _db.Set <ExistenciaAlmacen>().Where(a => a.ProductoId == id).Sum(a => a.ExistenciaEnAlmacen):0 }); var viewModel = new ProductoConcretoViewModel() { Producto = producto, Movimientos = resumenMov, Existencias = existencia }; return(View(viewModel)); }