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 GetLogProperties(SbmAssociation association) { return new List() { new StringPair("Id",SysId.ToString(association.Id)), new StringPair("Code",association.Code), new StringPair("Status",association.StatusCode) }; } public override List GetAssociationTypesInUse() { List types = new List(); // Construct the query. DbQuery qry = new DbQuery(Database.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(Database, 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 GetMemberTargetIds(SysId affiliateIdOwner) { List affiliateIncludeIds = new List(); List affiliateExcludeIds = new List(); return GetTargetIds(affiliateIdOwner, Sbm.AssociationType.Member, affiliateIncludeIds, affiliateExcludeIds); } public override List GetCustomerTargetIds(List affiliateIncludeIds, List affiliateExcludeIds) { return GetTargetIds(AffiliateId_Owner, Sbm.AssociationType.Customer, affiliateIncludeIds, affiliateExcludeIds); } public List GetTargetIds(SysId affiliateIdOwner, Sbm.AssociationType associationType, List affiliateIncludeIds, List affiliateExcludeIds) { List affiliateIdsTarget = new List(); if (Database == 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(Database.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(Database, 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 GetCustomerAssocIdsForTargets(List affiliateIdsTarget) { return GetAssocIdsForTargets(AffiliateId_Owner, Sbm.AssociationType.Customer, affiliateIdsTarget); } public override List GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, List affiliateIdsTarget) { List associations = new List(); if (Database == 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(Database.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(Database, 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 (Database != 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 ", "(", ")"); Database.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 (Database != 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 ", "(", ")"); Database.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 (Database != 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 ", "(", ")"); Database.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 = Database.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 columnsToQuery = new List() { 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 columnsToQuery = new List() { 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 = Database.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(Database.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 = Database.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 = Database.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 ?? 0; association.LastCall = dbAssociation._LastCall ?? default(DateTime); association.CommodityIdSalesDefault = new SysId(dbAssociation._CommodityIdSalesDefault ?? 0); association.OrderLeadTimeCode = dbAssociation._OrderLeadTimeCode; association.DeliveryTypeCode = dbAssociation._DeliveryTypeCode; association.DeliveryCourierCode = dbAssociation._DeliveryCourierCode; association.DeliveryMethodCode = dbAssociation._DeliveryMethodCode; association.DeliveryBookInCode = dbAssociation._DeliveryBookInCode; /*----------------------------------------*/ association.AmountTransMax = dbAssociation._AmountTransMax ?? 0; association.AnnualSalesTarget = dbAssociation._AnnualSalesTarget ?? 0; association.CreditLimit = dbAssociation._CreditLimit ?? 0; association.AccountBalance = dbAssociation._AccountBalance ?? 0; association.DiscountType = (Sbm.DiscountType)(dbAssociation._DiscountType ?? 0); association.DiscountRate = dbAssociation._DiscountRate ?? 0; association.PriceSetId = new SysId(dbAssociation._PriceSetId ?? 0); association.TaxCodeId = new SysId(dbAssociation._TaxCodeId ?? 0); association.PaymentTerms = dbAssociation._PaymentTerms ?? 0; association.InvoiceDesc = dbAssociation._InvoiceDesc; if (dbAssociation._Terminated > 0) association.Terminated = new DateTime(dbAssociation._Terminated ?? 0 >> 16, (dbAssociation._Terminated ?? 0 >> 8) & 0xFF, dbAssociation._Terminated ?? 0 & 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 ?? 0), dbAssociation._CreateHost); association.SetUpdateStamp(dbAssociation._UpdateOn ?? default(DateTime), new SysId(dbAssociation._UpdateBy ?? 0), 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 (UserCanViewCommoditySalesFinancials()) { 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 (UserCanViewCommoditySalesFinancials()) { 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 (UserCanViewCommoditySalesFinancials()) { 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 (UserCanViewCommoditySalesFinancials()) { 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(Database.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(Database.DbmsType); return DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Flags, aliasTable), flag, match); } // Has each filter prm-col been specified. public override List GetAssociationQueryFilter(SbmAssociation.Params prm) { List filter = new List(); //--------------------------------------------------------------- // Association Id. String colAssociation_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociation); if (prm.IdsIncluded.HasValidIds()) filter.Add($"{colAssociation_Id} IN ({prm.IdsIncluded.Concat(",")})"); if (prm.IdsExcluded.HasValidIds()) filter.Add($"{colAssociation_Id} NOT IN ({prm.IdsExcluded.Concat(",")})"); // Association Type. String colAssociation_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAssociation); if (prm.AssociationType > 0) filter.Add($"{colAssociation_Type}={(int)prm.AssociationType}"); else if (prm.AssociationType == AssociationType.NotInternal) filter.Add($"{colAssociation_Type}!={(int)Sbm.AssociationType.Internal}"); //--------------------------------------------------------------- // Owner affiliate. String colAssociation_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAssociation); if (SysId.IsValid(prm.AffiliateIdOwner)) filter.Add($"{colAssociation_AffIdOwner}={prm.AffiliateIdOwner}"); // Target Affiliate. String colAssociation_AffIdTarget = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssociation); if (SysId.IsValid(prm.AffiliateIdTarget)) filter.Add($"{colAssociation_AffIdTarget}={prm.AffiliateIdTarget}"); //--------------------------------------------------------------- // Contact Group. if (SysId.IsValid(prm.AffiliateIdContactGroup)) { //Association must also be a member of this contact group. String aliasAssocContactGroup = "aAssConGrp"; DbQuery queryAssocContactGroup = new DbQuery(Database.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 (ColumnExists(SbmDbDfn.ColumnIdx.Association_Group)) { 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 affiliateFilter = new List(); 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(Database.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 addressFilter = new List(); String addressPartial = DbQuery.FormatForLike(StringUtil.EmptyOnNull(prm.AddressPartial)); if (!StringUtil.IsEmpty(addressPartial)) { List addressCols = new List() { 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(Database.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 searchFilter = new List(); foreach (String rawSearchValue in prm.Search.Split(new char[] { ' ', ',', ';' })) { String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue)); if (StringUtil.IsEmpty(searchValue)) continue; // Association filters. List searchValueFilter = new List(); searchValueFilter.Add(colAssociation_Code + " LIKE '%" + searchValue + "%'"); if (ColumnExists(SbmDbDfn.ColumnIdx.Association_Group)) 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 affiliateFilter = new List(); 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(Database.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 addressFilter = new List(); List addressCols = new List() { 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(Database.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. if (ColumnExists(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode)) { 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 filterAccountManager = new List(); 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(Database.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 filterAccountHandler = new List(); 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(Database.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 filterContactArea = new List(); 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(Database.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 filterContactHandler = new List(); 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(Database.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 filterDeliveryTypeCodes = new List(); 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(Database.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 filterDeliveryMethodCodes = new List(); 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(Database.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 filterDeliveryBookInCodes = new List(); 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(Database.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 filterTrans = new List(); DateTime dateTime = new DateTime(1970, 1, 1); // Constructed to set DBMS (in case required to format query elements). DbQuery qryTrans = new DbQuery(Database.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(Database.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 filterTerminated = new List(); 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(Database.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 GetAssociationSortColumns(SbmAssociation.Params prm) { // Sort sequence: List sortColumnNames = new List(); 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 Database.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 GetAssociationList(SbmAssociation.Params prm) { ClearErrorState(); List associations = new List(); DbQuery qry = new DbQuery(Database.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 = Database.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 columns, SbmAssociation.Params prm) { // Retrieve the database. ClearErrorState(); bool CanViewFinancials = UserCanViewCommoditySalesFinancials(); //--------------------------------------------------------------------- // Construct Query. DbQuery query = new DbQuery(Database.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) && ColumnExists(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode, aliasAssociation)); if (columns.HasId((int)SbmAssociation.Column.AmountTransMax) && CanViewFinancials) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AmountTransMax, aliasAssociation)); if (columns.HasId((int)SbmAssociation.Column.AnnualSalesTarget) && CanViewFinancials && ColumnExists(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget)) 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 affiliateOwnerCols = new List() { 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 affiliateTargetCols = new List(); 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(Database.DbmsType); qryAddPrimMinId.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address)); qryAddPrimMinId.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType) + "=" + ((int)Sbm.ItemType.Affiliate).ToString()); if (prm.AddressContext == SbmAssociation.Params.AddressContextType.Delivery) qryAddPrimMinId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type) + "=" + ((int)Sbm.AddressType.Delivery).ToString()); else qryAddPrimMinId.Filters.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Flags), SbmAddress.Flag_Primary, true)); qryAddPrimMinId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType)); qryAddPrimMinId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId)); qryAddPrimMinId.Columns.Add("Min(" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Id) + ")", SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Id, false)); qryAddPrimMinId.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType)); qryAddPrimMinId.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId)); // Join to target contact's primary address with lowest Id. String aliasAddressMinId = "AssAddMinId"; DbQueryJoin joinAddPrimId = new DbQueryJoin(DbJoinType.LeftOuter); joinAddPrimId.Table = new StringPair("(" + qryAddPrimMinId.BuildQuery() + ")", aliasAddressMinId); joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAddressMinId) + "=" + ((int)Sbm.ItemType.Affiliate).ToString()); joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAddressMinId) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociation_Affiliate_Target)); query.Joins.Add(joinAddPrimId); // Join to target address with lowest Id. joinTargetAddress.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAssociation_Target_Address) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAddressMinId)); } query.Joins.Add(joinTargetAddress); // Add the address columns. List addressTargetCols = new List(); 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 associateMemberCols = new List(); //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 affiliateMemberCols = new List(); 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 addressMemberCols = new List(); 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 priceSetCols = new List(); 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(Database.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) && CanViewFinancials) { // Net open sales order value. String aliasAssociation_Transaction = "AssocTrn"; DbQuery queryTrans = new DbQuery(Database.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) && CanViewFinancials) { // Net sales order value closed this calendar year. String aliasAssociation_Transaction = "AssocTrn"; DbQuery queryTrans = new DbQuery(Database.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) && CanViewFinancials) { // Net sales order value closed last calendar year. String aliasAssociation_Transaction = "AssocTrn"; DbQuery queryTrans = new DbQuery(Database.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(Database.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(Database, query.BuildQuery()); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }