private async Task <bool> IsSearchParametersValidAsync(SearchParametersViewModel viewModel) { var result = true; var routeIds = await _routePathService.GetRouteIdsAsync(); if (viewModel.SelectedRouteId == null || routeIds.All(id => id != viewModel.SelectedRouteId)) { ModelState.AddModelError("SelectedRouteId", "You must select a valid skill area"); result = false; } var(isValid, formattedPostcode) = await _locationService.IsValidPostcodeAsync(viewModel.Postcode); if (string.IsNullOrWhiteSpace(viewModel.Postcode) || !isValid) { ModelState.AddModelError("Postcode", "You must enter a real postcode"); result = false; } else { viewModel.Postcode = formattedPostcode; } return(result); }
public When_ProviderProximity_Controller_RefineSearchResults_Is_Called() { var locationService = Substitute.For <ILocationService>(); locationService.IsValidPostcodeAsync(Arg.Any <string>()).Returns((true, "CV1 2WT")); var opportunityProximityService = Substitute.For <IOpportunityProximityService>(); _routeService = Substitute.For <IRoutePathService>(); _routeService.GetRouteIdsAsync().Returns(new List <int> { 1, 2 }); var opportunityService = Substitute.For <IOpportunityService>(); var opportunityProximityController = new OpportunityProximityController(_routeService, opportunityProximityService, opportunityService, locationService); var viewModel = new SearchParametersViewModel { Postcode = "CV12WT", SelectedRouteId = 1, CompanyNameWithAka = "CompanyName (AlsoKnownAs)" }; _result = opportunityProximityController.RefineSearchResultsAsync(viewModel).GetAwaiter().GetResult(); }
public When_OpportunityProximity_Controller_RefineSearchResults_Is_Called_With_Invalid_Postcode() { const string requestPostcode = "CV1234"; var httpClient = new TestPostcodesIoHttpClient().Get(requestPostcode); var routes = new List <SelectListItem> { new SelectListItem { Text = "1", Value = "Route 1" } }; var locationService = new LocationService(new LocationApiClient(httpClient, new MatchingConfiguration { PostcodeRetrieverBaseUrl = "https://api.postcodes.io" })); var opportunityProximityService = new OpportunityProximityService(Substitute.For <ISearchProvider>(), locationService); var routePathService = Substitute.For <IRoutePathService>(); routePathService.GetRouteSelectListItemsAsync().Returns(routes); var opportunityService = Substitute.For <IOpportunityService>(); _opportunityProximityController = new OpportunityProximityController(routePathService, opportunityProximityService, opportunityService, locationService); var viewModel = new SearchParametersViewModel { Postcode = "CV1234", SelectedRouteId = 1 }; _result = _opportunityProximityController.RefineSearchResultsAsync(viewModel).GetAwaiter().GetResult(); }
public When_OpportunityProximity_Controller_RefineSearchResults_Is_Called_With_Unformatted_Postcode() { const string requestPostcode = "Cv 12 Wt"; var httpClient = new TestPostcodesIoHttpClient().Get(requestPostcode); var locationService = new LocationService(new LocationApiClient(httpClient, new MatchingConfiguration { PostcodeRetrieverBaseUrl = "https://api.postcodes.io" })); var opportunityProximityService = new OpportunityProximityService(Substitute.For <ISearchProvider>(), locationService); _routeService = Substitute.For <IRoutePathService>(); _routeService.GetRouteIdsAsync().Returns(new List <int> { 1, 2 }); var opportunityService = Substitute.For <IOpportunityService>(); var opportunityProximityController = new OpportunityProximityController(_routeService, opportunityProximityService, opportunityService, locationService); var viewModel = new SearchParametersViewModel { Postcode = requestPostcode, SelectedRouteId = 1 }; _result = opportunityProximityController.RefineSearchResultsAsync(viewModel).GetAwaiter().GetResult(); }
public IActionResult SearchForCustomer(SearchParametersViewModel model) { if (model.City == null && model.Name == null) { ViewBag.Message = "At least one field is mandatory"; return(View()); } var result = _customerService.GetCustomersByCityOrName(model.Name, model.City); var resultViewModel = new List <SearchParametersViewModel>(); foreach (var item in result) { var newItem = new SearchParametersViewModel(); newItem.City = item.City; newItem.CustomerId = item.CustomerId; newItem.Name = item.Givenname + " " + item.Surname; newItem.NationalId = item.NationalId; newItem.Adress = item.Streetaddress; resultViewModel.Add(newItem); } var jsonList = JsonConvert.SerializeObject(resultViewModel); HttpContext.Session.SetString("SearchResults", jsonList); return(View("SearchResults", resultViewModel.ToPagedList(1, pageSize))); }
public async Task <IActionResult> Index(int?opportunityId = null) { var viewModel = new SearchParametersViewModel { OpportunityId = opportunityId ?? 0, SelectedRouteId = null, Postcode = null }; return(View(nameof(Index), await GetSearchParametersViewModelAsync(viewModel))); }
public async Task <IActionResult> RefineSearchResultsAsync(SearchParametersViewModel viewModel) { if (!ModelState.IsValid || !await IsSearchParametersValidAsync(viewModel)) { return(View("Results", new OpportunityProximitySearchViewModel { SearchParameters = await GetSearchParametersViewModelAsync(viewModel), SearchResults = new OpportunityProximitySearchResultsViewModel(), IsValidSearch = false })); } return(RedirectToRoute("GetOpportunityProviderResults", viewModel)); }
public IActionResult SelectCustomer(SearchParametersViewModel model) { if (ModelState.IsValid) { var customerModel = CreateCustomerViewModel(model.CustomerId); if (customerModel == null) { ViewBag.Message = "No customer found by that id number"; return(View()); } return(View("CustomerDetails", customerModel)); } return(View()); }
public async Task <IActionResult> GetOpportunityProviderResultsAsync(SearchParametersViewModel searchParametersViewModel) { if (!ModelState.IsValid || !await IsSearchParametersValidAsync(searchParametersViewModel)) { return(View("Results", new OpportunityProximitySearchViewModel { SearchParameters = await GetSearchParametersViewModelAsync(searchParametersViewModel), SearchResults = new OpportunityProximitySearchResultsViewModel(), IsValidSearch = false })); } var resultsViewModel = await GetSearchResultsAsync(searchParametersViewModel); return(View("Results", resultsViewModel)); }
public async Task <IActionResult> FindProviders(SearchParametersViewModel viewModel) { if (!ModelState.IsValid || !await IsSearchParametersValidAsync(viewModel)) { return(View(nameof(Index), await GetSearchParametersViewModelAsync(viewModel))); } return(RedirectToRoute("GetOpportunityProviderResults", new SearchParametersViewModel { SelectedRouteId = viewModel.SelectedRouteId, Postcode = viewModel.Postcode, OpportunityId = viewModel.OpportunityId, OpportunityItemId = viewModel.OpportunityItemId, CompanyNameWithAka = viewModel.CompanyNameWithAka })); }
public When_OpportunityProximity_Controller_FindProviders_Is_Called_With_Invalid_Postcode() { const string requestPostcode = "cV12 34"; var httpClient = new TestPostcodesIoHttpClient().Get(requestPostcode); var routes = new List <SelectListItem> { new SelectListItem { Text = "1", Value = "Route 1" }, new SelectListItem { Text = "2", Value = "Route 2" } }; var config = new MapperConfiguration(c => c.AddMaps(typeof(SearchParametersViewModelMapper).Assembly)); IMapper mapper = new Mapper(config); var locationService = new LocationService( new LocationApiClient(httpClient, new MatchingConfiguration { PostcodeRetrieverBaseUrl = "https://api.postcodes.io" })); var opportunityProximityService = new OpportunityProximityService(Substitute.For <ISearchProvider>(), locationService); var routePathService = Substitute.For <IRoutePathService>(); routePathService.GetRouteSelectListItemsAsync().Returns(routes); var opportunityService = Substitute.For <IOpportunityService>(); _opportunityProximityController = new OpportunityProximityController(routePathService, opportunityProximityService, opportunityService, locationService); var selectedRouteId = routes.First().Text; const string postcode = requestPostcode; var viewModel = new SearchParametersViewModel { RoutesSelectList = mapper.Map <SelectListItem[]>(routes), SelectedRouteId = int.Parse(selectedRouteId), Postcode = postcode }; _result = _opportunityProximityController.FindProviders(viewModel).GetAwaiter().GetResult(); }
public async Task <JsonResult> CreateSearch([FromBody] SearchParametersViewModel searchCriteria) { if (ModelState.IsValid) { var search = new Search() { Customer = await _customerSevice.GetCustomer(searchCriteria.CustomerId), Deposit = searchCriteria.Deposit, PropertyValue = searchCriteria.PropertyValue, MortgageType = (MortgageTypeIdentifier)searchCriteria.MortgageType }; var searchId = await _searchService.CreateSearch(search); return(new JsonResult(new { searchId = searchId })); } Response.StatusCode = (int)HttpStatusCode.BadRequest; return(new JsonResult("")); }
public When_OpportunityProximity_Controller_FindProviders_Is_Called_For_Invalid_Postcode() { var locationService = Substitute.For <ILocationService>(); locationService.IsValidPostcodeAsync(Arg.Any <string>()).Returns((false, null)); var opportunityProximityService = Substitute.For <IOpportunityProximityService>(); _routeService = Substitute.For <IRoutePathService>(); _routeService.GetRouteIdsAsync().Returns(new List <int> { 1, 2 }); var opportunityService = Substitute.For <IOpportunityService>(); var opportunityProximityController = new OpportunityProximityController(_routeService, opportunityProximityService, opportunityService, locationService); const string postcode = "XYZ A12"; var viewModel = new SearchParametersViewModel { RoutesSelectList = new List <SelectListItem> { new SelectListItem { Text = "1", Value = "Route 1" }, new SelectListItem { Text = "2", Value = "Route 2" } }, SelectedRouteId = 1, Postcode = postcode }; _result = opportunityProximityController.FindProviders(viewModel).GetAwaiter().GetResult(); }
private async Task <SearchParametersViewModel> GetSearchParametersViewModelAsync(SearchParametersViewModel viewModel) { if (viewModel.OpportunityId > 0 && string.IsNullOrEmpty(viewModel.CompanyNameWithAka)) { viewModel.CompanyNameWithAka = await _opportunityService.GetCompanyNameWithAkaAsync(viewModel.OpportunityId); } var routes = await _routePathService.GetRouteSelectListItemsAsync(); return(new SearchParametersViewModel { RoutesSelectList = routes, SelectedRouteId = viewModel.SelectedRouteId, Postcode = viewModel.Postcode?.Trim(), OpportunityId = viewModel.OpportunityId, OpportunityItemId = viewModel.OpportunityItemId, CompanyNameWithAka = viewModel.CompanyNameWithAka, PreviousPostcode = viewModel.PreviousPostcode, PreviousSelectedRouteId = viewModel.PreviousSelectedRouteId, HasUserChangedSearchParameters = viewModel.HasUserChangedSearchParameters }); }
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 ActionResult SubmitSearch(SearchParametersViewModel param) { return(Redirect("/Collection/GetCollection/" + param.Quantity.ToString())); }