3.0.1.6 Addresses

This commit is contained in:
Andy Howard
2025-05-05 16:00:32 +01:00
parent 047f9db390
commit 527943b861
88 changed files with 3261 additions and 370 deletions
@@ -430,12 +430,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
case SbmAssociation.Column.Status_Desc: return SbmDbDfn.ColumnIdx.Association_Status;
case SbmAssociation.Column.Status_Ind: return SbmDbDfn.ColumnIdx.Unknown;
//------------------------------------------------------------------- Association's owner details
case SbmAssociation.Column.AffIdOwner: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.Owner_Name: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.AffIdOwner: return SbmDbDfn.ColumnIdx.Association_AffIdOwner;
case SbmAssociation.Column.Owner_Name: return SbmDbDfn.ColumnIdx.Affiliate_Name;
//------------------------------------------------------------------- Association's target details
case SbmAssociation.Column.AffIdTarget: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.AffIdTarget: return SbmDbDfn.ColumnIdx.Association_AffIdTarget;
case SbmAssociation.Column.Target_Type: return SbmDbDfn.ColumnIdx.Affiliate_Type;
case SbmAssociation.Column.Target_TypeDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.Target_TypeDesc: return SbmDbDfn.ColumnIdx.Affiliate_Name;
case SbmAssociation.Column.Target_Name: return SbmDbDfn.ColumnIdx.Affiliate_Name;
case SbmAssociation.Column.Target_Nature: return SbmDbDfn.ColumnIdx.Affiliate_Nature;
case SbmAssociation.Column.Target_PhoneMain: return SbmDbDfn.ColumnIdx.Affiliate_PhoneMain;
@@ -810,7 +810,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//-----------------------------------------------------------
// Target details.
case SbmAssociation.Column.AffIdTarget:
SetAssociationColDfn(columnDfn, "Target Id", 60, SbmDbDfn.ColumnIdx.Association_AffIdOwner, ColumnAlignment.Right, DataValue.DataType.Long);
SetAssociationColDfn(columnDfn, "Target Id", 60, SbmDbDfn.ColumnIdx.Association_AffIdTarget, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmAssociation.Column.Target_Type:
SetAssociationColDfn(columnDfn, "Type", 40, SbmDbDfn.ColumnIdx.Affiliate_Type, ColumnAlignment.Center, DataValue.DataType.Long, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
@@ -1732,7 +1732,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetAssociationCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association) + " As " + aliasAssociation, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)} As {aliasAssociation}", filter);
}
public override long GetAssociationCount(SbmAssociation.Params prm)
{
@@ -1938,33 +1938,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId(SbmAssociation.Column.Target_Website);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId(SbmAssociation.Column.Target_Notes);
bool hasColsAffTargetAddress = false;
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Type) || columns.HasId(SbmAssociation.Column.Target_Address_TypeDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_RefExt);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Name);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_DescBrief);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Summary);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Line1);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Line2);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_City);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Province);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Postcode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Country);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Contact);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Phone);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Email);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_LastVisitOn);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_NextVisitOn);
if (hasColsAffTarget || hasColsAffTargetAddress)
if (hasColsAffTarget)
{
// Join to the target affiliate - NB Use an alias to avoid clashing with the owner affiliate.
prm.Alias_Affiliate_Target = aliasAssociation_Affiliate_Target;
@@ -1995,96 +1969,122 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Notes);
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Affiliate_Target), prefixAssociation_Affiliate_Target + SbmDbDfn.GetColumnName(dbColumn, false));
// Target affiliate address columns.
if (hasColsAffTargetAddress)
{
// Join to the target contact's primary address.
prm.Alias_Address_Target = aliasAssociation_Target_Address;
DbQueryJoin joinTargetAddress = new DbQueryJoin(DbJoinType.LeftOuter);
joinTargetAddress.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAssociation_Target_Address);
// Address context.
if (prm.AddressContext == SbmAssociation.Params.AddressContextType.All)
{
// Return all addresses for target contact - as separate rows, eg. for export.
joinTargetAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAssociation_Target_Address) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
joinTargetAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAssociation_Target_Address) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Target));
}
else
{
// Sub-query to identify primary address with lowest Id for each affiliate.
DbQuery qryAddPrimMinId = new DbQuery(Database.DbmsType);
qryAddPrimMinId.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address));
qryAddPrimMinId.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
if (prm.AddressContext == SbmAssociation.Params.AddressContextType.Delivery)
qryAddPrimMinId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type) + "=" + ((int)Sbm.AddressType.Delivery).ToString());
else
qryAddPrimMinId.Filters.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Flags), SbmAddress.Flag_Primary, true));
qryAddPrimMinId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType));
qryAddPrimMinId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId));
qryAddPrimMinId.Columns.Add("Min(" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Id) + ")", SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Id, false));
qryAddPrimMinId.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType));
qryAddPrimMinId.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId));
// Join to target contact's primary address with lowest Id.
String aliasAddressMinId = "AssAddMinId";
DbQueryJoin joinAddPrimId = new DbQueryJoin(DbJoinType.LeftOuter);
joinAddPrimId.Table = new StringPair("(" + qryAddPrimMinId.BuildQuery() + ")", aliasAddressMinId);
joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddressMinId) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddressMinId) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Target));
query.Joins.Add(joinAddPrimId);
// Join to target address with lowest Id.
joinTargetAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAssociation_Target_Address) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddressMinId));
}
query.Joins.Add(joinTargetAddress);
// Add the address columns.
List<SbmDbDfn.ColumnIdx> addressTargetCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId(SbmAssociation.Column.Target_Address_Type) || columns.HasId(SbmAssociation.Column.Target_Address_TypeDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Type);
if (columns.HasId(SbmAssociation.Column.Target_Address_RefExt))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_RefExt);
if (columns.HasId(SbmAssociation.Column.Target_Address_Name))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
if (columns.HasId(SbmAssociation.Column.Target_Address_DescBrief))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_DescBrief);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Line1))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Line2))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Line3))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_City))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_City);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Province))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Postcode))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Postcode);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Country))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Country);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Contact))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Contact);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Phone))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Phone);
//addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Fax));
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Email))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Email);
if (columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerCode) || columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_AccountManagerCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerCode) || columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_AccountHandlerCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaCode) || columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_ContactAreaCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerCode) || columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_ContactHandlerCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_LastVisitOn))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_LastVisitOn);
if (columns.HasId(SbmAssociation.Column.Target_Address_NextVisitOn))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_NextVisitOn);
foreach (SbmDbDfn.ColumnIdx dbColumn in addressTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Target_Address), prefixAssociation_Target_Address + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
//---------------------------------------------------------------
// Target address.
bool hasColsAffTargetAddress = false;
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Type) || columns.HasId(SbmAssociation.Column.Target_Address_TypeDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_RefExt);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Name);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_DescBrief);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Summary);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Line1);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Line2);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_City);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Province);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Postcode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Country);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Contact);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Phone);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_Email);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_LastVisitOn);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId(SbmAssociation.Column.Target_Address_NextVisitOn);
// Target affiliate address columns.
if (hasColsAffTargetAddress)
{
// Join to the target's address(es).
prm.Alias_Address_Target = aliasAssociation_Target_Address;
DbQueryJoin joinTargetAddress = null;
// Address context.
if (prm.AddressContext == SbmAssociation.Params.AddressContextType.All)
{
// Return all addresses for target contact - as separate rows, eg. for export.
joinTargetAddress = new DbQueryJoin(DbJoinType.LeftOuter);
joinTargetAddress.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAssociation_Target_Address);
joinTargetAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAssociation_Target_Address) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
joinTargetAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAssociation_Target_Address) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Target));
}
else
{
// Sub-query to identify suitable address for the Association.
String aliasAddrSub = "addrSub";
DbQuery qryAddrSub = new DbQuery(Database.DbmsType);
qryAddrSub.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAddrSub);
qryAddrSub.Columns.Add($"Top 1 *");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddrSub)}={(int)Sbm.ItemType.Affiliate}");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddrSub)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Target)}");
if (prm.AddressContext == SbmAssociation.Params.AddressContextType.Delivery)
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type, aliasAddrSub)}={(int)Sbm.AddressType.Delivery}");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Status, aliasAddrSub)}!='{StatusDeleted}'");
// Prioritise Primary, Office and lower Id.
String colAddrPrimaryFlag = DbQuery.BuildBitMappedValue($"{aliasAddrSub}.{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Flags)}", SbmAddress.Flag_Primary, true);
qryAddrSub.OrderBy.Add($"{colAddrPrimaryFlag} Desc");
qryAddrSub.OrderBy.Add($"Case When {SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type, aliasAddrSub)}={(int)Sbm.AddressType.Office} Then 0 Else 1 End");
qryAddrSub.OrderBy.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddrSub)}");
// Join to target address with lowest Id.
joinTargetAddress = new DbQueryJoin(DbJoinType.OuterApply);
joinTargetAddress.Table = new StringPair($"({qryAddrSub.BuildQuery()})", aliasAssociation_Target_Address);
}
query.Joins.Add(joinTargetAddress);
// Add the address columns.
List<SbmDbDfn.ColumnIdx> addressTargetCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId(SbmAssociation.Column.Target_Address_Type) || columns.HasId(SbmAssociation.Column.Target_Address_TypeDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Type);
if (columns.HasId(SbmAssociation.Column.Target_Address_RefExt))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_RefExt);
if (columns.HasId(SbmAssociation.Column.Target_Address_Name))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
if (columns.HasId(SbmAssociation.Column.Target_Address_DescBrief))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_DescBrief);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Line1))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Line2))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Line3))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_City))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_City);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Province))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Postcode))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Postcode);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Country))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Country);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Contact))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Contact);
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Phone))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Phone);
//addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Fax));
if (columns.HasId(SbmAssociation.Column.Target_Address_Summary) || columns.HasId(SbmAssociation.Column.Target_Address_Email))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Email);
if (columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerCode) || columns.HasId(SbmAssociation.Column.Target_Address_AccountManagerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_AccountManagerCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerCode) || columns.HasId(SbmAssociation.Column.Target_Address_AccountHandlerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_AccountHandlerCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaCode) || columns.HasId(SbmAssociation.Column.Target_Address_ContactAreaDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_ContactAreaCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerCode) || columns.HasId(SbmAssociation.Column.Target_Address_ContactHandlerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_ContactHandlerCode);
if (columns.HasId(SbmAssociation.Column.Target_Address_LastVisitOn))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_LastVisitOn);
if (columns.HasId(SbmAssociation.Column.Target_Address_NextVisitOn))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_NextVisitOn);
foreach (SbmDbDfn.ColumnIdx dbColumn in addressTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Target_Address), prefixAssociation_Target_Address + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// Member columns
bool hasColsMember = false;