public EmployerSearchViewModel GetVacancyOwnerRelationshipViewModels(int providerSiteId) { var pageSize = _configurationService.Get <RecruitWebConfiguration>().PageSize; var parameters = new EmployerSearchRequest(providerSiteId); var vacancyParties = _providerService.GetVacancyOwnerRelationships(parameters, 1, pageSize); var employerIds = vacancyParties.Page .Select(vacancyOwnerRelationship => vacancyOwnerRelationship.EmployerId) .Distinct(); var employers = _employerService.GetEmployers(employerIds); var resultsPage = vacancyParties.ToViewModel(vacancyParties.Page // Exclude employers from search results that are NOT returned from Employer Service, status may be 'Suspended' etc. .Where(vacancyOwnerRelationship => employers .Any(employer => employer.EmployerId == vacancyOwnerRelationship.EmployerId)) .Select(vacancyOwnerRelationship => vacancyOwnerRelationship.Convert(employers.Single(employer => employer.EmployerId == vacancyOwnerRelationship.EmployerId)) .Employer)); return(new EmployerSearchViewModel { ProviderSiteId = providerSiteId, Employers = resultsPage }); }
private static bool IsMatchingAddress(EmployerSearchRequest request, Employer e) { return ((e.Address.Postcode != null && Regex.Replace(e.Address.Postcode, @"\s+", "").ToLower().Contains(request.Location.ToLower())) || (e.Address.AddressLine4 != null && Regex.Replace(e.Address.AddressLine4, @"\s+", "").ToLower().Contains(request.Location.ToLower())) || (e.Address.Town != null && Regex.Replace(e.Address.Town, @"\s+", "").ToLower().Contains(request.Location.ToLower()))); }
public Pageable <VacancyOwnerRelationship> GetVacancyOwnerRelationships(EmployerSearchRequest request, int currentPage, int pageSize) { var results = GetVacancyParties(request); var pageable = new Pageable <VacancyOwnerRelationship> { CurrentPage = currentPage }; var resultCount = results.Count; pageable.Page = results.Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); pageable.ResultsCount = resultCount; pageable.TotalNumberOfPages = resultCount / pageSize + 1; return(pageable); }
public void NameAndLocationRepositorySearch(string addressLine4, string town) { // Arrange. var fromRepository = new List <VacancyOwnerRelationship> { _providerSiteEmployerLink1, _providerSiteEmployerLink2, _providerSiteEmployerLink3 }; _vacancyOwnerRelationshipReadRepository.Setup(r => r. GetByProviderSiteId(ProviderSiteId)) .Returns(fromRepository); var service = new ProviderServiceBuilder() .With(_employerService.Object) .With(_vacancyOwnerRelationshipReadRepository.Object) .Build(); _employer1.Address.AddressLine4 = addressLine4; _employer1.Address.Town = town; var employerName = _employer1.FullName.Substring(0, 10); var location = (addressLine4 ?? town).Substring(0, 15); var employerSearchRequest = new EmployerSearchRequest( ProviderSiteId, employerName, location); var expectedResults = new List <VacancyOwnerRelationship> { _providerSiteEmployerLink1 }; // Act. var linksPage = service.GetVacancyOwnerRelationships(employerSearchRequest, CurrentPage, PageSize); // Assert. linksPage.Should().NotBeNull(); linksPage.Page.Count().Should().Be(expectedResults.Count); linksPage.Page.ShouldBeEquivalentTo(expectedResults); linksPage.ResultsCount.Should().Be(expectedResults.Count); linksPage.TotalNumberOfPages.Should().Be(1); }
public EmployerSearchViewModel GetVacancyOwnerRelationshipViewModels(EmployerSearchViewModel viewModel) { EmployerSearchRequest parameters; switch (viewModel.FilterType) { case EmployerFilterType.EdsUrn: parameters = new EmployerSearchRequest(viewModel.ProviderSiteId, viewModel.EdsUrn); break; case EmployerFilterType.NameAndLocation: case EmployerFilterType.NameOrLocation: parameters = new EmployerSearchRequest(viewModel.ProviderSiteId, viewModel.Name, viewModel.Location); break; case EmployerFilterType.Undefined: parameters = new EmployerSearchRequest(viewModel.ProviderSiteId); break; default: throw new ArgumentOutOfRangeException(nameof(viewModel), viewModel.FilterType, string.Empty); } var pageSize = _configurationService.Get <RecruitWebConfiguration>().PageSize; var vacancyParties = _providerService.GetVacancyOwnerRelationships(parameters, viewModel.Employers.CurrentPage, pageSize); var employerIds = vacancyParties.Page .Select(vp => vp.EmployerId) .Distinct(); var employers = _employerService.GetEmployers(employerIds); var resultsPage = vacancyParties.ToViewModel(vacancyParties.Page // Exclude employers from search results that are NOT returned from Employer Service, status may be 'Suspended' etc. .Where(vacancyOwnerRelationship => employers .Any(employer => employer.EmployerId == vacancyOwnerRelationship.EmployerId)) .Select(vacancyOwnerRelationship => vacancyOwnerRelationship.Convert(employers.Single(employer => employer.EmployerId == vacancyOwnerRelationship.EmployerId)) .Employer)); viewModel.Employers = resultsPage; return(viewModel); }
public void PostCodeRepositorySearch() { var fromRepository = new List <VacancyOwnerRelationship> { _providerSiteEmployerLink1, _providerSiteEmployerLink2, _providerSiteEmployerLink3 }; _vacancyOwnerRelationshipReadRepository.Setup(r => r.GetByProviderSiteId(ProviderSiteId)).Returns(fromRepository); var service = new ProviderServiceBuilder().With(_employerService.Object).With(_vacancyOwnerRelationshipReadRepository.Object).Build(); var employerSearchRequest = new EmployerSearchRequest(ProviderSiteId, null, _employer3.Address.Postcode.Substring(0, 10)); var linksPage = service.GetVacancyOwnerRelationships(employerSearchRequest, CurrentPage, PageSize); var expectedResults = new List <VacancyOwnerRelationship> { _providerSiteEmployerLink3 }; linksPage.Should().NotBeNull(); linksPage.Page.Count().Should().Be(expectedResults.Count); linksPage.Page.ShouldBeEquivalentTo(expectedResults); linksPage.ResultsCount.Should().Be(expectedResults.Count); linksPage.TotalNumberOfPages.Should().Be(1); }
private List <VacancyOwnerRelationship> GetVacancyParties(EmployerSearchRequest request) { Condition.Requires(request).IsNotNull(); _logService.Debug( "Calling VacancyOwnerRelationshipReadRepository to get vacancy party for provider site with Id='{0}'.", request.ProviderSiteId); var vacancyParties = _vacancyOwnerRelationshipReadRepository.GetByProviderSiteId(request.ProviderSiteId).ToList(); if (request.IsQuery) { var employers = _employerService.GetEmployers(vacancyParties.Select(v => v.EmployerId).Distinct()); if (request.IsEmployerEdsUrnQuery) { employers = employers.Where(e => e.EdsUrn == request.EmployerEdsUrn); } else if (request.IsNameAndLocationQuery) { employers = employers.Where(employer => employer.FullName.ToLower().Contains(request.Name.ToLower()) && IsMatchingAddress(request, employer)); } else if (request.IsNameQuery) { employers = employers.Where(e => e.FullName.ToLower().Contains(request.Name.ToLower())); } else if (request.IsLocationQuery) { employers = employers.Where(e => IsMatchingAddress(request, e)); } vacancyParties = vacancyParties.Where(vp => employers.Any(e => e.EmployerId == vp.EmployerId)).ToList(); } return(vacancyParties); }