public SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters> GetSuggestedApprenticeshipVacancies( ApprenticeshipSearchParameters searchParameters, IList <ApprenticeshipApplicationSummary> candidateApplications, int vacancyId) { var vacancy = _vacancyDataProvider.GetVacancyDetails(vacancyId); var vacancySubCategory = _referenceDataService.GetSubCategoryByName(vacancy.SubCategory); if (vacancySubCategory == null) { return(null); } searchParameters.CategoryCode = vacancySubCategory.ParentCategoryCodeName; searchParameters.SubCategoryCodes = new[] { vacancySubCategory.CodeName }; var excludeVacancyIds = candidateApplications.Select(x => x.LegacyVacancyId).ToList(); excludeVacancyIds.Add(vacancyId); searchParameters.ExcludeVacancyIds = excludeVacancyIds; if (searchParameters.Location != null) { if (searchParameters.Location.GeoPoint == null || (searchParameters.Location.GeoPoint.Latitude == 0 && searchParameters.Location.GeoPoint.Longitude == 0)) { var locations = _locationSearchService.FindLocation(searchParameters.Location.Name); searchParameters.Location = locations != null?locations.FirstOrDefault() : null; } } if (searchParameters.Location == null) { searchParameters.Location = new Location { Name = vacancy.VacancyAddress.Postcode, GeoPoint = new GeoPoint { Latitude = vacancy.VacancyAddress.GeoPoint.Latitude, Longitude = vacancy.VacancyAddress.GeoPoint.Longitude, } }; } var searchResults = _searchService.Search(searchParameters); if (searchResults.Total == 0) { //Widen search to category alone searchParameters.SubCategoryCodes = null; searchResults = _searchService.Search(searchParameters); } return(searchResults); }
public TraineeshipSearchResponseViewModel FindVacancies(TraineeshipSearchViewModel search) { _logger.Debug("Calling SearchProvider to find traineeship vacancies."); string vacancyReference; var searchLocation = _traineeshipSearchMapper.Map <TraineeshipSearchViewModel, Location>(search); var isVacancyReference = VacancyHelper.TryGetVacancyReference(search.ReferenceNumber, out vacancyReference); try { var searchRequest = new TraineeshipSearchParameters { Location = searchLocation, PageNumber = search.PageNumber, PageSize = search.ResultsPerPage, SearchRadius = search.WithinDistance, SortType = search.SortType }; if (isVacancyReference) { searchRequest.VacancyReference = vacancyReference; } var searchResults = _traineeshipSearchService.Search(searchRequest); if (searchResults.Total == 1) { var exactMatchResponse = _traineeshipSearchMapper.Map <SearchResults <TraineeshipSearchResponse, TraineeshipSearchParameters>, TraineeshipSearchResponseViewModel>(searchResults); exactMatchResponse.ExactMatchFound = true; return(exactMatchResponse); } if (searchResults.Total > 1) { _logger.Info($"{searchResults.Total} results found for Vacancy Reference Number {vacancyReference}"); } var searchResponse = _traineeshipSearchMapper.Map <SearchResults <TraineeshipSearchResponse, TraineeshipSearchParameters>, TraineeshipSearchResponseViewModel>( searchResults); searchResponse.TotalHits = searchResults.Total; searchResponse.PageSize = search.ResultsPerPage; searchResponse.VacancySearch = search; return(searchResponse); } catch (CustomException ex) { // ReSharper disable once FormatStringProblem _logger.Error("Find traineeship vacancies failed. Check inner details for more info", ex); return(new TraineeshipSearchResponseViewModel(VacancySearchResultsPageMessages.VacancySearchFailed)); } catch (Exception e) { _logger.Error("Find traineeship vacancies failed. Check inner details for more info", e); throw; } }
public TraineeshipSearchResponseViewModel FindVacancies(TraineeshipSearchViewModel search) { _logger.Debug("Calling SearchProvider to find traineeship vacancies."); var searchLocation = _traineeshipSearchMapper.Map <TraineeshipSearchViewModel, Location>(search); try { var searchRequest = new TraineeshipSearchParameters { Location = searchLocation, PageNumber = search.PageNumber, PageSize = search.ResultsPerPage, SearchRadius = search.WithinDistance, SortType = search.SortType, }; var searchResults = _traineeshipSearchService.Search(searchRequest); var searchResponse = _traineeshipSearchMapper.Map <SearchResults <TraineeshipSearchResponse, TraineeshipSearchParameters>, TraineeshipSearchResponseViewModel>( searchResults); searchResponse.TotalHits = searchResults.Total; searchResponse.PageSize = search.ResultsPerPage; searchResponse.VacancySearch = search; return(searchResponse); } catch (CustomException ex) { // ReSharper disable once FormatStringProblem _logger.Error("Find traineeship vacancies failed. Check inner details for more info", ex); return(new TraineeshipSearchResponseViewModel(VacancySearchResultsPageMessages.VacancySearchFailed)); } catch (Exception e) { _logger.Error("Find traineeship vacancies failed. Check inner details for more info", e); throw; } }
public ApprenticeshipSearchResponseViewModel FindVacancies(ApprenticeshipSearchViewModel search) { _logger.Debug("Calling SearchProvider to find apprenticeship vacancies."); var searchLocation = _apprenticeshipSearchMapper.Map <ApprenticeshipSearchViewModel, Location>(search); try { string vacancyReference; var isVacancyReference = VacancyHelper.TryGetVacancyReference(search.Keywords, out vacancyReference); if ((search.SearchField == ApprenticeshipSearchField.All.ToString() && isVacancyReference) || search.SearchField == ApprenticeshipSearchField.ReferenceNumber.ToString()) { if (isVacancyReference) { var searchParameters = new ApprenticeshipSearchParameters { VacancyReference = vacancyReference, PageNumber = 1, PageSize = 1 }; var searchResults = _apprenticeshipSearchService.Search(searchParameters); //Expect only a single result. Any other number should be interpreted as no results if (searchResults.Total == 1) { var exactMatchResponse = _apprenticeshipSearchMapper.Map <SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters>, ApprenticeshipSearchResponseViewModel>(searchResults); exactMatchResponse.ExactMatchFound = true; return(exactMatchResponse); } if (searchResults.Total > 1) { _logger.Info("{0} results found for Vacancy Reference Number {1} parsed from {2}. Expected 0 or 1", searchResults.Total, vacancyReference, search.Keywords); } } var response = new ApprenticeshipSearchResponseViewModel { Vacancies = new List <ApprenticeshipVacancySummaryViewModel>(), VacancySearch = search }; return(response); } var results = ProcessNationalAndNonNationalSearches(search, searchLocation); var nationalResults = results[ResultsKeys.National]; var nonNationalResults = results[ResultsKeys.NonNational]; var unfilteredResults = results[ResultsKeys.Unfiltered]; var nationalResponse = _apprenticeshipSearchMapper.Map <SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters>, ApprenticeshipSearchResponseViewModel>(nationalResults); nationalResponse.VacancySearch = search; var nonNationalResponse = _apprenticeshipSearchMapper.Map <SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters>, ApprenticeshipSearchResponseViewModel>(nonNationalResults); nonNationalResponse.VacancySearch = search; if (search.LocationType == ApprenticeshipLocationType.NonNational) { nonNationalResponse.TotalLocalHits = nonNationalResults.Total; nonNationalResponse.TotalNationalHits = nationalResults.Total; nonNationalResponse.PageSize = search.ResultsPerPage; if (nonNationalResults.Total == 0 && nationalResults.Total > 0) { nonNationalResponse.Vacancies = nationalResponse.Vacancies; var vacancySearch = nonNationalResponse.VacancySearch; if (vacancySearch.SearchAction == SearchAction.Search || vacancySearch.SortType == VacancySearchSortType.Distance) { vacancySearch.SortType = string.IsNullOrWhiteSpace(vacancySearch.Keywords) ? VacancySearchSortType.ClosingDate : VacancySearchSortType.Relevancy; } vacancySearch.LocationType = ApprenticeshipLocationType.National; SetAggregationResults(nonNationalResponse, nationalResults.AggregationResults, unfilteredResults.AggregationResults); } else { SetAggregationResults(nonNationalResponse, nonNationalResults.AggregationResults, unfilteredResults.AggregationResults); } return(nonNationalResponse); } nationalResponse.TotalLocalHits = nonNationalResults.Total; nationalResponse.TotalNationalHits = nationalResults.Total; nationalResponse.PageSize = search.ResultsPerPage; if (nationalResults.Total == 0 && nonNationalResults.Total > 0) { nationalResponse.Vacancies = nonNationalResponse.Vacancies; SetAggregationResults(nonNationalResponse, nonNationalResults.AggregationResults, unfilteredResults.AggregationResults); } else { SetAggregationResults(nonNationalResponse, nationalResults.AggregationResults, unfilteredResults.AggregationResults); } return(nationalResponse); } catch (CustomException ex) { _logger.Error("Find apprenticeship vacancies failed. Check inner details for more info", ex); return(new ApprenticeshipSearchResponseViewModel(VacancySearchResultsPageMessages.VacancySearchFailed)); } catch (Exception e) { _logger.Error("Find apprenticeship vacancies failed. Check inner details for more info", e); throw; } }