public async void CandidateSearchTest()
        {
            // Arrange
            var candidates = GetCandidateList();

            var searchRequest = new CandidateSearchRequest
            {
                Name = "Jason"
            };

            var mockRepo = new Mock <IRepository <Candidate> >();

            mockRepo.Setup(m => m.SearchAsync(It.IsAny <Expression <Func <Candidate, bool> > >()))
            .ReturnsAsync((Expression <Func <Candidate, bool> > predicate) =>
            {
                return(candidates.Where(predicate.Compile()));
            });

            var candidateService = new CandidateService(mockRepo.Object);

            // Act
            var res = await candidateService.SearchAsync(searchRequest);

            // Assert
            Assert.Single(res.ToList());
        }
        private async void BtnSearch_Click(object sender, EventArgs e)
        {
            var search = new CandidateSearchRequest
            {
                FirstName = txtSearch.Text,
                Username  = txtSearch.Text
            };
            var result = await _apiService.GetAll <List <Model.Candidate> >(search);

            dgvCandidatesData.AutoGenerateColumns = false;
            dgvCandidatesData.DataSource          = result;
        }
        public CandidateSearchResultsViewModel SearchCandidates(CandidateSearchViewModel searchViewModel, string ukprn)
        {
            var dateOfBirth = string.IsNullOrEmpty(searchViewModel.DateOfBirth) ? (DateTime?)null : DateTime.Parse(searchViewModel.DateOfBirth, _dateCultureInfo);

            IEnumerable <int> providerSiteIds = null;

            if (!string.IsNullOrEmpty(ukprn))
            {
                var providerId         = _providerService.GetProvider(ukprn).ProviderId;
                var ownedProviderSites = _providerService.GetOwnedProviderSites(providerId);
                providerSiteIds = ownedProviderSites.Select(ps => ps.ProviderSiteId).ToList();
            }

            var request    = new CandidateSearchRequest(searchViewModel.FirstName, searchViewModel.LastName, dateOfBirth, searchViewModel.Postcode, CandidateSearchExtensions.GetCandidateGuidPrefix(searchViewModel.ApplicantId), CandidateSearchExtensions.GetCandidateId(searchViewModel.ApplicantId), providerSiteIds, !string.IsNullOrEmpty(ukprn));
            var candidates = _candidateSearchService.SearchCandidates(request) ?? new List <CandidateSummary>();

            var results = new CandidateSearchResultsViewModel
            {
                SearchViewModel = searchViewModel,
                Candidates      = new PageableViewModel <CandidateSummaryViewModel>
                {
                    Page =
                        candidates.OrderBy(c => c.LastName)
                        .ThenBy(c => c.FirstName)
                        .ThenBy(c => c.Address.Postcode)
                        .ThenBy(c => c.Address.AddressLine1)
                        .Skip((searchViewModel.CurrentPage - 1) * searchViewModel.PageSize)
                        .Take(searchViewModel.PageSize)
                        .Select(c => _mapper.Map <CandidateSummary, CandidateSummaryViewModel>(c))
                        .ToList(),
                    ResultsCount       = candidates.Count,
                    CurrentPage        = searchViewModel.CurrentPage,
                    TotalNumberOfPages =
                        candidates.Count == 0
                            ? 1
                            : (int)Math.Ceiling((double)candidates.Count / searchViewModel.PageSize)
                }
            };

            return(results);
        }
        public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request)
        {
            _logger.Debug("Calling repository to find candidates matching search request {0}", request);

            if (string.IsNullOrEmpty(request.FirstName) && string.IsNullOrEmpty(request.LastName) && request.DateOfBirth == null && string.IsNullOrEmpty(request.Postcode))
            {
                throw new ArgumentException("You must specify at least one search parameter");
            }

            var query = new List <IMongoQuery>();

            if (!string.IsNullOrEmpty(request.FirstName))
            {
                query.Add(Query <MongoCandidate> .Matches(c => c.RegistrationDetails.FirstName, $@"/^{request.FirstName}$/i"));
            }
            if (!string.IsNullOrEmpty(request.LastName))
            {
                query.Add(Query <MongoCandidate> .Matches(c => c.RegistrationDetails.LastName, $@"/^{request.LastName}$/i"));
            }
            if (request.DateOfBirth.HasValue)
            {
                query.Add(Query <MongoCandidate> .EQ(c => c.RegistrationDetails.DateOfBirth, request.DateOfBirth));
            }
            if (!string.IsNullOrEmpty(request.Postcode))
            {
                query.Add(Query <MongoCandidate> .Matches(c => c.RegistrationDetails.Address.Postcode, $@"/^{request.Postcode}$/i"));
            }

            var candidates = Collection
                             .Find(Query.And(query))
                             .SetFields(Fields <MongoCandidate> .Include(c => c.RegistrationDetails))
                             .Select(c => _mapper.Map <MongoCandidate, CandidateSummary>(c))
                             .ToList();

            _logger.Debug("Found {1} candidates matching search request {0}", request, candidates.Count);

            return(candidates);
        }
Exemple #5
0
        public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request)
        {
            _logger.Debug("Calling CandidateReadRepository to search for candidates that match {0}.", request);

            return(_candidateReadRepository.SearchCandidates(request));
        }
Exemple #6
0
        public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request)
        {
            Condition.Requires(request);

            return(_searchCandidatesStrategy.SearchCandidates(request));
        }
        public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request)
        {
            _logService.Debug("Calling repository to find candidates matching search request {0}", request);

            if (string.IsNullOrEmpty(request.FirstName) && string.IsNullOrEmpty(request.LastName) && request.DateOfBirth == null && string.IsNullOrEmpty(request.Postcode) && string.IsNullOrEmpty(request.CandidateGuidPrefix) && !request.CandidateId.HasValue)
            {
                throw new ArgumentException("You must specify at least one search parameter");
            }

            var query = new List <string>(4);

            if (!string.IsNullOrEmpty(request.FirstName))
            {
                query.Add("p.FirstName LIKE @FirstName + '%'");
            }
            if (!string.IsNullOrEmpty(request.LastName))
            {
                query.Add("p.Surname LIKE @LastName + '%'");
            }
            if (request.DateOfBirth.HasValue)
            {
                query.Add("c.DateofBirth = @DateOfBirth");
            }
            if (!string.IsNullOrEmpty(request.Postcode))
            {
                query.Add("c.Postcode LIKE @Postcode + '%'");
            }
            if (!string.IsNullOrEmpty(request.CandidateGuidPrefix))
            {
                query.Add("c.CandidateGuid LIKE @CandidateGuidPrefix + '%'");
            }
            if (request.CandidateId.HasValue)
            {
                query.Add("c.CandidateId = @CandidateId");
            }
            if (request.ProviderSiteIds != null)
            {
                query.Add("(VacancyManagerId IN @providerSiteIds OR DeliveryOrganisationId IN @providerSiteIds)");
            }
            if (request.HasSubmittedApplications)
            {
                query.Add("a.ApplicationStatusTypeId >= 2");
            }

            var sql =
                @"SELECT DISTINCT c.CandidateId, c.CandidateGuid, p.FirstName, p.MiddleNames, p.Surname, c.DateofBirth, 
c.AddressLine1, c.AddressLine2, c.AddressLine3, c.AddressLine4, c.Postcode, c.Town, ct.FullName As County, c.Latitude, c.Longitude
FROM Person p
JOIN Candidate c ON p.PersonId = c.PersonId
JOIN County ct on c.CountyId = ct.CountyId 
LEFT JOIN [Application] a ON c.CandidateId = a.CandidateId
LEFT JOIN Vacancy v ON a.VacancyId = v.VacancyId 
WHERE " + string.Join(" AND ", query);

            var candidates = CandidateMapper.Map <IEnumerable <DbCandidateSummary>, IEnumerable <CandidateSummary> >(
                _getOpenConnection.Query <DbCandidateSummary>(sql,
                                                              new
            {
                request.FirstName,
                request.LastName,
                request.DateOfBirth,
                request.Postcode,
                request.CandidateGuidPrefix,
                request.CandidateId,
                request.ProviderSiteIds
            })).ToList();

            _logService.Debug("Found {1} candidates matching search request {0}", request, candidates.Count);

            return(candidates);
        }
 public async Task <IEnumerable <Candidate> > SearchAsync(CandidateSearchRequest candidateSearchRequest)
 {
     return(await _repository.SearchAsync(candidate =>
                                          candidate.Name.Contains(candidateSearchRequest.Name)
                                          ));
 }