Esempio n. 1
0
        public async Task <IActionResult> Index(int?category, string name, string priceRange, int page = 1, SortState sortOrder = SortState.NameAsc)
        {
            IQueryable <Cap> caps = db.Caps
                                    .Include(x => x.Category)
                                    .Include(x => x.Supplier)
                                    .AsNoTracking();
            decimal maxPrice = caps.Max(p => p.Price);
            decimal minPrice = caps.Min(p => p.Price);

            caps = caps.Where(p => (p.Visible == true));

            ViewData["CurrentRange"]    = priceRange;
            ViewData["CurrentName"]     = name;
            ViewData["CurrentCategory"] = category;
            ViewData["CurrentSort"]     = sortOrder;

            if (!String.IsNullOrEmpty(priceRange))
            {
                //Get ints from string priceRange
                string[] s        = priceRange.Split(',');
                int      minRange = Convert.ToInt32(s[0]);
                int      maxRange = Convert.ToInt32(s[1]);

                caps = caps.Where(p => (p.Price >= minRange && p.Price <= maxRange));
            }

            if (category != null && category != 0)
            {
                caps = caps.Where(p => p.CategoryId == category);
            }

            if (!String.IsNullOrEmpty(name))
            {
                caps = caps.Where(p => p.Name.Contains(name));
            }

            List <Category> categories = db.Categories.ToList();

            // set the first element which allow to select all
            categories.Insert(0, new Category {
                Name = "All", Id = 0
            });

            ViewData["NameSort"]  = sortOrder == SortState.NameAsc ? SortState.NameDesc : SortState.NameAsc;
            ViewData["PriceSort"] = sortOrder == SortState.PriceAsc ? SortState.PriceDesc : SortState.PriceAsc;
            ViewData["CatSort"]   = sortOrder == SortState.CategoryAsc ? SortState.CategoryDesc : SortState.CategoryAsc;

            switch (sortOrder)
            {
            case SortState.NameDesc:
                caps = caps.OrderByDescending(s => s.Name);
                break;

            case SortState.PriceAsc:
                caps = caps.OrderBy(s => s.Price);
                break;

            case SortState.PriceDesc:
                caps = caps.OrderByDescending(s => s.Price);
                break;

            case SortState.SupplierAsc:
                caps = caps.OrderBy(s => s.Supplier.Name);
                break;

            case SortState.SupplierDesc:
                caps = caps.OrderByDescending(s => s.Supplier.Name);
                break;

            case SortState.CategoryAsc:
                caps = caps.OrderBy(s => s.Category.Name);
                break;

            case SortState.CategoryDesc:
                caps = caps.OrderByDescending(s => s.Category.Name);
                break;

            default:
                caps = caps.OrderBy(s => s.Name);
                break;
            }

            int pageSize = 9;   // elements per page

            var count = await caps.CountAsync();

            var items = await caps.Skip((page - 1) *pageSize).Take(pageSize).ToListAsync();

            PageViewModel pageViewModel = new PageViewModel(count, page, pageSize);

            CapsListViewModel viewModel = new CapsListViewModel
            {
                Caps          = items.ToList(),
                Categories    = new SelectList(categories, "Id", "Name"),
                PageViewModel = pageViewModel,
                Name          = name,
                MaxPrice      = maxPrice,
                MinPrice      = minPrice
            };

            return(View(viewModel));
        }
Esempio n. 2
0
        public async Task <IActionResult> Index(int?category, int?supplier, string name, int page = 1, SortState sortOrder = SortState.NameAsc)
        {
            IQueryable <Cap> caps = db.Caps
                                    .Include(x => x.Category)
                                    .Include(x => x.Supplier)
                                    .AsNoTracking();

            ViewData["CurrentName"]     = name;
            ViewData["CurrentCategory"] = category;
            ViewData["CurrentSupplier"] = supplier;
            ViewData["CurrentSort"]     = sortOrder;

            if (category != null && category != 0)
            {
                caps = caps.Where(p => p.CategoryId == category);
            }

            if (supplier != null && supplier != 0)
            {
                caps = caps.Where(p => p.SupplierId == supplier);
            }

            if (!String.IsNullOrEmpty(name))
            {
                caps = caps.Where(p => p.Name.Contains(name));
            }


            List <Category> categories = db.Categories.ToList();
            List <Supplier> suppliers  = db.Suppliers.ToList();

            // set the first element which allow to select all
            categories.Insert(0, new Category {
                Name = "All", Id = 0
            });
            suppliers.Insert(0, new Supplier {
                Name = "All", Id = 0
            });


            ViewData["NameSort"]  = sortOrder == SortState.NameAsc ? SortState.NameDesc : SortState.NameAsc;
            ViewData["PriceSort"] = sortOrder == SortState.PriceAsc ? SortState.PriceDesc : SortState.PriceAsc;
            ViewData["CatSort"]   = sortOrder == SortState.CategoryAsc ? SortState.CategoryDesc : SortState.CategoryAsc;
            ViewData["SupSort"]   = sortOrder == SortState.SupplierAsc ? SortState.SupplierDesc : SortState.SupplierAsc;

            switch (sortOrder)
            {
            case SortState.NameDesc:
                caps = caps.OrderByDescending(s => s.Name);
                break;

            case SortState.PriceAsc:
                caps = caps.OrderBy(s => s.Price);
                break;

            case SortState.PriceDesc:
                caps = caps.OrderByDescending(s => s.Price);
                break;

            case SortState.SupplierAsc:
                caps = caps.OrderBy(s => s.Supplier.Name);
                break;

            case SortState.SupplierDesc:
                caps = caps.OrderByDescending(s => s.Supplier.Name);
                break;

            case SortState.CategoryAsc:
                caps = caps.OrderBy(s => s.Category.Name);
                break;

            case SortState.CategoryDesc:
                caps = caps.OrderByDescending(s => s.Category.Name);
                break;

            default:
                caps = caps.OrderBy(s => s.Name);
                break;
            }

            int pageSize = 10;   // elements per page

            var count = await caps.CountAsync();

            var items = await caps.Skip((page - 1) *pageSize).Take(pageSize).ToListAsync();

            PageViewModel pageViewModel = new PageViewModel(count, page, pageSize);

            CapsListViewModel viewModel = new CapsListViewModel
            {
                Caps          = items.ToList(),
                Categories    = new SelectList(categories, "Id", "Name"),
                Suppliers     = new SelectList(suppliers, "Id", "Name"),
                PageViewModel = pageViewModel,
                Name          = name
            };

            return(View(viewModel));
        }