/// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.PreRender" /> event.
        /// </summary>
        /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnPreRender(EventArgs e)
        {
            if (_isFamilyGroupType)
            {
                var adults = GroupMembers.Where(m => m.GroupRoleId != _childRoleId).ToList();
                ddlMaritalStatus.Visible = adults.Any();
            }

            base.OnPreRender(e);
        }
        void lbRemoveMember_Click(object sender, EventArgs e)
        {
            Guid personGuid  = ((LinkButton)sender).ID.Substring(15).Replace("_", "-").AsGuid();
            var  groupMember = GroupMembers.Where(f => f.Person.Guid.Equals(personGuid)).FirstOrDefault();

            if (groupMember != null)
            {
                GroupMembers.Remove(groupMember);
                Duplicates.Remove(personGuid);
                if (!GroupMembers.Any())
                {
                    AddGroupMember();
                    CurrentPageIndex = 0;
                }
                CreateControls(true);
            }
        }
        public bool FindDuplicates()
        {
            Duplicates = new Dictionary <Guid, List <Person> >();

            var rockContext     = new RockContext();
            var locationService = new LocationService(rockContext);
            var groupService    = new GroupService(rockContext);
            var personService   = new PersonService(rockContext);

            // Find any other group members (any group) that have same location
            var othersAtAddress = new List <int>();

            string locationKey = GetLocationKey();

            if (!string.IsNullOrWhiteSpace(locationKey) && _verifiedLocations.ContainsKey(locationKey))
            {
                int?locationId = _verifiedLocations[locationKey];
                if (locationId.HasValue)
                {
                    var location = locationService.Get(locationId.Value);
                    if (location != null)
                    {
                        othersAtAddress = groupService
                                          .Queryable().AsNoTracking()
                                          .Where(g =>
                                                 g.GroupTypeId == _locationType.Id &&
                                                 g.GroupLocations.Any(l => l.LocationId == location.Id))
                                          .SelectMany(g => g.Members)
                                          .Select(m => m.PersonId)
                                          .ToList();
                    }
                }
            }

            foreach (var person in GroupMembers
                     .Where(m =>
                            m.Person != null &&
                            m.Person.FirstName != "")
                     .Select(m => m.Person))
            {
                bool otherCriteria = false;
                var  personQry     = personService
                                     .Queryable().AsNoTracking()
                                     .Where(p =>
                                            p.FirstName == person.FirstName ||
                                            p.NickName == person.FirstName);

                if (othersAtAddress.Any())
                {
                    personQry = personQry
                                .Where(p => othersAtAddress.Contains(p.Id));
                }

                if (person.BirthDate.HasValue)
                {
                    otherCriteria = true;
                    personQry     = personQry
                                    .Where(p =>
                                           p.BirthDate.HasValue &&
                                           p.BirthDate.Value == person.BirthDate.Value);
                }

                if (_homePhone != null)
                {
                    var homePhoneNumber = person.PhoneNumbers.Where(p => p.NumberTypeValueId == _homePhone.Id).FirstOrDefault();
                    if (homePhoneNumber != null)
                    {
                        otherCriteria = true;
                        personQry     = personQry
                                        .Where(p =>
                                               p.PhoneNumbers.Any(n =>
                                                                  n.NumberTypeValueId == _homePhone.Id &&
                                                                  n.Number == homePhoneNumber.Number));
                    }
                }

                if (_cellPhone != null)
                {
                    var cellPhoneNumber = person.PhoneNumbers.Where(p => p.NumberTypeValueId == _cellPhone.Id).FirstOrDefault();
                    if (cellPhoneNumber != null)
                    {
                        otherCriteria = true;
                        personQry     = personQry
                                        .Where(p =>
                                               p.PhoneNumbers.Any(n =>
                                                                  n.NumberTypeValueId == _cellPhone.Id &&
                                                                  n.Number == cellPhoneNumber.Number));
                    }
                }

                if (!string.IsNullOrWhiteSpace(person.Email))
                {
                    otherCriteria = true;
                    personQry     = personQry
                                    .Where(p => p.Email == person.Email);
                }

                var dups = new List <Person>();
                if (otherCriteria)
                {
                    // If a birthday, email, phone, or address was entered, find anyone with same info and same first name
                    dups = personQry.ToList();
                }
                else
                {
                    // otherwise find people with same first and last name
                    dups = personQry
                           .Where(p => p.LastName == person.LastName)
                           .ToList();
                }
                if (dups.Any())
                {
                    Duplicates.Add(person.Guid, dups);
                }
            }

            return(Duplicates.Any());
        }