Пример #1
0
        public int GetSearchTotal(PersonSearchRequest searchRequest)
        {
            var criteria = CreateSearchCriteria(searchRequest);

            criteria.SetProjection(Projections.RowCount());
            return((int)criteria.UniqueResult());
        }
Пример #2
0
        public void CanListPeople()
        {
            // Establish Context
            var viewModel = new SearchResultFormViewModel <PersonDto, PersonSearchRequest>();
            IList <PersonDto> personSummariesToExpect = new List <PersonDto>();

            viewModel.SearchRequest   = new PersonSearchRequest();
            viewModel.PageResultItems = personSummariesToExpect;

            var personDto = new PersonDto();

            personSummariesToExpect.Add(personDto);

            var searchRequest = new PersonSearchRequest();

            _personSearchManagementService.Expect(r => r.CreateFormViewModel())
            .Return(viewModel);

            // Act
            ViewResult result = _peopleController.Index().AssertViewRendered();

            // Assert
            result.ViewData.Model.ShouldNotBeNull();
            (result.ViewData.Model as SearchResultFormViewModel <PersonDto, PersonSearchRequest>).ShouldNotBeNull();
            (result.ViewData.Model as SearchResultFormViewModel <PersonDto, PersonSearchRequest>).PageResultItems.Count.
            ShouldEqual(1);
        }
Пример #3
0
        private async Task LoadPerson()
        {
            PersonSearchRequest request = new PersonSearchRequest()
            {
                FirstName = txtFirstName.Text,
                LastName  = txtLastName.Text,
            };

            if (chkMale.Checked)
            {
                request.Gender = "M";
            }
            else if (chkFemale.Checked)
            {
                request.Gender = "F";
            }
            else
            {
                request.Gender = null;
            }

            var list = await _servicePerson.GetAll <List <Person> >(request);

            dgvPersons.DataSource = list;
        }
Пример #4
0
        private SearchResultFormViewModel <PersonDto, PersonSearchRequest> LoadSearchResults(
            PersonSearchRequest searchRequest)
        {
            const int entriesPerPage = 20;
            int       offset         = entriesPerPage * (searchRequest.CurrentPageNumber - 1);

            IList <PersonDto> searchResultItems = _personRepository.Search(searchRequest, offset, entriesPerPage);

            SearchResultFormViewModel <PersonDto, PersonSearchRequest> searchResultFormViewModel =
                CreateFormViewModel(searchRequest);

            //searchResultFormViewModel.SearchRequest = searchRequest;

            searchResultFormViewModel.PageResultItems = searchResultItems;

            int resultCount = _personRepository.GetSearchTotal(searchRequest);

            searchResultFormViewModel.TotalResultCount = resultCount;


            searchResultFormViewModel.CurrentPageNumber = searchRequest.CurrentPageNumber;

            searchResultFormViewModel.TotalPageCount = resultCount / entriesPerPage;
            if (resultCount % entriesPerPage > 0)
            {
                searchResultFormViewModel.TotalPageCount++;
            }

            return(searchResultFormViewModel);
        }
Пример #5
0
        /// <summary>
        /// Dispatch a request based on the <see cref="PersonSearchRequest" dataproviders/>
        /// </summary>
        /// <param name="personSearchRequest"></param>
        /// <param name="searchRequestId"></param>
        /// <returns></returns>
        public async Task Dispatch(PersonSearchRequest personSearchRequest, Guid searchRequestId)
        {
            if (personSearchRequest == null)
            {
                throw new ArgumentNullException(nameof(personSearchRequest));
            }
            if (searchRequestId.Equals(default(Guid)))
            {
                throw new ArgumentNullException(nameof(searchRequestId));
            }

            if (personSearchRequest.DataProviders == null)
            {
                await Task.CompletedTask;
                return;
            }

            foreach (var requestDataProvider in personSearchRequest.DataProviders)
            {
                var endpoint = await getEndpointAddress(requestDataProvider.Name);

                await endpoint.Send <PersonSearchOrdered>(new PeopleController.PersonSearchOrderEvent(searchRequestId, personSearchRequest.FileID)
                {
                    Person = personSearchRequest
                });
            }
        }
Пример #6
0
        public virtual void CanGetSearchTotal()
        {
            var searchRequest = new PersonSearchRequest();

            searchRequest.NameQuery = "zamor";

            int results = _personRepository.GetSearchTotal(searchRequest);

            Assert.That(results == 1);
        }
Пример #7
0
        public virtual void CanSearch()
        {
            var searchRequest = new PersonSearchRequest();

            searchRequest.NameQuery = "e";

            IList <PersonDto> results = _personRepository.Search(searchRequest, 0, 20);

            Assert.That(results.Count > 1 && results.Count <= 20);
        }
Пример #8
0
        public SearchResultFormViewModel <PersonDto, PersonSearchRequest> CreateFormViewModel(
            PersonSearchRequest searchRequest)
        {
            var viewModel = new SearchResultFormViewModel <PersonDto, PersonSearchRequest> {
                SearchRequest = searchRequest
            };

            searchRequest.Supervisors = _personRepository.GetActiveSupervisors(-1, "LastName", "Asc");

            return(viewModel);
        }
Пример #9
0
        public SearchResultFormViewModel <PersonDto, PersonSearchRequest> CreateFormViewModel()
        {
            var searchRequest = new PersonSearchRequest
            {
                Supervisors = _personRepository.GetActiveSupervisors(-1, "LastName", "Asc")
            };
            SearchResultFormViewModel <PersonDto, PersonSearchRequest> viewModel = Search(searchRequest);

            viewModel.SearchRequest = searchRequest;
            return(viewModel);
        }
Пример #10
0
        public HttpResponseMessage PersonSearch([FromUri] PersonSearchRequest model)
        {
            int rows = 0;
            List <PersonBase> person = _personService.PersonBaseSearch(model, out rows);
            SearchResponse <PersonBase>
            response = new SearchResponse <PersonBase>();

            response.Items       = person;
            response.ResultCount = rows;

            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
Пример #11
0
        public override Task <PersonResponse> GetPersonById(PersonSearchRequest request, ServerCallContext context)
        {
            var query  = new GetPersonByIdQuery(request.Id);
            var result = Task.FromResult(_mediater.Send(query));

            return(Task.FromResult(new PersonResponse
            {
                Id = 1,
                Firstname = "FirstName",
                Lastname = "Lastname",
            }));
        }
Пример #12
0
        public void With_args_it_should_create()
        {
            var sut = new PersonSearchRequest("firstName", "lastName", new DateTime(2001, 1, 12), new List <PersonalIdentifier>(), new List <Address>(), new List <Phone>(), new List <Name>(), new List <RelatedPerson>(), new List <Employment>(), new List <DataProvider>(), "SearchRequestKey");

            Assert.AreEqual("firstName", sut.FirstName);
            Assert.AreEqual("lastName", sut.LastName);
            if (sut.DateOfBirth != null)
            {
                Assert.AreEqual(2001, sut.DateOfBirth.Value.Year);
                Assert.AreEqual(1, sut.DateOfBirth.Value.Month);
                Assert.AreEqual(12, sut.DateOfBirth.Value.Day);
            }
        }
Пример #13
0
        public void With_args_it_should_create()
        {
            var sut = new PersonSearchRequest("firstName", "lastName", new DateTime(2001, 1, 12), new List <SearchApiPersonalIdentifier>(), new List <SearchApiAddress>(), new List <SearchApiPhoneNumber>(), new List <SearchApiName>());

            Assert.AreEqual("firstName", sut.FirstName);
            Assert.AreEqual("lastName", sut.LastName);
            if (sut.DateOfBirth != null)
            {
                Assert.AreEqual(2001, sut.DateOfBirth.Value.Year);
                Assert.AreEqual(1, sut.DateOfBirth.Value.Month);
                Assert.AreEqual(12, sut.DateOfBirth.Value.Day);
            }
        }
Пример #14
0
        public ActionResult Search(PersonSearchRequest searchRequest)
        {
            SearchResultFormViewModel <PersonDto, PersonSearchRequest> formViewModel = null;

            try
            {
                formViewModel = _personSearchManagementService.Search(searchRequest);
                Session.Add(SEARCH_PARAMETERS, searchRequest);
            }
            catch (PreconditionException pde)
            {
                TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] = pde.Message;
                formViewModel = _personSearchManagementService.CreateFormViewModel(searchRequest);
            }
            return(View("Index", formViewModel));
        }
Пример #15
0
        public SearchResultFormViewModel <PersonDto, PersonSearchRequest> Search(PersonSearchRequest searchRequest)
        {
            //make sure at least one field set
            //Check.Require(searchRequest != null, "At least one field is required");

            //if (searchRequest.SupervisorId == null && String.IsNullOrEmpty(searchRequest.NameQuery && searchRequest.SId == null))
            //{
            //    Check.Require(1 == 0, "At least one field is required");
            //}

            if (searchRequest.CurrentPageNumber == 0)
            {
                searchRequest.CurrentPageNumber = 1;
            }

            if (string.IsNullOrEmpty(searchRequest.SortColumn))
            {
                searchRequest.SortColumn = DEFAULT_SORT_COLUMN;
                searchRequest.SortOrder  = DEFAULT_SORT_ORDER;
            }

            const int entriesPerPage = 20;
            int       offset         = entriesPerPage * (searchRequest.CurrentPageNumber - 1);

            IList <PersonDto> searchResultItems = _personRepository.Search(searchRequest, offset, entriesPerPage);

            SearchResultFormViewModel <PersonDto, PersonSearchRequest> searchResultFormViewModel =
                CreateFormViewModel(searchRequest);

            searchResultFormViewModel.PageResultItems = searchResultItems;

            int resultCount = _personRepository.GetSearchTotal(searchRequest);

            searchResultFormViewModel.TotalResultCount = resultCount;


            searchResultFormViewModel.CurrentPageNumber = searchRequest.CurrentPageNumber;

            searchResultFormViewModel.TotalPageCount = resultCount / entriesPerPage;
            if (resultCount % entriesPerPage > 0)
            {
                searchResultFormViewModel.TotalPageCount++;
            }

            return(searchResultFormViewModel);
        }
Пример #16
0
 public ICollection <Name> Resolve(SSG_SearchApiRequest source, PersonSearchRequest destination, ICollection <Name> destMember, ResolutionContext context)
 {
     if (source?.SearchRequest?.ApplicantFirstName != null || source?.SearchRequest?.ApplicantLastName != null)
     {
         return new List <Name>()
                {
                    new Name {
                        FirstName = source?.SearchRequest?.ApplicantFirstName, LastName = source?.SearchRequest?.ApplicantLastName, Owner = OwnerType.Applicant
                    }
                }
     }
     ;
     else
     {
         return(null);
     }
 }
Пример #17
0
        private async Task SaveForDeepSearch(PersonSearchRequest person, DataProvider dataPartner)
        {
            _logger.Log(LogLevel.Information, $"Check if request {person.SearchRequestKey} has an active wave on-going");

            _logger.Log(LogLevel.Information, $"In wave for {person.SearchRequestKey} with {dataPartner.Name} -  {nameof(dataPartner.SearchSpeedType)} Search");

            string cacheKey     = person.SearchRequestKey.DeepSearchKey(dataPartner.Name);
            var    waveMetaData = await _cacheService.Get(cacheKey);

            if (string.IsNullOrEmpty(waveMetaData))
            {
                _logger.Log(LogLevel.Information, $"{person.SearchRequestKey} does not have active wave");
                await _cacheService.Save(cacheKey, new WaveSearchData
                {
                    AllParameter = new List <Person>
                    {
                        person
                    },
                    NewParameter       = null,
                    CurrentWave        = 1,
                    DataPartner        = dataPartner.Name,
                    NumberOfRetries    = dataPartner.NumberOfRetries,
                    TimeBetweenRetries = dataPartner.TimeBetweenRetries,
                    SearchRequestKey   = person.SearchRequestKey,
                    SearchSpeed        = dataPartner.SearchSpeedType
                });

                _logger.Log(LogLevel.Information, $"{person.SearchRequestKey} saved");
            }
            else
            {
                _logger.Log(LogLevel.Information, $"{person.SearchRequestKey} has an active wave");
                WaveSearchData metaData = JsonConvert.DeserializeObject <WaveSearchData>(waveMetaData);
                _logger.Log(LogLevel.Information, $"{person.SearchRequestKey} Current Metadata Wave : {metaData.CurrentWave}");
                metaData.CurrentWave++;
                metaData.NewParameter = null;
                await _cacheService.Save(cacheKey, metaData);

                _logger.Log(LogLevel.Information, $"{person.SearchRequestKey} New wave {metaData.CurrentWave} saved");
            }

            await ResetDataPartner(person.SearchRequestKey, dataPartner.Name);
        }
Пример #18
0
        public List <PersonBase> PersonBaseSearch(PersonSearchRequest model, out int totalRows)
        {
            List <PersonBase> list = null;
            int r = 0;

            DataProvider.ExecuteCmd(GetConnection, "dbo.Person_Search",
                                    inputParamMapper : delegate(SqlParameterCollection paramCollection)
            {
                paramCollection.AddWithValue("@SearchStr", model.SearchString);
                paramCollection.AddWithValue("@CurrentPage", model.CurrentPage);
                paramCollection.AddWithValue("@ItemsPerPage", model.ItemsPerPage);
            }
                                    , map : delegate(IDataReader reader, short set)
            {
                switch (set)
                {
                case 0:

                    PersonBase p = new PersonBase();
                    int ord      = 0;   //startingOrdinal

                    p.Id        = reader.GetSafeInt32(ord++);
                    p.FirstName = reader.GetSafeString(ord++);
                    ord++;
                    p.LastName    = reader.GetSafeString(ord++);
                    p.PhoneNumber = reader.GetSafeString(ord++);
                    p.Email       = reader.GetSafeString(ord++);
                    ord++;
                    p.PhotoKey = reader.GetSafeString(ord++);
                    r          = reader.GetSafeInt32(ord++);
                    if (list == null)
                    {
                        list = new List <PersonBase>();
                    }

                    list.Add(p);
                    break;
                }
            }
                                    );
            totalRows = r;
            return(list);
        }
Пример #19
0
        private ICriteria CreateSearchCriteria(PersonSearchRequest searchRequest)
        {
            var criteria = Session.CreateCriteria(typeof(Person));
            var name     = searchRequest.NameQuery;

            name += "";
            string[] split = name.Split(new[] { ' ', ',', '.', ':' });
            foreach (var s in split)
            {
                if (s.Trim() != "")
                {
                    SimpleExpression firstNameExp = Restrictions.Like("FirstName", s, MatchMode.Anywhere);
                    SimpleExpression lastNameExp  = Restrictions.Like("LastName", s, MatchMode.Anywhere);
                    criteria.Add(Restrictions.Or(firstNameExp, lastNameExp));
                }
            }

            if (searchRequest.SupervisorId > 0)
            {
                criteria.Add(Restrictions.Eq("Supervisor.Id", searchRequest.SupervisorId));
            }
            //if (searchRequest.Inactive.HasValue)
            //{
            //    criteria.Add(Restrictions.Eq("IsInactive", searchRequest.Inactive.Value));
            //}

            var inactive = Restrictions.Eq("IsInactive", false);

            if (searchRequest.IncludeInactive.HasValue)
            {
                if (searchRequest.IncludeInactive.Value == false)
                {
                    criteria.Add(inactive);
                }
            }
            else
            {
                criteria.Add(inactive);
            }

            return(criteria);
        }
Пример #20
0
        public void SSG_SearchApiRequest_should_map_to_PersonSearchRequest_correctly()
        {
            SSG_SearchApiRequest sSG_SearchApiRequest = new SSG_SearchApiRequest()
            {
                PersonGivenName = "firstName",
                PersonSurname   = "lastName",
                PersonBirthDate = new DateTime(2002, 2, 2),
                Identifiers     = new SSG_Identifier[]
                {
                    new SSG_Identifier()
                    {
                    },
                    new SSG_Identifier()
                    {
                    }
                },
                DataProviders = new SSG_SearchapiRequestDataProvider[]
                {
                    new SSG_SearchapiRequestDataProvider()
                    {
                        AdaptorName = "ICBC"
                    },
                    new SSG_SearchapiRequestDataProvider()
                    {
                        AdaptorName = "BC Hydro"
                    }
                },
                SearchRequest = new SSG_SearchRequest()
                {
                    FileId = "testFileId"
                }
            };
            PersonSearchRequest personSearchRequest = _mapper.Map <PersonSearchRequest>(sSG_SearchApiRequest);

            Assert.AreEqual("firstName", personSearchRequest.FirstName);
            Assert.AreEqual("lastName", personSearchRequest.LastName);
            Assert.AreEqual(new DateTimeOffset(new DateTime(2002, 2, 2)), personSearchRequest.DateOfBirth);
            Assert.AreEqual(2, personSearchRequest.Identifiers.Count);
            Assert.AreEqual(2, personSearchRequest.DataProviders.Count);
            Assert.AreEqual("testFileId", personSearchRequest.FileID);
        }
Пример #21
0
        public PersonSearchResponse Search(PersonSearchRequest request)
        {
            var response = new PersonSearchResponse();

            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            try
            {
                response.Results = _personSearchBusiness.Search(request);
                response.Success = true;
            }
            catch (Exception e)
            {
                response.Success = false;
                response.Messages.Add(e.Message);
            }
            return(response);
        }
Пример #22
0
        public IList <PersonDto> Search(PersonSearchRequest searchRequest, int offset, int maxEntries)
        {
            ICriteria criteria = CreateSearchCriteria(searchRequest)
                                 .CreateAlias("Supervisor", "Supervisor", JoinType.LeftOuterJoin)
                                 .CreateAlias("Org", "Org", JoinType.LeftOuterJoin)
                                 .SetProjection(Projections.ProjectionList()
                                                .Add(Projections.Property("Id"), "Id")
                                                .Add(Projections.Property("FirstName"), "FirstName")
                                                .Add(Projections.Property("LastName"), "LastName")
                                                .Add(Projections.Property("MiddleInitial"), "MiddleInitial")
                                                .Add(Projections.Property("PhoneNumber"), "PhoneNumber")
                                                .Add(Projections.Property("PhoneExtension"), "PhoneExtension")
                                                .Add(Projections.Property("OrgId"), "OrgId")
                                                //.Add(Projections.Property("IsSupervisor"), "IsSupervisor")
                                                .Add(Projections.Property("SupervisorId"), "SupervisorId")
                                                .Add(Projections.Property("UserInitials"), "UserInitials")
                                                .Add(Projections.Property("Password"), "Password")
                                                .Add(Projections.Property("IsInactive"), "IsInactive")
                                                .Add(Projections.Property("EmployeeNumber"), "EmployeeNumber")
                                                .Add(Projections.Property("NovellId"), "NovellId")
                                                .Add(Projections.Property("Org.Code"), "OrgCode")
                                                .Add(Projections.Property("Org.LongDesc"), "OrgLongDesc")
                                                //.Add(Projections.Property("Org.ShortDesc"), "OrgShortDesc")
                                                .Add(Projections.Property("Supervisor.FirstName"), "SupervisorFirstName")
                                                .Add(Projections.Property("Supervisor.MiddleInitial"), "SupervisorInitial")
                                                .Add(Projections.Property("Supervisor.LastName"), "SupervisorLastName"));

            criteria.SetResultTransformer(Transformers.AliasToBean(typeof(PersonDto)));

            criteria.SetMaxResults(maxEntries).SetFirstResult(offset);

            if (!string.IsNullOrEmpty(searchRequest.SortColumn))
            {
                criteria.AddOrder(searchRequest.SortOrder.StartsWith("A")
                                      ? Order.Asc(searchRequest.SortColumn)
                                      : Order.Desc(searchRequest.SortColumn));
            }

            return(criteria.List <PersonDto>());
        }
Пример #23
0
        public async Task StartAnotherWave(string searchRequestKey, WaveSearchData wave, Person person, int noOfRetries, int timeBetweenRetries)
        {
            _logger.LogInformation($"About to dispatch new wave {wave.CurrentWave} for {wave.DataPartner}");
            PersonSearchRequest personSearchRequest = new PersonSearchRequest(person.FirstName,
                                                                              person.LastName,
                                                                              person.DateOfBirth,
                                                                              person.Identifiers,
                                                                              person.Addresses,
                                                                              person.Phones,
                                                                              person.Names,
                                                                              person.RelatedPersons,
                                                                              person.Employments,
                                                                              new List <DataProvider>
            {
                new DataProvider {
                    Completed = false, Name = wave.DataPartner, NumberOfRetries = noOfRetries, TimeBetweenRetries = timeBetweenRetries, SearchSpeedType = wave.SearchSpeed
                }
            }, searchRequestKey);

            personSearchRequest.FSOUser = person.FSOUser;
            await _dispatcher.Dispatch(personSearchRequest, Guid.NewGuid());
        }
Пример #24
0
        public void SSG_SearchApiRequest_should_map_to_PersonSearchRequest_correctly()
        {
            SSG_SearchApiRequest sSG_SearchApiRequest = new SSG_SearchApiRequest()
            {
                PersonGivenName = "firstName",
                PersonSurname   = "lastName",
                PersonBirthDate = new DateTime(2002, 2, 2),
                Identifiers     = new SSG_Identifier[]
                {
                    new SSG_Identifier()
                    {
                    },
                    new SSG_Identifier()
                    {
                    }
                }
            };
            PersonSearchRequest personSearchRequest = _mapper.Map <PersonSearchRequest>(sSG_SearchApiRequest);

            Assert.AreEqual("firstName", personSearchRequest.FirstName);
            Assert.AreEqual("lastName", personSearchRequest.LastName);
            Assert.AreEqual(new DateTimeOffset(new DateTime(2002, 2, 2)), personSearchRequest.DateOfBirth);
            Assert.AreEqual(2, personSearchRequest.Identifiers.Count);
        }
Пример #25
0
        /// <summary>
        /// Dispatch a request based on the <see cref="PersonSearchRequest" dataproviders/>
        /// </summary>
        /// <param name="personSearchRequest"></param>
        /// <param name="searchRequestId"></param>
        /// <returns></returns>
        public async Task Dispatch(PersonSearchRequest personSearchRequest, Guid searchRequestId)
        {
            if (personSearchRequest == null)
            {
                throw new ArgumentNullException(nameof(personSearchRequest));
            }
            if (searchRequestId.Equals(default(Guid)))
            {
                throw new ArgumentNullException(nameof(searchRequestId));
            }

            if (personSearchRequest.DataProviders == null)
            {
                await Task.CompletedTask;
                return;
            }



            foreach (var requestDataProvider in personSearchRequest.DataProviders)
            {
                if (requestDataProvider.SearchSpeedType == SearchSpeedType.Fast && !personSearchRequest.IsPreScreenSearch)
                {
                    await SaveForDeepSearch(personSearchRequest, requestDataProvider);
                }

                var endpoint = await getEndpointAddress(requestDataProvider.Name);

                await endpoint.Send <PersonSearchOrdered>(new PeopleController.PersonSearchOrderEvent(searchRequestId, personSearchRequest.SearchRequestKey)
                {
                    Person             = personSearchRequest,
                    TimeBetweenRetries = requestDataProvider.TimeBetweenRetries,
                    NumberOfRetries    = requestDataProvider.NumberOfRetries
                });
            }
        }
Пример #26
0
        public PaginatedData <SimplePerson> GetPersonList(PersonSearchRequest request)
        {
            var query = PersonsRepository.GetPersons(request.NameSurname);

            return(PaginatedData <SimplePerson> .Create(query, request, entityList => Mapper.Map <List <SimplePerson> >(entityList)));
        }
Пример #27
0
        public async Task <IActionResult> Get([Url] PersonSearchRequest request)
        {
            var result = await _store.GetPeopleAsync(request);

            return(Ok(result));
        }
        public IActionResult GetPersonList([FromQuery] PersonSearchRequest request)
        {
            var persons = PersonService.GetPersonList(request);

            return(Ok(persons));
        }
Пример #29
0
        public List <PersonBase> PersonBaseSearch(PersonSearchRequest model, out int totalRows)
        {
            List <PersonBase> list = null;

            int r = 0;

            DataProvider.ExecuteCmd(GetConnection, "dbo.Person_Search",
                                    inputParamMapper : delegate(SqlParameterCollection paramCollection)
            {
                paramCollection.AddWithValue("@SearchStr", model.SearchString);
                paramCollection.AddWithValue("@CurrentPage", model.CurrentPage);
                paramCollection.AddWithValue("@ItemsPerPage", model.ItemsPerPage);
                paramCollection.AddWithValue("@Latitude", model.Latitude);
                paramCollection.AddWithValue("@Longitude", model.Longitude);
                paramCollection.AddWithValue("@Radius", model.Radius);
                paramCollection.AddWithValue("@IsVeteran", model.IsVeteran);
                paramCollection.AddWithValue("@IsEmployer", model.IsEmployer);
                paramCollection.AddWithValue("@IsFamilyMember", model.IsFamilyMember);
            }
                                    , map : delegate(IDataReader reader, short set)
            {
                switch (set)
                {
                case 0:

                    Person p        = new Person();
                    p.StateProvince = new StateProvince();
                    p.Country       = new Country();
                    int ord         = 0; //startingOrdinal

                    p.Id        = reader.GetSafeInt32(ord++);
                    p.FirstName = reader.GetSafeString(ord++);
                    ord++;
                    p.LastName           = reader.GetSafeString(ord++);
                    p.PhoneNumber        = reader.GetSafeString(ord++);
                    p.Email              = reader.GetSafeString(ord++);
                    p.JobTitle           = reader.GetSafeString(ord++);
                    p.PhotoKey           = reader.GetSafeString(ord++);
                    p.IsVeteran          = reader.GetSafeBool(ord++);
                    p.IsEmployer         = reader.GetSafeBool(ord++);
                    p.IsFamilyMember     = reader.GetSafeBool(ord++);
                    p.ProfilePicture     = SiteConfig.GetUrlFromFileKey(p.PhotoKey);
                    p.Address1           = reader.GetSafeString(ord++);
                    p.Address2           = reader.GetSafeString(ord++);
                    p.City               = reader.GetSafeString(ord++);
                    p.StateProvince.Id   = reader.GetSafeInt32(ord++);
                    p.StateProvince.Name = reader.GetSafeString(ord++);
                    p.Country.Id         = reader.GetSafeInt32(ord++);
                    p.Country.Name       = reader.GetSafeString(ord++);
                    p.Latitude           = reader.GetSafeDecimal(ord++);
                    p.Longitude          = reader.GetSafeDecimal(ord++);
                    r = reader.GetSafeInt32(ord++);

                    if (list == null)
                    {
                        list = new List <PersonBase>();
                    }

                    list.Add(p);
                    break;
                }
            }
                                    );
            totalRows = r;
            return(list);
        }