예제 #1
0
        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;
            }
        }
예제 #2
0
 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);
 }