private int? AddRegistrantToGroup( RegistrationRegistrant registrant )
{
if ( registrant.PersonAliasId.HasValue &&
registrant.Registration != null &&
registrant.Registration.Group != null &&
registrant.Registration.Group.GroupType != null && _template != null )
{
var group = registrant.Registration.Group;
var groupService = new GroupService( _rockContext );
var personAliasService = new PersonAliasService( _rockContext );
var groupMemberService = new GroupMemberService( _rockContext );
var personAlias = personAliasService.Get( registrant.PersonAliasId.Value );
GroupMember groupMember = group.Members.Where( m => m.PersonId == personAlias.PersonId ).FirstOrDefault();
if ( groupMember == null )
{
groupMember = new GroupMember();
groupMemberService.Add( groupMember );
groupMember.GroupId = group.Id;
groupMember.PersonId = personAlias.PersonId;
if ( _template.GroupTypeId.HasValue &&
_template.GroupTypeId == group.GroupTypeId &&
_template.GroupMemberRoleId.HasValue )
{
groupMember.GroupRoleId = _template.GroupMemberRoleId.Value;
groupMember.GroupMemberStatus = _template.GroupMemberStatus;
}
else
{
if ( group.GroupType.DefaultGroupRoleId.HasValue )
{
groupMember.GroupRoleId = group.GroupType.DefaultGroupRoleId.Value;
}
else
{
groupMember.GroupRoleId = group.GroupType.Roles.Select( r => r.Id ).FirstOrDefault();
}
}
}
groupMember.GroupMemberStatus = GroupMemberStatus.Active;
_rockContext.SaveChanges();
return groupMember.Id;
}
return (int?)null;
}