Skip to content
19 changes: 13 additions & 6 deletions Bulldozer.CSV/CSVComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1174,7 +1174,7 @@ protected void LoadGroupAttributeDict( RockContext lookupContext = null )
lookupContext = new RockContext();
}
var groupAttributes = new AttributeService( lookupContext ).Queryable().AsNoTracking().Where( a => a.EntityTypeId == GroupEntityTypeId ).ToList();
this.GroupAttributeDict = groupAttributes.ToDictionary( k => $"{k.Key}_{k.EntityTypeQualifierValue}", v => v, StringComparer.OrdinalIgnoreCase );
this.GroupAttributeDict = groupAttributes.ToDictionary( k => string.Format( "{0}_{1}_{2}", k.Key, k.EntityTypeQualifierValue == "10" ? "Family" : "Group", k.EntityTypeQualifierValue ), v => v, StringComparer.OrdinalIgnoreCase );
Comment thread
guymaness2 marked this conversation as resolved.
Outdated
}

/// <summary>
Expand Down Expand Up @@ -2876,23 +2876,29 @@ private string AddAttributes()

if ( this.GroupAttributeCsvList.Count > 0 )
{
if ( this.GroupTypeDict == null )
if ( this.GroupTypeDict == null )
Comment thread
guymaness2 marked this conversation as resolved.
Outdated
{
LoadGroupTypeDict();
}
newGroupAttributes = this.GroupAttributeCsvList.Where( a => !GroupAttributeDict.Values.Any( ad => ad.Key.Equals( a.Key, StringComparison.OrdinalIgnoreCase ) ) ).ToList();
foreach ( var groupAttribute in newGroupAttributes )
var newGroupAttributesQuery = this.GroupAttributeCsvList.Where( a => !GroupAttributeDict.Keys.Any( k => k.Equals( a.Key + "_" + this.GroupTypeDict.GetValueOrNull( string.Format( "{0}^{1}", ImportInstanceFKPrefix, a.GroupTypeId ) )?.Id ) ) );
Comment thread
nateh777 marked this conversation as resolved.
foreach ( var groupAttribute in newGroupAttributesQuery )
{
groupAttribute.AttributeEntityTypeEnum = AttributeEntityType.Group;
}
newGroupAttributes = newGroupAttributesQuery
.GroupBy( a => new { a.AttributeEntityTypeEnum, a.Key, a.GroupTypeId } )
.Select( grp => grp.First() )
.ToList();
}

var newAttributes = newPersonAttributes
.Concat( newBusinessAttributes )
.Concat( newFamilyAttributes )
.Concat( newGroupAttributes )
.GroupBy( a => new { a.AttributeEntityTypeEnum, a.Key } )
.Select( grp => grp.First() );
.Select( grp => grp.First() )
.ToList();

newAttributes.AddRange( newGroupAttributes );

ReportProgress( 0, string.Format( "Creating {0} new Person, Family, or Group Attributes...", newAttributes.Count() ) );
var invalidDefinedTypeAttributes = new List<string>();
Expand Down Expand Up @@ -2940,6 +2946,7 @@ private string AddAttributes()
newAttribute.EntityTypeId = GroupEntityTypeId;
newAttribute.EntityTypeQualifierColumn = "GroupTypeId";
newAttribute.EntityTypeQualifierValue = groupTypeId.Value.ToString();
newAttribute.ForeignKey = newAttribute.ForeignKey + $"_{groupTypeId}";
}
}

Expand Down
2 changes: 1 addition & 1 deletion Bulldozer.CSV/Maps/Business.cs
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ private int ImportBusinessAddresses()
GroupId = addressCsv.Family.Id,
GroupLocationTypeValueId = groupLocationTypeValueId.Value,
IsMailingLocation = addressCsv.BusinessAddressCsv.IsMailing,
IsMappedLocation = addressCsv.BusinessAddressCsv.AddressTypeEnum == AddressType.Home,
IsMappedLocation = addressCsv.BusinessAddressCsv.AddressTypeEnum == LocationType.Home,
Street1 = addressCsv.BusinessAddressCsv.Street1.Left( 100 ),
Street2 = addressCsv.BusinessAddressCsv.Street2.Left( 100 ),
City = addressCsv.BusinessAddressCsv.City.Left( 50 ),
Expand Down
128 changes: 91 additions & 37 deletions Bulldozer.CSV/Maps/Group.cs
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,14 @@ private int ImportGroupAddresses()
var groupAddressErrors = string.Empty;
var rockContext = new RockContext();

if ( GroupAddressCsvList.Any( ga => ga.GroupMemberPersonId.IsNotNullOrWhiteSpace() ) )
{
if ( this.PersonDict == null )
{
LoadPersonDict( rockContext );
}
}

foreach ( var groupAddressCsv in GroupAddressCsvList )
{
if ( string.IsNullOrEmpty( groupAddressCsv.Street1 ) )
Expand Down Expand Up @@ -799,7 +807,7 @@ private int ImportGroupAddresses()
GroupId = group.Id,
GroupLocationTypeValueId = groupLocationTypeValueId.Value,
IsMailingLocation = groupAddressCsv.IsMailing,
IsMappedLocation = groupAddressCsv.AddressTypeEnum == AddressType.Home,
IsMappedLocation = groupAddressCsv.AddressTypeEnum == LocationType.Home,
Street1 = groupAddressCsv.Street1.Left( 100 ),
Street2 = groupAddressCsv.Street2.Left( 100 ),
City = groupAddressCsv.City.Left( 50 ),
Expand All @@ -811,6 +819,26 @@ private int ImportGroupAddresses()
AddressForeignKey = string.Format( "{0}^{1}", ImportInstanceFKPrefix, groupAddressCsv.AddressId.IsNotNullOrWhiteSpace() ? groupAddressCsv.AddressId : string.Format( "{0}_{1}", groupAddressCsv.GroupId, groupAddressCsv.AddressTypeEnum.ToString() ) )
};

if ( groupAddressCsv.AddressId.IsNullOrWhiteSpace() && groupAddressCsv.GroupMemberPersonId.IsNotNullOrWhiteSpace() )
{
var person = this.PersonDict.GetValueOrNull( string.Format( "{0}^{1}", this.ImportInstanceFKPrefix, groupAddressCsv.GroupMemberPersonId ) );
if ( person != null )
{
var groupMemberAddressTypeEnum = groupAddressCsv.AddressTypeEnum;
if ( groupMemberAddressTypeEnum == null )
{
groupMemberAddressTypeEnum = LocationType.Home;
}

var memberLocation = this.LocationsDict.GetValueOrNull( string.Format( "{0}_{1}", person.PrimaryFamily.ForeignKey, groupMemberAddressTypeEnum.ToString() ) );
Comment thread
guymaness2 marked this conversation as resolved.
if ( memberLocation != null )
{
newGroupAddress.GroupMemberPersonAliasId = person.PrimaryAliasId;
newGroupAddress.GroupMemberLocationId = this.LocationsDict.GetValueOrNull( string.Format( "{0}_{1}", person.PrimaryFamily.ForeignKey, groupMemberAddressTypeEnum.ToString() ) )?.Id;
Comment thread
guymaness2 marked this conversation as resolved.
Outdated
}
}
}

groupAddressImports.Add( newGroupAddress );
}
else
Expand Down Expand Up @@ -911,44 +939,70 @@ public int BulkGroupAddressImport( RockContext rockContext, List<GroupAddressImp

foreach ( var address in groupAddresses )
{
var newLocation = new Location
if ( address.GroupMemberLocationId.HasValue && address.GroupMemberLocationId.Value > 0 && address.GroupMemberPersonAliasId.HasValue && address.GroupMemberPersonAliasId.Value > 0 )
{
Street1 = address.Street1.Left( 100 ),
Street2 = address.Street2.Left( 100 ),
City = address.City.Left( 50 ),
County = address.County.Left( 50 ),
State = address.State.Left( 50 ),
Country = address.Country.Left( 50 ),
PostalCode = address.PostalCode.Left( 50 ),
CreatedDateTime = importedDateTime,
ModifiedDateTime = importedDateTime,
ForeignKey = address.AddressForeignKey,
Guid = Guid.NewGuid() // give the Location a Guid, and store a reference to which Location is associated with the GroupLocation record. Then we'll match them up later and do the bulk insert
};
var groupLocation = new GroupLocation
{
GroupLocationTypeValueId = address.GroupLocationTypeValueId,
GroupId = address.GroupId.Value,
IsMailingLocation = address.IsMailingLocation,
IsMappedLocation = address.IsMappedLocation,
CreatedDateTime = importedDateTime,
ModifiedDateTime = importedDateTime,
LocationId = address.GroupMemberLocationId.Value,
GroupMemberPersonAliasId = address.GroupMemberPersonAliasId,
ForeignKey = address.AddressForeignKey
};

if ( address.Latitude.HasValue && address.Longitude.HasValue )
{
newLocation.SetLocationPointFromLatLong( address.Latitude.Value, address.Longitude.Value );
groupLocationsToInsert.Add( groupLocation );
}

var groupLocation = new GroupLocation
else
{
GroupLocationTypeValueId = address.GroupLocationTypeValueId,
GroupId = address.GroupId.Value,
IsMailingLocation = address.IsMailingLocation,
IsMappedLocation = address.IsMappedLocation,
CreatedDateTime = importedDateTime,
ModifiedDateTime = importedDateTime,
Location = newLocation,
ForeignKey = address.AddressForeignKey
};

groupLocationsToInsert.Add( groupLocation );
locationsToInsert.Add( groupLocation.Location );
}
newLocation = new Location
{
Street1 = address.Street1.Left( 100 ),
Street2 = address.Street2.Left( 100 ),
City = address.City.Left( 50 ),
County = address.County.Left( 50 ),
State = address.State.Left( 50 ),
Country = address.Country.Left( 50 ),
PostalCode = address.PostalCode.Left( 50 ),
CreatedDateTime = importedDateTime,
ModifiedDateTime = importedDateTime,
ForeignKey = address.AddressForeignKey,
Guid = Guid.NewGuid() // give the Location a Guid, and store a reference to which Location is associated with the GroupLocation record. Then we'll match them up later and do the bulk insert
};

rockContext.BulkInsert( locationsToInsert );
if ( address.Latitude.HasValue && address.Longitude.HasValue )
{
newLocation.SetLocationPointFromLatLong( address.Latitude.Value, address.Longitude.Value );
}

var groupLocation = new GroupLocation
{
GroupLocationTypeValueId = address.GroupLocationTypeValueId,
GroupId = address.GroupId.Value,
IsMailingLocation = address.IsMailingLocation,
IsMappedLocation = address.IsMappedLocation,
CreatedDateTime = importedDateTime,
ModifiedDateTime = importedDateTime,
ForeignKey = address.AddressForeignKey
};

if ( newLocation.Id < 1 )
{
groupLocation.Location = newLocation;
locationsToInsert.Add( groupLocation.Location );
}
else
{
groupLocation.LocationId = newLocation.Id;
}
groupLocationsToInsert.Add( groupLocation );
}
}
rockContext.BulkInsert( locationsToInsert );
return groupAddressImports.Count;
}

Expand All @@ -963,17 +1017,17 @@ public int BulkInsertGroupLocation( RockContext rockContext, List<GroupLocation>
return groupLocationsToInsert.Count;
}

private int? GetGroupLocationTypeDVId( AddressType addressType )
private int? GetGroupLocationTypeDVId( LocationType addressType )
{
switch ( addressType )
{
case AddressType.Home:
case LocationType.Home:
return this.GroupLocationTypeDVDict[Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_HOME.AsGuid()].Id;

case AddressType.Previous:
case LocationType.Previous:
return this.GroupLocationTypeDVDict[Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_PREVIOUS.AsGuid()].Id;

case AddressType.Work:
case LocationType.Work:
return this.GroupLocationTypeDVDict[Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_WORK.AsGuid()].Id;

default:
Expand Down Expand Up @@ -1026,7 +1080,7 @@ private int ImportGroupAttributeValues( List<GroupAttributeValueCsv> groupAttrib
continue;
}

var attribute = this.GroupAttributeDict.GetValueOrNull( $"{attributeValueCsv.AttributeKey}_{group.GroupTypeId}" );
var attribute = this.GroupAttributeDict.GetValueOrNull( $"{attributeValueCsv.AttributeKey}_Group_{group.GroupTypeId}" );

if ( attribute == null )
{
Expand Down
2 changes: 1 addition & 1 deletion Bulldozer.CSV/Maps/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ private int ImportPersonAddresses()
GroupId = addressCsv.Family.Id,
GroupLocationTypeValueId = groupLocationTypeValueId.Value,
IsMailingLocation = addressCsv.PersonAddressCsv.IsMailing,
IsMappedLocation = addressCsv.PersonAddressCsv.AddressTypeEnum == AddressType.Home,
IsMappedLocation = addressCsv.PersonAddressCsv.AddressTypeEnum == LocationType.Home,
Street1 = addressCsv.PersonAddressCsv.Street1.Left( 100 ),
Street2 = addressCsv.PersonAddressCsv.Street2.Left( 100 ),
City = addressCsv.PersonAddressCsv.City.Left( 50 ),
Expand Down
4 changes: 2 additions & 2 deletions Bulldozer.CSV/Model/BusinessAddressCsv.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Bulldozer.Model
public class BusinessAddressCsv
{
private string _addressType = string.Empty;
private AddressType _addressTypeEnum = CSV.CSVInstance.AddressType.Other;
private LocationType _addressTypeEnum = CSV.CSVInstance.LocationType.Work;
private bool _isValidAddressType = false;

public string BusinessId { get; set; }
Expand Down Expand Up @@ -43,7 +43,7 @@ public string AddressType
}
}

public AddressType? AddressTypeEnum
public LocationType? AddressTypeEnum
{
get
{
Expand Down
34 changes: 32 additions & 2 deletions Bulldozer.CSV/Model/GroupAddress.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ namespace Bulldozer.Model
public class GroupAddressCsv
{
private string _addressType = string.Empty;
private AddressType _addressTypeEnum = CSV.CSVInstance.AddressType.Other;
private LocationType _addressTypeEnum = CSV.CSVInstance.LocationType.MeetingLocation;
private bool _isValidAddressType = false;
private string _groupMemberAddressType = string.Empty;
private LocationType _groupMemberAddressTypeEnum;
private bool _isValidGroupMemberAddressType;

public string GroupId { get; set; }

Expand Down Expand Up @@ -42,7 +45,7 @@ public string AddressType
}
}

public AddressType? AddressTypeEnum
public LocationType? AddressTypeEnum
{
get
{
Expand All @@ -65,5 +68,32 @@ public bool IsValidAddressType

public string AddressId { get; set; } = null;

public string GroupMemberPersonId { get; set; } = null;

public string GroupMemberAddressType
{
get
{
return _groupMemberAddressType;
}
set
{
_groupMemberAddressType = value;
_isValidGroupMemberAddressType = Enum.TryParse( value.Trim().Replace( " ", string.Empty ), true, out _groupMemberAddressTypeEnum );
}
}

public LocationType? GroupMemberAddressTypeEnum
{
get
{
return _groupMemberAddressTypeEnum;
}
set
{
_groupMemberAddressTypeEnum = value.Value;
_groupMemberAddressType = _groupMemberAddressTypeEnum.ToString();
}
}
}
}
4 changes: 2 additions & 2 deletions Bulldozer.CSV/Model/PersonAddressCsv.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Bulldozer.Model
public class PersonAddressCsv
{
private string _addressType = string.Empty;
private AddressType _addressTypeEnum = CSV.CSVInstance.AddressType.Other;
private LocationType _addressTypeEnum = CSV.CSVInstance.LocationType.Home;
private bool _isValidAddressType = false;

public string PersonId { get; set; }
Expand Down Expand Up @@ -43,7 +43,7 @@ public string AddressType
}
}

public AddressType? AddressTypeEnum
public LocationType? AddressTypeEnum
{
get
{
Expand Down
4 changes: 4 additions & 0 deletions Bulldozer/Model/AddressImport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ public class GroupAddressImport

public int? GroupId { get; set; }

public int? GroupMemberPersonAliasId { get; set; }

public int? GroupMemberLocationId { get; set; }

public string AddressForeignKey { get; set; }
}
}