private async Task SetProviderIsSelectedAsync(OpportunityProximitySearchViewModel resultsViewModel)
        {
            var referrals = await _opportunityService.GetReferralsAsync(resultsViewModel.SearchParameters.OpportunityItemId);

            foreach (var result in resultsViewModel.SearchResults.Results)
            {
                if (referrals.Any(r => r.ProviderVenueId == result.ProviderVenueId))
                {
                    result.IsSelected = true;
                }
            }
        }
        private async Task <OpportunityProximitySearchViewModel> GetSearchResultsAsync(SearchParametersViewModel viewModel)
        {
            var searchResults = await _opportunityProximityService.SearchOpportunitiesByPostcodeProximityAsync(new OpportunityProximitySearchParametersDto
            {
                Postcode        = viewModel.Postcode,
                SelectedRouteId = viewModel.SelectedRouteId,
                SearchRadius    = SearchParametersViewModel.DefaultSearchRadius
            });

            var additionalResults = searchResults.Any()
                ? new List <OpportunityProximitySearchResultByRouteViewModelItem>()
                : await _opportunityProximityService.SearchOpportunitiesForOtherRoutesByPostcodeProximityAsync(new OpportunityProximitySearchParametersDto
            {
                Postcode        = viewModel.Postcode,
                SelectedRouteId = viewModel.SelectedRouteId,
                SearchRadius    = SearchParametersViewModel.ZeroResultsSearchRadius
            });

            var resultsViewModel = new OpportunityProximitySearchViewModel
            {
                SearchResults = new OpportunityProximitySearchResultsViewModel
                {
                    Results           = searchResults,
                    AdditionalResults = additionalResults
                },
                SearchParameters  = await GetSearchParametersViewModelAsync(viewModel),
                OpportunityId     = viewModel.OpportunityId,
                OpportunityItemId = viewModel.OpportunityItemId
            };

            if (searchResults.Any() &&
                viewModel.OpportunityId != 0 &&
                viewModel.OpportunityItemId != 0 &&
                !viewModel.HasUserChangedSearchParameters)
            {
                var opportunityItem =
                    await _opportunityService.GetOpportunityItemAsync(resultsViewModel.SearchParameters
                                                                      .OpportunityItemId);

                if (opportunityItem != null &&
                    opportunityItem.Postcode == resultsViewModel.SearchParameters.Postcode &&
                    opportunityItem.RouteId == resultsViewModel.SearchParameters.SelectedRouteId)
                {
                    await SetProviderIsSelectedAsync(resultsViewModel);
                }
            }

            if (!resultsViewModel.SearchParameters.HasUserChangedSearchParameters &&
                (resultsViewModel.SearchParameters.PreviousPostcode != null &&
                 resultsViewModel.SearchParameters.PreviousPostcode != viewModel.Postcode) ||
                (resultsViewModel.SearchParameters.PreviousSelectedRouteId != null &&
                 resultsViewModel.SearchParameters.PreviousSelectedRouteId != viewModel.SelectedRouteId))
            {
                //Set a flag to stop results being re-selected if user has changed search parameters
                resultsViewModel.SearchParameters.HasUserChangedSearchParameters = true;
            }

            resultsViewModel.SearchParameters.PreviousPostcode        = viewModel.Postcode;
            resultsViewModel.SearchParameters.PreviousSelectedRouteId = viewModel.SelectedRouteId;

            return(resultsViewModel);
        }