Ejemplo n.º 1
0
        /// <inheritdoc />
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);

            string json = ViewState["PersonPreviousNamesState"] as string;

            if (string.IsNullOrWhiteSpace(json))
            {
                PersonPreviousNamesState = new List <PersonPreviousName>();
            }
            else
            {
                PersonPreviousNamesState = PersonPreviousName.FromJsonAsList(json) ?? new List <PersonPreviousName>();
            }

            json = ViewState["PersonSearchKeysState"] as string;

            if (string.IsNullOrWhiteSpace(json))
            {
                PersonSearchKeysState = new List <PersonSearchKey>();
            }
            else
            {
                PersonSearchKeysState = PersonSearchKey.FromJsonAsList(json) ?? new List <PersonSearchKey>();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Saves the people.
        /// </summary>
        /// <param name="familyList">The family list.</param>
        /// <param name="visitorList">The visitor list.</param>
        /// <param name="previousNamesList">The previous names list.</param>
        private static void SavePeople(List <Group> familyList, List <Group> visitorList, Dictionary <Guid, string> previousNamesList)
        {
            var rockContext        = new RockContext();
            var groupMemberService = new GroupMemberService(rockContext);

            rockContext.WrapTransaction(() =>
            {
                rockContext.Configuration.AutoDetectChangesEnabled = false;
                rockContext.Groups.AddRange(familyList);
                rockContext.SaveChanges(DisableAuditing);

                foreach (var familyGroups in familyList.GroupBy(g => g.ForeignId))
                {
                    var visitorsExist = familyGroups.Count() > 1;
                    foreach (var newFamilyGroup in familyGroups)
                    {
                        foreach (var groupMember in newFamilyGroup.Members)
                        {
                            // don't call LoadAttributes, it only rewrites existing cache objects
                            // groupMember.Person.LoadAttributes( rockContext );

                            var memberPersonAttributeValues = groupMember.Person.Attributes.Select(a => a.Value)
                                                              .Select(a => new AttributeValue
                            {
                                AttributeId = a.Id,
                                EntityId    = groupMember.Person.Id,
                                Value       = groupMember.Person.AttributeValues[a.Key].Value
                            }).ToList();

                            rockContext.AttributeValues.AddRange(memberPersonAttributeValues);

                            // add a default person alias
                            if (!groupMember.Person.Aliases.Any(a => a.AliasPersonId == groupMember.Person.Id))
                            {
                                groupMember.Person.Aliases.Add(new PersonAlias
                                {
                                    AliasPersonId   = groupMember.Person.Id,
                                    AliasPersonGuid = groupMember.Person.Guid,
                                    ForeignId       = groupMember.Person.ForeignId,
                                    ForeignKey      = groupMember.Person.ForeignKey
                                });
                            }

                            // assign the previous name
                            if (previousNamesList.Any(l => l.Key.Equals(groupMember.Person.Guid)))
                            {
                                var newPreviousName = new PersonPreviousName
                                {
                                    LastName    = previousNamesList[groupMember.Person.Guid],
                                    PersonAlias = groupMember.Person.Aliases.FirstOrDefault()
                                };

                                rockContext.PersonPreviousNames.Add(newPreviousName);
                            }

                            // assign the giving group
                            if (groupMember.GroupRoleId != FamilyChildRoleId)
                            {
                                groupMember.Person.GivingGroupId = newFamilyGroup.Id;
                            }

                            // Add known relationship group
                            var knownGroupMember = new GroupMember
                            {
                                PersonId    = groupMember.Person.Id,
                                GroupRoleId = KnownRelationshipOwnerRoleId
                            };

                            var knownRelationshipGroup = new Group
                            {
                                Name        = KnownRelationshipGroupType.Name,
                                GroupTypeId = KnownRelationshipGroupType.Id,
                                IsPublic    = true
                            };

                            knownRelationshipGroup.Members.Add(knownGroupMember);
                            rockContext.Groups.Add(knownRelationshipGroup);

                            // Add implied relationship group
                            var impliedGroupMember = new GroupMember
                            {
                                PersonId    = groupMember.Person.Id,
                                GroupRoleId = ImpliedRelationshipOwnerRoleId
                            };

                            var impliedGroup = new Group
                            {
                                Name        = ImpliedRelationshipGroupType.Name,
                                GroupTypeId = ImpliedRelationshipGroupType.Id,
                                IsPublic    = true
                            };

                            impliedGroup.Members.Add(impliedGroupMember);
                            rockContext.Groups.Add(impliedGroup);

                            if (visitorsExist)
                            {
                                // if this is a visitor, then add relationships to the family member(s)
                                if (visitorList.Where(v => v.ForeignId == newFamilyGroup.ForeignId)
                                    .Any(v => v.Members.Any(m => m.Person.ForeignId.Equals(groupMember.Person.ForeignId))))
                                {
                                    var familyMembers = familyGroups.Except(visitorList).SelectMany(g => g.Members);
                                    foreach (var familyMember in familyMembers.Select(m => m.Person))
                                    {
                                        var invitedByMember = new GroupMember
                                        {
                                            PersonId    = familyMember.Id,
                                            GroupRoleId = InvitedByKnownRelationshipId
                                        };

                                        knownRelationshipGroup.Members.Add(invitedByMember);

                                        if (groupMember.Person.Age < 18 && familyMember.Age > 18)
                                        {
                                            var allowCheckinMember = new GroupMember
                                            {
                                                PersonId    = familyMember.Id,
                                                GroupRoleId = AllowCheckInByKnownRelationshipId
                                            };

                                            knownRelationshipGroup.Members.Add(allowCheckinMember);
                                        }
                                    }
                                }
                                else
                                {   // not a visitor, add the visitors to the family member's known relationship
                                    var visitors = visitorList.Where(v => v.ForeignId == newFamilyGroup.ForeignId)
                                                   .SelectMany(g => g.Members).ToList();
                                    foreach (var visitor in visitors.Select(g => g.Person))
                                    {
                                        var inviteeMember = new GroupMember
                                        {
                                            PersonId    = visitor.Id,
                                            GroupRoleId = InviteeKnownRelationshipId
                                        };

                                        knownRelationshipGroup.Members.Add(inviteeMember);

                                        // if visitor can be checked in and this person is considered an adult
                                        if (visitor.Age < 18 && groupMember.Person.Age > 18)
                                        {
                                            var canCheckInMember = new GroupMember
                                            {
                                                PersonId    = visitor.Id,
                                                GroupRoleId = CanCheckInKnownRelationshipId
                                            };

                                            knownRelationshipGroup.Members.Add(canCheckInMember);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                rockContext.ChangeTracker.DetectChanges();
                rockContext.SaveChanges(DisableAuditing);
            });  // end wrap transaction

            // add the new people to our tracking list
            if (familyList.Any())
            {
                var familyMembers = familyList.SelectMany(gm => gm.Members);
                ImportedPeople.AddRange(familyMembers.Select(m => new PersonKeys
                {
                    PersonAliasId   = (int)m.Person.PrimaryAliasId,
                    PersonId        = m.Person.Id,
                    PersonForeignId = m.Person.ForeignId,
                    GroupForeignId  = m.Group.ForeignId,
                    FamilyRoleId    = m.Person.ReviewReasonNote.ConvertToEnum <FamilyRole>()
                }).ToList()
                                        );
            }

            if (visitorList.Any())
            {
                var visitors = visitorList.SelectMany(gm => gm.Members);
                ImportedPeople.AddRange(visitors.Select(m => new PersonKeys
                {
                    PersonAliasId   = (int)m.Person.PrimaryAliasId,
                    PersonId        = m.Person.Id,
                    PersonForeignId = m.Person.ForeignId,
                    GroupForeignId  = m.Group.ForeignId,
                    FamilyRoleId    = m.Person.ReviewReasonNote.ConvertToEnum <FamilyRole>()
                }).ToList()
                                        );
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Adds the name of the previous.
 /// </summary>
 /// <param name="personAliasId">The person alias identifier.</param>
 /// <param name="previousLastName">Last name of the previous.</param>
 /// <param name="rockContext">The rock context.</param>
 private void AddPreviousName( int personAliasId, string previousLastName, RockContext rockContext )
 {
     var personPreviousNameService = new PersonPreviousNameService( rockContext );
         var previousName = new PersonPreviousName()
         {
             LastName = previousLastName,
             PersonAliasId = personAliasId
         };
         personPreviousNameService.Add( previousName );
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Saves the people.
        /// </summary>
        /// <param name="familyList">The family list.</param>
        /// <param name="visitorList">The visitor list.</param>
        /// <param name="ownerRole">The owner role.</param>
        /// <param name="childRoleId">The child role identifier.</param>
        /// <param name="inviteeRoleId">The invitee role identifier.</param>
        /// <param name="invitedByRoleId">The invited by role identifier.</param>
        /// <param name="canCheckInRoleId">The can check in role identifier.</param>
        /// <param name="allowCheckInByRoleId">The allow check in by role identifier.</param>
        private void SavePeople( List<Group> familyList, List<Group> visitorList, Dictionary<Guid, string> previousNamesList, GroupTypeRole ownerRole, int childRoleId, int inviteeRoleId, int invitedByRoleId, int canCheckInRoleId, int allowCheckInByRoleId )
        {
            var rockContext = new RockContext();
            var groupMemberService = new GroupMemberService( rockContext );
            rockContext.WrapTransaction( () =>
            {
                rockContext.Configuration.AutoDetectChangesEnabled = false;
                rockContext.Groups.AddRange( familyList );
                rockContext.SaveChanges( DisableAuditing );

                foreach ( var familyGroups in familyList.GroupBy<Group, int?>( g => g.ForeignId ) )
                {
                    bool visitorsExist = familyGroups.Count() > 1;
                    foreach ( var newFamilyGroup in familyGroups )
                    {
                        foreach ( var groupMember in newFamilyGroup.Members )
                        {
                            // don't call LoadAttributes, it only rewrites existing cache objects
                            // groupMember.Person.LoadAttributes( rockContext );

                            foreach ( var attributeCache in groupMember.Person.Attributes.Select( a => a.Value ) )
                            {
                                var existingValue = rockContext.AttributeValues.FirstOrDefault( v => v.Attribute.Key == attributeCache.Key && v.EntityId == groupMember.Person.Id );
                                var newAttributeValue = groupMember.Person.AttributeValues[attributeCache.Key];

                                // set the new value and add it to the database
                                if ( existingValue == null )
                                {
                                    existingValue = new AttributeValue();
                                    existingValue.AttributeId = newAttributeValue.AttributeId;
                                    existingValue.EntityId = groupMember.Person.Id;
                                    existingValue.Value = newAttributeValue.Value;

                                    rockContext.AttributeValues.Add( existingValue );
                                }
                                else
                                {
                                    existingValue.Value = newAttributeValue.Value;
                                    rockContext.Entry( existingValue ).State = EntityState.Modified;
                                }
                            }

                            // add a default person alias
                            if ( !groupMember.Person.Aliases.Any( a => a.AliasPersonId == groupMember.Person.Id ) )
                            {
                                groupMember.Person.Aliases.Add( new PersonAlias
                                {
                                    AliasPersonId = groupMember.Person.Id,
                                    AliasPersonGuid = groupMember.Person.Guid,
                                    ForeignId = groupMember.Person.ForeignId,
                                    ForeignKey = groupMember.Person.ForeignKey
                                } );
                            }

                            // assign the previous name
                            if ( previousNamesList.Any( l => l.Key.Equals( groupMember.Person.Guid ) ) )
                            {
                                var newPreviousName = new PersonPreviousName();
                                newPreviousName.LastName = previousNamesList[groupMember.Person.Guid];
                                newPreviousName.PersonAlias = groupMember.Person.Aliases.FirstOrDefault();
                                rockContext.PersonPreviousNames.Add( newPreviousName );
                            }

                            // assign the giving group
                            if ( groupMember.GroupRoleId != childRoleId )
                            {
                                groupMember.Person.GivingGroupId = newFamilyGroup.Id;
                            }

                            if ( visitorsExist )
                            {
                                // Retrieve or create the group this person is an owner of
                                var ownerGroup = groupMemberService.Queryable()
                                    .Where( m => m.PersonId == groupMember.Person.Id && m.GroupRoleId == ownerRole.Id )
                                    .Select( m => m.Group )
                                    .FirstOrDefault();

                                if ( ownerGroup == null )
                                {
                                    var ownerGroupMember = new GroupMember();
                                    ownerGroupMember.PersonId = groupMember.Person.Id;
                                    ownerGroupMember.GroupRoleId = ownerRole.Id;

                                    ownerGroup = new Group();
                                    ownerGroup.Name = ownerRole.GroupType.Name;
                                    ownerGroup.GroupTypeId = ownerRole.GroupTypeId.Value;
                                    ownerGroup.Members.Add( ownerGroupMember );
                                    rockContext.Groups.Add( ownerGroup );
                                }

                                // if this is a visitor, then add relationships to the family member(s)
                                if ( visitorList.Where( v => v.ForeignId == newFamilyGroup.ForeignId )
                                        .Any( v => v.Members.Any( m => m.Person.ForeignId.Equals( groupMember.Person.ForeignId ) ) ) )
                                {
                                    var familyMembers = familyGroups.Except( visitorList ).SelectMany( g => g.Members );
                                    foreach ( var familyMember in familyMembers.Select( m => m.Person ) )
                                    {
                                        var invitedByMember = new GroupMember();
                                        invitedByMember.PersonId = familyMember.Id;
                                        invitedByMember.GroupRoleId = invitedByRoleId;
                                        ownerGroup.Members.Add( invitedByMember );

                                        if ( groupMember.Person.Age < 18 && familyMember.Age > 18 )
                                        {
                                            var allowCheckinMember = new GroupMember();
                                            allowCheckinMember.PersonId = familyMember.Id;
                                            allowCheckinMember.GroupRoleId = allowCheckInByRoleId;
                                            ownerGroup.Members.Add( allowCheckinMember );
                                        }
                                    }
                                }
                                else
                                {   // not a visitor, add the visitors to the family member's known relationship
                                    var visitors = visitorList.Where( v => v.ForeignId == newFamilyGroup.ForeignId )
                                        .SelectMany( g => g.Members ).ToList();
                                    foreach ( var visitor in visitors.Select( g => g.Person ) )
                                    {
                                        var inviteeMember = new GroupMember();
                                        inviteeMember.PersonId = visitor.Id;
                                        inviteeMember.GroupRoleId = inviteeRoleId;
                                        ownerGroup.Members.Add( inviteeMember );

                                        // if visitor can be checked in and this person is considered an adult
                                        if ( visitor.Age < 18 && groupMember.Person.Age > 18 )
                                        {
                                            var canCheckInMember = new GroupMember();
                                            canCheckInMember.PersonId = visitor.Id;
                                            canCheckInMember.GroupRoleId = canCheckInRoleId;
                                            ownerGroup.Members.Add( canCheckInMember );
                                        }
                                    }
                                }
                            }

                            // Add known relationship group
                            var knownRelationshipGroupType = GroupTypeCache.Read( Rock.SystemGuid.GroupType.GROUPTYPE_KNOWN_RELATIONSHIPS );

                            var knownGroup = groupMemberService.Queryable()
                                .Where( m =>
                                    m.PersonId == groupMember.Person.Id
                                    && m.GroupRoleId == allowCheckInByRoleId
                                    && m.Group.GroupTypeId == knownRelationshipGroupType.Id )
                                .Select( m => m.Group )
                                .FirstOrDefault();

                            if ( knownGroup == null )
                            {
                                var knownGroupMember = new GroupMember();
                                knownGroupMember.PersonId = groupMember.Person.Id;
                                knownGroupMember.GroupRoleId = allowCheckInByRoleId;

                                knownGroup = new Group();
                                knownGroup.Name = knownRelationshipGroupType.Name;
                                knownGroup.GroupTypeId = knownRelationshipGroupType.Id;
                                knownGroup.Members.Add( knownGroupMember );
                                rockContext.Groups.Add( knownGroup );
                            }

                            // Add implied relationship group
                            var impliedRelationshipGroupType = GroupTypeCache.Read( Rock.SystemGuid.GroupType.GROUPTYPE_IMPLIED_RELATIONSHIPS );

                            var impliedGroup = groupMemberService.Queryable()
                                .Where( m =>
                                    m.PersonId == groupMember.Person.Id
                                    && m.GroupRoleId == ownerRole.Id
                                    && m.Group.GroupTypeId == impliedRelationshipGroupType.Id )
                                .Select( m => m.Group )
                                .FirstOrDefault();

                            if ( impliedGroup == null )
                            {
                                var impliedGroupMember = new GroupMember();
                                impliedGroupMember.PersonId = groupMember.Person.Id;
                                impliedGroupMember.GroupRoleId = ownerRole.Id;

                                impliedGroup = new Group();
                                impliedGroup.Name = impliedRelationshipGroupType.Name;
                                impliedGroup.GroupTypeId = impliedRelationshipGroupType.Id;
                                impliedGroup.Members.Add( impliedGroupMember );
                                rockContext.Groups.Add( impliedGroup );
                            }
                        }
                    }
                }

                rockContext.ChangeTracker.DetectChanges();
                rockContext.SaveChanges( DisableAuditing );

                // add the new people to our tracking list
                if ( familyList.Any() )
                {
                    var familyMembers = familyList.SelectMany( gm => gm.Members );
                    ImportedPeople.AddRange( familyMembers.Select( m => new PersonKeys
                    {
                        PersonAliasId = (int)m.Person.PrimaryAliasId,
                        PersonId = m.Person.Id,
                        IndividualId = m.Person.ForeignId,
                        HouseholdId = m.Group.ForeignId,
                        FamilyRoleId = m.Person.ReviewReasonNote.ConvertToEnum<FamilyRole>()
                    } ).ToList()
                    );
                }

                if ( visitorList.Any() )
                {
                    var visitors = visitorList.SelectMany( gm => gm.Members );
                    ImportedPeople.AddRange( visitors.Select( m => new PersonKeys
                    {
                        PersonAliasId = (int)m.Person.PrimaryAliasId,
                        PersonId = m.Person.Id,
                        IndividualId = m.Person.ForeignId,
                        HouseholdId = m.Group.ForeignId,
                        FamilyRoleId = m.Person.ReviewReasonNote.ConvertToEnum<FamilyRole>()
                    } ).ToList()
                    );
                }
            } );
            // end wrap transaction
        }