Exemplo n.º 1
0
        public PagingModel(int numberOfItems, int page, int resultsPerPage, SearchFiltersModel searchFilters, SortingFiltersModel sortFilters)
        {
            NumberOfItems = numberOfItems;
            if (page == 0)
            {
                Page = 1;
            }
            else
            {
                Page = page;
            }
            switch (resultsPerPage)
            {
            case 8:
                ResultsPerPage = resultsPerPage;
                break;

            case 16:
                ResultsPerPage = resultsPerPage;
                break;

            case 24:
                ResultsPerPage = resultsPerPage;
                break;

            default:
                ResultsPerPage = 8;
                break;
            }

            SearchFilters = searchFilters;
            SortFilters   = sortFilters;

            CalculateParameters();
        }
Exemplo n.º 2
0
        public void Urls(SearchFiltersModel searchFilters, PagingModel paging, SortingFiltersModel sorting)
        {
            var url = "";

            for (var i = 1; i <= Filters.Count(); i++)
            {
                //default to search url
                url = Globals.SearchUrl;
                //add category filter
                url += "?categoryID=" + searchFilters.CategoryFilters.Id;
                //set price filter when not selected
                if (searchFilters.PriceFilters.Id != i)
                {
                    url = url + "&priceID=" + i;
                }
                //add humidor size filter
                if (Filters[i].Name == "Humidors" && searchFilters.HumidorSizeFilters.Id != 0)
                {
                    url += "&humidorSizeID=" + searchFilters.HumidorSizeFilters.Id;
                }
                //add paging filters
                url += "&" + paging.PagingFilters;
                //add sorting filters
                url += "&sortID=" + sorting.Id;
                //set url
                Filters[i].Url = url;
            }
        }
Exemplo n.º 3
0
        public SearchViewModel Search()
        {
            //category filters
            var categoryFilters = new CategoryFiltersModel(CategoryID);

            //price filters
            var priceFilters = new PriceFiltersModel(PriceID);

            //humidor size filters
            var humidorSizeFilters = new HumidorSizeFiltersModel(HumidorSizeID);

            //color filters
            var colorFilters = new ColorFiltersModel(ColorID);

            //sorting filters
            var sortingFilters = new SortingFiltersModel(SortID);

            //all search filters
            var searchFilters = new SearchFiltersModel(categoryFilters, priceFilters, humidorSizeFilters, colorFilters);

            //category counts
            categoryFilters.Counts(searchFilters);

            //price counts
            priceFilters.Counts(searchFilters);

            //humidor size counts
            if (categoryFilters.Name == "Humidors")
            {
                humidorSizeFilters.Counts(searchFilters);
            }

            //color counts
            if (categoryFilters.Name == "Lighters")
            {
                colorFilters.Counts(searchFilters);
            }

            //number of items
            var numberOfItems = categoryFilters.Filters[categoryFilters.Id].Count;

            //paging
            var paging = new PagingModel(numberOfItems, Page, ResultsPerPage, searchFilters, sortingFilters);

            //category filter urls
            categoryFilters.Urls(searchFilters, paging, sortingFilters);

            //price filter urls
            priceFilters.Urls(searchFilters, paging, sortingFilters);

            //humidor size filter urls
            humidorSizeFilters.Urls(searchFilters, paging, sortingFilters);

            //color filter urls
            colorFilters.Urls(searchFilters, paging, sortingFilters);

            //sorting urls
            sortingFilters.Urls(searchFilters, paging);

            //search
            IQueryable <ItemModel> items = SearchResults(searchFilters, paging, sortingFilters);

            //view model
            var model = new SearchViewModel(items, paging, searchFilters, sortingFilters);

            return(model);
        }
Exemplo n.º 4
0
        public IQueryable <ItemModel> SearchResults(SearchFiltersModel searchFilters, PagingModel paging, SortingFiltersModel sorting)
        {
            //in case page requested is higher than existing number of pages
            var page = paging.Page;

            //skip calculation
            int skip = paging.ResultsPerPage * (page - 1);

            IQueryable <ItemModel> items;

            //filter by humidor size
            if (searchFilters.CategoryFilters.Name == "Humidors" && searchFilters.HumidorSizeFilters.Id != 0)
            {
                items = itemRepository.AsItemModelByHumidorSize(searchFilters.HumidorSizeFilters.EqualityValue);
            }
            //filter by color
            else if (searchFilters.CategoryFilters.Name == "Lighters" && searchFilters.ColorFilters.Id != 0)
            {
                items = itemRepository.AsItemModelByColor(searchFilters.ColorFilters.EqualityValue);
            }
            //search items
            else
            {
                //IQueryable<ItemModel> items = itemRepository.AsItemModel();
                items = itemRepository.AsItemModel();
            }

            //filter by category
            items = itemRepository.ByCategory(items, searchFilters.CategoryFilters.EqualityValue);

            //filter by price
            if (searchFilters.PriceFilters.Id != 0)
            {
                items = itemRepository.ByPrice(items, searchFilters.PriceFilters.Min, searchFilters.PriceFilters.Max);
            }

            //order by
            switch (sorting.EqualityValue)
            {
            case "priceAsc":
                items = items.OrderBy(r => r.Price).ThenBy(r => r.Name);
                break;

            case "priceDesc":
                items = items.OrderByDescending(r => r.Price).ThenBy(r => r.Name);
                break;

            case "nameAsc":
                items = items.OrderBy(r => r.Name).ThenBy(r => r.Price);
                break;

            case "nameDesc":
                items = items.OrderByDescending(r => r.Name).ThenBy(r => r.Price);
                break;

            default:
                items = items.OrderByDescending(r => r.VoteCount).ThenBy(r => r.Name);
                break;
            }

            //skip, take
            items = items.Skip(skip).Take(paging.ResultsPerPage);

            return(items);
        }