public object Post(AdvSearch search) { if (!AuthorizationCheck(GenericNames.REGISTERED_VIP)) { return(new HubModel(401, null)); } ModelStateDictionary StateObject = new ModelStateDictionary(); if (search == null) { StateObject.AddModelError("AdvSearch", GenericError.CANNOT_BE_NULL_OR_EMPTY); throw new ManahostValidationException(StateObject); } if (!ValidateModel(search, StateObject)) { throw new ManahostValidationException(StateObject); } var ObjectSearch = SearchService.GetService(StateObject, CurrentClient, search); return(new HubModel(200, ObjectSearch)); }
// GET: Search public async Task <IActionResult> Search( int?noOfSearchValues, int gameSelection, int groupSelection, int referenceValue, int referenceLocation, int?referencePos, int?value2, int val2WeekSelect, int val2Location, int value2Week, int?value2Pos, int?value3, int val3WeekSelect, int val3Location, int value3Week, int?value3Pos, int?pageNumber, int noOfWeeksToDisplay = 2) { // Games Name List List <Game> gamesList = new List <Game>(); gamesList = (from games in _context.Games select games).ToList(); //collect data from game context into list gamesList.Insert(0, new Game { ID = 0, Name = "Select Groups" }); // add select option to list List <GamesClass> gamesGroups = new List <GamesClass>(); gamesGroups = (from gamesClass in _context.GamesClass select gamesClass).ToList(); gamesGroups.Insert(0, new GamesClass { ID = 0, Name = "Select All" }); ViewBag.ListOfGames = gamesList; ViewBag.ListOfGroups = gamesGroups; // Search Results Data ViewBag.SearchParmAmt = noOfSearchValues; ViewBag.DisplayWeeksParmAmt = noOfWeeksToDisplay; ViewBag.GameSelection = gameSelection; ViewBag.GroupSelection = groupSelection; ViewBag.DisplaySpaceParm = (noOfWeeksToDisplay * 2) + 1; int sizePerPage = ((noOfWeeksToDisplay * 2) + 1) * 10; // Reference Value ViewBag.ReferenceValue = referenceValue; ViewBag.ReferenceLocation = referenceLocation; // ViewBag.ReferencePos = referencePos; // 2nd Search Value ViewBag.Value2 = value2; ViewBag.Val2WeekSelect = val2WeekSelect; // ViewBag.Val2Location = val2Location; // ViewBag.Value2Week = value2Week; ViewBag.Value2Pos = value2Pos; ViewBag.Value2WeekAbs = value2Week >= 0 ? value2Week : ((noOfWeeksToDisplay * 3) + 1 + value2Week); // 3rd Search Value ViewBag.Value3 = value3; ViewBag.Val3WeekSelect = val3WeekSelect; ViewBag.Val3Location = val3Location; ViewBag.Value3Week = value3Week; ViewBag.Value3Pos = value3Pos; ViewBag.Value3WeekAbs = value3Week >= 0 ? value3Week : ((noOfWeeksToDisplay * 3) + 1 + value3Week); if (noOfSearchValues == null) { return(View()); } referencePos = referencePos == 0 ? null : referencePos; value2Pos = value2Pos == 0 ? null : value2Pos; value3Pos = value3Pos == 0 ? null : value3Pos; //var events = from s in _context.Events select s; int[] groupGamesToSearchFrom = (gameSelection == 0) ? (from games in _context.Games.Where(s => s.GamesClassID == groupSelection) select games.ID).ToArray() : null; var events = (gameSelection > 0 && gameSelection < gamesList.Count) ? from s in _context.Events.Where(s => s.GameID == gameSelection) select s : ((groupGamesToSearchFrom == null) ? from s in _context.Events select s : from s in _context.Events.Where(s => groupGamesToSearchFrom.Contains(s.GameID)) select s); List <Event> selectedEvents = new List <Event>(); List <AdvancedSearchResult> results = new List <AdvancedSearchResult>(); switch (noOfSearchValues) { case 1: results = await Task.Run(() => AdvSearch.FindResults(_context, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos, gameSelection, groupGamesToSearchFrom).ToList()); selectedEvents = AdvancedSearch.FindAsync(events, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos).ToList(); break; case 2: results = await Task.Run(() => AdvSearch.FindResults(_context, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos, gameSelection, groupGamesToSearchFrom, (int)value2, val2WeekSelect, value2Week, val2Location, value2Pos).ToList()); if (val2WeekSelect == 2) { for (int i = -2; i <= 2; i++) { if (i != 0) { selectedEvents.AddRange(AdvancedSearch.FindAsync(events, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos, (int)value2, i, val2Location, value2Pos).ToList()); } } } else { selectedEvents = AdvancedSearch.FindAsync(events, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos, (int)value2, value2Week, val2Location, value2Pos).ToList(); } break; case 3: results = await Task.Run(() => AdvSearch.FindResults(_context, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos, gameSelection, groupGamesToSearchFrom, (int)value2, val2WeekSelect, value2Week, val2Location, value2Pos, (int)value3, val3WeekSelect, value3Week, val3Location, value3Pos).ToList()); selectedEvents = AdvancedSearch.FindAsync(events, noOfWeeksToDisplay, referenceValue, referenceLocation, referencePos, (int)value2, value2Week, val2Location, value2Pos, (int)value3, value3Week, val3Location, value3Pos).ToList(); break; default: return(View()); } return(View(await Task.Run(() => PaginatedList <Event> .Create(selectedEvents.AsQueryable(), pageNumber ?? 1, sizePerPage, gamesList, gamesGroups, gameSelection, groupSelection)))); }
// GET: Advanced Search public async Task <IActionResult> Search(SearchParameters searchParameters) { searchParameters.GamesList = (from games in _context.Games select games).ToList(); searchParameters.GamesList.Insert(0, new Game { ID = 0, Name = "Select Groups" }); searchParameters.GamesGroups = (from groups in _context.GamesClass select groups).ToList(); searchParameters.GamesGroups.Insert(0, new GamesClass { ID = 0, Name = "Select All" }); SearchResultViewModel searchResults = new SearchResultViewModel() { SearchParameters = searchParameters }; if (searchParameters.NoOfSearchValues == null) { return(await Task.Run(() => View(searchResults))); } List <AdvancedSearchResult> results = new List <AdvancedSearchResult>(); int[] groupGamesToSearchFrom = (searchParameters.GameSelection == 0) ? (from games in _context.Games.Where(s => s.GamesClassID == searchParameters.GroupSelection) select games.ID).ToArray() : null; switch (searchParameters.NoOfSearchValues) { case 1: results = await Task.Run(() => AdvSearch.FindResults(_context, searchParameters.NoOfWeeksToDisplay, (int)searchParameters.ReferenceValue, searchParameters.ReferenceLocation, searchParameters.ReferencePosition, searchParameters.GameSelection, groupGamesToSearchFrom).ToList()); break; case 2: results = await Task.Run(() => AdvSearch.FindResults(_context, searchParameters.NoOfWeeksToDisplay, (int)searchParameters.ReferenceValue, searchParameters.ReferenceLocation, searchParameters.ReferencePosition, searchParameters.GameSelection, groupGamesToSearchFrom, (int)searchParameters.Value2, searchParameters.Value2WeekSelect, searchParameters.Value2Week, searchParameters.Value2Location, searchParameters.Value2Position).ToList()); break; case 3: results = await Task.Run(() => AdvSearch.FindResults(_context, searchParameters.NoOfWeeksToDisplay, (int)searchParameters.ReferenceValue, searchParameters.ReferenceLocation, searchParameters.ReferencePosition, searchParameters.GameSelection, groupGamesToSearchFrom, (int)searchParameters.Value2, searchParameters.Value2WeekSelect, searchParameters.Value2Week, searchParameters.Value2Location, searchParameters.Value2Position, (int)searchParameters.Value3, searchParameters.Value3WeekSelect, searchParameters.Value3Week, searchParameters.Value3Location, searchParameters.Value3Position).ToList()); break; default: results = null; break; } searchResults.SearchResults = results; return(await Task.Run(() => View(searchResults))); }
public dynamic GetService(ModelStateDictionary validationDictionnary, Client currentClient, AdvSearch r) { if (r == null) { validationDictionnary.AddModelError(GenericNames.ADVANCED_SEARCH, GenericError.CANNOT_BE_NULL_OR_EMPTY); throw new ManahostValidationException(validationDictionnary); } Search.ToSQL(r.Search, currentClient.Id.ToString(), validationDictionnary); if (!validationDictionnary.IsValid) { throw new ManahostValidationException(validationDictionnary); } try { dynamic ret = null; Type to = null; Search.Infos.includes.UnionWith(r.Include); if ((ret = Repo.Search(Search.Infos)) == null) { throw new ManahostValidationException(validationDictionnary); } to = ManahostEntityCaching.Instance.GetTypeFromFullPath(GenericNames.DTO_PATH + Search.Infos.resource + "DTO"); if (to != null && Search.Infos.count == false) { IEnumerable <dynamic> ltmp = ret as IEnumerable <dynamic>; List <dynamic> newList = new List <dynamic>(); foreach (var item in ltmp) { newList.Add(GetMapper .Map(item, ManahostEntityCaching.Instance.GetTypeFromFullPath(GenericNames.ENTITY_PATH + Search.Infos.resource), to)); } return(newList); } return(ret); } catch (Exception e) { validationDictionnary.AddModelError(String.Format(GenericNames.MODEL_STATE_FORMAT, GenericNames.ADVANCED_SEARCH, "search"), GenericError.ADVANCED_SEARCH_SQL_EXCEPTION); string stacktrace = e.Message + " " + e.StackTrace + " " + (e.InnerException == null ? "" : (e.InnerException.Message + " " + e.InnerException.StackTrace)); throw new ManahostValidationException(validationDictionnary, stacktrace); } }