private async Task Validate(PlacementInformationSaveViewModel viewModel) { var opportunityItem = await _opportunityService.GetOpportunityItemAsync(viewModel.OpportunityItemId); if (opportunityItem != null) { viewModel.Postcode = opportunityItem.Postcode; viewModel.SearchRadius = opportunityItem.SearchRadius; viewModel.RouteId = opportunityItem.RouteId; } if (viewModel.SearchResultProviderCount > 0 && viewModel.OpportunityType == OpportunityType.ProvisionGap) { if (!viewModel.NoSuitableStudent && !viewModel.HadBadExperience && !viewModel.ProvidersTooFarAway) { ModelState.AddModelError(nameof(viewModel.NoSuitableStudent), "You must tell us why the employer did not choose a provider"); } } if (!viewModel.PlacementsKnown.HasValue || !viewModel.PlacementsKnown.Value) { return; } if (!viewModel.Placements.HasValue) { ModelState.AddModelError(nameof(viewModel.Placements), "You must estimate how many students the employer wants for this job at this location"); } else if (viewModel.Placements < 1) { ModelState.AddModelError(nameof(viewModel.Placements), "The number of students must be 1 or more"); } else if (viewModel.Placements > 999) { ModelState.AddModelError(nameof(viewModel.Placements), "The number of students must be 999 or less"); } }
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); }
public When_OpportunityProximity_Controller_Results_Is_Loaded_With_Existing_Opportunity() { var providerSearchResultDto = new List <OpportunityProximitySearchResultViewModelItem> { new OpportunityProximitySearchResultViewModelItem { ProviderVenuePostcode = Postcode, Distance = 1.5d, ProviderVenueId = ProviderVenueId, ProviderVenueName = ProviderVenueDisplayName, ProviderDisplayName = ProviderDisplayName } }; var locationService = Substitute.For <ILocationService>(); locationService.IsValidPostcodeAsync(Arg.Any <string>()).Returns((true, Postcode)); var routeService = Substitute.For <IRoutePathService>(); routeService.GetRouteIdsAsync().Returns(new List <int> { 1, 2 }); _opportunityProximityService = Substitute.For <IOpportunityProximityService>(); _opportunityProximityService .SearchOpportunitiesByPostcodeProximityAsync(Arg.Is <OpportunityProximitySearchParametersDto>(a => a.Postcode == Postcode && a.SelectedRouteId == RouteId)) .Returns(providerSearchResultDto); _opportunityService = Substitute.For <IOpportunityService>(); _opportunityService.GetOpportunityItemAsync(OpportunityItemId) .Returns(new OpportunityItemDto { OpportunityId = OpportunityId, OpportunityItemId = OpportunityItemId, Postcode = Postcode, RouteId = RouteId }); _opportunityService.GetReferralsAsync(OpportunityItemId).Returns(new List <ReferralDto> { new ReferralDto { ProviderVenueId = ProviderVenueId, Name = "Referral" } }); _opportunityService .GetCompanyNameWithAkaAsync(OpportunityId) .Returns("CompanyName (AlsoKnownAs)"); var opportunityProximityController = new OpportunityProximityController(routeService, _opportunityProximityService, _opportunityService, locationService); _result = opportunityProximityController.GetOpportunityProviderResultsAsync(new SearchParametersViewModel { SelectedRouteId = RouteId, Postcode = Postcode, OpportunityId = OpportunityId, OpportunityItemId = OpportunityItemId }).GetAwaiter().GetResult(); }