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