Beispiel #1
0
        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();
        }