Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }