public async Task <ActionResult> List(ProductsListVM productsList, uint page) { productsList ??= new ProductsListVM(); productsList.Filters ??= new ProductsFiltersVM(); var productsTask = _productManager.Products(new ProductsFiltersDTO { Brand = productsList.Filters.Brand, Category = productsList.Filters.Category, Country = productsList.Filters.Country, Name = productsList.Filters.Name, Price = productsList.Filters.Price, Removed = productsList.Filters.Removed, Weight = productsList.Filters.Weight, PageSize = PageSize, Page = page }); var brandTask = _productManager.Brands(); var categorTask = _productManager.Categories(); var countryTask = _productManager.Countries(); await Task.WhenAll(productsTask, brandTask, categorTask, countryTask); var productsListDTO = await productsTask; productsList.Brands = new SelectList((await brandTask).Select(b => b.Name)); productsList.Categories = new SelectList((await categorTask).Select(c => c.Name)); productsList.Countries = new SelectList((await countryTask).Select(c => c.Name)); productsList.Products = productsListDTO.Products.Select(p => new ProductDataVM { Id = p.Id, Brand = p.Brand?.Name, Category = p.Category?.Name, Country = p.Country.Name, Name = p.Name, Price = p.Price, Removed = p.Removed, Weight = p.Weight }); productsList.PagingInfo = new PagingInfoVM { CurrentPage = productsListDTO.PagingInfo.CurrentPage, TotalItems = productsListDTO.PagingInfo.CurrentPage, ItemsPerPage = PageSize }; return(View(productsList)); }
public ViewResult List(string category, int page = 1) { ProductsListVM model = new ProductsListVM { Products = repo.Products .Where(p => category == null || p.Category == category) .OrderBy(p => p.ProductID) .Skip((page - 1) * pageSize) .Take(pageSize), PagingInfo = new PagingInfo { CurrentPage = page, ItemsPerPage = pageSize, TotalItems = category == null? repo.Products.Count() : repo.Products.Where(e => e.Category == category).Count() }, CurrentCategory = category }; return(View(model)); }
public ProductsListVM GetProductsListVM(SearchProductsBM searchBM, string userId) { const int PageSize = 4; var search = new SearchProductsBM { Search = searchBM.Search ?? string.Empty, Page = searchBM.Page, Order = searchBM.Order ?? Constants.Order[0], OrderBy = searchBM.OrderBy ?? Constants.OrderBy[0], SubCategoryId = searchBM.SubCategoryId, CategoryId = searchBM.CategoryId, DepartmentId = searchBM.DepartmentId, OrderList = new SelectList(Constants.Order), OrderByList = new SelectList(Constants.OrderBy) }; var pageNumber = search.Page; if (pageNumber < 1) { pageNumber = 1; } IEnumerable <Product> products; search.SubCategoryId = searchBM.SubCategoryId; if (search.DepartmentId != 0) { products = this.Context.Products.All() .Where(p => p.SubCategory.Category.Department.Id == search.DepartmentId); search.SubCategoryId = 0; search.CategoryId = 0; } else if (search.CategoryId != 0) { products = this.Context.Products.All() .Where(p => p.SubCategory.Category.Id == search.CategoryId); search.SubCategoryId = 0; search.DepartmentId = 0; } else if (search.SubCategoryId != 0) { var subCategory = this.Context.SubCategories.Find(search.SubCategoryId); if (subCategory == null) { return(null); } products = subCategory.Products; search.DepartmentId = 0; search.CategoryId = 0; } else { products = this.Context.Products.All(); } if (!string.IsNullOrEmpty(search.Search)) { products = products .Where(p => p.Name.ToLower().Contains(search.Search.ToLower())); } if (search.OrderBy == Constants.OrderBy[0]) { products = string.Equals(search.Order, Constants.Order[0]) ? products.OrderBy(p => p.Id) : products.OrderByDescending(p => p.Id); } else if (search.OrderBy == Constants.OrderBy[1]) { products = string.Equals(search.Order, Constants.Order[0]) ? products.OrderBy(p => p.Name) : products.OrderByDescending(p => p.Name); } else if (search.OrderBy == Constants.OrderBy[2]) { products = string.Equals(search.Order, Constants.Order[0]) ? products.OrderBy(p => p.Price) : products.OrderByDescending(p => p.Price); } var productVms = products .Skip((pageNumber - 1) * PageSize) .Take(PageSize) .ToList() .Select(Mapper.Map <DetailsProductVM>); var productsCount = products.Count(); var pageCount = productsCount / PageSize + (productsCount % PageSize > 0 ? 1 : 0); search.PageCount = pageCount; search.Page = pageNumber; var productsInUserShoppingCart = this.GetUserShoppingCard(userId)?.Purchases.Count ?? 0; var result = new ProductsListVM { Products = productVms, SearchProductsBM = search, UserProductsInShoppingCart = productsInUserShoppingCart }; return(result); }