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
@@ -15,6 +15,7 @@ using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text.RegularExpressions;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
@@ -53,10 +54,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
DbQuery qry = new DbQuery(Database.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address));
qry.Columns.Add(colAddress_Id);
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType) + "=" + ((int)addressPrimary.ItemType).ToString());
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId) + "=" + addressPrimary.ItemId.ToString());
qry.Filters.Add(colAddress_Id + "<>" + addressPrimaryId.ToString());
qry.Filters.Add(GetPrimaryAddressFilter(true, aliasAddress));
qry.Filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType)}={(int)addressPrimary.ItemType}");
qry.Filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId)}={SysId.ToLong(addressPrimary.ItemId)}");
qry.Filters.Add($"{colAddress_Id}<>{SysId.ToLong(addressPrimaryId)}");
qry.Filters.Add(GetPrimaryAddressFilter(true, ""));
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery()))
{
@@ -67,7 +68,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (address != null && address.Id != addressPrimaryId && address.IsPrimary)
{
address.IsPrimary = false;
if (!UpdateAddress(address, dbUpdateInfo)) SetErrorState("failed to update adress - " + ErrorState);
if (!UpdateAddress(address, dbUpdateInfo)) SetErrorState($"failed to update adress - {ErrorState}");
}
}
}
@@ -426,6 +427,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
SetAddressColDfn(columnDfn, "Desc Brief", 120, SbmDbDfn.ColumnIdx.Address_DescBrief);
break;
/*------------------------------------*/
case SbmAddress.Column.Caption:
SetAddressColDfn(columnDfn, "Address", 240, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmAddress.Column.Summary:
SetAddressColDfn(columnDfn, "Address", 240, SbmDbDfn.ColumnIdx.Unknown);
break;
@@ -481,6 +485,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
case SbmAddress.Column.Notes:
SetAddressColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.Address_Notes);
break;
case SbmAddress.Column.Flags:
SetAddressColDfn(columnDfn, "Flags", 50, SbmDbDfn.ColumnIdx.Address_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmAddress.Column.Status:
SetAddressColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Address_Status, ColumnAlignment.Center);
break;
@@ -520,14 +527,36 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{colId} NOT IN ({prm.IdsExcluded.Concat(",")})");
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//---------------------------------------------------------------
String colRefExt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_RefExt, aliasAddress);
String colName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Name, aliasAddress);
String colDescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_DescBrief, aliasAddress);
String colLine1 = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Line1, aliasAddress);
String colLine2 = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Line2, aliasAddress);
String colLine3 = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Line3, aliasAddress);
String colCity = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_City, aliasAddress);
String colProvince = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Province, aliasAddress);
String colPostcode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Postcode, aliasAddress);
if (!StringUtil.IsBlank(prm.Search))
{
foreach (String search in Regex.Split(prm.Search, "[\\s,;\\-+]+"))
{
if (StringUtil.IsBlank(search)) continue;
String searchForLike = DbQuery.FormatForLike(search, true);
List<String> searchFilter = new List<string>();
foreach (String col in new String[] { colRefExt, colName, colDescBrief, colLine1, colLine2, colLine3, colCity, colProvince, colPostcode })
searchFilter.Add($"{col} LIKE '%{searchForLike}%'");
filter.Add(searchFilter.Concat(" OR ", "(", ")"));
}
}
//---------------------------------------------------------------
// Address Type.
String colAddress_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type, aliasAddress);
if (prm.AddressType > 0)
filter.Add(colAddress_Type + "='" + ((int)prm.AddressType).ToString());
//--------------------------------------------------------------- -
// ItemType & ItemId.
// Item Id.
if (ItemId.IsValid(prm.ItemId))
{
List<String> filterItemTypes = new List<String>();
@@ -547,11 +576,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
}
//---------------------------------------------------------------
// AffIdOwner.
// Affiliate Id Owner.
String colAddress_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AffIdOwner, aliasAddress);
if (SysId.IsValid(prm.AffiliateIdOwner))
filter.Add(colAddress_AffIdOwner + "=" + SysId.ToString(prm.AffiliateIdOwner));
// AddIdRef.
// Address Id Ref.
String colAddress_AddIdRef = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AddIdRef, aliasAddress);
if (SysId.IsValid(prm.AddressIdRef))
filter.Add(colAddress_AddIdRef + "=" + SysId.ToString(prm.AddressIdRef));
@@ -668,7 +698,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
public String GetPrimaryAddressFilter(bool match, String aliasTable)
{
DbQuery qry = new DbQuery(Database.DbmsType);
return DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Flags, aliasAddress), SbmAddress.Flag_Primary, match);
return DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Flags, aliasTable), SbmAddress.Flag_Primary, match);
}
// Address sort columns.
@@ -710,7 +740,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetAddressCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address) + " As " + aliasAddress, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address)} As {aliasAddress}", filter);
}
public override long GetAddressCount(SbmAddress.Params prm)
{
@@ -759,7 +789,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//-------------------------------------------------------------------
// Address query execution.
public override DbResultSet AddressExecuteQuery(List<ColumnDfn> columns, SbmAddress.Params prm)
public override DbResultSet ExecuteAddressQuery(List<ColumnDfn> columns, SbmAddress.Params prm)
{
ClearErrorState();
@@ -780,19 +810,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (columns.HasId(SbmAddress.Column.DescBrief))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_DescBrief, aliasAddress));
if (columns.HasId(SbmAddress.Column.Line1) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.Line1) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Line1, aliasAddress));
if (columns.HasId(SbmAddress.Column.Line2) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.Line2) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Line2, aliasAddress));
if (columns.HasId(SbmAddress.Column.Line3) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.Line3) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Line3, aliasAddress));
if (columns.HasId(SbmAddress.Column.City) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.City) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_City, aliasAddress));
if (columns.HasId(SbmAddress.Column.Province) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.Province) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Province, aliasAddress));
if (columns.HasId(SbmAddress.Column.Postcode) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.Postcode) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Postcode, aliasAddress));
if (columns.HasId(SbmAddress.Column.Country) || columns.HasId(SbmAddress.Column.Summary))
if (columns.HasId(SbmAddress.Column.Country) || columns.HasId(SbmAddress.Column.Caption) || columns.HasId(SbmAddress.Column.Summary))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Country, aliasAddress));
if (columns.HasId(SbmAddress.Column.Contact))
@@ -811,6 +841,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
// Common Properties
if (columns.HasId(SbmAddress.Column.Notes))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Notes, aliasAddress));
if (columns.HasId(SbmAddress.Column.Flags))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Flags, aliasAddress));
if (columns.HasId(SbmAddress.Column.Status) || columns.HasId(SbmAddress.Column.Status_Desc) || columns.HasId(SbmAddress.Column.Status_Ind))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Status, aliasAddress));
if (columns.HasId(SbmAddress.Column.CreateOn_Date))
@@ -46,7 +46,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
public override long GetAffiliateOwnerAssociationCount(SysId affiliateIdOwner, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
{
ClearErrorState();
if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1) return 0;
if (!SysId.IsValid(affiliateIdOwner)) return 0;
if (Database != null)
{
SbmAssociation.Params prmAssociation = new SbmAssociation.Params
@@ -56,7 +56,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
StatusCat = activeOnly ? SbmAssociation.StatusCat.Active : SbmAssociation.StatusCat.NotDeleted
};
String filter = GetAssociationQueryFilter(prmAssociation).Concat(" AND ", "(", ")");
Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)} As {aliasAssociation}", filter);
}
return 0;
}
@@ -77,7 +77,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
StatusCat = activeOnly ? SbmAssociation.StatusCat.Active : SbmAssociation.StatusCat.NotDeleted
};
String filter = GetAssociationQueryFilter(prmAssociation).Concat(" AND ", "(", ")");
Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)} As {aliasAssociation}", filter);
}
return 0;
}
@@ -88,7 +88,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
public override long GetAffiliateTargetAssociationCount(SysId affiliateIdTarget, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
{
ClearErrorState();
if (!SysId.IsValid(affiliateIdTarget) || (int)associationType < 1) return 0;
if (!SysId.IsValid(affiliateIdTarget)) return 0;
if (Database != null)
{
SbmAssociation.Params prmAssociation = new SbmAssociation.Params
@@ -98,7 +98,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
StatusCat = activeOnly ? SbmAssociation.StatusCat.Active : SbmAssociation.StatusCat.NotDeleted
};
String filter = GetAssociationQueryFilter(prmAssociation).Concat(" AND ", "(", ")");
Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)} As {aliasAssociation}", filter);
}
return 0;
}
@@ -485,8 +485,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//-------------------------------------------------------------------
// Column definitions.
private const String aliasAffiliate = "aAffil";
private const String aliasAffiliate_AddPrim = "Aff_AddPrim";
private const String prefixAffiliate_AddPrim = aliasAffiliate_AddPrim + "_";
private const String aliasAffiliate_Address = "Aff_Add";
private const String prefixAffiliate_Address = aliasAffiliate_Address + "_";
private const String colNameAffiliate_GroupMembers = "GroupMembers";
private const String colNameAffiliate_AssociationOwnerCount = "AssocOwnerCount";
private const String colNameAffiliate_AssociationTargetCount = "AssocTargetCount";
@@ -594,28 +594,28 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//---------------------------------------------------------------
// Addresses Summary.
case SbmAffiliate.Column.Address_Summary:
SetAffiliateColDfn(columnDfn, "Address", 220, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Address", 220, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address);
break;
case SbmAffiliate.Column.Address_Line1:
SetAffiliateColDfn(columnDfn, "Address", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Address", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
case SbmAffiliate.Column.Address_Line2:
SetAffiliateColDfn(columnDfn, "Line 2", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Line 2", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
case SbmAffiliate.Column.Address_Line3:
SetAffiliateColDfn(columnDfn, "Line 3", 120, SbmDbDfn.ColumnIdx.Address_Line3, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Line 3", 120, SbmDbDfn.ColumnIdx.Address_Line3, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
case SbmAffiliate.Column.Address_City:
SetAffiliateColDfn(columnDfn, "City", 80, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "City", 80, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
case SbmAffiliate.Column.Address_Province:
SetAffiliateColDfn(columnDfn, "Province", 80, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Province", 80, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
case SbmAffiliate.Column.Address_Country:
SetAffiliateColDfn(columnDfn, "Country", 80, SbmDbDfn.ColumnIdx.Address_Country, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Country", 80, SbmDbDfn.ColumnIdx.Address_Country, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
case SbmAffiliate.Column.Address_Postcode:
SetAffiliateColDfn(columnDfn, "Postcode", 65, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Center, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
SetAffiliateColDfn(columnDfn, "Postcode", 65, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Center, DataValue.DataType.String, aliasAffiliate_Address, prefixAffiliate_Address);
break;
//-----------------------------------------------------------------
@@ -998,7 +998,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetAffiliateCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate) + " As " + aliasAffiliate, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate)} As {aliasAffiliate}", filter);
}
public override long GetAffiliateCount(SbmAffiliate.Params prm)
{
@@ -1123,7 +1123,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UpdateOn, aliasAffiliate));
//---------------------------------------------------------------
// Primary address.
// Address - prioritising primary and office addresses.
bool hasColsAddPrim = false;
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Summary);
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Line1);
@@ -1135,30 +1135,27 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Country);
if (hasColsAddPrim)
{
// 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());
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));
// Identify the most suitable Address to display for this Item.
// Preferred is the 'Primary' address, but in its absence, the address with the lowest Id.
// Sub-query for use in 'Outer Apply'
// Select Top 1 * From Address Where [ItemType & ItemId = parent] Order By [Primary flag, type=office etc]
DbQuery qryAddrSub = new DbQuery(Database.DbmsType);
String aliasAddrSubQuery = "addrSub";
qryAddrSub.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAddrSubQuery);
qryAddrSub.Columns.Add($"Top 1 *");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddrSubQuery)}={(int)Sbm.ItemType.Affiliate}");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddrSubQuery)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate)}");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Status, aliasAddrSubQuery)}!='{StatusDeleted}'");
// Prioritise Primary, Office and lower Id.
String colAddrPrimaryFlag = DbQuery.BuildBitMappedValue($"{aliasAddrSubQuery}.{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, aliasAddrSubQuery)}={(int)Sbm.AddressType.Office} Then 0 Else 1 End");
qryAddrSub.OrderBy.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddrSubQuery)}");
// Join to primary address with lowest Id.
String aliasAffiliate_AddPrimId = "AddPrimId";
DbQueryJoin joinAddPrimId = new DbQueryJoin(DbJoinType.LeftOuter);
joinAddPrimId.Table = new StringPair("(" + qryAddPrimMinId.BuildQuery() + ")", aliasAffiliate_AddPrimId);
joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAffiliate_AddPrimId) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAffiliate_AddPrimId) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate));
query.Joins.Add(joinAddPrimId);
// Join to the primary address with lowest Id.
DbQueryJoin joinAddPrim = new DbQueryJoin(DbJoinType.LeftOuter);
joinAddPrim.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAffiliate_AddPrim);
joinAddPrim.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAffiliate_AddPrim) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAffiliate_AddPrimId));
query.Joins.Add(joinAddPrim);
// Join to the Address with lowest Id, prioritising Primary Addresses and office addresses.
DbQueryJoin joinAddr = new DbQueryJoin(DbJoinType.OuterApply);
joinAddr.Table = new StringPair($"({qryAddrSub.BuildQuery()})", aliasAffiliate_Address);
query.Joins.Add(joinAddr);
// Add the Address columns.
List<SbmDbDfn.ColumnIdx> addprimaryCols = new List<SbmDbDfn.ColumnIdx>()
{
@@ -1176,7 +1173,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
SbmDbDfn.ColumnIdx.Address_Email,
};
foreach (SbmDbDfn.ColumnIdx dbColumn in addprimaryCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAffiliate_AddPrim), prefixAffiliate_AddPrim + SbmDbDfn.GetColumnName(dbColumn, false));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAffiliate_Address), prefixAffiliate_Address + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
@@ -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;
@@ -415,7 +415,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetSysParamCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SysParam) + " As " + aliasSysParam, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SysParam)} As {aliasSysParam}", filter);
}
public override long GetSysParamCount(SbmSysParam.Params prm)
{
@@ -464,7 +464,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetSystemAccountCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemAccount) + " As " + aliasSystemAccount, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemAccount)} As {aliasSystemAccount}", filter);
}
public override long GetSystemAccountCount(SbmSystemAccount.Params prm)
{
@@ -435,7 +435,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetSystemAccountUserCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemAccountUser) + " As " + aliasSystemAccountUser, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemAccountUser)} As {aliasSystemAccountUser}", filter);
}
public override long GetSystemAccountUserCount(SbmSystemAccountUser.Params prm)
{
@@ -445,7 +445,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetSystemUserCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemUser) + " As " + aliasSystemUser, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemUser)} As {aliasSystemUser}", filter);
}
public override long GetSystemUserCount(SbmSystemUser.Params prm)
{
@@ -758,7 +758,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetAssetCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset) + " As " + aliasAsset, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset)} As {aliasAsset}", filter);
}
public override long GetAssetCount(SbmAsset.Params prm)
{
@@ -388,7 +388,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetAssetProcessCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetProcess) + " As " + aliasAssetProcess, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetProcess)} As {aliasAssetProcess}", filter);
}
public override long GetAssetProcessCount(SbmAssetProcess.Params prm)
{
@@ -151,7 +151,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
List<String> filter = new List<String>();
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleFeature_VehicleId) + "=" + vehicleId.ToString());
Database.GetRowCount(tableVehicleFeature, filter.Concat(" AND ", "(", ")"));
return Database.GetRowCount(tableVehicleFeature, filter.Concat(" AND ", "(", ")"));
}
return 0;
}
@@ -54,7 +54,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
List<String> filter = new List<String>();
filter.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleFeature_VehicleId)}={SysId.ToLong(vehicleClassId)}");
Database.GetRowCount(tableVehicle, filter.Concat(" AND ", "(", ")"));
return Database.GetRowCount(tableVehicle, filter.Concat(" AND ", "(", ")"));
}
return 0;
}
@@ -672,7 +672,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetVehicleClassCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass) + " As " + aliasVehicleClass, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass)} As {aliasVehicleClass}", filter);
}
public override long GetVehicleClassCount(SbmVehicleClass.Params prm)
{
@@ -459,7 +459,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetVehicleEventCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent) + " As " + aliasVehicleEvent, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent)} As {aliasVehicleEvent}", filter);
}
public override long GetVehicleEventCount(SbmVehicleEvent.Params prm)
{
@@ -508,7 +508,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetVehicleFeatureCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleFeature) + " As " + aliasVehicleFeature, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleFeature)} As {aliasVehicleFeature}", filter);
}
public override long GetVehicleFeatureCount(SbmVehicleFeature.Params prm)
{
@@ -2651,7 +2651,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetCommodityCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity) + " As " + aliasCommodity, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity)} As {aliasCommodity}", filter);
}
public override long GetCommodityCount(SbmCommodity.Params prm)
{
@@ -574,7 +574,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetCommodityCustomerCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer) + " As " + aliasCommodityCustomer, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer)} As {aliasCommodityCustomer}", filter);
}
public override long GetCommodityCustomerCount(SbmCommodityCustomer.Params prm)
{
@@ -475,7 +475,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetCommoditySupplierCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier) + " As " + aliasCommoditySupplier, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier)} As {aliasCommoditySupplier}", filter);
}
public override long GetCommoditySupplierCount(SbmCommoditySupplier.Params prm)
{
@@ -562,7 +562,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetContainerCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container) + " As " + aliasContainer, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container)} As {aliasContainer}", filter);
}
public override long GetContainerCount(SbmContainer.Params prm)
{
@@ -644,7 +644,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetContainerItemCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem) + " As " + aliasContainerItem, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem)} As {aliasContainerItem}", filter);
}
public override long GetContainerItemCount(SbmContainerItem.Params prm)
{
@@ -944,7 +944,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetPortfolioItemCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem) + " As " + aliasPortfolioItem, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem)} As {aliasPortfolioItem}", filter);
}
public override long GetPortfolioItemCount(SbmPortfolioItem.Params prm)
{
@@ -403,7 +403,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetItemBatchCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemBatch) + " As " + aliasItemBatch, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemBatch)} As {aliasItemBatch}", filter);
}
public override long GetItemBatchCount(SbmItemBatch.Params prm)
{
@@ -527,7 +527,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetItemLinkCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink) + " As " + aliasItemLink, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink)} As " + aliasItemLink, filter);
}
public override long GetItemLinkCount(SbmItemLink.Params prm)
{
@@ -465,7 +465,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetPriceCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPrice) + " As " + aliasPrice, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPrice)} As {aliasPrice}", filter);
}
public override long GetPriceCount(SbmPrice.Params prm)
{
@@ -437,7 +437,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetPriceSetCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPriceSet) + " As " + aliasPriceSet, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPriceSet)} As {aliasPriceSet}", filter);
}
public override long GetPriceSetCount(SbmPriceSet.Params prm)
{
@@ -601,7 +601,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetProcessCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Process) + " As " + aliasProcess, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Process)} As {aliasProcess}", filter);
}
public override long GetProcessCount(SbmProcess.Params prm)
{
@@ -458,7 +458,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetLocationCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Location) + " As " + aliasLocation, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Location)} As {aliasLocation}", filter);
}
public override long GetLocationCount(SbmLocation.Params prm)
{
@@ -793,7 +793,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetMovementCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement) + " As " + aliasMovement, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement)} As {aliasMovement}", filter);
}
public override long GetMovementCount(SbmMovement.Params prm)
{
@@ -524,7 +524,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetStockLevelCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel) + " As " + aliasStockLevel, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel)} As {aliasStockLevel}", filter);
}
public override long GetStockLevelCount(SbmStockLevel.Params prm)
{
@@ -923,7 +923,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetConstituentCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent) + " As " + aliasConstituent, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent)} As {aliasConstituent}", filter);
}
public override long GetConstituentCount(SbmConstituent.Params prm)
{
@@ -2323,7 +2323,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetRequirementCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement) + " As " + aliasRequirement, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement)} As {aliasRequirement}", filter);
}
public override long GetRequirementCount(SbmRequirement.Params prm)
{
@@ -466,7 +466,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
// Clear addresses.
if (!HasErrorState())
{
if (!AccountMgr.ClearAddressesFor(Sbm.ItemType.Transaction, new ItemId()))
if (!AccountMgr.ClearAddressesFor(transaction.GetItemId()))
SetErrorState("failed to clear addresses - " + AccountMgr.ErrorStateMessage);
}
// Clear any references to this transaction from other transactions:
@@ -1855,7 +1855,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
private long GetTransactionCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction) + " As " + aliasTransaction, filter);
return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction)} As {aliasTransaction}", filter);
}
public override long GetTransactionCount(SbmTransaction.Params prm)
{
@@ -2052,30 +2052,43 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt);
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasTransaction_AffiliateTarget), prefixTransaction_AffiliateTarget + SbmDbDfn.GetColumnName(dbColumn, false));
//---------------------------------------------------------------------
// Target Address.
if (hasTgtAddrCols)
{
// Join to the Primary Target Address.
prm.TableAlias_AddressTarget = aliasTransaction_AddressTarget;
DbQueryJoin joinAddr = new DbQueryJoin(DbJoinType.LeftOuter);
joinAddr.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasTransaction_AddressTarget);
joinAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasTransaction_AddressTarget, false) + "=" + Sbm.ItemType.Affiliate.ToString());
joinAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasTransaction_AddressTarget, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasTransaction_AffiliateTarget, false));
joinAddr.Filters.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Flags, aliasTransaction_AddressTarget, false), SbmAddress.Flag_Primary, true));
query.Joins.Add(joinAddr);
// Add the address columns.
List<SbmDbDfn.ColumnIdx> addressTargetCols = new List<SbmDbDfn.ColumnIdx>();
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_City);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Postcode);
foreach (SbmDbDfn.ColumnIdx dbColumn in addressTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasTransaction_AddressTarget), prefixTransaction_AddressTarget + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
//---------------------------------------------------------------------
// Target Address.
if (hasTgtAddrCols)
{
// Identify the most suitable Address to display for this Item.
// Preferred is the 'Primary' address, but in its absence, the address with the lowest Id.
// Sub-query for use in 'Outer Apply'
// Select Top 1 * From Address Where [ItemType & ItemId = parent] Order By [Primary flag, type=office etc]
DbQuery qryAddrSub = new DbQuery(Database.DbmsType);
String aliasAddrSubQuery = "addrSub";
qryAddrSub.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAddrSubQuery);
qryAddrSub.Columns.Add($"Top 1 *");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddrSubQuery)}={(int)Sbm.ItemType.Affiliate}");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddrSubQuery)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasTransaction_Association)}");
qryAddrSub.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Status, aliasAddrSubQuery)}!='{StatusDeleted}'");
// Prioritise Primary, Office and lower Id.
String colAddrPrimaryFlag = DbQuery.BuildBitMappedValue($"{aliasAddrSubQuery}.{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, aliasAddrSubQuery)}={(int)Sbm.AddressType.Office} Then 0 Else 1 End");
qryAddrSub.OrderBy.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddrSubQuery)}");
// Join to the Address with lowest Id, prioritising Primary Addresses and office addresses.
DbQueryJoin joinAddr = new DbQueryJoin(DbJoinType.OuterApply);
joinAddr.Table = new StringPair($"({qryAddrSub.BuildQuery()})", aliasTransaction_AddressTarget);
query.Joins.Add(joinAddr);
// Add the address columns.
List<SbmDbDfn.ColumnIdx> addressTargetCols = new List<SbmDbDfn.ColumnIdx>();
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_City);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Postcode);
foreach (SbmDbDfn.ColumnIdx dbColumn in addressTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasTransaction_AddressTarget), prefixTransaction_AddressTarget + SbmDbDfn.GetColumnName(dbColumn, false));
}
}