private PaginaProductosViewModel cargaProductos(int? idCategoria, int? pagina, string orden, string busquedaString, string busqueda, int? min, int? max) { int pageSize = 9; int pageNumber = (pagina ?? 1); var listaCategorias = new List<CategoriasMenuRapido>(); bool multipleEncontrado = false; PaginaProductosViewModel model = new PaginaProductosViewModel(); IEnumerable<Producto> _productosDb = _productos.Cargar(a => a.stock > 0 || a.mostrarSinStock == true&& a.habilitado == true ); List<ProductoListaViewModel> productoConversion = new List<ProductoListaViewModel>(); foreach (var item in _productosDb) { var precio = _precios.CargarPorId(item.idProducto); if (precio != null) { productoConversion.Add(new ProductoListaViewModel() { calificacionProm = 0, descCorta = item.descripcionCorta, idProducto = item.idProducto, imagen = item.imgProducto, nombreProducto = item.nombreProducto, precio = cargaPrecio(precio), slug = item.slugs, idCategoria = item.idCategoria.HasValue ? item.idCategoria.Value : 0, descLarga = item.descripcionProducto, fechaCreacion = item.fechaCreacion, disponibleSinStock = item.habilitarCompraSinStock, stock = item.stock }); } } var _max = productoConversion.OrderByDescending(a => a.precio).Any() ? productoConversion.OrderByDescending(a => a.precio).First().precio : 0; var _min = productoConversion.OrderBy(a => a.precio).Any() ? productoConversion.OrderBy(a => a.precio).First().precio : 0; //PlugInAutomapper<CapaDatos.catCategoria, categorias> plugin = new PlugInAutomapper<CapaDatos.catCategoria, categorias>(); if (idCategoria.HasValue) { var cat = _categorias.Cargar(a => a.idPadre == idCategoria.Value); var padre = _categorias.Cargar(a => a.idCategoria == idCategoria.Value).SingleOrDefault(); if (padre != null) { var nom = padre.nombreCategoria; ViewBag.nombre = nom; } foreach (var item in cat) { listaCategorias.Add(new CategoriasMenuRapido() { idCategoria = item.idCategoria, nombreCategoria = item.nombreCategoria }); } model._categorias = listaCategorias; } else { foreach (var item in cargaCategorias()) { listaCategorias.Add(item); } model._categorias = listaCategorias; } if (idCategoria.HasValue) { ViewBag.categoriaActual = idCategoria.Value; productoConversion = productoConversion.Where(a => a.idCategoria == idCategoria).ToList(); ///Carga productos de todos los hijos de la categoria ///Recursividad de un solo nivel, posiblemente se deba crear un metodo que se llame a si mesmo foreach (var item in _categorias.Cargar(a => a.idPadre == idCategoria)) { cargaProductos(item); } foreach (var producto in _productosLst) { model._productos.Add(producto); } if (model._productos.Any()) { multipleEncontrado = true; } if (busquedaString != null) { pagina = 1; } else { busquedaString = busqueda; } ViewBag.filtroActual = busquedaString; ViewBag.ordenNombre = string.IsNullOrEmpty(orden) ? "Nombre" : ""; ViewBag.ordenPrecio = orden == "Precio" ? "Nombre" : "Precio"; if (!string.IsNullOrEmpty(busquedaString)) { productoConversion = productoConversion.Where(a => a.nombreProducto.ToUpper().Contains(busquedaString.ToUpper()) || a.descCorta.ToUpper().Contains(busquedaString.ToUpper()) || a.descLarga.ToUpper().Contains(busquedaString.ToUpper())).ToList(); } switch (orden) { case "Nombre": productoConversion = productoConversion.OrderBy(a => a.nombreProducto).ToList(); ViewBag.ordenActual = "Nombre"; break; case "Precio": productoConversion = productoConversion.OrderByDescending(a => a.precio).ToList(); ViewBag.ordenActual = "Precio"; break; default: productoConversion = productoConversion.OrderBy(a => a.nombreProducto).ToList(); break; } if (min.HasValue && max.HasValue) { ViewBag.actMax = max.Value; ViewBag.actMin = min.Value; productoConversion = productoConversion.Where(a => a.precio >= min.Value && a.precio <= max.Value).ToList(); } else { ViewBag.actMax = productoConversion.OrderByDescending(a => a.precio).Any() ? productoConversion.OrderByDescending(a => a.precio).First().precio : 0; ViewBag.actMin = productoConversion.OrderBy(a => a.precio).Any() ? productoConversion.OrderBy(a => a.precio).First().precio : 0; } ViewBag.max = productoConversion.OrderByDescending(a => a.precio).Any() ? productoConversion.OrderByDescending(a => a.precio).First().precio : 0; ViewBag.min = productoConversion.OrderBy(a => a.precio).Any() ? productoConversion.OrderBy(a => a.precio).First().precio : 0; model._productos.AddRange(productoConversion); if (multipleEncontrado) { if (!min.HasValue && !max.HasValue) { ViewBag.actMax = model._productos.OrderByDescending(a => a.precio).Any() ? model._productos.OrderByDescending(a => a.precio).First().precio : 0; ; ViewBag.actMin = model._productos.OrderBy(a => a.precio).Any() ? model._productos.OrderBy(a => a.precio).First().precio : 0; ; } ViewBag.max = model._productos.OrderByDescending(a => a.precio).Any() ? model._productos.OrderByDescending(a => a.precio).First().precio : 0; ViewBag.min = model._productos.OrderBy(a => a.precio).Any() ? model._productos.OrderBy(a => a.precio).First().precio : 0; } model._productos = model._productos.ToPagedList(pageNumber, pageSize).ToList(); return model; } else { if (busquedaString != null) { pagina = 1; } else { busquedaString = busqueda; } ViewBag.filtroActual = busquedaString; ViewBag.ordenNombre = string.IsNullOrEmpty(orden) ? "Nombre" : ""; ViewBag.ordenPrecio = orden == "Precio" ? "Nombre" : "Precio"; if (!string.IsNullOrEmpty(busquedaString)) { model._productos = model._productos.Where(a => a.nombreProducto.ToUpper().Contains(busquedaString.ToUpper()) || a.descCorta.ToUpper().Contains(busquedaString.ToUpper()) || a.descLarga.ToUpper().Contains(busquedaString.ToUpper())).ToList(); } switch (orden) { case "Nombre": productoConversion = productoConversion.OrderBy(a => a.nombreProducto).ToList(); ViewBag.ordenActual = "Nombre"; break; case "Precio": ViewBag.ordenActual = "Precio"; productoConversion = productoConversion.OrderByDescending(a => a.precio).ToList(); break; default: productoConversion = productoConversion.OrderBy(a => a.fechaCreacion).ToList(); break; } if (min.HasValue && max.HasValue) { ViewBag.actMax = max.Value; ViewBag.actMin = min.Value; productoConversion = productoConversion.Where(a => a.precio >= min.Value && a.precio <= max.Value).ToList(); } else { ViewBag.actMax = _max; ViewBag.actMin = _min; } ViewBag.max = _max; ViewBag.min = _min; model._productos.AddRange(productoConversion); model._productos = model._productos.ToPagedList(pageNumber, pageSize).ToList(); return model; } }
public ActionResult Productos(int? idCategoria, int? pagina, string orden, string busquedaString, string busqueda, int? min, int? max) { var productos = _productos.Cargar(a => a.stock > 0 || a.mostrarSinStock == true && a.habilitado == true); PaginaProductosViewModel model = new PaginaProductosViewModel(); model = cargaProductos(idCategoria, pagina, orden, busquedaString, busqueda, min, max); //model._categorias = cargaCategorias(); if (Request.IsAjaxRequest()) { return View("~/Views/TiendaWidgets/_ListaProductosEshopper.cshtml", model._productos); } return View(model); }