Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs
T
2024-11-19 09:47:00 +00:00

2512 lines
160 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Dbas.Bus;
using Sarand.BusinessMgr.Net.Standard.Dbas.Internal;
using Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using static Sarand.BusinessMgr.Net.Standard.Base.App.Sbm;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SbmAccountMgr_Dbas
{
//*******************************************************************
// A s s o c i a t i o n s
//*******************************************************************
// Utilities - Association List Target.
private List<StringPair> GetLogProperties(SbmAssociation association)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(association.Id)),
new StringPair("Code",association.Code),
new StringPair("Status",association.StatusCode)
};
}
public override List<Sbm.AssociationType> GetAssociationTypesInUse()
{
List<Sbm.AssociationType> types = new List<Sbm.AssociationType>();
// Construct the query.
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association));
qry.Columns.Add("DISTINCT " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type));
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + AffiliateId_Owner.ToString());
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
types.Add((Sbm.AssociationType)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Association_Type)).AsLong());
}
}
return types;
}
public override List<SysId> GetMemberTargetIds(SysId affiliateIdOwner)
{
List<SysId> affiliateIncludeIds = new List<SysId>();
List<SysId> affiliateExcludeIds = new List<SysId>();
return GetTargetIds(affiliateIdOwner, Sbm.AssociationType.Member, affiliateIncludeIds, affiliateExcludeIds);
}
public override List<SysId> GetCustomerTargetIds(List<SysId> affiliateIncludeIds, List<SysId> affiliateExcludeIds)
{
return GetTargetIds(AffiliateId_Owner, Sbm.AssociationType.Customer, affiliateIncludeIds, affiliateExcludeIds);
}
public List<SysId> GetTargetIds(SysId affiliateIdOwner, Sbm.AssociationType associationType, List<SysId> affiliateIncludeIds, List<SysId> affiliateExcludeIds)
{
List<SysId> affiliateIdsTarget = new List<SysId>();
if (db == null) return affiliateIdsTarget;
bool validConfig = true;
if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1)
{
#if _DEBUG
SATRACE("SapAssociationMgr_Odbc::GetTargetIds Invalid owner or association type.\n");
#endif
validConfig = false;
}
else if (associationType == Sbm.AssociationType.Customer || associationType == Sbm.AssociationType.Supplier)
{
if (affiliateIdOwner != AffiliateId_Owner)
{
#if _DEBUG
SATRACE("SapAssociationMgr_Odbc::GetTargetIds Invalid customer/supplier owner.\n");
#endif
validConfig = false;
}
}
if (validConfig)
{
String colAffiliateIdTarget = "AffIdTgt";
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association));
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget), colAffiliateIdTarget);
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + affiliateIdOwner.ToString());
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type) + "=" + ((int)associationType).ToString());
if (affiliateIncludeIds.Count > 0)
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " IN(" + affiliateIncludeIds.Concat(",") + ")");
if (affiliateExcludeIds.Count > 0)
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " NOT IN(" + affiliateExcludeIds.Concat(",") + ")");
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
affiliateIdsTarget.Add(new SysId(StringUtil.ToInt(values.GetValue(colAffiliateIdTarget))));
}
}
}
return affiliateIdsTarget;
}
public override List<SysId> GetCustomerAssocIdsForTargets(List<SysId> affiliateIdsTarget)
{
return GetAssocIdsForTargets(AffiliateId_Owner, Sbm.AssociationType.Customer, affiliateIdsTarget);
}
public override List<SysId> GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, List<SysId> affiliateIdsTarget)
{
List<SysId> associations = new List<SysId>();
if (db == null) return associations;
bool validConfig = true;
if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1)
{
#if _DEBUG
SATRACE("SapAssociationMgr_Odbc::GetAssocIdsForTargets Invalid owner or association type.\n");
#endif
validConfig = false;
}
else if (associationType == Sbm.AssociationType.Customer || associationType == Sbm.AssociationType.Supplier)
{
if (affiliateIdOwner != AffiliateId_Owner)
{
#if _DEBUG
SATRACE("SapAssociationMgr_Odbc::GetAssocIdsForTargets Invalid customer/supplier owner.\n");
#endif
validConfig = false;
}
}
if (validConfig)
{
String colAssociationId = "AssocId";
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association));
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id), colAssociationId);
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + affiliateIdOwner.ToString());
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type) + "=" + ((int)associationType).ToString());
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " IN " + affiliateIdsTarget.Concat(","));
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
associations.Add(new SysId(StringUtil.ToInt(values.GetValue(colAssociationId))));
}
}
}
return associations;
}
//-------------------------------------------------------------------
// Has Association.
public override bool OwnerHasAssociations(SysId affiliateIdOwner, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
{
return (OwnerAssociationCount(affiliateIdOwner, associationType, activeOnly) > 0);
}
public override long OwnerAssociationCount(SysId affiliateIdOwner, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
{
ClearErrorState();
if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1) return 0;
if (db != null)
{
SbmAssociation.Params prmAssociation = new SbmAssociation.Params
{
AffiliateIdOwner = affiliateIdOwner,
AssociationType = associationType,
StatusCat = activeOnly ? SbmAssociation.StatusCat.Active : SbmAssociation.StatusCat.NotDeleted
};
String filter = GetAssociationQueryFilter(prmAssociation).Concat(" AND ", "(", ")");
db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filter);
}
return 0;
}
public override bool OwnerHasAssociationsWith(SysId affiliateIdOwner, SysId affiliateIdTarget, bool activeOnly = true)
{
return (OwnerTargetAssociationCount(affiliateIdOwner, affiliateIdTarget, activeOnly) > 0);
}
public override long OwnerTargetAssociationCount(SysId affiliateIdOwner, SysId affiliateIdTarget, bool activeOnly = true)
{
ClearErrorState();
if (!SysId.IsValid(affiliateIdOwner) || !SysId.IsValid(affiliateIdTarget)) return 0;
if (db != null)
{
SbmAssociation.Params prmAssociation = new SbmAssociation.Params
{
AffiliateIdOwner = affiliateIdOwner,
AffiliateIdTarget = affiliateIdTarget,
StatusCat = activeOnly ? SbmAssociation.StatusCat.Active : SbmAssociation.StatusCat.NotDeleted
};
String filter = GetAssociationQueryFilter(prmAssociation).Concat(" AND ", "(", ")");
db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filter);
}
return 0;
}
public override bool TargetHasAssociations(SysId affiliateIdTarget, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
{
return (TargetAssociationCount(affiliateIdTarget, associationType, activeOnly) > 0);
}
public override long TargetAssociationCount(SysId affiliateIdTarget, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
{
ClearErrorState();
if (!SysId.IsValid(affiliateIdTarget) || (int)associationType < 1) return 0;
if (db != null)
{
SbmAssociation.Params prmAssociation = new SbmAssociation.Params
{
AffiliateIdTarget = affiliateIdTarget,
AssociationType = associationType,
StatusCat = activeOnly ? SbmAssociation.StatusCat.Active : SbmAssociation.StatusCat.NotDeleted
};
String filter = GetAssociationQueryFilter(prmAssociation).Concat(" AND ", "(", ")");
db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filter);
}
return 0;
}
//-------------------------------------------------------------------
// Create Association.
public override SbmAssociation CreateAssociation(SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget)
{
return new SbmAssociation_Dbas(Internals, null, affiliateIdOwner, associationType, affiliateIdTarget, 0);
}
private SbmAssociation_Dbas CreateAssociation(Association_Db dbAssociation)
{
ClearErrorState();
SbmAssociation_Dbas association = new SbmAssociation_Dbas(Internals, new SysId(dbAssociation._Id), new SysId(dbAssociation._AffIdOwner), (Sbm.AssociationType)dbAssociation._Type, new SysId(dbAssociation._AffIdTarget), (ushort)dbAssociation._Flags);
PopulateFrom(dbAssociation, association);
return association;
}
//-------------------------------------------------------------------
// Get Association.
public override SbmAssociation GetAssociation(SbmAssociation.Params prm)
{
return GetAssociation(GetAssociationQueryFilter(prm).Concat(" AND ", "(", ")"));
}
private SbmAssociation GetAssociation(String filter)
{
ClearErrorState();
long count = GetAssociationCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple Associations found");
return null;
}
SbmAssociation association = null;
// Query data.
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Association_Db dbAssociation = new Association_Db(DbInfo);
dbAssociation.PopulateFrom(dbCommand, aliasAssociation, filter);
association = CreateAssociation(dbAssociation);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return association;
}
//-------------------------------------------------------------------
public override SysId GetAssociationAffIdTarget(SysId associationId)
{
ClearErrorState();
if (!SysId.IsValid(associationId)) return null;
// Filter to target specified association.
SbmAssociation.Params prmAssociation = new SbmAssociation.Params();
prmAssociation.IdsIncluded.Add(associationId);
prmAssociation.StatusCat = SbmAssociation.StatusCat.Any;
if (GetAssociationCount(prmAssociation) != 1) return null;
// Columns to query.
ColumnDfn colAffIdTarget = GetAssociationColumnDfn(SbmAssociation.Column.AffIdTarget);
List<ColumnDfn> columnsToQuery = new List<ColumnDfn>() { colAffIdTarget };
// Query associations.
using (DbResultSet dbResultSet = ExecuteAssociationQuery(columnsToQuery, prmAssociation))
{
// Only interested in first row.
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
return new SysId((int)values.GetValue(colAffIdTarget.DataName).AsLong());
}
}
return null;
}
public override String GetAssociationCode(SysId associationId)
{
ClearErrorState();
if (!SysId.IsValid(associationId)) return "";
// Filter to target specified association.
SbmAssociation.Params prmAssociation = new SbmAssociation.Params();
prmAssociation.IdsIncluded.Add(associationId);
prmAssociation.StatusCat = SbmAssociation.StatusCat.Any;
if (GetAssociationCount(prmAssociation) != 1) return "";
// Columns to query.
ColumnDfn colCode = GetAssociationColumnDfn(SbmAssociation.Column.Code);
List<ColumnDfn> columnsToQuery = new List<ColumnDfn>() { colCode };
// Query associations.
using (DbResultSet dbResultSet = ExecuteAssociationQuery(columnsToQuery, prmAssociation))
{
// Only interested in first row.
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
return values.GetValue(colCode.DataName).AsString();
}
}
return "";
}
//-------------------------------------------------------------------
// Validate Association.
public override bool IsValidAssociationData(SbmAssociation.Data data, SbmAssociation.ErrField errField)
{
ClearErrorState();
if (!base.IsValidAssociationData(data, errField)) return false;
if (errField.CommodityIdSalesDefault != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.CommodityIdSalesDefault))
{
if (!CommodityMgr.CommodityExistsById(data.CommodityIdSalesDefault))
{
errField.OrderLeadTimeCode = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid default sales Commodity");
}
}
return true;
}
//-------------------------------------------------------------------
// Insert Association.
public override bool InsertAssociation(SbmAssociation association, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidAssociation(association)) return false;
if (SysId.IsValid(association.Id)) return SetErrorState(ErrorMessage.ValiditemId);
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Association_Db dbAssociation = new Association_Db(DbInfo);
PopulateTo(dbAssociation, association, dbUpdateInfo);
if (Association_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbAssociation._Id = SysId.ToInt(db.GetNextId("Association", dbUpdateInfo));
}
dbAssociation.ExecuteInsertCommand(dbCommand);
association.Id = new SysId(dbAssociation._Id);
association.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. {GetLogProperties(association).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update Association.
public override bool UpdateAssociation(SbmAssociation association, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidAssociation(association)) return false;
if (!SysId.IsValid(association.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!association.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. {GetLogProperties(association).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve Association.
dbConnection.Open();
Association_Db dbAssociation = new Association_Db(DbInfo);
dbAssociation.PopulateFrom(dbCommand, aliasAssociation, "Id=" + SysId.ToString(association.Id));
SbmUpdateLogItemMonitor_Association updateLogMonitor = new SbmUpdateLogItemMonitor_Association(Internals, CreateAssociation(dbAssociation));
// Update properties.
PopulateTo(dbAssociation, association, dbUpdateInfo);
dbAssociation.ExecuteUpdateCommand(dbCommand);
association.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. {GetLogProperties(association).Concat(": ").Concat("", "\n\t")}");
// Record updates.
updateLogMonitor.RecordUpdatedValues(association);
updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete Association.
public override bool AssociationCanBeDeleted(SbmAssociation association)
{
ClearErrorState();
if (!base.AssociationCanBeDeleted(association)) return false;
return true;
}
public override bool DeleteAssociation(SbmAssociation association, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!AssociationCanBeDeleted(association)) return false;
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve Association.
dbConnection.Open();
Association_Db dbAssociation = new Association_Db(DbInfo);
dbAssociation.PopulateFrom(dbCommand, aliasAssociation, "Id=" + association.Id.ToString());
// Delete Association.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association) + " WHERE Id=" + SysId.ToString(association.Id) + ";";
dbCommand.ExecuteNonQuery();
association.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. {GetLogProperties(association).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Association_Db dbAssociation, SbmAssociation association, DbUpdateInfo dbUpdateInfo)
{
dbAssociation._Id = association.Id.ToInt();
dbAssociation._AffIdOwner = association.AffiliateIdOwner.ToInt();
dbAssociation._AffIdTarget = association.AffiliateIdTarget.ToInt();
dbAssociation._Type = (short)association.AssociationType;
dbAssociation._Code = association.Code;
dbAssociation._ExtRef = association.RefExt;
dbAssociation._Location = association.Location;
dbAssociation._Role = association.Role;
dbAssociation._PhoneMain = association.PhoneMain;
dbAssociation._Email = association.Email;
dbAssociation._Group = association.Group;
dbAssociation._DescDetail = association.DescDetail;
/*----------------------------------------*/
dbAssociation._DefaultNominalCode = association.DefaultNominalCode;
dbAssociation._AccountManagerCode = association.AccountManagerCode;
dbAssociation._AccountHandlerCode = association.AccountHandlerCode;
dbAssociation._AccountTypeCode = association.AccountTypeCode;
dbAssociation._AccountRatingCode = association.AccountRatingCode;
dbAssociation._ContactAreaCode = association.ContactAreaCode;
dbAssociation._ContactHandlerCode = association.ContactHandlerCode;
dbAssociation._ContactMethodCode = association.ContactMethodCode;
dbAssociation._ContactCallCycleCode = association.ContactCallCycleCode;
dbAssociation._CallsPerYear = (short)association.CallsPerYear;
dbAssociation._LastCall = association.LastCall;
dbAssociation._CommodityIdSalesDefault = SysId.ToInt(association.CommodityIdSalesDefault);
dbAssociation._OrderLeadTimeCode = association.OrderLeadTimeCode;
dbAssociation._DeliveryTypeCode = association.DeliveryTypeCode;
dbAssociation._DeliveryMethodCode = association.DeliveryMethodCode;
dbAssociation._DeliveryBookInCode = association.DeliveryBookInCode;
dbAssociation._DeliveryCourierCode = association.DeliveryCourierCode;
/*----------------------------------------*/
dbAssociation._AmountTransMax = association.AmountTransMax;
dbAssociation._AnnualSalesTarget = association.AnnualSalesTarget;
dbAssociation._CreditLimit = association.CreditLimit;
dbAssociation._AccountBalance = association.AccountBalance;
dbAssociation._DiscountType = (short)association.DiscountType;
dbAssociation._DiscountRate = association.DiscountRate;
dbAssociation._PriceSetId = association.PriceSetId.ToInt();
dbAssociation._TaxCodeId = association.TaxCodeId.ToInt();
dbAssociation._PaymentTerms = association.PaymentTerms;
dbAssociation._InvoiceDesc = association.InvoiceDesc;
// Terminated date is stored as a 4 byte integer: bytes 1-2: Year, byte 3: Month, byte 4: Day.
if (DateUtil.IsValid(association.Terminated))
dbAssociation._Terminated = association.Terminated.Year << 16 + association.Terminated.Month << 8 + association.Terminated.Day;
else dbAssociation._Terminated = 0;
// Common properties.
dbAssociation._Notes = association.Notes;
dbAssociation._Status = SacsSystem.GetStatusCode(association.Status);
dbAssociation._Flags = (short)association.Flags;
if (!SysId.IsValid(association.Id))
{
dbAssociation._CreateOn = DateTime.UtcNow;
dbAssociation._CreateBy = dbUpdateInfo.UserId.ToInt();
dbAssociation._CreateHost = dbUpdateInfo.Host;
}
dbAssociation._UpdateOn = DateTime.UtcNow;
dbAssociation._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbAssociation._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Association_Db dbAssociation, SbmAssociation association)
{
//prmAssociation.Id = new SysId(dbAssociation._Id);
association.AffiliateIdOwner = new SysId(dbAssociation._AffIdOwner);
association.AffiliateIdTarget = new SysId(dbAssociation._AffIdTarget);
association.AssociationType = (Sbm.AssociationType)dbAssociation._Type;
association.Code = dbAssociation._Code;
association.RefExt = dbAssociation._ExtRef;
association.Location = dbAssociation._Location;
association.Role = dbAssociation._Role;
association.PhoneMain = dbAssociation._PhoneMain;
association.Email = dbAssociation._Email;
association.Group = dbAssociation._Group;
association.DescDetail = dbAssociation._DescDetail;
/*----------------------------------------*/
association.DefaultNominalCode = dbAssociation._DefaultNominalCode;
association.AccountManagerCode = dbAssociation._AccountManagerCode;
association.AccountHandlerCode = dbAssociation._AccountHandlerCode;
association.AccountTypeCode = dbAssociation._AccountTypeCode;
association.AccountRatingCode = dbAssociation._AccountRatingCode;
association.ContactAreaCode = dbAssociation._ContactAreaCode;
association.ContactHandlerCode = dbAssociation._ContactHandlerCode;
association.ContactMethodCode = dbAssociation._ContactMethodCode;
association.ContactCallCycleCode = dbAssociation._ContactCallCycleCode;
association.CallsPerYear = dbAssociation._CallsPerYear;
association.LastCall = dbAssociation._LastCall;
association.CommodityIdSalesDefault = new SysId(dbAssociation._CommodityIdSalesDefault);
association.OrderLeadTimeCode = dbAssociation._OrderLeadTimeCode;
association.DeliveryTypeCode = dbAssociation._DeliveryTypeCode;
association.DeliveryCourierCode = dbAssociation._DeliveryCourierCode;
association.DeliveryMethodCode = dbAssociation._DeliveryMethodCode;
association.DeliveryBookInCode = dbAssociation._DeliveryBookInCode;
/*----------------------------------------*/
association.AmountTransMax = dbAssociation._AmountTransMax;
association.AnnualSalesTarget = dbAssociation._AnnualSalesTarget;
association.CreditLimit = dbAssociation._CreditLimit;
association.AccountBalance = dbAssociation._AccountBalance;
association.DiscountType = (Sbm.DiscountType)dbAssociation._DiscountType;
association.DiscountRate = dbAssociation._DiscountRate;
association.PriceSetId = new SysId(dbAssociation._PriceSetId);
association.TaxCodeId = new SysId(dbAssociation._TaxCodeId);
association.PaymentTerms = dbAssociation._PaymentTerms;
association.InvoiceDesc = dbAssociation._InvoiceDesc;
if (dbAssociation._Terminated > 0)
association.Terminated = new DateTime(dbAssociation._Terminated >> 16, (dbAssociation._Terminated >> 8) & 0xFF, dbAssociation._Terminated & 0xFF);
else association.Terminated = DateTime.MinValue;
// Common properties.
association.Notes = dbAssociation._Notes;
association.Status = SacsSystem.GetStatusForCode(dbAssociation._Status);
association.SetCreateStamp(dbAssociation._CreateOn, new SysId(dbAssociation._CreateBy), dbAssociation._CreateHost);
association.SetUpdateStamp(dbAssociation._UpdateOn, new SysId(dbAssociation._UpdateBy), dbAssociation._UpdateHost);
association.AcceptChanges();
}
//-------------------------------------------------------------------
// G e t C o l u m n D e f i n i t i o n
//-------------------------------------------------------------------
public override SbmDbDfn.ColumnIdx GetDbCol(SbmAssociation.Column column)
{
switch (column)
{
case SbmAssociation.Column.Pos: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.Id: return SbmDbDfn.ColumnIdx.Association_Id;
case SbmAssociation.Column.Type: return SbmDbDfn.ColumnIdx.Association_Type;
case SbmAssociation.Column.Type_Desc: return SbmDbDfn.ColumnIdx.Association_Type;
case SbmAssociation.Column.Code: return SbmDbDfn.ColumnIdx.Association_Code;
case SbmAssociation.Column.ExtRef: return SbmDbDfn.ColumnIdx.Association_ExtRef;
case SbmAssociation.Column.Role: return SbmDbDfn.ColumnIdx.Association_Role;
case SbmAssociation.Column.Location: return SbmDbDfn.ColumnIdx.Association_Location;
case SbmAssociation.Column.PhoneMain: return SbmDbDfn.ColumnIdx.Association_PhoneMain;
case SbmAssociation.Column.Email: return SbmDbDfn.ColumnIdx.Association_Email;
case SbmAssociation.Column.Group: return SbmDbDfn.ColumnIdx.Association_Group;
case SbmAssociation.Column.DescDetail: return SbmDbDfn.ColumnIdx.Association_DescDetail;
//-------------------------------------------------------------------
case SbmAssociation.Column.DefaultNominalCode: return SbmDbDfn.ColumnIdx.Association_DefaultNominalCode;
case SbmAssociation.Column.AmountTransMax: return SbmDbDfn.ColumnIdx.Association_AmountTransMax;
case SbmAssociation.Column.AnnualSalesTarget: return SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget;
case SbmAssociation.Column.CreditLimit: return SbmDbDfn.ColumnIdx.Association_CreditLimit;
case SbmAssociation.Column.AccountBalance: return SbmDbDfn.ColumnIdx.Association_AccountBalance;
case SbmAssociation.Column.DiscountType: return SbmDbDfn.ColumnIdx.Association_DiscountType;
case SbmAssociation.Column.DiscountType_Desc: return SbmDbDfn.ColumnIdx.Association_DiscountType;
case SbmAssociation.Column.DiscountRate: return SbmDbDfn.ColumnIdx.Association_DiscountRate;
//-------------------------------------------------------------------
case SbmAssociation.Column.PriceSetId: return SbmDbDfn.ColumnIdx.Association_PriceSetId;
case SbmAssociation.Column.PriceSet_Ref: return SbmDbDfn.ColumnIdx.SaPriceSet_Ref;
case SbmAssociation.Column.PriceSet_Type: return SbmDbDfn.ColumnIdx.SaPriceSet_Type;
case SbmAssociation.Column.PriceSet_TypeDesc: return SbmDbDfn.ColumnIdx.SaPriceSet_Type;
case SbmAssociation.Column.PriceSet_Name: return SbmDbDfn.ColumnIdx.SaPriceSet_Name;
//-------------------------------------------------------------------
case SbmAssociation.Column.TaxCodeId: return SbmDbDfn.ColumnIdx.Association_TaxCodeId;
case SbmAssociation.Column.PaymentTerms: return SbmDbDfn.ColumnIdx.Association_PaymentTerms;
case SbmAssociation.Column.InvoiceDesc: return SbmDbDfn.ColumnIdx.Association_InvoiceDesc;
//-------------------------------------------------------------------
case SbmAssociation.Column.AccountManagerCode: return SbmDbDfn.ColumnIdx.Association_AccountManagerCode;
case SbmAssociation.Column.AccountManagerDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.AccountHandlerCode: return SbmDbDfn.ColumnIdx.Association_AccountHandlerCode;
case SbmAssociation.Column.AccountHandlerDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.AccountTypeCode: return SbmDbDfn.ColumnIdx.Association_AccountTypeCode;
case SbmAssociation.Column.AccountTypeDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.AccountRatingCode: return SbmDbDfn.ColumnIdx.Association_AccountRatingCode;
case SbmAssociation.Column.AccountRatingDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.ContactAreaCode: return SbmDbDfn.ColumnIdx.Association_ContactAreaCode;
case SbmAssociation.Column.ContactAreaDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.ContactHandlerCode: return SbmDbDfn.ColumnIdx.Association_ContactHandlerCode;
case SbmAssociation.Column.ContactHandlerDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.ContactMethodCode: return SbmDbDfn.ColumnIdx.Association_ContactMethodCode;
case SbmAssociation.Column.ContactMethodDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.ContactCallCycleCode: return SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode;
case SbmAssociation.Column.ContactCallCycleDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.OrderLeadTimeCode: return SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode;
case SbmAssociation.Column.OrderLeadTimeDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.DeliveryTypeCode: return SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode;
case SbmAssociation.Column.DeliveryTypeDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.DeliveryMethodCode: return SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode;
case SbmAssociation.Column.DeliveryMethodDesc: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.DeliveryBookInCode: return SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode;
case SbmAssociation.Column.DeliveryBookInDesc: return SbmDbDfn.ColumnIdx.Unknown;
//-------------------------------------------------------------------
case SbmAssociation.Column.Terminated: return SbmDbDfn.ColumnIdx.Association_Terminated;
case SbmAssociation.Column.Primary: return SbmDbDfn.ColumnIdx.Association_Flags;
case SbmAssociation.Column.Technician: return SbmDbDfn.ColumnIdx.Association_Flags;
case SbmAssociation.Column.Notes: return SbmDbDfn.ColumnIdx.Association_Notes;
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;
//------------------------------------------------------------------- Association's target details
case SbmAssociation.Column.AffIdTarget: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.Target_Type: return SbmDbDfn.ColumnIdx.Affiliate_Type;
case SbmAssociation.Column.Target_TypeDesc: return SbmDbDfn.ColumnIdx.Unknown;
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;
case SbmAssociation.Column.Target_PhoneAlt: return SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt;
case SbmAssociation.Column.Target_PhoneFax: return SbmDbDfn.ColumnIdx.Affiliate_PhoneFax;
case SbmAssociation.Column.Target_PhoneMobile: return SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile;
case SbmAssociation.Column.Target_Email: return SbmDbDfn.ColumnIdx.Affiliate_Email;
case SbmAssociation.Column.Target_Website: return SbmDbDfn.ColumnIdx.Affiliate_Website;
case SbmAssociation.Column.Target_Notes: return SbmDbDfn.ColumnIdx.Affiliate_Notes;
//------------------------------------------------------------------- Association's target address details
case SbmAssociation.Column.Target_Address_Type: return SbmDbDfn.ColumnIdx.Address_Type;
case SbmAssociation.Column.Target_Address_TypeDesc: return SbmDbDfn.ColumnIdx.Address_Type;
case SbmAssociation.Column.Target_Address_RefExt: return SbmDbDfn.ColumnIdx.Address_RefExt;
case SbmAssociation.Column.Target_Address_Name: return SbmDbDfn.ColumnIdx.Address_Name;
case SbmAssociation.Column.Target_Address_DescBrief: return SbmDbDfn.ColumnIdx.Address_DescBrief;
case SbmAssociation.Column.Target_Address_Summary: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.Target_Address_Line1: return SbmDbDfn.ColumnIdx.Address_Line1;
case SbmAssociation.Column.Target_Address_Line2: return SbmDbDfn.ColumnIdx.Address_Line2;
case SbmAssociation.Column.Target_Address_City: return SbmDbDfn.ColumnIdx.Address_City;
case SbmAssociation.Column.Target_Address_Province: return SbmDbDfn.ColumnIdx.Address_Province;
case SbmAssociation.Column.Target_Address_Postcode: return SbmDbDfn.ColumnIdx.Address_Postcode;
case SbmAssociation.Column.Target_Address_Country: return SbmDbDfn.ColumnIdx.Address_Country;
case SbmAssociation.Column.Target_Address_Contact: return SbmDbDfn.ColumnIdx.Address_Contact;
case SbmAssociation.Column.Target_Address_Phone: return SbmDbDfn.ColumnIdx.Address_Phone;
case SbmAssociation.Column.Target_Address_Email: return SbmDbDfn.ColumnIdx.Address_Email;
case SbmAssociation.Column.Target_Address_AccountManagerCode: return SbmDbDfn.ColumnIdx.Address_AccountManagerCode;
case SbmAssociation.Column.Target_Address_AccountManagerDesc: return SbmDbDfn.ColumnIdx.Address_AccountManagerCode;
case SbmAssociation.Column.Target_Address_AccountHandlerCode: return SbmDbDfn.ColumnIdx.Address_AccountHandlerCode;
case SbmAssociation.Column.Target_Address_AccountHandlerDesc: return SbmDbDfn.ColumnIdx.Address_AccountHandlerCode;
case SbmAssociation.Column.Target_Address_ContactAreaCode: return SbmDbDfn.ColumnIdx.Address_ContactAreaCode;
case SbmAssociation.Column.Target_Address_ContactAreaDesc: return SbmDbDfn.ColumnIdx.Address_ContactAreaCode;
case SbmAssociation.Column.Target_Address_ContactHandlerCode: return SbmDbDfn.ColumnIdx.Address_ContactHandlerCode;
case SbmAssociation.Column.Target_Address_ContactHandlerDesc: return SbmDbDfn.ColumnIdx.Address_ContactHandlerCode;
case SbmAssociation.Column.Target_Address_LastVisitOn: return SbmDbDfn.ColumnIdx.Address_LastVisitOn;
case SbmAssociation.Column.Target_Address_NextVisitOn: return SbmDbDfn.ColumnIdx.Address_NextVisitOn;
case SbmAssociation.Column.Target_DeliveryAddress_Postcode: return SbmDbDfn.ColumnIdx.Address_Postcode;
case SbmAssociation.Column.Target_DeliveryAddress_AccountManagerCode: return SbmDbDfn.ColumnIdx.Address_AccountManagerCode;
case SbmAssociation.Column.Target_DeliveryAddress_ContactAreaCode: return SbmDbDfn.ColumnIdx.Address_ContactAreaCode;
//------------------------------------------------------------------- Member's details
case SbmAssociation.Column.Member_Type: return SbmDbDfn.ColumnIdx.Association_Type;
case SbmAssociation.Column.Member_TypeDesc: return SbmDbDfn.ColumnIdx.Association_Type;
case SbmAssociation.Column.Member_Code: return SbmDbDfn.ColumnIdx.Association_Code;
case SbmAssociation.Column.Member_ExtRef: return SbmDbDfn.ColumnIdx.Association_ExtRef;
case SbmAssociation.Column.Member_Role: return SbmDbDfn.ColumnIdx.Association_Role;
case SbmAssociation.Column.Member_Location: return SbmDbDfn.ColumnIdx.Association_Location;
case SbmAssociation.Column.Member_PhoneMain: return SbmDbDfn.ColumnIdx.Association_PhoneMain;
case SbmAssociation.Column.Member_Email: return SbmDbDfn.ColumnIdx.Association_Email;
case SbmAssociation.Column.Member_Target_Name: return SbmDbDfn.ColumnIdx.Affiliate_Name;
case SbmAssociation.Column.Member_Target_Nature: return SbmDbDfn.ColumnIdx.Affiliate_Nature;
case SbmAssociation.Column.Member_Target_PhoneMain: return SbmDbDfn.ColumnIdx.Affiliate_PhoneMain;
case SbmAssociation.Column.Member_Target_PhoneAlt: return SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt;
case SbmAssociation.Column.Member_Target_PhoneFax: return SbmDbDfn.ColumnIdx.Affiliate_PhoneFax;
case SbmAssociation.Column.Member_Target_PhoneMobile: return SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile;
case SbmAssociation.Column.Member_Target_Email: return SbmDbDfn.ColumnIdx.Affiliate_Email;
case SbmAssociation.Column.Member_Target_Website: return SbmDbDfn.ColumnIdx.Affiliate_Website;
case SbmAssociation.Column.Member_Target_Notes: return SbmDbDfn.ColumnIdx.Affiliate_Notes;
case SbmAssociation.Column.Member_Target_Address_Summary: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.Member_Target_Address_Line1: return SbmDbDfn.ColumnIdx.Address_Line1;
case SbmAssociation.Column.Member_Target_Address_Line2: return SbmDbDfn.ColumnIdx.Address_Line2;
case SbmAssociation.Column.Member_Target_Address_City: return SbmDbDfn.ColumnIdx.Address_City;
case SbmAssociation.Column.Member_Target_Address_Province: return SbmDbDfn.ColumnIdx.Address_Province;
case SbmAssociation.Column.Member_Target_Address_Postcode: return SbmDbDfn.ColumnIdx.Address_Postcode;
case SbmAssociation.Column.Member_Target_Address_Country: return SbmDbDfn.ColumnIdx.Address_Country;
case SbmAssociation.Column.Trans_LastSaleRaised: return SbmDbDfn.ColumnIdx.Unknown; // Net open sales order value.
case SbmAssociation.Column.Trans_SalesValue_Open: return SbmDbDfn.ColumnIdx.Unknown; // Net open sales order value.
case SbmAssociation.Column.Trans_SalesValue_Cytd: return SbmDbDfn.ColumnIdx.Unknown; // Net sales order value closed this calendar year.
case SbmAssociation.Column.Trans_SalesValue_Lcy: return SbmDbDfn.ColumnIdx.Unknown;
case SbmAssociation.Column.CommodityCount: return SbmDbDfn.ColumnIdx.Unknown;
}
return SbmDbDfn.ColumnIdx.Unknown;
}
//-------------------------------------------------------------------
// Column definitions.
private static readonly String aliasAssociation = "aAssoc";
// Association Owner contact.
private static string aliasAssociation_Affiliate_Owner = "Asn_AffOwn";
private static string prefixAssociation_Affiliate_Owner = aliasAssociation_Affiliate_Owner + "_";
// Association Target contact.
private static string aliasAssociation_Affiliate_Target = "Asn_AffTgt";
private static string prefixAssociation_Affiliate_Target = aliasAssociation_Affiliate_Target + "_";
// Association Target address.
private static string aliasAssociation_Target_Address = "Asn_TgtAdd";
private static string prefixAssociation_Target_Address = aliasAssociation_Target_Address + "_";
// Association Member details.
private static string aliasAssociation_Member_Association = "Asn_MemAss";
private static string prefixAssociation_Member_Association = aliasAssociation_Member_Association + "_";
// Association Member contact.
private static string aliasAssociation_Member_Affiliate = "Asn_MemAff";
private static string prefixAssociation_Member_Affiliate = aliasAssociation_Member_Affiliate + "_";
// Association Member address.
private static string aliasAssociation_Member_Address = "Asn_MemAdd";
private static string prefixAssociation_Member_Address = aliasAssociation_Member_Address + "_";
// PriceSet.
private static string aliasAssociation_PriceSet = "Asn_PrcSet";
private static string prefixAssociation_PriceSet = aliasAssociation_PriceSet + "_";
// Column aliases.
private static string colAssociation_Primary = "ColPrimary";
private static string colAssociation_Technician = "ColTechnician";
private static string colAssociation_LastSaleRaised = "ColLastSoRaise";
private static string colAssociation_SalesValueOpen = "ColSalesValOpen";
private static string colAssociation_SalesValueCytd = "ColSalesValCytd";
private static string colAssociation_SalesValueLcy = "ColSaleValLcy";
private static string colAssociation_CommodityCount = "ColCmdCount";
// Column definition population.
private void SetAssociationColDfn
(ColumnDfn col, String caption, int width, SbmDbDfn.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SbmDbDfn.GetTableForColumn(dbCol) == SbmDbDfn.TableIdx.Association)
alias = aliasAssociation;
col.Set(caption, width, (int)dbCol, prefix + SbmDbDfn.GetColumnName(dbCol, false), SbmDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SbmDbDfn.ColumnIdx.Unknown)
col.MaxLength = (int)SbmDbDfn.GetColTextLen(dbCol);
}
//-------------------------------------------------------------------
// Getting prmAssociation column definition.
public override ColumnDfn GetAssociationColumnDfn(SbmAssociation.Column column, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)column, caption, width);
switch (column)
{
//-----------------------------------------------------------
case SbmAssociation.Column.Pos:
SetAssociationColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
//-----------------------------------------------------------
// Association properties.
case SbmAssociation.Column.Id:
SetAssociationColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.Association_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SbmAssociation.Column.Type:
SetAssociationColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Association_Type, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SbmAssociation.Column.Type_Desc:
SetAssociationColDfn(columnDfn, "TypeDesc", 70, SbmDbDfn.ColumnIdx.Association_Type, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SbmAssociation.Column.Code:
SetAssociationColDfn(columnDfn, "Code", 60, SbmDbDfn.ColumnIdx.Association_Code);
break;
case SbmAssociation.Column.ExtRef:
SetAssociationColDfn(columnDfn, "Ref", 60, SbmDbDfn.ColumnIdx.Association_ExtRef, ColumnAlignment.Center);
break;
case SbmAssociation.Column.Role:
SetAssociationColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_Role, "Role"), 90, SbmDbDfn.ColumnIdx.Association_Role);
break;
case SbmAssociation.Column.Location:
SetAssociationColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_Location, "Location"), 100, SbmDbDfn.ColumnIdx.Association_Location);
break;
case SbmAssociation.Column.PhoneMain:
SetAssociationColDfn(columnDfn, "Phone Main", 85, SbmDbDfn.ColumnIdx.Association_PhoneMain);
break;
case SbmAssociation.Column.Email:
SetAssociationColDfn(columnDfn, "Email", 170, SbmDbDfn.ColumnIdx.Association_Email);
break;
case SbmAssociation.Column.Group:
SetAssociationColDfn(columnDfn, "Group", 100, SbmDbDfn.ColumnIdx.Association_Group);
break;
case SbmAssociation.Column.DescDetail:
SetAssociationColDfn(columnDfn, "Desc Detail", 120, SbmDbDfn.ColumnIdx.Association_DescDetail);
break;
//-----------------------------------------------------------
// Accounting details.
case SbmAssociation.Column.DefaultNominalCode:
SetAssociationColDfn(columnDfn, "Default nominal", 90, SbmDbDfn.ColumnIdx.Association_DefaultNominalCode);
break;
case SbmAssociation.Column.AmountTransMax:
SetAssociationColDfn(columnDfn, "Amount trans max", 90, SbmDbDfn.ColumnIdx.Association_AmountTransMax, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmAssociation.Column.AnnualSalesTarget:
if (UserContext.SecurityProfile_Core.UserCanViewFinancials(Sbm.FinancialType.CommoditySales))
{
SetAssociationColDfn(columnDfn, "Annual sales target", 90, SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = 0;
}
break;
case SbmAssociation.Column.CreditLimit:
SetAssociationColDfn(columnDfn, "Credit limit", 90, SbmDbDfn.ColumnIdx.Association_CreditLimit, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmAssociation.Column.AccountBalance:
SetAssociationColDfn(columnDfn, "Account balance", 90, SbmDbDfn.ColumnIdx.Association_AccountBalance, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmAssociation.Column.DiscountType:
SetAssociationColDfn(columnDfn, "Discount type", 80, SbmDbDfn.ColumnIdx.Association_DiscountType, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmAssociation.Column.DiscountType_Desc:
SetAssociationColDfn(columnDfn, "Discount type desc", 110, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center);
break;
case SbmAssociation.Column.DiscountRate:
SetAssociationColDfn(columnDfn, "Discount rate", 80, SbmDbDfn.ColumnIdx.Association_DiscountRate, ColumnAlignment.Right, DataValue.DataType.Double);
break;
//-----------------------------------------------------------
// PriceSet details.
case SbmAssociation.Column.PriceSetId:
SetAssociationColDfn(columnDfn, "Price set Id", 60, SbmDbDfn.ColumnIdx.SaPriceSet_Id, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmAssociation.Column.PriceSet_Ref:
SetAssociationColDfn(columnDfn, "Price set ref", 100, SbmDbDfn.ColumnIdx.SaPriceSet_Ref, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_PriceSet, prefixAssociation_PriceSet);
break;
case SbmAssociation.Column.PriceSet_Type:
SetAssociationColDfn(columnDfn, "Price set type", 70, SbmDbDfn.ColumnIdx.SaPriceSet_Type, ColumnAlignment.Center, DataValue.DataType.Long, aliasAssociation_PriceSet, prefixAssociation_PriceSet);
break;
case SbmAssociation.Column.PriceSet_TypeDesc:
SetAssociationColDfn(columnDfn, "Price set type", 80, SbmDbDfn.ColumnIdx.SaPriceSet_Type, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_PriceSet, prefixAssociation_PriceSet);
break;
case SbmAssociation.Column.PriceSet_Name:
SetAssociationColDfn(columnDfn, "Price set name", 120, SbmDbDfn.ColumnIdx.SaPriceSet_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_PriceSet, prefixAssociation_PriceSet);
break;
//-----------------------------------------------------------
// TaxCode details.
case SbmAssociation.Column.TaxCodeId:
SetAssociationColDfn(columnDfn, "Tax code #", 60, SbmDbDfn.ColumnIdx.Association_TaxCodeId, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmAssociation.Column.PaymentTerms:
SetAssociationColDfn(columnDfn, "Payment terms", 90, SbmDbDfn.ColumnIdx.Association_PaymentTerms, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmAssociation.Column.InvoiceDesc:
SetAssociationColDfn(columnDfn, "Invoice desc", 120, SbmDbDfn.ColumnIdx.Association_InvoiceDesc);
break;
//-----------------------------------------------------------
// Association codes.
case SbmAssociation.Column.AccountManagerCode:
case SbmAssociation.Column.AccountManagerDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Acc.Mgr.");
SetAssociationColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Association_AccountManagerCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.AccountHandlerCode:
case SbmAssociation.Column.AccountHandlerDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "Acc.Hndlr");
SetAssociationColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.AccountTypeCode:
case SbmAssociation.Column.AccountTypeDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountTypeCode, "Acc.Type");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_AccountTypeCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.AccountRatingCode:
case SbmAssociation.Column.AccountRatingDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountRatingCode, "Acc.Rating");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_AccountRatingCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.ContactAreaCode:
case SbmAssociation.Column.ContactAreaDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "Cont.Area");
SetAssociationColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Association_ContactAreaCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.ContactHandlerCode:
case SbmAssociation.Column.ContactHandlerDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "Cont.Hndlr");
SetAssociationColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.ContactMethodCode:
case SbmAssociation.Column.ContactMethodDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactMethodCode, "Cont.Method");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_ContactMethodCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.ContactCallCycleCode:
case SbmAssociation.Column.ContactCallCycleDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode, "Call cycle");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.CallsPerYear:
SetAssociationColDfn(columnDfn, "Calls per year", 80, SbmDbDfn.ColumnIdx.Association_CallsPerYear, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmAssociation.Column.LastCall:
SetAssociationColDfn(columnDfn, "Last call", 90, SbmDbDfn.ColumnIdx.Association_LastCall, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
//-----------------------------------------------------------
// Seasion categories details.
case SbmAssociation.Column.SeasonalCategoryCodes:
case SbmAssociation.Column.SeasonalCategoryCode1:
case SbmAssociation.Column.SeasonalCategoryDesc1:
case SbmAssociation.Column.SeasonalCategoryCode2:
case SbmAssociation.Column.SeasonalCategoryDesc2:
case SbmAssociation.Column.SeasonalCategoryCode3:
case SbmAssociation.Column.SeasonalCategoryDesc3:
{
String label = "Seasonal categories";
if (column == SbmAssociation.Column.SeasonalCategoryCode1) label = " Seasonal cat code 1";
else if (column == SbmAssociation.Column.SeasonalCategoryDesc1) label = "Seasonal cat 1";
else if (column == SbmAssociation.Column.SeasonalCategoryCode2) label = "Seasonal cat code 2";
else if (column == SbmAssociation.Column.SeasonalCategoryDesc2) label = "Seasonal cat 2";
else if (column == SbmAssociation.Column.SeasonalCategoryCode3) label = "Seasonal cat code 3";
else if (column == SbmAssociation.Column.SeasonalCategoryDesc3) label = "Seasonal cat 3";
SetAssociationColDfn(columnDfn, label, 120, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Left);
break;
}
//-----------------------------------------------------------
// Other Coding details.
case SbmAssociation.Column.OrderLeadTimeCode:
case SbmAssociation.Column.OrderLeadTimeDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode, "Order lead time");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.DeliveryTypeCode:
case SbmAssociation.Column.DeliveryTypeDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode, "Delivery type");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.DeliveryMethodCode:
case SbmAssociation.Column.DeliveryMethodDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode, "Delivery method");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode, ColumnAlignment.Center);
break;
}
case SbmAssociation.Column.DeliveryBookInCode:
case SbmAssociation.Column.DeliveryBookInDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode, "Delivery book-in");
SetAssociationColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode, ColumnAlignment.Center);
break;
}
//---------------------------------------------------------------
case SbmAssociation.Column.Terminated:
SetAssociationColDfn(columnDfn, "Terminated", 90, SbmDbDfn.ColumnIdx.Association_Terminated, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmAssociation.Column.Primary:
SetAssociationColDfn(columnDfn, "Primary", 50, SbmDbDfn.ColumnIdx.Association_Flags, ColumnAlignment.Center);
columnDfn.DataName = colAssociation_Primary;
columnDfn.SortMode = ColumnDfn.ColumnSortMode.On;
columnDfn.DataType = DataValue.DataType.Bool;
columnDfn.BoolFormat = ColumnBoolFormat.Tick;
break;
case SbmAssociation.Column.Technician:
SetAssociationColDfn(columnDfn, "Tech.", 50, SbmDbDfn.ColumnIdx.Association_Flags, ColumnAlignment.Center);
columnDfn.DataName = colAssociation_Technician;
columnDfn.SortMode = ColumnDfn.ColumnSortMode.On;
columnDfn.DataType = DataValue.DataType.Bool;
columnDfn.BoolFormat = ColumnBoolFormat.Tick;
break;
//-----------------------------------------------------------
// Owner details.
case SbmAssociation.Column.AffIdOwner:
SetAssociationColDfn(columnDfn, "Owner Id", 60, SbmDbDfn.ColumnIdx.Association_AffIdOwner, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SbmAssociation.Column.Owner_Name:
SetAssociationColDfn(columnDfn, "Owner", 120, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Owner, prefixAssociation_Affiliate_Owner);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Target details.
case SbmAssociation.Column.AffIdTarget:
SetAssociationColDfn(columnDfn, "Target Id", 60, SbmDbDfn.ColumnIdx.Association_AffIdOwner, 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);
break;
case SbmAssociation.Column.Target_TypeDesc:
SetAssociationColDfn(columnDfn, "Type", 80, SbmDbDfn.ColumnIdx.Affiliate_Type, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_Name:
SetAssociationColDfn(columnDfn, "Target", 240, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_FirstName:
SetAssociationColDfn(columnDfn, "First name", 240, SbmDbDfn.ColumnIdx.Affiliate_FirstName, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_LastName:
SetAssociationColDfn(columnDfn, "Last name", 240, SbmDbDfn.ColumnIdx.Affiliate_LastName, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_Nature:
SetAssociationColDfn(columnDfn, "Target nature", 120, SbmDbDfn.ColumnIdx.Affiliate_Nature, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_PhoneMain:
SetAssociationColDfn(columnDfn, "Main phone", 85, SbmDbDfn.ColumnIdx.Affiliate_PhoneMain, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_PhoneFax:
SetAssociationColDfn(columnDfn, "Fax phone", 85, SbmDbDfn.ColumnIdx.Affiliate_PhoneFax, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_Email:
SetAssociationColDfn(columnDfn, "Email", 170, SbmDbDfn.ColumnIdx.Affiliate_Email, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
case SbmAssociation.Column.Target_Notes:
SetAssociationColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.Affiliate_Notes, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Affiliate_Target, prefixAssociation_Affiliate_Target);
break;
//-----------------------------------------------------------
// Target address details.
case SbmAssociation.Column.Target_Address_Type:
SetAssociationColDfn(columnDfn, "Address type", 75, SbmDbDfn.ColumnIdx.Address_Type, ColumnAlignment.Right, DataValue.DataType.Long, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_TypeDesc:
SetAssociationColDfn(columnDfn, "Address type", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
columnDfn.DataName = (SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type, aliasAssociation_Target_Address));
break;
case SbmAssociation.Column.Target_Address_RefExt:
SetAssociationColDfn(columnDfn, "Address ref ext", 90, SbmDbDfn.ColumnIdx.Address_RefExt, ColumnAlignment.Center, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Name:
SetAssociationColDfn(columnDfn, "Address name", 120, SbmDbDfn.ColumnIdx.Address_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_DescBrief:
SetAssociationColDfn(columnDfn, "Address desc", 120, SbmDbDfn.ColumnIdx.Address_DescBrief, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
/**/
case SbmAssociation.Column.Target_Address_Summary:
SetAssociationColDfn(columnDfn, "Address", 220, SbmDbDfn.ColumnIdx.Unknown);
columnDfn.DataName = (SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Postcode, aliasAssociation_Target_Address));
break;
case SbmAssociation.Column.Target_Address_Line1:
SetAssociationColDfn(columnDfn, "Address 1", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Line2:
SetAssociationColDfn(columnDfn, "Address 2", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_City:
SetAssociationColDfn(columnDfn, "City", 80, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Province:
SetAssociationColDfn(columnDfn, "Province", 80, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Postcode:
SetAssociationColDfn(columnDfn, "Postcode", 65, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Center, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Country:
SetAssociationColDfn(columnDfn, "Country", 80, SbmDbDfn.ColumnIdx.Address_Country, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Contact:
SetAssociationColDfn(columnDfn, "Address contact", 100, SbmDbDfn.ColumnIdx.Address_Contact, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Phone:
SetAssociationColDfn(columnDfn, "Address phone", 85, SbmDbDfn.ColumnIdx.Address_Phone, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_Email:
SetAssociationColDfn(columnDfn, "Address email", 170, SbmDbDfn.ColumnIdx.Address_Email, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_AccountManagerCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "account manager");
SetAssociationColDfn(columnDfn, "Address " + label, 70, SbmDbDfn.ColumnIdx.Address_AccountManagerCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_AccountManagerDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "account manager");
SetAssociationColDfn(columnDfn, "Address " + label, 100, SbmDbDfn.ColumnIdx.Address_AccountManagerCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_AccountHandlerCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "account handler");
SetAssociationColDfn(columnDfn, "Address " + label, 70, SbmDbDfn.ColumnIdx.Address_AccountHandlerCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_AccountHandlerDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "account handler");
SetAssociationColDfn(columnDfn, "Address " + label, 100, SbmDbDfn.ColumnIdx.Address_AccountHandlerCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_ContactAreaCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "contact area");
SetAssociationColDfn(columnDfn, "Address " + label, 70, SbmDbDfn.ColumnIdx.Address_ContactAreaCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_ContactAreaDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "contact area");
SetAssociationColDfn(columnDfn, "Address " + label, 100, SbmDbDfn.ColumnIdx.Address_ContactAreaCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_ContactHandlerCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "contact handler");
SetAssociationColDfn(columnDfn, "Address " + label, 80, SbmDbDfn.ColumnIdx.Address_ContactHandlerCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_ContactHandlerDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "contact handler");
SetAssociationColDfn(columnDfn, "Address " + label, 100, SbmDbDfn.ColumnIdx.Address_ContactHandlerCode, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
}
case SbmAssociation.Column.Target_Address_LastVisitOn:
SetAssociationColDfn(columnDfn, "Last visit", 90, SbmDbDfn.ColumnIdx.Address_LastVisitOn, ColumnAlignment.Center, DataValue.DataType.Date, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
case SbmAssociation.Column.Target_Address_NextVisitOn:
SetAssociationColDfn(columnDfn, "Next visit", 90, SbmDbDfn.ColumnIdx.Address_NextVisitOn, ColumnAlignment.Center, DataValue.DataType.Date, aliasAssociation_Target_Address, prefixAssociation_Target_Address);
break;
//-----------------------------------------------------------
// Target Delivery details.
// These should only be used for association import [ref Cadix 201601] and do not require column definitions as the address columns are already defined above.
case SbmAssociation.Column.Target_DeliveryAddress_Postcode:
break;
case SbmAssociation.Column.Target_DeliveryAddress_AccountManagerCode:
break;
case SbmAssociation.Column.Target_DeliveryAddress_ContactAreaCode:
break;
//-----------------------------------------------------------
// Member details.
case SbmAssociation.Column.Member_Type:
SetAssociationColDfn(columnDfn, "Member type", 75, SbmDbDfn.ColumnIdx.Affiliate_Type, ColumnAlignment.Right, DataValue.DataType.Long, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_TypeDesc:
SetAssociationColDfn(columnDfn, "Member type", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_Code:
SetAssociationColDfn(columnDfn, "Member code", 90, SbmDbDfn.ColumnIdx.Association_Code, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_ExtRef:
SetAssociationColDfn(columnDfn, "Member ext ref", 80, SbmDbDfn.ColumnIdx.Association_ExtRef, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_Role:
SetAssociationColDfn(columnDfn, "Member " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_Role, "role"), 90, SbmDbDfn.ColumnIdx.Association_Role, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_Location:
SetAssociationColDfn(columnDfn, "Member " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_Location, "location"), 100, SbmDbDfn.ColumnIdx.Association_Location, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_PhoneMain:
SetAssociationColDfn(columnDfn, "Member phone", 85, SbmDbDfn.ColumnIdx.Association_PhoneMain, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
case SbmAssociation.Column.Member_Email:
SetAssociationColDfn(columnDfn, "Member email", 170, SbmDbDfn.ColumnIdx.Association_Email, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Association, prefixAssociation_Member_Association);
break;
//-----------------------------------------------------------
// Member target details.
case SbmAssociation.Column.Member_Target_Name:
SetAssociationColDfn(columnDfn, "Member name", 120, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_Nature:
SetAssociationColDfn(columnDfn, "Member nature", 120, SbmDbDfn.ColumnIdx.Affiliate_Nature, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_PhoneMain:
SetAssociationColDfn(columnDfn, "Member phone", 85, SbmDbDfn.ColumnIdx.Affiliate_PhoneMain, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_PhoneAlt:
SetAssociationColDfn(columnDfn, "Member alt phone", 85, SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_PhoneFax:
SetAssociationColDfn(columnDfn, "Member fax", 85, SbmDbDfn.ColumnIdx.Affiliate_PhoneFax, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_PhoneMobile:
SetAssociationColDfn(columnDfn, "Member mobile", 85, SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_Email:
SetAssociationColDfn(columnDfn, "Member email", 170, SbmDbDfn.ColumnIdx.Affiliate_Email, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_Website:
SetAssociationColDfn(columnDfn, "Member website", 120, SbmDbDfn.ColumnIdx.Affiliate_Website, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
case SbmAssociation.Column.Member_Target_Notes:
SetAssociationColDfn(columnDfn, "Member notes", 200, SbmDbDfn.ColumnIdx.Affiliate_Notes, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Affiliate, prefixAssociation_Member_Affiliate);
break;
//---------------------------------------------------------------
// Member address details.
case SbmAssociation.Column.Member_Target_Address_Summary:
SetAssociationColDfn(columnDfn, "Address", 220, SbmDbDfn.ColumnIdx.Unknown);
columnDfn.SortDataName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Postcode, aliasAssociation_Member_Address);
break;
case SbmAssociation.Column.Member_Target_Address_Line1:
SetAssociationColDfn(columnDfn, "Member Address 1", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Address, prefixAssociation_Member_Address);
break;
case SbmAssociation.Column.Member_Target_Address_Line2:
SetAssociationColDfn(columnDfn, "Member Address 2", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Address, prefixAssociation_Member_Address);
break;
case SbmAssociation.Column.Member_Target_Address_City:
SetAssociationColDfn(columnDfn, "Member City", 80, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Address, prefixAssociation_Member_Address);
break;
case SbmAssociation.Column.Member_Target_Address_Province:
SetAssociationColDfn(columnDfn, "Member Province", 80, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Address, prefixAssociation_Member_Address);
break;
case SbmAssociation.Column.Member_Target_Address_Postcode:
SetAssociationColDfn(columnDfn, "Member Postcode", 65, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Center, DataValue.DataType.String, aliasAssociation_Member_Address, prefixAssociation_Member_Address);
break;
case SbmAssociation.Column.Member_Target_Address_Country:
SetAssociationColDfn(columnDfn, "Member Country", 80, SbmDbDfn.ColumnIdx.Address_Country, ColumnAlignment.Default, DataValue.DataType.String, aliasAssociation_Member_Address, prefixAssociation_Member_Address);
break;
//---------------------------------------------------------------
// Transaction details.
case SbmAssociation.Column.Trans_LastSaleRaised:
SetAssociationColDfn(columnDfn, "Last SO", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DataName = colAssociation_LastSaleRaised;
break;
case SbmAssociation.Column.Trans_SalesValue_Open: // Net open sales order value.
if (UserContext.SecurityProfile_Core.UserCanViewFinancials(Sbm.FinancialType.CommoditySales))
{
SetAssociationColDfn(columnDfn, "Open sales", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = colAssociation_SalesValueOpen;
}
break;
case SbmAssociation.Column.Trans_SalesValue_Cytd: // Net sales order value closed this calendar year.
if (UserContext.SecurityProfile_Core.UserCanViewFinancials(Sbm.FinancialType.CommoditySales))
{
SetAssociationColDfn(columnDfn, "Sales CYTD", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = colAssociation_SalesValueCytd;
}
break;
case SbmAssociation.Column.Trans_SalesValue_Lcy: // Net sales order value closed last calendar year.
if (UserContext.SecurityProfile_Core.UserCanViewFinancials(Sbm.FinancialType.CommoditySales))
{
SetAssociationColDfn(columnDfn, "Sales LCY", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = colAssociation_SalesValueLcy;
}
break;
//---------------------------------------------------------------
case SbmAssociation.Column.CommodityCount: // Number of commodities defined for the association.
SetAssociationColDfn(columnDfn, "Commodities", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.DataName = colAssociation_CommodityCount;
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
break;
//-----------------------------------------------------------
// Common properties.
case SbmAssociation.Column.Notes:
SetAssociationColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.Association_Notes);
break;
case SbmAssociation.Column.Status:
SetAssociationColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Association_Status, ColumnAlignment.Center);
break;
case SbmAssociation.Column.Status_Desc:
SetAssociationColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Association_Status, ColumnAlignment.Center);
break;
case SbmAssociation.Column.Status_Ind:
SetAssociationColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Association_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SbmAssociation.Column.CreateOn_Date:
SetAssociationColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.Association_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SbmAssociation.Column.UpdateOn_Date:
SetAssociationColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.Association_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Q u e r y F i l t e r
//-------------------------------------------------------------------
// Association query filter.
public String GetFlagValue(ushort flag, bool match, String aliasTable)
{
DbQuery qry = new DbQuery(db.DbmsType);
return DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Flags, aliasTable), flag, match);
}
public String GetFlagFilter(ushort flag, bool match, String aliasTable)
{
DbQuery qry = new DbQuery(db.DbmsType);
return DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Flags, aliasTable), flag, match);
}
// Has each filter prm-col been specified.
public override List<string> GetAssociationQueryFilter(SbmAssociation.Params prm)
{
List<String> filter = new List<String>();
//---------------------------------------------------------------
// Association Id.
String colAssociation_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation);
String includedIds = prm.IdsIncluded.Concat(",");
if (!includedIds.IsEmpty())
filter.Add(colAssociation_Id + " IN (" + includedIds + ")");
String excludedIds = prm.IdsExcluded.Concat(",");
if (!excludedIds.IsEmpty())
filter.Add(colAssociation_Id + " NOT IN (" + excludedIds + ")");
// Association Type.
String colAssociation_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAssociation);
if (prm.AssociationType > 0)
filter.Add(colAssociation_Type + "=" + ((int)prm.AssociationType).ToString());
else if (prm.AssociationType == AssociationType.NotInternal)
filter.Add(colAssociation_Type + "!=" + ((int)Sbm.AssociationType.Internal).ToString());
//---------------------------------------------------------------
// Owner affiliate.
String colAssociation_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAssociation);
if (SysId.IsValid(prm.AffiliateIdOwner))
filter.Add(colAssociation_AffIdOwner + "=" + prm.AffiliateIdOwner.ToString());
// Target Affiliate.
String colAssociation_AffIdTarget = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssociation);
if (SysId.IsValid(prm.AffiliateIdTarget))
filter.Add(colAssociation_AffIdTarget + "=" + prm.AffiliateIdTarget.ToString());
//---------------------------------------------------------------
// Contact Group.
if (SysId.IsValid(prm.AffiliateIdContactGroup))
{
//Association must also be a member of this contact group.
String aliasAssocContactGroup = "aAssConGrp";
DbQuery queryAssocContactGroup = new DbQuery(db.DbmsType);
queryAssocContactGroup.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAssocContactGroup);
String colAssocConGrp_AffIdTarget = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssocContactGroup);
queryAssocContactGroup.Columns.Add(colAssocConGrp_AffIdTarget);
String colAssocConGrp_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAssocContactGroup);
queryAssocContactGroup.Filters.Add(colAssocConGrp_AffIdOwner + "=" + prm.AffiliateIdContactGroup.ToString());
String colAssocConGrp_AssocType = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAssocContactGroup);
queryAssocContactGroup.Filters.Add(colAssocConGrp_AssocType + "=" + Sbm.AssociationType.Member.ToString());
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + "IN (" + queryAssocContactGroup.BuildQuery() + ")");
}
//---------------------------------------------------------------
// Code.
String colAssociation_Code = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Code, aliasAssociation);
if (!prm.Code.IsEmpty())
filter.Add(colAssociation_Code + "='" + DbQuery.FormatForCondition(prm.Code) + "'");
else if (!prm.CodePartial.IsEmpty())
filter.Add(DbQuery.FormatFn_Left(colAssociation_Code, prm.CodePartial.Length) + " Like '%" + DbQuery.FormatForLike(prm.CodePartial) + "%'");
// Group.
String colAssociation_Group = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Group, aliasAssociation);
if (!prm.GroupFull.IsEmpty())
filter.Add(colAssociation_Group + "='" + DbQuery.FormatForCondition(prm.GroupFull) + "'");
else if (!prm.GroupPartial.IsEmpty())
filter.Add(DbQuery.FormatFn_Left(colAssociation_Group, prm.GroupPartial.Length) + " Like '%" + DbQuery.FormatForLike(prm.GroupPartial) + "%'");
//---------------------------------------------------------------
// Target Name.
if (!prm.NameTargetFull.IsEmpty() || !prm.NameTargetPartial.IsEmpty())
{
// Target affiliate alias.
String aliasAffiliateTarget = StringUtil.OnBlank(prm.Alias_Affiliate_Target, aliasAssociation_Affiliate_Target);
// Target affiliate columns.
String colAffiliate_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliateTarget);
String colAffiliate_Name = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAffiliateTarget);
String colAffiliate_FirstName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_FirstName, aliasAffiliateTarget);
String colAffiliate_LastName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_LastName, aliasAffiliateTarget);
// Filters.
List<String> affiliateFilter = new List<string>();
String nameTargetFull = DbQuery.FormatForCondition(StringUtil.EmptyOnNull(prm.NameTargetFull));
String nameTargetPartial = DbQuery.FormatForLike(StringUtil.EmptyOnNull(prm.NameTargetPartial));
if (!nameTargetFull.IsEmpty())
affiliateFilter.Add(colAffiliate_Name + "='" + nameTargetFull + "' OR " + colAffiliate_LastName + "='" + nameTargetFull + "'");
if (!nameTargetPartial.IsEmpty())
affiliateFilter.Add(
colAffiliate_Name + " Like '%" + nameTargetPartial + "%' OR " +
colAffiliate_FirstName + " Like '%" + nameTargetPartial + "%' OR " +
colAffiliate_LastName + " Like '%" + nameTargetPartial + "%'");
if (prm.Alias_Affiliate_Target.IsEmpty())
{
// Target affiliate alias not supplied - table is not joined in main query.
// Sub query on target affiliate.
DbQuery queryAffTarget = new DbQuery(db.DbmsType);
queryAffTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAffiliateTarget);
queryAffTarget.Columns.Add(colAffiliate_Id);
queryAffTarget.Filters.Add(colAffiliate_Id + "=" + colAssociation_AffIdTarget);
queryAffTarget.Filters.AddRange(affiliateFilter);
filter.Add("EXISTS (" + queryAffTarget.BuildQuery() + ")");
}
else
{
// Target affiliate alias supplied - table is joined in main query.
// Simply filter directly on joined table.
filter.AddRange(affiliateFilter);
}
}
//---------------------------------------------------------------
// Target Address & Postcode.
if (!StringUtil.IsEmpty(prm.AddressPartial) || !StringUtil.IsEmpty(prm.PostcodePartial))
{
// Target Address alias.
String aliasAddTarget = StringUtil.OnBlank(prm.Alias_Address_Target, "aAddTarget");
// Target address columns.
String colAddress_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddTarget);
String colAddress_ItemType = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddTarget);
String colAddress_ItemId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddTarget);
// Filters.
List<String> addressFilter = new List<string>();
String addressPartial = DbQuery.FormatForLike(StringUtil.EmptyOnNull(prm.AddressPartial));
if (!StringUtil.IsEmpty(addressPartial))
{
List<SbmDbDfn.ColumnIdx> addressCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.Address_Name,
SbmDbDfn.ColumnIdx.Address_Line1,
SbmDbDfn.ColumnIdx.Address_Line2,
SbmDbDfn.ColumnIdx.Address_Line3,
SbmDbDfn.ColumnIdx.Address_City,
SbmDbDfn.ColumnIdx.Address_Province,
SbmDbDfn.ColumnIdx.Address_Contact,
};
String partialAddressFilter = addressCols.Select(item => SbmDbDfn.GetColumnNameQual(item, aliasAddTarget) + " LIKE '%" + addressPartial + "%'").Concat(" OR ", "(", ")");
addressFilter.Add(partialAddressFilter);
}
// Postcode filter.
String postcodeCond = DbQuery.FormatForCondition(StringUtil.EmptyOnNull(prm.PostcodePartial));
String colAddress_PostcodeFmt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_PostcodeFmt, aliasAddTarget);
if (!StringUtil.IsEmpty(postcodeCond))
addressFilter.Add(DbQuery.FormatFn_Left(colAddress_PostcodeFmt, prm.PostcodePartial.Length) + "='" + postcodeCond + "'");
if (prm.Alias_Address_Target.IsEmpty())
{
// Target address alias not supplied - table is not joined in main query.
// Sub query on target address.
DbQuery queryAddTarget = new DbQuery(db.DbmsType);
queryAddTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAddTarget);
queryAddTarget.Columns.Add(colAddress_Id);
queryAddTarget.Filters.Add(colAddress_ItemType + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
queryAddTarget.Filters.Add(colAddress_ItemId + "=" + colAssociation_AffIdTarget);
queryAddTarget.Filters.AddRange(addressFilter);
filter.Add("EXISTS (" + queryAddTarget.BuildQuery() + ")");
}
else
{
// Target address alias supplied - table is joined in main query.
// Simply filter directly on joined table.
filter.AddRange(addressFilter);
}
}
//---------------------------------------------------------------
// Generic search.
if (!StringUtil.IsEmpty(prm.Search))
{
List<String> searchFilter = new List<string>();
foreach (String rawSearchValue in prm.Search.Split(new char[] { ' ', ',', ';' }))
{
String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue));
if (StringUtil.IsEmpty(searchValue)) continue;
// Association filters.
List<String> searchValueFilter = new List<string>();
searchValueFilter.Add(colAssociation_Code + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAssociation_Group + " LIKE '%" + searchValue + "%'");
// Target affiliate.
String aliasAffiliateTarget = StringUtil.OnBlank(prm.Alias_Affiliate_Target, aliasAssociation_Affiliate_Target);
String colAffiliate_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliateTarget);
String colAffiliate_Name = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAffiliateTarget);
List<String> affiliateFilter = new List<string>();
affiliateFilter.Add(colAffiliate_Name + " Like '%" + searchValue + "%'");
if (prm.Alias_Affiliate_Target.IsEmpty())
{
// Target affiliate alias not supplied - table is not joined in main query.
// Sub query on target affiliate.
DbQuery queryAffTarget = new DbQuery(db.DbmsType);
queryAffTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAffiliateTarget);
queryAffTarget.Columns.Add(colAffiliate_Id);
queryAffTarget.Filters.Add(colAffiliate_Id + "=" + colAssociation_AffIdTarget);
queryAffTarget.Filters.AddRange(affiliateFilter);
filter.Add("EXISTS (" + queryAffTarget.BuildQuery() + ")");
}
else
{
// Target affiliate alias supplied - table is joined in main query.
// Simply filter directly on joined table.
searchValueFilter.AddRange(affiliateFilter);
}
// Target address.
String aliasAddTarget = StringUtil.OnBlank(prm.Alias_Address_Target, "aAddTarget");
String colAddress_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddTarget);
String colAddress_ItemType = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddTarget);
String colAddress_ItemId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddTarget);
List<String> addressFilter = new List<string>();
List<SbmDbDfn.ColumnIdx> addressCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.Address_Name,
SbmDbDfn.ColumnIdx.Address_Line1,
SbmDbDfn.ColumnIdx.Address_Line2,
SbmDbDfn.ColumnIdx.Address_Line3,
SbmDbDfn.ColumnIdx.Address_City,
SbmDbDfn.ColumnIdx.Address_Province,
SbmDbDfn.ColumnIdx.Address_Postcode,
SbmDbDfn.ColumnIdx.Address_PostcodeFmt,
SbmDbDfn.ColumnIdx.Address_Contact,
};
String partialAddressFilter = addressCols.Select(item => SbmDbDfn.GetColumnNameQual(item, aliasAddTarget) + " LIKE '%" + searchValue + "%'").Concat(" OR ", "(", ")");
addressFilter.Add(partialAddressFilter);
if (prm.Alias_Address_Target.IsEmpty())
{
// Target address alias not supplied - table is not joined in main query.
// Sub query on target address.
DbQuery queryAddTarget = new DbQuery(db.DbmsType);
queryAddTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAddTarget);
queryAddTarget.Columns.Add(colAddress_Id);
queryAddTarget.Filters.Add(colAddress_ItemType + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
queryAddTarget.Filters.Add(colAddress_ItemId + "=" + colAssociation_AffIdTarget);
queryAddTarget.Filters.AddRange(addressFilter);
filter.Add("EXISTS (" + queryAddTarget.BuildQuery() + ")");
}
else
{
// Target address alias supplied - table is joined in main query.
// Simply filter directly on joined table.
searchValueFilter.AddRange(addressFilter);
}
searchFilter.Add(searchValueFilter.Concat(" OR ", "(", ")"));
}
filter.AddRange(searchFilter);
}
//---------------------------------------------------------------
// Default Nominal Code.
String defaultNominalCodeFull = DbQuery.FormatForCondition(StringUtil.EmptyOnNull(prm.DefaultNominalCodeFull));
String defaultNominalCodePartial = DbQuery.FormatForCondition(StringUtil.EmptyOnNull(prm.DefaultNominalCodePartial));
String colAssociation_DefaultNominalCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode, aliasAssociation);
if (!defaultNominalCodeFull.IsEmpty())
filter.Add(colAssociation_DefaultNominalCode + "='" + DbQuery.FormatForCondition(defaultNominalCodeFull) + "'");
else if (!defaultNominalCodePartial.IsEmpty())
filter.Add(DbQuery.FormatFn_Left(colAssociation_DefaultNominalCode, prm.DefaultNominalCodePartial.Length) + " Like '%" + DbQuery.FormatForLike(defaultNominalCodePartial) + "%'");
//---------------------------------------------------------------
// Price Set.
String colAssociation_PriceSetId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_PriceSetId, aliasAssociation);
if (SysId.IsValid(prm.PriceSetId))
filter.Add(colAssociation_PriceSetId + "=" + prm.PriceSetId.ToString());
//---------------------------------------------------------------
// Codings.
// AccountManagerCodes.
String accountManagerCodes = DbQuery.FormatForIn(prm.AccountManagerCodes, true, true);
if (!accountManagerCodes.IsEmpty())
{
List<String> filterAccountManager = new List<String>();
String colAssociation_AccountManagerCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, aliasAssociation);
filterAccountManager.Add(colAssociation_AccountManagerCode + " IN " + accountManagerCodes);
// Also include associations where the target has addresses associated with this Account Manager:
String aliasAccMgr = "aAccMgr";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAccMgr);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAccMgr));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAccMgr) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAccMgr) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AccountManagerCode, aliasAccMgr) + " IN " + accountManagerCodes);
filterAccountManager.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterAccountManager.Concat(" OR ", "(", ")"));
}
// AccountHandlerCodes.
String accountHandlerCodes = DbQuery.FormatForIn(prm.AccountHandlerCodes, true, true);
if (!accountHandlerCodes.IsEmpty())
{
List<String> filterAccountHandler = new List<String>();
String colAssociation_AccountHandlerCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, aliasAssociation);
filterAccountHandler.Add(colAssociation_AccountHandlerCode + " IN " + accountHandlerCodes);
// Also include associations where the target has addresses associated with this Account Handler:
String aliasAccHdr = "aliasAccHdr";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAccHdr);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAccHdr));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAccHdr) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAccHdr) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AccountHandlerCode, aliasAccHdr) + " IN " + accountHandlerCodes);
filterAccountHandler.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterAccountHandler.Concat(" OR ", "(", ")"));
}
// AccountTypeCodes.
String accountTypeCodes = DbQuery.FormatForIn(prm.AccountTypeCodes, true, true);
if (!accountTypeCodes.IsEmpty())
{
String colAssociation_AccountTypeCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountTypeCode, aliasAssociation);
filter.Add(colAssociation_AccountTypeCode + " IN " + accountTypeCodes);
}
// AccountRatingCodes.
String accountRatingCodes = DbQuery.FormatForIn(prm.AccountRatingCodes, true, true);
if (!accountRatingCodes.IsEmpty())
{
String colAssociation_AccountRatingCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountRatingCode, aliasAssociation);
filter.Add(colAssociation_AccountRatingCode + " IN " + accountRatingCodes);
}
// ContactAreaCodes.
String contactAreaCodes = DbQuery.FormatForIn(prm.ContactAreaCodes, true, true);
if (!contactAreaCodes.IsEmpty())
{
List<String> filterContactArea = new List<String>();
String colAssociation_ContactAreaCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, aliasAssociation);
filterContactArea.Add(colAssociation_ContactAreaCode + " IN " + contactAreaCodes);
// Also include associations where the target has addresses associated with this Contact Area:
String aliasCntArea = "aCntArea";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasCntArea);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasCntArea));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasCntArea) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasCntArea) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ContactAreaCode, aliasCntArea) + " IN " + contactAreaCodes);
filterContactArea.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterContactArea.Concat(" OR ", "(", ")"));
}
// ContactHandlerCodes.
String contactHandlerCodes = DbQuery.FormatForIn(prm.ContactHandlerCodes, true, true);
if (!contactHandlerCodes.IsEmpty())
{
List<String> filterContactHandler = new List<String>();
String colAssociation_ContactHandlerCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, aliasAssociation);
filterContactHandler.Add(colAssociation_ContactHandlerCode + " IN " + contactHandlerCodes);
// Also include associations where the target has addresses associated with this Contact Handler:
String aliasCntHdr = "aCntHdr";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasCntHdr);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasCntHdr));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasCntHdr) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasCntHdr) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ContactHandlerCode, aliasCntHdr) + " IN " + contactHandlerCodes);
filterContactHandler.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterContactHandler.Concat(" OR ", "(", ")"));
}
// ContactMethodCodes.
String contactMethodCodes = DbQuery.FormatForIn(prm.ContactMethodCodes, true, true);
if (!contactMethodCodes.IsEmpty())
{
String colAssociation_ContactMethodCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactMethodCode, aliasAssociation);
filter.Add(colAssociation_ContactMethodCode + " IN " + contactMethodCodes);
}
// ContactCallCycleCodes.
String contactCallCycleCodes = DbQuery.FormatForIn(prm.ContactCallCycleCodes, true, true);
if (!contactCallCycleCodes.IsEmpty())
{
String colAssociation_ContactCallCycleCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode, aliasAssociation);
filter.Add(colAssociation_ContactCallCycleCode + " IN " + contactCallCycleCodes);
}
// OrderLeadTimeCodes.
String orderLeadTimeCodes = DbQuery.FormatForIn(prm.OrderLeadTimeCodes, true, true);
if (!orderLeadTimeCodes.IsEmpty())
{
String colAssociation_OrderLeadTimeCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode, aliasAssociation);
filter.Add(colAssociation_OrderLeadTimeCode + " IN " + orderLeadTimeCodes);
}
// DeliveryTypeCodes.
String deliveryTypeCodes = DbQuery.FormatForIn(prm.DeliveryTypeCodes, true, true);
if (!deliveryTypeCodes.IsEmpty())
{
List<String> filterDeliveryTypeCodes = new List<String>();
String colAssociation_DeliveryTypeCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode, aliasAssociation);
filterDeliveryTypeCodes.Add(colAssociation_DeliveryTypeCode + " IN " + deliveryTypeCodes);
// Also include associations where the target has addresses associated with this Delivery Type:
String aliasDelTypCd = "aDelTypCd";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasDelTypCd);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasDelTypCd));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasDelTypCd) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasDelTypCd) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_DeliveryTypeCode, aliasDelTypCd) + " IN " + deliveryTypeCodes);
filterDeliveryTypeCodes.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterDeliveryTypeCodes.Concat(" OR ", "(", ")"));
}
// DeliveryMethodCodes.
String deliveryMethodCodes = DbQuery.FormatForIn(prm.DeliveryMethodCodes, true, true);
if (!deliveryMethodCodes.IsEmpty())
{
List<String> filterDeliveryMethodCodes = new List<String>();
String colAssociation_DeliveryMethodCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode);
filterDeliveryMethodCodes.Add(colAssociation_DeliveryMethodCode + " IN " + deliveryMethodCodes);
// Also include associations where the target has addresses associated with this Delivery Method:
String aliasDelMthdCd = "aDelMthdCd";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasDelMthdCd);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasDelMthdCd));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasDelMthdCd) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasDelMthdCd) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_DeliveryMethodCode, aliasDelMthdCd) + " IN " + deliveryMethodCodes);
filterDeliveryMethodCodes.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterDeliveryMethodCodes.Concat(" OR ", "(", ")"));
}
// DeliveryBookInCodes.
String deliveryBookInCodes = DbQuery.FormatForIn(prm.DeliveryBookInCodes, true, true);
if (!deliveryBookInCodes.IsEmpty())
{
List<String> filterDeliveryBookInCodes = new List<String>();
String colAssociation_DeliveryBookInCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode, aliasAssociation);
filterDeliveryBookInCodes.Add(colAssociation_DeliveryBookInCode + " IN " + deliveryBookInCodes);
// Also include associations where the target has addresses associated with this Delivery BookIn:
String aliasDelBkInCd = "aDelBkInCd";
DbQuery qryAdd = new DbQuery(db.DbmsType);
qryAdd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasDelBkInCd);
qryAdd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasDelBkInCd));
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasDelBkInCd) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasDelBkInCd) + "=" + colAssociation_AffIdTarget);
qryAdd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_DeliveryBookInCode, aliasDelBkInCd) + " IN " + deliveryBookInCodes);
filterDeliveryBookInCodes.Add("EXISTS (" + qryAdd.BuildQuery() + ")");
filter.Add(filterDeliveryBookInCodes.Concat(" OR ", "(", ")"));
}
//---------------------------------------------------------------
// Transactions.
if (prm.TransactionStatusCat != SbmTransaction.StatusCat.Any || prm.TransactionType > 0 || prm.TransactionActiveFrom.IsValid() || prm.TransactionActiveTo.IsValid())
{
List<String> filterTrans = new List<String>();
DateTime dateTime = new DateTime(1970, 1, 1);
// Constructed to set DBMS (in case required to format query elements).
DbQuery qryTrans = new DbQuery(db.DbmsType);
String colTransaction_InProgress = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_InProgress);
String colTransaction_Closed = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Closed);
String colTransaction_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status);
String colTransaction_StatusCat = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_StatusCat);
// Transaction type.
if (prm.TransactionType > 0)
{
String colTransaction_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type);
filterTrans.Add($"{colTransaction_Type}={(int)prm.TransactionType}");
}
// Transaction dates.
if (prm.TransactionActiveFrom.IsValid() || prm.TransactionActiveTo.IsValid())
{
// Transaction must have an 'In Progress' date.
filterTrans.Add($"{colTransaction_InProgress} IS NOT NULL");
filterTrans.Add($"{colTransaction_InProgress}>{DbQuery.FormatDateForCondition(dateTime)}");
// Transaction must not be cancelled.
filterTrans.Add($"{colTransaction_Status}<>'{StatusCancelled}'");
if (prm.TransactionActiveFrom.IsValid())
{
// Transaction's 'Closed' date must not be earlier than the 'From' date.
filterTrans.Add(
colTransaction_Closed + " IS NULL OR " + colTransaction_Closed + "=" +
DbQuery.FormatForCondition(dateTime.ToString()) + " OR " + colTransaction_Closed + ">=" +
DbQuery.FormatForCondition(prm.TransactionActiveFrom.ToString()));
}
if (prm.TransactionActiveTo.IsValid())
{
// Transaction's 'In Progress' date must not be later than the 'To' date.
filterTrans.Add(colTransaction_InProgress + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.TransactionActiveTo, 1)));
}
}
// Check whether a Transaction status has been specified:
String transtatuscatPending = TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Pending);
String transtatuscatOpen = TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Open);
String transtatuscatClosed = TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Closed);
if (prm.TransactionStatusCat == SbmTransaction.StatusCat.NotDeleted)
filterTrans.Add(colTransaction_Status + "<>'" + StatusDeleted + "'");
else if (prm.TransactionStatusCat == SbmTransaction.StatusCat.Completed)
filterTrans.Add(colTransaction_Status + "='" + TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Completed) + "'");
else if (prm.TransactionStatusCat == SbmTransaction.StatusCat.NotClosed)
filterTrans.Add(colTransaction_StatusCat + "<>'" + TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Closed) + "'");
else if (prm.TransactionStatusCat == SbmTransaction.StatusCat.NotCancelled)
filterTrans.Add(colTransaction_Status + "<>'" + StatusCancelled + "'");
else if (!StringUtil.IsEmpty(TransactionStatusCats.GetCodeForType(prm.TransactionStatusCat)))
filterTrans.Add(colTransaction_StatusCat + "='" + TransactionStatusCats.GetCodeForType(prm.TransactionStatusCat) + "'");
filterTrans.RemoveDuplicatesCI();
if (!filterTrans.IsEmpty())
{
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction));
qryTrans.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id));
qryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId) + "=" + colAssociation_Id);
qryTrans.Filters.AddRange(filterTrans);
filter.Add("EXISTS (" + qryTrans.BuildQuery() + ")");
}
}
// System Accounts.
if (SysId.IsValid(prm.InterfaceIdExcludeSystemAccounts))
{
// Exclude affiliates that are already a system Account for the specified Inteface:
String aliasSysAcc = "aSysAcc";
DbQuery qrySysAcc = new DbQuery(db.DbmsType);
qrySysAcc.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemAccount), aliasSysAcc);
qrySysAcc.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SystemAccount_Id, aliasSysAcc));
qrySysAcc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SystemAccount_AssocId, aliasSysAcc) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id));
filter.Add("NOT EXISTS (" + qrySysAcc.BuildQuery() + ")");
}
// Supervision flag.
if (prm.Supervised != SbmAssociation.Params.AssociationSupervised.Any)
filter.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Flags, aliasAssociation), SbmAssociation.Flag_Supervised, prm.Supervised == SbmAssociation.Params.AssociationSupervised.Yes));
// Primary flag.
if (prm.PrimaryOnly)
filter.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Flags, aliasAssociation), SbmAssociation.Flag_Primary, true));
/* ToDo AssocMgrDbas via QueryFilter > Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Notes, aliasAssociation) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");*/
// Termination Date.
String colAssociation_Terminated = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Terminated, aliasAssociation);
if (prm.ApplicableFrom.IsValid())
{
// NB 'Association.Terminated' column is a long value (not a date).
List<String> filterTerminated = new List<String>();
filterTerminated.Add(colAssociation_Terminated + " IS NULL");
filterTerminated.Add(colAssociation_Terminated + "=" + "0"); //SaDbQuery::FormatForCondition(Date(1,1,1970)));
filterTerminated.Add(colAssociation_Terminated + ">=" + (prm.ApplicableFrom.Year << 16 + prm.ApplicableFrom.Month << 8 + prm.ApplicableFrom.Day).ToString());
filter.Add(filterTerminated.Concat(" OR ", "(", ")"));
}
// Associated Codes - with Seasonal Category Code & Item Link.
if (!StringUtil.IsEmpty(prm.SeasonalCategoryCode))
{
DbQuery qryCode = new DbQuery(db.DbmsType);
qryCode.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink));
qryCode.Columns.Add("1");
qryCode.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_Type) + "=" + ((int)Sbm.ItemLinkType.ItemCodeList_SeasonalCategory).ToString());
qryCode.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeFrom) + "=" + ((int)Sbm.ItemType.Association).ToString());
qryCode.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id));
qryCode.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_DataContent) + " LIKE '%," + DbQuery.FormatForCondition(prm.SeasonalCategoryCode) + ",%'");
filter.Add("EXISTS (" + qryCode.BuildQuery() + ")");
}
// Status.
if (prm.StatusCat == SbmAssociation.StatusCat.Active)
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasAssociation) + " = '" + StatusActive + "'");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
// Association sort columns.
public List<String> GetAssociationSortColumns(SbmAssociation.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Association columns in case of conflict.
String sortCol = String.Empty;
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.Association)
{
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasAssociation);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns:
sortColumnNames.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAssociation) + " ASC");
sortColumnNames.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Code, aliasAssociation) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Association count.
private long GetAssociationCount(String filter)
{
ClearErrorState();
return db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association) + " As " + aliasAssociation, filter);
}
public override long GetAssociationCount(SbmAssociation.Params prm)
{
ClearErrorState();
return GetAssociationCount(GetAssociationQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Association list.
public override List<SbmAssociation> GetAssociationList(SbmAssociation.Params prm)
{
ClearErrorState();
List<SbmAssociation> associations = new List<SbmAssociation>();
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAssociation);
Association_Db dbAssociation = new Association_Db(DbInfo);
qry.Columns.AddRange(dbAssociation.ExistingColumnNames);
qry.Filters.AddRange(GetAssociationQueryFilter(prm));
qry.OrderBy.AddRange(GetAssociationSortColumns(prm));
// Query data.
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbAssociation = new Association_Db(DbInfo);
dbAssociation.PopulateFrom(dbDataReader);
associations.Add(CreateAssociation(dbAssociation));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return associations;
}
//-------------------------------------------------------------------
// Association query execution.
public override DbResultSet ExecuteAssociationQuery(List<ColumnDfn> columns, SbmAssociation.Params prm)
{
// Retrieve the database.
ClearErrorState();
bool CanManageFinancials = UserContext.SecurityProfile_Core.UserCanViewFinancials(Sbm.FinancialType.CommoditySales);
//---------------------------------------------------------------------
// Construct Query.
DbQuery query = new DbQuery(db.DbmsType);
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAssociation);
// Association columns properties.
//query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id));
if (columns.HasId((int)SbmAssociation.Column.Id))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AffIdOwner))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AffIdTarget))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Type) || columns.HasId((int)SbmAssociation.Column.Type_Desc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAssociation, true));
if (columns.HasId((int)SbmAssociation.Column.Code))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Code, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.ExtRef))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ExtRef, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Role))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Role, aliasAssociation, true));
if (columns.HasId((int)SbmAssociation.Column.Location))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Location, aliasAssociation, true));
if (columns.HasId((int)SbmAssociation.Column.PhoneMain))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_PhoneMain, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Email))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Email, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Group) && ColumnExists(SbmDbDfn.ColumnIdx.Association_Group))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Group, aliasAssociation, true));
if (columns.HasId((int)SbmAssociation.Column.DescDetail))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DescDetail, aliasAssociation));
// Accounting columns.
if (columns.HasId((int)SbmAssociation.Column.DefaultNominalCode))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AmountTransMax) && CanManageFinancials)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AmountTransMax, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AnnualSalesTarget) && CanManageFinancials)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.CreditLimit))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_CreditLimit, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AccountBalance))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountBalance, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.DiscountType) || columns.HasId((int)SbmAssociation.Column.DiscountType_Desc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DiscountType, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.DiscountRate))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DiscountRate, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.PriceSetId))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_PriceSetId, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.TaxCodeId))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_TaxCodeId, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.PaymentTerms))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_PaymentTerms, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.InvoiceDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_InvoiceDesc, aliasAssociation));
// Coding columns.
if (columns.HasId((int)SbmAssociation.Column.AccountManagerCode) || columns.HasId((int)SbmAssociation.Column.AccountManagerDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AccountHandlerCode) || columns.HasId((int)SbmAssociation.Column.AccountHandlerDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AccountTypeCode) || columns.HasId((int)SbmAssociation.Column.AccountTypeDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountTypeCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.AccountRatingCode) || columns.HasId((int)SbmAssociation.Column.AccountRatingDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountRatingCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.ContactAreaCode) || columns.HasId((int)SbmAssociation.Column.ContactAreaDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.ContactHandlerCode) || columns.HasId((int)SbmAssociation.Column.ContactHandlerDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.ContactMethodCode) || columns.HasId((int)SbmAssociation.Column.ContactMethodDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactMethodCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.ContactCallCycleCode) || columns.HasId((int)SbmAssociation.Column.ContactCallCycleDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.CallsPerYear))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_CallsPerYear, aliasAssociation));
// Other Code columns
if (columns.HasId((int)SbmAssociation.Column.LastCall))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_LastCall, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.OrderLeadTimeCode) || columns.HasId((int)SbmAssociation.Column.OrderLeadTimeDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.DeliveryTypeCode) || columns.HasId((int)SbmAssociation.Column.DeliveryTypeDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.DeliveryMethodCode) || columns.HasId((int)SbmAssociation.Column.DeliveryMethodDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.DeliveryBookInCode) || columns.HasId((int)SbmAssociation.Column.DeliveryBookInDesc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Terminated))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Terminated, aliasAssociation));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Flags, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Primary))
query.Columns.Add(GetFlagValue(SbmAssociation.Flag_Primary, true, null), /*colAssociation_Primary,*/ aliasAssociation);
if (columns.HasId((int)SbmAssociation.Column.Technician))
query.Columns.Add(GetFlagValue(SbmAssociation.Flag_Technician, true, null), /*colAssociation_Technician,*/ aliasAssociation);
// Common Properties
if (columns.HasId((int)SbmAssociation.Column.Notes))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Notes, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.Status) || columns.HasId((int)SbmAssociation.Column.Status_Desc) || columns.HasId((int)SbmAssociation.Column.Status_Ind))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.CreateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_CreateOn, aliasAssociation));
if (columns.HasId((int)SbmAssociation.Column.UpdateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_UpdateOn, aliasAssociation));
//---------------------------------------------------------------
// Owner affiliate.
bool hasColsAffOwner = false;
if (!hasColsAffOwner)
hasColsAffOwner = columns.HasId((int)SbmAssociation.Column.Owner_Name);
bool hasColsAffOwnerAddress = false;
if (hasColsAffOwner || hasColsAffOwnerAddress)
{
// Join to the owner affiliate.
prm.Alias_Affiliate_Owner = aliasAssociation_Affiliate_Owner;
DbQueryJoin joinAffiliateOwner = new DbQueryJoin(DbJoinType.LeftOuter);
joinAffiliateOwner.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAssociation_Affiliate_Owner);
joinAffiliateOwner.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Owner) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAssociation));
query.Joins.Add(joinAffiliateOwner);
// Columns.
List<SbmDbDfn.ColumnIdx> affiliateOwnerCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.Affiliate_Id,
SbmDbDfn.ColumnIdx.Affiliate_Name,
/*SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Nature,
SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain,
SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt,
SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile,
SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax,
SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Email,
SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Website,*/
};
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateOwnerCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Affiliate_Owner), prefixAssociation_Affiliate_Owner + SbmDbDfn.GetColumnName(dbColumn, false));
// Owner affiliate address columns.
if (hasColsAffOwnerAddress)
{
}
}
//---------------------------------------------------------------
// Target affiliate.
bool hasColsAffTarget = false;
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_Type) || columns.HasId((int)SbmAssociation.Column.Target_TypeDesc);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_Name);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_Nature);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_PhoneMain);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_PhoneAlt);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_PhoneFax);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_PhoneMobile);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_Email);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_Website);
if (!hasColsAffTarget) hasColsAffTarget = columns.HasId((int)SbmAssociation.Column.Target_Notes);
bool hasColsAffTargetAddress = false;
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Type) || columns.HasId((int)SbmAssociation.Column.Target_Address_TypeDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_RefExt);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Name);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_DescBrief);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Summary);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Line1);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Line2);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_City);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Province);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Postcode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Country);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Contact);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Phone);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_Email);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_AccountManagerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_AccountManagerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_AccountHandlerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_AccountHandlerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_ContactAreaCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_ContactAreaDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_ContactHandlerCode);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_ContactHandlerDesc);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_LastVisitOn);
if (!hasColsAffTargetAddress) hasColsAffTargetAddress = columns.HasId((int)SbmAssociation.Column.Target_Address_NextVisitOn);
if (hasColsAffTarget || hasColsAffTargetAddress)
{
// Join to the target affiliate - NB Use an alias to avoid clashing with the owner affiliate.
prm.Alias_Affiliate_Target = aliasAssociation_Affiliate_Target;
DbQueryJoin joinAffiliateTarget = new DbQueryJoin(DbJoinType.LeftOuter);
joinAffiliateTarget.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAssociation_Affiliate_Target);
joinAffiliateTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Target) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssociation));
query.Joins.Add(joinAffiliateTarget);
// Add the target affiliate columns.
List<SbmDbDfn.ColumnIdx> affiliateTargetCols = new List<SbmDbDfn.ColumnIdx>();
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Id);
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Type);
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
if (columns.HasId((int)SbmAssociation.Column.Target_Nature))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Nature);
if (columns.HasId((int)SbmAssociation.Column.Target_PhoneMain))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain);
if (columns.HasId((int)SbmAssociation.Column.Target_PhoneAlt))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt);
if (columns.HasId((int)SbmAssociation.Column.Target_PhoneMobile))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile);
if (columns.HasId((int)SbmAssociation.Column.Target_PhoneFax))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax);
if (columns.HasId((int)SbmAssociation.Column.Target_Email))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Email);
if (columns.HasId((int)SbmAssociation.Column.Target_Website))
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Website);
if (columns.HasId((int)SbmAssociation.Column.Target_Notes))
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(db.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((int)SbmAssociation.Column.Target_Address_Type) || columns.HasId((int)SbmAssociation.Column.Target_Address_TypeDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Type);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_RefExt))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_RefExt);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Name))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_DescBrief))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_DescBrief);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Line1))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Line2))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Line3))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_City))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_City);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Province))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Postcode))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Postcode);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Country))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Country);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Contact))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Contact);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Phone))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Phone);
//addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Fax));
if (columns.HasId((int)SbmAssociation.Column.Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Target_Address_Email))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Email);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_AccountManagerCode) || columns.HasId((int)SbmAssociation.Column.Target_Address_AccountManagerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_AccountManagerCode);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_AccountHandlerCode) || columns.HasId((int)SbmAssociation.Column.Target_Address_AccountHandlerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_AccountHandlerCode);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_ContactAreaCode) || columns.HasId((int)SbmAssociation.Column.Target_Address_ContactAreaDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_ContactAreaCode);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_ContactHandlerCode) || columns.HasId((int)SbmAssociation.Column.Target_Address_ContactHandlerDesc))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_ContactHandlerCode);
if (columns.HasId((int)SbmAssociation.Column.Target_Address_LastVisitOn))
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_LastVisitOn);
if (columns.HasId((int)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;
if (!hasColsMember) hasColsMember = (columns.HasId((int)SbmAssociation.Column.Member_Type) || columns.HasId((int)SbmAssociation.Column.Member_TypeDesc));
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Code);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_ExtRef);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Role);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Location);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_PhoneMain);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Email);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_Name);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_Nature);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneMain);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneAlt);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneFax);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneMobile);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_Email);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_Website);
if (!hasColsMember) hasColsMember = columns.HasId((int)SbmAssociation.Column.Member_Target_Notes);
bool hasColsMemberAddress = false;
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary);
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Line1);
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Line2);
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_City);
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Province);
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Postcode);
if (!hasColsMemberAddress) hasColsMemberAddress = columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Country);
// Delivery address columns are for association import only and are only referenced here in case this rule changes.
bool hasColdeliveryAddress = false;
if (!hasColdeliveryAddress) hasColdeliveryAddress = columns.HasId((int)SbmAssociation.Column.Target_DeliveryAddress_Postcode);
if (!hasColdeliveryAddress) hasColdeliveryAddress = columns.HasId((int)SbmAssociation.Column.Target_DeliveryAddress_AccountManagerCode);
if (!hasColdeliveryAddress) hasColdeliveryAddress = columns.HasId((int)SbmAssociation.Column.Target_DeliveryAddress_ContactAreaCode);
if (hasColsMember || hasColsMemberAddress)
{
// Join to the member association - NB Use an alias to avoid clashing with the target affiliate.
prm.Alias_Association_Member = aliasAssociation_Member_Association;
DbQueryJoin joinPriceSetMemberAss = new DbQueryJoin(DbJoinType.LeftOuter);
joinPriceSetMemberAss.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAssociation_Member_Association);
joinPriceSetMemberAss.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAssociation_Member_Association) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget));
query.Joins.Add(joinPriceSetMemberAss);
// Add the member associate columns.
List<SbmDbDfn.ColumnIdx> associateMemberCols = new List<SbmDbDfn.ColumnIdx>();
//affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Id);
associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_Type);
if (columns.HasId((int)SbmAssociation.Column.Member_Code)) associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_Code);
if (columns.HasId((int)SbmAssociation.Column.Member_ExtRef)) associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_ExtRef);
if (columns.HasId((int)SbmAssociation.Column.Member_Role)) associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_Role);
if (columns.HasId((int)SbmAssociation.Column.Member_Location)) associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_Location);
if (columns.HasId((int)SbmAssociation.Column.Member_PhoneMain)) associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_PhoneMain);
if (columns.HasId((int)SbmAssociation.Column.Member_Email)) associateMemberCols.Add(SbmDbDfn.ColumnIdx.Association_Email);
foreach (SbmDbDfn.ColumnIdx dbColumn in associateMemberCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Member_Association), prefixAssociation_Member_Association + SbmDbDfn.GetColumnName(dbColumn, false));
// Join to the corresponding Member (target) affiliate.
DbQueryJoin joinPriceSetMemberAff = new DbQueryJoin(DbJoinType.LeftOuter);
joinPriceSetMemberAff.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAssociation_Member_Affiliate);
joinPriceSetMemberAff.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Member_Affiliate) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssociation_Member_Association));
query.Joins.Add(joinPriceSetMemberAff);
// Add the member affiliate columns.
List<SbmDbDfn.ColumnIdx> affiliateMemberCols = new List<SbmDbDfn.ColumnIdx>();
affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Nature)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Nature);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneMain)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneAlt)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneMobile)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_PhoneFax)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Email)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Email);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Website)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Website);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Notes)) affiliateMemberCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Notes);
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateMemberCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Member_Affiliate), prefixAssociation_Member_Affiliate + SbmDbDfn.GetColumnName(dbColumn, false));
if (hasColsMemberAddress)
{
// Join to the Member affiliate - NB Use an alias to avoid clashing with the owner affiliate.
prm.Alias_Address_Member = aliasAssociation_Member_Address;
DbQueryJoin joinPriceSetMemberAddress = new DbQueryJoin(DbJoinType.LeftOuter);
joinPriceSetMemberAddress.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAssociation_Member_Address);
joinPriceSetMemberAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AffIdOwner, aliasAssociation_Member_Address) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Member_Affiliate));
joinPriceSetMemberAddress.Filters.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Flags, aliasAssociation_Member_Address), SbmAddress.Flag_Primary, true));
query.Joins.Add(joinPriceSetMemberAddress);
// Add the member address columns.
List<SbmDbDfn.ColumnIdx> addressMemberCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Line1))
addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Line2))
addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
//addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Line3));
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Member_Target_Address_City))
addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_City);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Province))
addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Postcode))
addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Postcode);
if (columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Summary) || columns.HasId((int)SbmAssociation.Column.Member_Target_Address_Country))
addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Country);
//addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Contact));
//addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Phone));
//addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Fax));
//addressMemberCols.Add(SbmDbDfn.ColumnIdx.Address_Email));
foreach (SbmDbDfn.ColumnIdx dbColumn in addressMemberCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_Member_Address), prefixAssociation_Member_Address + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
//---------------------------------------------------------------
// Price set.
bool hasColsPriceSet = false;
if (!hasColsPriceSet) hasColsPriceSet = columns.HasId((int)SbmAssociation.Column.PriceSet_Ref);
if (!hasColsPriceSet) hasColsPriceSet = columns.HasId((int)SbmAssociation.Column.PriceSet_Type);
if (!hasColsPriceSet) hasColsPriceSet = columns.HasId((int)SbmAssociation.Column.PriceSet_TypeDesc);
if (!hasColsPriceSet) hasColsPriceSet = columns.HasId((int)SbmAssociation.Column.PriceSet_Name);
if (hasColsPriceSet)
{
// Join to the Price Set.
prm.Alias_PriceSet = aliasAssociation_PriceSet;
DbQueryJoin joinPriceSet = new DbQueryJoin(DbJoinType.LeftOuter);
joinPriceSet.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPriceSet), aliasAssociation_PriceSet);
joinPriceSet.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaPriceSet_Id, aliasAssociation_PriceSet) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_PriceSetId, aliasAssociation));
query.Joins.Add(joinPriceSet);
// Add the price set columns.
List<SbmDbDfn.ColumnIdx> priceSetCols = new List<SbmDbDfn.ColumnIdx>();
priceSetCols.Add(SbmDbDfn.ColumnIdx.SaPriceSet_Ref);
priceSetCols.Add(SbmDbDfn.ColumnIdx.SaPriceSet_Type);
priceSetCols.Add(SbmDbDfn.ColumnIdx.SaPriceSet_Name);
foreach (SbmDbDfn.ColumnIdx dbColumn in priceSetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAssociation_PriceSet), prefixAssociation_PriceSet + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// Associated codes.
if (columns.HasId((int)SbmAssociation.Column.SeasonalCategoryCodes) ||
columns.HasId((int)SbmAssociation.Column.SeasonalCategoryCode1) || columns.HasId((int)SbmAssociation.Column.SeasonalCategoryDesc1) ||
columns.HasId((int)SbmAssociation.Column.SeasonalCategoryCode2) || columns.HasId((int)SbmAssociation.Column.SeasonalCategoryDesc2) ||
columns.HasId((int)SbmAssociation.Column.SeasonalCategoryCode3) || columns.HasId((int)SbmAssociation.Column.SeasonalCategoryDesc3))
{
//query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_SeasonalCategoryCodes));
}
//---------------------------------------------------------------
// Transaction > Sales orders.
if (columns.HasId((int)SbmAssociation.Column.Trans_LastSaleRaised))
{
// Last sales order opened.
String aliasAssociation_Transaction = "AssocTrn";
DbQuery queryTrans = new DbQuery(db.DbmsType);
queryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasAssociation_Transaction);
queryTrans.Columns.Add("MAX(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Raised, aliasAssociation_Transaction) + ")");
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, aliasAssociation_Transaction) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation));
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasAssociation_Transaction) + "=" + ((int)Sbm.TransactionType.SalesOrder).ToString());
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasAssociation_Transaction) + "<>'" + StatusCancelled + "'");
query.Columns.Add("(" + queryTrans.BuildQuery() + ")", colAssociation_LastSaleRaised);
}
// Value of Sales Orders.
if (columns.HasId((int)SbmAssociation.Column.Trans_SalesValue_Open) && CanManageFinancials)
{
// Net open sales order value.
String aliasAssociation_Transaction = "AssocTrn";
DbQuery queryTrans = new DbQuery(db.DbmsType);
queryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasAssociation_Transaction);
queryTrans.Columns.Add("MAX(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountNet, aliasAssociation_Transaction) + ")");
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, aliasAssociation_Transaction) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation));
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasAssociation_Transaction) + "=" + ((int)Sbm.TransactionType.SalesOrder).ToString());
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_StatusCat, aliasAssociation_Transaction) + "<>'" + TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Closed) + "'");
query.Columns.Add("(" + queryTrans.BuildQuery() + ")", colAssociation_SalesValueOpen);
}
if (columns.HasId((int)SbmAssociation.Column.Trans_SalesValue_Cytd) && CanManageFinancials)
{
// Net sales order value closed this calendar year.
String aliasAssociation_Transaction = "AssocTrn";
DbQuery queryTrans = new DbQuery(db.DbmsType);
queryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasAssociation_Transaction);
queryTrans.Columns.Add("MAX(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountNet, aliasAssociation_Transaction) + ")");
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, aliasAssociation_Transaction) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation));
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasAssociation_Transaction) + "=" + ((int)Sbm.TransactionType.SalesOrder).ToString());
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasAssociation_Transaction) + "='" + StatusCompleted + "'");
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Closed, aliasAssociation_Transaction) + ">=" + DbQuery.FormatDateForCondition(new DateTime(DateTime.Today.Year, 1, 1)));
query.Columns.Add("(" + queryTrans.BuildQuery() + ")", colAssociation_SalesValueCytd);
}
if (columns.HasId((int)SbmAssociation.Column.Trans_SalesValue_Lcy) && CanManageFinancials)
{
// Net sales order value closed last calendar year.
String aliasAssociation_Transaction = "AssocTrn";
DbQuery queryTrans = new DbQuery(db.DbmsType);
queryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasAssociation_Transaction);
queryTrans.Columns.Add("MAX(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountNet, aliasAssociation_Transaction) + ")");
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, aliasAssociation_Transaction) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation));
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasAssociation_Transaction) + "=" + ((int)Sbm.TransactionType.SalesOrder).ToString());
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasAssociation_Transaction) + "='" + StatusCompleted + "'");
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Closed, aliasAssociation_Transaction) + ">=" + DbQuery.FormatDateForCondition(new DateTime(DateTime.Today.Year - 1, 1, 1)));
queryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Closed, aliasAssociation_Transaction) + "<" + DbQuery.FormatDateForCondition(new DateTime(DateTime.Today.Year, 1, 1)));
query.Columns.Add("(" + queryTrans.BuildQuery() + ")", colAssociation_SalesValueLcy);
}
//---------------------------------------------------------------
// Commodity Customer.
if (columns.HasId((int)SbmAssociation.Column.CommodityCount))
{
bool validDatabase = false;
String aliasCommodityAssociation = "aCmdAss";
SbmDbDfn.TableIdx tableIdx = SbmDbDfn.TableIdx.Unknown;
SbmDbDfn.ColumnIdx columnIdxAssociationId = SbmDbDfn.ColumnIdx.Unknown;
if (prm.AssociationType == Sbm.AssociationType.Customer)
{
validDatabase = true;// ToDo CommodityMgr.CanManageCommodityCustomers();
tableIdx = SbmDbDfn.TableIdx.CommodityCustomer;
columnIdxAssociationId = SbmDbDfn.ColumnIdx.CommodityCustomer_AssocIdCustomer;
}
else if (prm.AssociationType == Sbm.AssociationType.Supplier)
{
validDatabase = CommodityMgr.CanManageCommoditySuppliers();
tableIdx = SbmDbDfn.TableIdx.CommoditySupplier;
columnIdxAssociationId = SbmDbDfn.ColumnIdx.CommoditySupplier_AssocIdSupplier;
}
if (validDatabase && tableIdx != SbmDbDfn.TableIdx.Unknown && columnIdxAssociationId != SbmDbDfn.ColumnIdx.Unknown)
{
// Number of commodities defined for the association.
DbQuery qryCmd = new DbQuery(db.DbmsType);
qryCmd.Tables.Add(SbmDbDfn.GetTableName(tableIdx), aliasCommodityAssociation);
qryCmd.Columns.Add("Count(*)");
qryCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(columnIdxAssociationId, aliasCommodityAssociation) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation));
query.Columns.Add("(" + qryCmd.BuildQuery() + ")", colAssociation_CommodityCount);
}
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetAssociationQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetAssociationSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery());
return DbResultSet_DataReader.ExecuteQuery(db, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}