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; } }
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(); }
public void Counts(SearchFiltersModel searchFilters) { var itemRepository = new ItemRepository(); for (var i = 1; i <= Filters.Count(); i++) { IQueryable <Item> query; if (Filters[i].Name == "Humidors" && searchFilters.HumidorSizeFilters.Id != 0) { query = itemRepository.ByHumidorSize(searchFilters.HumidorSizeFilters.EqualityValue); query = itemRepository.ByCategory(query, Filters[i].EqualityValue); } else if (Filters[i].Name == "Lighters" && searchFilters.ColorFilters.Id != 0) { query = itemRepository.ByColor(searchFilters.ColorFilters.EqualityValue); query = itemRepository.ByCategory(query, Filters[i].EqualityValue); } else { query = itemRepository.ByCategory(Filters[i].EqualityValue); } if (searchFilters.PriceFilters.Id != 0) { query = itemRepository.ByPrice(query, searchFilters.PriceFilters.Min, searchFilters.PriceFilters.Max); } Filters[i].Count = query.Count(); } }
public void Counts(SearchFiltersModel searchFilters) { var itemRepository = new ItemRepository(); for (var i = 1; i <= Filters.Count(); i++) { var query = itemRepository.ByColor(Filters[i].EqualityValue); query = itemRepository.ByCategory(query, searchFilters.CategoryFilters.Name); if (searchFilters.PriceFilters.Id != 0) { query = itemRepository.ByPrice(query, searchFilters.PriceFilters.Min, searchFilters.PriceFilters.Max); } Filters[i].Count = query.Count(); } }
public void Urls(SearchFiltersModel searchFilters, PagingModel paging) { var url = ""; for (var i = 1; i <= Filters.Count(); i++) { //default to search url url = Globals.SearchUrl + "?sortID=" + i; //add category filter (always set) url = url + "&categoryID=" + searchFilters.CategoryFilters.Id; //add price filter if (searchFilters.PriceFilters.Id != 0) { url += "&priceID=" + searchFilters.PriceFilters.Id; } //add paging filter url += "&" + paging.PagingFilters; //set url Filters[i].Url = url; } }
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); }
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); }