public static void AddNewGroupAddress( RockContext rockContext, Group group, string locationTypeGuid,
Location location, bool moveExistingToPrevious = false )
{
if ( location != null )
{
var groupType = GroupTypeCache.Read( group.GroupTypeId );
if ( groupType != null )
{
var locationType = groupType.LocationTypeValues.FirstOrDefault( l => l.Guid.Equals( locationTypeGuid.AsGuid() ) );
if ( locationType != null )
{
var groupLocationService = new GroupLocationService( rockContext );
if ( !groupLocationService.Queryable()
.Where( gl =>
gl.GroupId == group.Id &&
gl.GroupLocationTypeValueId == locationType.Id &&
gl.LocationId == location.Id )
.Any() )
{
var familyChanges = new List<string>();
if ( moveExistingToPrevious )
{
var prevLocationType = groupType.LocationTypeValues.FirstOrDefault( l => l.Guid.Equals( Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_PREVIOUS.AsGuid() ) );
if ( prevLocationType != null )
{
foreach ( var prevLoc in groupLocationService.Queryable( "Location,GroupLocationTypeValue" )
.Where( gl =>
gl.GroupId == group.Id &&
gl.GroupLocationTypeValueId == locationType.Id ) )
{
History.EvaluateChange( familyChanges, prevLoc.Location.ToString(), prevLoc.GroupLocationTypeValue.Value, prevLocationType.Value );
prevLoc.GroupLocationTypeValueId = prevLocationType.Id;
prevLoc.IsMailingLocation = false;
prevLoc.IsMappedLocation = false;
}
}
}
string addressChangeField = locationType.Value;
var groupLocation = groupLocationService.Queryable()
.Where( gl =>
gl.GroupId == group.Id &&
gl.LocationId == location.Id )
.FirstOrDefault();
if ( groupLocation == null )
{
groupLocation = new GroupLocation();
groupLocation.Location = location;
groupLocation.IsMailingLocation = true;
groupLocation.IsMappedLocation = true;
group.GroupLocations.Add( groupLocation );
}
groupLocation.GroupLocationTypeValueId = locationType.Id;
History.EvaluateChange( familyChanges, addressChangeField, string.Empty, groupLocation.Location.ToString() );
History.EvaluateChange( familyChanges, addressChangeField + " Is Mailing", string.Empty, groupLocation.IsMailingLocation.ToString() );
History.EvaluateChange( familyChanges, addressChangeField + " Is Map Location", string.Empty, groupLocation.IsMappedLocation.ToString() );
rockContext.SaveChanges();
if ( groupType.Guid.Equals( Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY.AsGuid() ) )
{
foreach ( var fm in group.Members )
{
HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(),
fm.PersonId, familyChanges, group.Name, typeof( Group ), group.Id );
}
}
}
}
}
}
}