Ejemplo n.º 1
0
        public ViewResult List(FilterParametersProducts filter, int productPage = 1, bool IsHot = false)
        {
            var products = _repository.Products;

            foreach (var p in products)
            {
                p.Categories = _dbCategories.Entity.FirstOrDefault(o => o.Id == p.CategoriesID);
            }

            if (filter.Categories != null)
            {
                TempData["SelectedCategory"] = filter.Categories[0];
            }
            if (filter.Countries != null)
            {
                TempData["SelectedCountry"] = String.Join("", filter.Countries);
            }

            filter.IsHot = IsHot;

            TempData["MaxPrice"] = filter.MaxPrice;
            TempData["MinPrice"] = filter.MinPrice;
            TempData["MinDate"]  = filter.MinDate;
            TempData["MaxDate"]  = filter.MaxDate;
            TempData["Hot"]      = filter.IsHot;

            var productsList = _filterConditions.GetProducts(products, filter);

            foreach (var p in productsList)
            {
                if (_stockRepository.StockItems.FirstOrDefault(pr => pr.Product == p && pr.Quantity > 0) != null)
                {
                    p.IsInStock = true;
                }
            }

            var paging = new PagingInfo
            {
                CurrentPage  = productPage,
                ItemsPerPage = PageSize,
                TotalItems   = filter.Categories == null?
                               productsList.Count() :
                                   productsList.Where(e =>
                                                      filter.Categories.Contains(e.Categories.Name)).Count()
            };

            return(View(new ProductsListViewModel
            {
                Products = productsList
                           .Skip((productPage - 1) * PageSize)
                           .Take(PageSize),
                PagingInfo = paging,
                CurrentFilter = filter
            }));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> List([FromForm] FilterParametersProducts filter, [FromForm] int productPage = 1)
        {
            var categories = new List <int>();

            if (!String.IsNullOrEmpty(filter.Categories))
            {
                var categoriesStrings = filter.Categories.Split(';');

                foreach (var category in categoriesStrings)
                {
                    categories.Add(Convert.ToInt32(category));
                }

                filter.CategoriesList = categories;

                int addedCount = 0;

                do
                {
                    addedCount = 0;
                    List <int> toAdd = new List <int>();

                    foreach (int categoryID in categories)
                    {
                        foreach (var id in _categoryRepository.Categories
                                 .FirstOrDefault(c => c.ID == categoryID).Children
                                 .Where(c => !categories.Contains(c.ID))
                                 .Select(c => c.ID))
                        {
                            toAdd.Add(id);
                            addedCount++;
                        }
                    }

                    categories.AddRange(toAdd);
                }while (addedCount > 0);

                filter.CategoriesList = categories;
            }

            var products = _repository.Products;

            products = _filterConditions.GetProducts(products, filter);

            foreach (var p in products)
            {
                if (_stockRepository.StockItems.FirstOrDefault(pr => pr.Product == p && pr.Quantity > 0) != null)
                {
                    p.IsInStock = true;
                }
            }

            var paging = new PagingInfo
            {
                CurrentPage  = productPage,
                ItemsPerPage = PageSize,
                TotalItems   = filter.Categories == null?
                               products.Count() :
                                   products.Where(e =>
                                                  categories.Contains(e.Category.ID)).Count()
            };

            return(Ok(new ProductsListViewModel
            {
                Products = products
                           .Skip((productPage - 1) * PageSize)
                           .Take(PageSize),
                PagingInfo = paging,
                CurrentFilter = filter
            }));
        }