1240 lines
63 KiB
C#
1240 lines
63 KiB
C#
using Org.BouncyCastle.Asn1.Cmp;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
|
|
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.Core;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Base.Interfaces;
|
|
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;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
{
|
|
//=======================================================================
|
|
// Account manager - Affiliates.
|
|
//=======================================================================
|
|
partial class SbmAccountMgr_Dbas
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
private List<StringPair> GetLogProperties(SbmAffiliate affiliate)
|
|
{
|
|
return new List<StringPair>()
|
|
{
|
|
new StringPair("Id",SysId.ToString(affiliate.Id)),
|
|
new StringPair("Name",affiliate.Name),
|
|
new StringPair("Status",affiliate.StatusCode)
|
|
};
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Associations.
|
|
public override bool AffiliateOwnerHasAssociations(SysId affiliateIdOwner, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
|
|
{
|
|
return (GetAffiliateOwnerAssociationCount(affiliateIdOwner, associationType, activeOnly) > 0);
|
|
}
|
|
public override long GetAffiliateOwnerAssociationCount(SysId affiliateIdOwner, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1) return 0;
|
|
if (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 AffiliateOwnerHasAssociationsWithTarget(SysId affiliateIdOwner, SysId affiliateIdTarget, bool activeOnly = true)
|
|
{
|
|
return (AffiliateOwnerAssociationsWithTargetCount(affiliateIdOwner, affiliateIdTarget, activeOnly) > 0);
|
|
}
|
|
public override long AffiliateOwnerAssociationsWithTargetCount(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 AffiliateTargetHasAssociations(SysId affiliateIdTarget, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
|
|
{
|
|
return (GetAffiliateTargetAssociationCount(affiliateIdTarget, associationType, activeOnly) > 0);
|
|
}
|
|
public override long GetAffiliateTargetAssociationCount(SysId affiliateIdTarget, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(affiliateIdTarget) || (int)associationType < 1) return 0;
|
|
if (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;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Associated data.
|
|
public override long GetChildAffiliateCount(SysId affiliateId)
|
|
{
|
|
if (!SysId.IsValid(affiliateId)) return 0;
|
|
String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_AffIdParent)}={affiliateId.ToString()}";
|
|
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), filter);
|
|
}
|
|
public override bool AffiliateHasSystemUsers(SysId affiliateId)
|
|
{
|
|
if (!SysId.IsValid(affiliateId)) return false;
|
|
String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SystemUser_AffiliateId)}={affiliateId}";
|
|
return (Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemUser), filter) > 0);
|
|
}
|
|
public override bool AffiliateHasDiaryLinks(SysId affiliateId)
|
|
{
|
|
if (!SysId.IsValid(affiliateId)) return false;
|
|
//return Internals.DiaryConsole.DataItemHasLinks(new SbmItemId(Sbm.ItemType.Affiliate,affiliateId));
|
|
return false;
|
|
}
|
|
|
|
// Dependent data should only be cleared when removing an affiliate.
|
|
public override bool ClearAffiliateDependentData(SysId affiliateId, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(affiliateId)) return false;
|
|
if (SbmGlobals.System == null) return SetErrorState("System is not available");
|
|
|
|
// Delete interface data items.
|
|
if (!HasErrorState())
|
|
{
|
|
if (InterfaceConsole != null)
|
|
{
|
|
if (!InterfaceConsole.ClearInterfaceDataItems(new SbmItemId(Sbm.ItemType.Association, affiliateId), dbUpdateInfo))
|
|
SetErrorState("Failed to clear interface data items - " + InterfaceConsole.ErrorStateMessage);
|
|
}
|
|
else SetErrorState("failed to initialise interface console");
|
|
}
|
|
// Remove data item references.
|
|
if (!HasErrorState())
|
|
{
|
|
if (DataItemMgr != null)
|
|
{
|
|
if (!DataItemMgr.ClearDataItem(new SbmItemId(Sbm.ItemType.Affiliate, affiliateId), dbUpdateInfo))
|
|
SetErrorState(DataItemMgr.ErrorStateMessage);
|
|
}
|
|
else SetErrorState("Data item manager is not available");
|
|
}
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create Item.
|
|
public override SbmAffiliate CreateAffiliate(Sbm.AffiliateType affiliateType)
|
|
{
|
|
return new SbmAffiliate_Dbas(null, affiliateType, 0);
|
|
}
|
|
private SbmAffiliate_Dbas CreateAffiliate(Affiliate_Db dbAffiliate)
|
|
{
|
|
ClearErrorState();
|
|
SbmAffiliate_Dbas affiliate = new SbmAffiliate_Dbas(new SysId(dbAffiliate._Id), (Sbm.AffiliateType)dbAffiliate._Type, (ushort)dbAffiliate._Flags);
|
|
PopulateFrom(dbAffiliate, affiliate);
|
|
return affiliate;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Item.
|
|
public override SbmAffiliate GetAffiliate(SbmAffiliate.Params prm)
|
|
{
|
|
return GetAffiliate(GetAffiliateQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
private SbmAffiliate GetAffiliate(String filter)
|
|
{
|
|
ClearErrorState();
|
|
long count = GetAffiliateCount(filter);
|
|
if (count == 0) return null;
|
|
if (count != 1)
|
|
{
|
|
SetErrorState(Msg_MultipleItemsFound);
|
|
return null;
|
|
}
|
|
SbmAffiliate affiliate = null;
|
|
// Query data.
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
Affiliate_Db dbAffiliate = new Affiliate_Db(DbInfo);
|
|
dbAffiliate.PopulateFrom(dbCommand, aliasAffiliate, filter);
|
|
affiliate = CreateAffiliate(dbAffiliate);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState(Msg_DatabaseQueryException);
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return affiliate;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Affiliate properties.
|
|
public override String GetAffiliateName(SysId affiliateId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(affiliateId)) return "";
|
|
// Filter to target specified contact.
|
|
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
|
|
prmAffiliate.IdsIncluded.Add(affiliateId);
|
|
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
|
|
if (GetAffiliateCount(prmAffiliate) != 1) return "";
|
|
// Columns to query.
|
|
ColumnDfn colName = GetAffiliateColumnDfn(SbmAffiliate.Column.Name);
|
|
List<ColumnDfn> columnsToQuery = new List<ColumnDfn>() { colName };
|
|
// Query affiliates.
|
|
using (DbResultSet dbResultSet = ExecuteAffiliateQuery(columnsToQuery, prmAffiliate))
|
|
{
|
|
// Only interested in first row.
|
|
if (dbResultSet != null && dbResultSet.NextRecord())
|
|
{
|
|
NamedValue.Map values = dbResultSet.GetRecordValues();
|
|
return values.GetValue(colName.DataName).AsString();
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
public override String GetAssociationOwnerName(SysId associationIdOwner)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(associationIdOwner)) return "";
|
|
// Filter to target specified association.
|
|
SbmAssociation.Params prmAssociation = new SbmAssociation.Params();
|
|
prmAssociation.IdsIncluded.Add(associationIdOwner);
|
|
prmAssociation.StatusCat = SbmAssociation.StatusCat.Any;
|
|
if (GetAssociationCount(prmAssociation) != 1) return "";
|
|
// Columns to query.
|
|
ColumnDfn colAssocOwnerName = GetAssociationColumnDfn(SbmAssociation.Column.Owner_Name);
|
|
List<ColumnDfn> columnsToQuery = new List<ColumnDfn>() { colAssocOwnerName };
|
|
// 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(colAssocOwnerName.DataName).AsString());
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
public override String GetAssociationTargetName(SysId associationIdTarget)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(associationIdTarget)) return "";
|
|
// Filter to target specified association.
|
|
SbmAssociation.Params prmAssociation = new SbmAssociation.Params();
|
|
prmAssociation.IdsIncluded.Add(associationIdTarget);
|
|
prmAssociation.StatusCat = SbmAssociation.StatusCat.Any;
|
|
if (GetAssociationCount(prmAssociation) != 1) return "";
|
|
// Columns to query.
|
|
ColumnDfn colAssocTargetName = GetAssociationColumnDfn(SbmAssociation.Column.Target_Name);
|
|
List<ColumnDfn> columnsToQuery = new List<ColumnDfn>() { colAssocTargetName };
|
|
// 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(colAssocTargetName.DataName).AsString();
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate Item properties.
|
|
public override bool IsValidAffiliateData(SbmAffiliate.Data data, SbmAffiliate.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.IsValidAffiliateData(data, errField)) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Insert Item.
|
|
public override bool InsertAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidAffiliate(affiliate)) return false;
|
|
if (SysId.IsValid(affiliate.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
Affiliate_Db dbAffiliate = new Affiliate_Db(DbInfo);
|
|
PopulateTo(dbAffiliate, affiliate, dbUpdateInfo);
|
|
if (Affiliate_Db.FieldsNonId.Contains("Id"))
|
|
{
|
|
// Generate next Id.
|
|
dbAffiliate._Id = SysId.ToInt(Database.GetNextId("Affiliate", dbUpdateInfo));
|
|
}
|
|
dbAffiliate.ExecuteInsertCommand(dbCommand);
|
|
affiliate.Id = new SysId(dbAffiliate._Id);
|
|
affiliate.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. {GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")}");
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Update Affiliate.
|
|
public override bool UpdateAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidAffiliate(affiliate)) return false;
|
|
if (!SysId.IsValid(affiliate.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
|
if (!affiliate.Changed)
|
|
{
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. {GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")}");
|
|
return true;
|
|
}
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve Affiliate.
|
|
dbConnection.Open();
|
|
Affiliate_Db dbAffiliate = new Affiliate_Db(DbInfo);
|
|
dbAffiliate.PopulateFrom(dbCommand, aliasAffiliate, "Id=" + SysId.ToString(affiliate.Id));
|
|
SbmUpdateLogItemMonitor_Affiliate updateLogMonitor = new SbmUpdateLogItemMonitor_Affiliate(Internals, CreateAffiliate(dbAffiliate));
|
|
|
|
// Update properties.
|
|
PopulateTo(dbAffiliate, affiliate, dbUpdateInfo);
|
|
dbAffiliate.ExecuteUpdateCommand(dbCommand);
|
|
affiliate.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. {GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")}");
|
|
|
|
// Record updates.
|
|
updateLogMonitor.RecordUpdatedValues(affiliate);
|
|
updateLogMonitor.LogUpdates();
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Delete Affiliate.
|
|
public override bool AffiliateCanBeDeleted(SbmAffiliate affiliate)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.AffiliateCanBeDeleted(affiliate)) return false;
|
|
return true;
|
|
}
|
|
public override bool DeleteAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!AffiliateCanBeDeleted(affiliate)) return false;
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve Affiliate.
|
|
dbConnection.Open();
|
|
Affiliate_Db dbAffiliate = new Affiliate_Db(DbInfo);
|
|
dbAffiliate.PopulateFrom(dbCommand, aliasAffiliate, "Id=" + affiliate.Id.ToString());
|
|
// Delete Affiliate.
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate) + " WHERE Id=" + SysId.ToString(affiliate.Id) + ";";
|
|
dbCommand.ExecuteNonQuery();
|
|
affiliate.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. {GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")}");
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Copy data properties to and from database.
|
|
private void PopulateTo(Affiliate_Db dbAffiliate, SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
dbAffiliate._Type = (short)affiliate.AffiliateType;
|
|
dbAffiliate._PhoneMain = affiliate.PhoneMain;
|
|
dbAffiliate._PhoneAlt = affiliate.PhoneAlt;
|
|
dbAffiliate._PhoneFax = affiliate.PhoneFax;
|
|
dbAffiliate._Email = affiliate.Email;
|
|
dbAffiliate._Website = affiliate.Website;
|
|
// Ogranisation.
|
|
dbAffiliate._AffIdParent = affiliate.AffiliateIdParent.ToInt();
|
|
if (affiliate.IsIndividual())
|
|
affiliate.Name = affiliate.GetDisplayName();
|
|
dbAffiliate._Name = affiliate.Name;
|
|
dbAffiliate._Abbrev = affiliate.Abbr;
|
|
dbAffiliate._Nature = affiliate.Nature;
|
|
dbAffiliate._Contact = affiliate.Contact;
|
|
dbAffiliate._CompanyNo = affiliate.CompanyNo;
|
|
dbAffiliate._VatReg = affiliate.VatReg;
|
|
dbAffiliate._PhoneDirect = affiliate.PhoneDirect;
|
|
// Individual.
|
|
dbAffiliate._Title = affiliate.Title;
|
|
dbAffiliate._Initials = affiliate.Initials;
|
|
dbAffiliate._FirstName = affiliate.FirstName;
|
|
dbAffiliate._LastName = affiliate.LastName;
|
|
dbAffiliate._Salutation = affiliate.Salutation;
|
|
dbAffiliate._PhoneMobile = affiliate.PhoneMobile;
|
|
dbAffiliate._BirthDay = affiliate.BirthDay;
|
|
dbAffiliate._BirthMonth = affiliate.BirthMonth;
|
|
dbAffiliate._BirthYear = affiliate.BirthYear;
|
|
dbAffiliate._MaritalStatus = affiliate.MaritalStatus;
|
|
dbAffiliate._Spouse = affiliate.Spouse;
|
|
dbAffiliate._Children = affiliate.Children;
|
|
dbAffiliate._Hometown = affiliate.Hometown;
|
|
dbAffiliate._UserId = affiliate.UserId.ToInt();
|
|
// Common properties.
|
|
dbAffiliate._Notes = affiliate.Notes;
|
|
dbAffiliate._Status = SacsSystem.GetStatusCode(affiliate.Status);
|
|
dbAffiliate._Flags = (short)affiliate.Flags;
|
|
if (!SysId.IsValid(affiliate.Id))
|
|
{
|
|
dbAffiliate._CreateOn = DateTime.UtcNow;
|
|
dbAffiliate._CreateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbAffiliate._CreateHost = dbUpdateInfo.Host;
|
|
}
|
|
dbAffiliate._UpdateOn = DateTime.UtcNow;
|
|
dbAffiliate._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbAffiliate._UpdateHost = dbUpdateInfo.Host;
|
|
}
|
|
private void PopulateFrom(Affiliate_Db dbAffiliate, SbmAffiliate affiliate)
|
|
{
|
|
//prmAffiliate.Id = new SysId(dbAffiliate._Id);
|
|
//affiliate.Category = (Sbm.AffiliateCategory)dbAffiliate._Cat;
|
|
affiliate.AffiliateType = (Sbm.AffiliateType)dbAffiliate._Type;
|
|
affiliate.PhoneMain = dbAffiliate._PhoneMain;
|
|
affiliate.PhoneAlt = dbAffiliate._PhoneAlt;
|
|
affiliate.PhoneFax = dbAffiliate._PhoneFax;
|
|
affiliate.Email = dbAffiliate._Email;
|
|
affiliate.Website = dbAffiliate._Website;
|
|
// Ogranisation.
|
|
affiliate.AffiliateIdParent = new SysId(dbAffiliate._AffIdParent ?? 0);
|
|
affiliate.Name = dbAffiliate._Name;
|
|
affiliate.Abbr = dbAffiliate._Abbrev;
|
|
affiliate.Nature = dbAffiliate._Nature;
|
|
affiliate.Contact = dbAffiliate._Contact;
|
|
affiliate.CompanyNo = dbAffiliate._CompanyNo;
|
|
affiliate.VatReg = dbAffiliate._VatReg;
|
|
affiliate.PhoneDirect = dbAffiliate._PhoneDirect;
|
|
// Individual.
|
|
affiliate.Title = dbAffiliate._Title;
|
|
affiliate.Initials = dbAffiliate._Initials;
|
|
affiliate.FirstName = dbAffiliate._FirstName;
|
|
affiliate.LastName = dbAffiliate._LastName;
|
|
affiliate.Salutation = dbAffiliate._Salutation;
|
|
affiliate.PhoneMobile = dbAffiliate._PhoneMobile;
|
|
affiliate.BirthDay = dbAffiliate._BirthDay ?? 0;
|
|
affiliate.BirthMonth = dbAffiliate._BirthMonth ?? 0;
|
|
affiliate.BirthYear = dbAffiliate._BirthYear ?? 0;
|
|
affiliate.MaritalStatus = dbAffiliate._MaritalStatus;
|
|
affiliate.Spouse = dbAffiliate._Spouse;
|
|
affiliate.Children = dbAffiliate._Children;
|
|
affiliate.Hometown = dbAffiliate._Hometown;
|
|
affiliate.UserId = new SysId(dbAffiliate._UserId ?? 0);
|
|
// Common properties.
|
|
affiliate.Notes = dbAffiliate._Notes;
|
|
affiliate.Status = SacsSystem.GetStatusForCode(dbAffiliate._Status);
|
|
affiliate.SetCreateStamp(dbAffiliate._CreateOn, new SysId(dbAffiliate._CreateBy ?? 0), dbAffiliate._CreateHost);
|
|
affiliate.SetUpdateStamp(dbAffiliate._UpdateOn ?? default(DateTime), new SysId(dbAffiliate._UpdateBy ?? 0), dbAffiliate._UpdateHost);
|
|
affiliate.AcceptChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Column definitions.
|
|
private static readonly String aliasAffiliate = "aAffil";
|
|
private static readonly String aliasAffiliate_AddPrim = "Aff_AddPrim";
|
|
private static readonly String prefixAffiliate_AddPrim = aliasAffiliate_AddPrim + "_";
|
|
private static readonly String colNameAffiliate_GroupMembers = "GroupMembers";
|
|
private static readonly String colNameAffiliate_AssociationOwnerCount = "AssocOwnerCount";
|
|
private static readonly String colNameAffiliate_AssociationTargetCount = "AssocTargetCount";
|
|
|
|
// Column definition population.
|
|
private void SetAffiliateColDfn
|
|
(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.Affiliate)
|
|
alias = aliasAffiliate;
|
|
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)Internals.GetColTextLen(dbCol);
|
|
}
|
|
//-------------------------------------------------------------------
|
|
// Getting prmAffiliate column definition.
|
|
public override ColumnDfn GetAffiliateColumnDfn(SbmAffiliate.Column columnId, string caption = "", int width = 0)
|
|
{
|
|
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
|
|
switch (columnId)
|
|
{
|
|
case SbmAffiliate.Column.Pos:
|
|
SetAffiliateColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
|
columnDfn.ReadOnly = true;
|
|
columnDfn.Resizable = false;
|
|
break;
|
|
case SbmAffiliate.Column.Id:
|
|
SetAffiliateColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.Affiliate_Id, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
// Affiliate Properties.
|
|
case SbmAffiliate.Column.Type:
|
|
SetAffiliateColDfn(columnDfn, "Type", 60, SbmDbDfn.ColumnIdx.Affiliate_Type, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SbmAffiliate.Column.Type_Code:
|
|
SetAffiliateColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Affiliate_Type, ColumnAlignment.Center);
|
|
break;
|
|
case SbmAffiliate.Column.Type_Desc:
|
|
SetAffiliateColDfn(columnDfn, "Type", 80, SbmDbDfn.ColumnIdx.Affiliate_Type, ColumnAlignment.Center);
|
|
break;
|
|
case SbmAffiliate.Column.Name:
|
|
SetAffiliateColDfn(columnDfn, "Name", 160, SbmDbDfn.ColumnIdx.Affiliate_Name);
|
|
break;
|
|
case SbmAffiliate.Column.Abbrev:
|
|
SetAffiliateColDfn(columnDfn, "Abbrev", 90, SbmDbDfn.ColumnIdx.Affiliate_Abbrev);
|
|
break;
|
|
case SbmAffiliate.Column.Title:
|
|
SetAffiliateColDfn(columnDfn, "Title", 50, SbmDbDfn.ColumnIdx.Affiliate_Title);
|
|
break;
|
|
case SbmAffiliate.Column.Initials:
|
|
SetAffiliateColDfn(columnDfn, "Initials", 50, SbmDbDfn.ColumnIdx.Affiliate_Initials);
|
|
break;
|
|
case SbmAffiliate.Column.LastName:
|
|
SetAffiliateColDfn(columnDfn, "LastName", 80, SbmDbDfn.ColumnIdx.Affiliate_LastName);
|
|
break;
|
|
case SbmAffiliate.Column.FirstName:
|
|
SetAffiliateColDfn(columnDfn, "FirstName", 80, SbmDbDfn.ColumnIdx.Affiliate_FirstName);
|
|
break;
|
|
case SbmAffiliate.Column.Salutation:
|
|
SetAffiliateColDfn(columnDfn, "Salutation", 50, SbmDbDfn.ColumnIdx.Affiliate_Salutation);
|
|
break;
|
|
case SbmAffiliate.Column.Nature:
|
|
SetAffiliateColDfn(columnDfn, "Nature", 120, SbmDbDfn.ColumnIdx.Affiliate_Nature);
|
|
break;
|
|
case SbmAffiliate.Column.CompanyNo:
|
|
SetAffiliateColDfn(columnDfn, "CompanyNo", 50, SbmDbDfn.ColumnIdx.Affiliate_CompanyNo);
|
|
break;
|
|
case SbmAffiliate.Column.VatReg:
|
|
SetAffiliateColDfn(columnDfn, "VatReg", 80, SbmDbDfn.ColumnIdx.Affiliate_VatReg);
|
|
break;
|
|
case SbmAffiliate.Column.Contact:
|
|
SetAffiliateColDfn(columnDfn, "Contact", 120, SbmDbDfn.ColumnIdx.Affiliate_Contact);
|
|
break;
|
|
case SbmAffiliate.Column.PhoneMain:
|
|
SetAffiliateColDfn(columnDfn, "PhoneMain", 90, SbmDbDfn.ColumnIdx.Affiliate_PhoneMain);
|
|
break;
|
|
case SbmAffiliate.Column.PhoneDirect:
|
|
SetAffiliateColDfn(columnDfn, "PhoneDirect", 90, SbmDbDfn.ColumnIdx.Affiliate_PhoneDirect);
|
|
break;
|
|
case SbmAffiliate.Column.PhoneAlt:
|
|
SetAffiliateColDfn(columnDfn, "PhoneAlt", 90, SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt);
|
|
break;
|
|
case SbmAffiliate.Column.PhoneMobile:
|
|
SetAffiliateColDfn(columnDfn, "PhoneMobile", 90, SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile);
|
|
break;
|
|
case SbmAffiliate.Column.PhoneFax:
|
|
SetAffiliateColDfn(columnDfn, "PhoneFax", 90, SbmDbDfn.ColumnIdx.Affiliate_PhoneFax);
|
|
break;
|
|
case SbmAffiliate.Column.Email:
|
|
SetAffiliateColDfn(columnDfn, "Email", 160, SbmDbDfn.ColumnIdx.Affiliate_Email);
|
|
break;
|
|
case SbmAffiliate.Column.Website:
|
|
SetAffiliateColDfn(columnDfn, "Website", 160, SbmDbDfn.ColumnIdx.Affiliate_Website);
|
|
break;
|
|
case SbmAffiliate.Column.ProspectGroup:
|
|
SetAffiliateColDfn(columnDfn, "Prospect", 70, SbmDbDfn.ColumnIdx.Affiliate_Flags, ColumnAlignment.Center);
|
|
columnDfn.BoolFormat = ColumnBoolFormat.Tick;
|
|
break;
|
|
|
|
//---------------------------------------------------------------
|
|
// Addresses Summary.
|
|
case SbmAffiliate.Column.Address_Summary:
|
|
SetAffiliateColDfn(columnDfn, "Address", 220, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_Line1:
|
|
SetAffiliateColDfn(columnDfn, "Address", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_Line2:
|
|
SetAffiliateColDfn(columnDfn, "Line 2", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_Line3:
|
|
SetAffiliateColDfn(columnDfn, "Line 3", 120, SbmDbDfn.ColumnIdx.Address_Line3, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_City:
|
|
SetAffiliateColDfn(columnDfn, "City", 80, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_Province:
|
|
SetAffiliateColDfn(columnDfn, "Province", 80, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_Country:
|
|
SetAffiliateColDfn(columnDfn, "Country", 80, SbmDbDfn.ColumnIdx.Address_Country, ColumnAlignment.Default, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
case SbmAffiliate.Column.Address_Postcode:
|
|
SetAffiliateColDfn(columnDfn, "Postcode", 65, SbmDbDfn.ColumnIdx.Address_Postcode, ColumnAlignment.Center, DataValue.DataType.String, aliasAffiliate_AddPrim, prefixAffiliate_AddPrim);
|
|
break;
|
|
|
|
//-----------------------------------------------------------------
|
|
// Derived columns.
|
|
case SbmAffiliate.Column.GroupMembers:
|
|
SetAffiliateColDfn(columnDfn, "Members", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.DataName = colNameAffiliate_GroupMembers;
|
|
break;
|
|
case SbmAffiliate.Column.AssociationOwner_Count:
|
|
SetAffiliateColDfn(columnDfn, "Owner Assocs", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.DataName = colNameAffiliate_AssociationOwnerCount;
|
|
break;
|
|
case SbmAffiliate.Column.AssociationTarget_Count:
|
|
SetAffiliateColDfn(columnDfn, "Target Assocs", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.DataName = colNameAffiliate_AssociationTargetCount;
|
|
break;
|
|
|
|
//-----------------------------------------------------------------
|
|
// Common properties.
|
|
case SbmAffiliate.Column.Notes:
|
|
SetAffiliateColDfn(columnDfn, "Notes", 240, SbmDbDfn.ColumnIdx.Affiliate_Notes);
|
|
break;
|
|
case SbmAffiliate.Column.Status:
|
|
SetAffiliateColDfn(columnDfn, "Status", 80, SbmDbDfn.ColumnIdx.Affiliate_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmAffiliate.Column.Status_Desc:
|
|
SetAffiliateColDfn(columnDfn, "Status", 90, SbmDbDfn.ColumnIdx.Affiliate_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmAffiliate.Column.Status_Ind:
|
|
SetAffiliateColDfn(columnDfn, "Status", 80, SbmDbDfn.ColumnIdx.Affiliate_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmAffiliate.Column.CreateOn_Date:
|
|
SetAffiliateColDfn(columnDfn, "Created", 80, SbmDbDfn.ColumnIdx.Affiliate_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmAffiliate.Column.UpdateOn_Date:
|
|
SetAffiliateColDfn(columnDfn, "Updated", 80, SbmDbDfn.ColumnIdx.Affiliate_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;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Affiliate query filter.
|
|
public override List<string> GetAffiliateQueryFilter(SbmAffiliate.Params prm)
|
|
{
|
|
List<String> filter = new List<String>();
|
|
String colAffiliate_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate);
|
|
String colAffiliate_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Type, aliasAffiliate);
|
|
String colAffiliate_UserId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UserId, aliasAffiliate);
|
|
|
|
//---------------------------------------------------------------
|
|
// Demo application restrictions - when user logged in.
|
|
if (SysId.IsValid(UserContext.UserAffiliateId) && SessionConsole.HideOtherUserContacts())
|
|
{
|
|
// Exclude Individual contacts with User Id other than the logged in user.
|
|
// NB Keep logic in line with corresponding Affiliate method (SbmAccountMgr_Dbas.GetAssociationQueryFilter).
|
|
filter.Add($"{colAffiliate_Id} Not In (Select Id From {SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate)} Where Id!={UserContext.UserAffiliateId} And Type={(int)Sbm.AffiliateType.Individual} And UserId>0)");
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Item Id.
|
|
if (prm.IdsIncluded.HasValidIds())
|
|
filter.Add($"{colAffiliate_Id} IN ({prm.IdsIncluded.Concat(",")})");
|
|
if (prm.IdsExcluded.HasValidIds())
|
|
filter.Add($"{colAffiliate_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
|
|
|
|
// Type.
|
|
// Affiliate type - Individual.
|
|
if (prm.AffiliateType == Sbm.AffiliateType.AnyOrganisation)
|
|
filter.Add($"{colAffiliate_Type} Not In ({(int)Sbm.AffiliateType.Individual}, {(int)Sbm.AffiliateType.ContactGroup})");
|
|
// Affiliate type - ContactGroup.
|
|
else if (prm.AffiliateType == Sbm.AffiliateType.AnyContact)
|
|
filter.Add($"{colAffiliate_Type}<>{(int)Sbm.AffiliateType.ContactGroup}");
|
|
// Affiliate type.
|
|
else if (prm.AffiliateType != Sbm.AffiliateType.Any && prm.AffiliateType != Sbm.AffiliateType.Unknown)
|
|
filter.Add($"{colAffiliate_Type}={(int)prm.AffiliateType}");
|
|
|
|
// Parent Id.
|
|
if (SysId.IsValid(prm.AffiliateIdParent))
|
|
{
|
|
String colAffiliate_AffIdParent = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_AffIdParent, aliasAffiliate);
|
|
filter.Add($"{colAffiliate_AffIdParent}={SysId.ToString(prm.AffiliateIdParent)}");
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Common columns.
|
|
String colAffiliate_Name = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAffiliate);
|
|
String colAffiliate_FirstName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_FirstName, aliasAffiliate);
|
|
String colAffiliate_LastName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_LastName, aliasAffiliate);
|
|
String colAffiliate_PhoneMain = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain, aliasAffiliate);
|
|
String colAffiliate_PhoneAlt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt, aliasAffiliate);
|
|
String colAffiliate_PhoneFax = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax);
|
|
String colAffiliate_PhoneMobile = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile);
|
|
String colAffiliate_PhoneDirect = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneDirect);
|
|
String colAffiliate_Website = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Website, aliasAffiliate);
|
|
String colAffiliate_Email = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Email, aliasAffiliate);
|
|
String colAffiliate_Notes = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Notes, aliasAffiliate);
|
|
|
|
//---------------------------------------------------------------
|
|
// Generic search.
|
|
if (!StringUtil.IsEmpty(prm.Search))
|
|
{
|
|
List<String> searchFilter = new List<string>();
|
|
foreach (String rawSearchValue in prm.Search.Split(new char[] { ' ', ',', ';' }))
|
|
{
|
|
String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue));
|
|
if (StringUtil.IsEmpty(searchValue)) continue;
|
|
List<String> searchValueFilter = new List<string>();
|
|
searchValueFilter.Add(colAffiliate_Name + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_FirstName + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_LastName + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_PhoneMain + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_PhoneAlt + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_Website + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_Email + " LIKE '%" + searchValue + "%'");
|
|
searchValueFilter.Add(colAffiliate_Notes + " LIKE '%" + searchValue + "%'");
|
|
searchFilter.Add(searchValueFilter.Concat(" OR ", "(", ")"));
|
|
}
|
|
if (searchFilter.Any()) filter.AddRange(searchFilter);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Name.
|
|
if (!StringUtil.IsEmpty(prm.Name))
|
|
filter.Add(colAffiliate_Name + "='" + DbQuery.FormatForCondition(prm.Name) + "'");
|
|
// Partial Name with FirstName & LastName.
|
|
if (!StringUtil.IsEmpty(prm.NamePartial))
|
|
filter.Add(colAffiliate_Name + " LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%' OR " + colAffiliate_FirstName + " LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%' OR " + colAffiliate_LastName + " LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%'");
|
|
|
|
// First Name.
|
|
if (!StringUtil.IsEmpty(prm.FirstName))
|
|
filter.Add(colAffiliate_FirstName + "='" + DbQuery.FormatForCondition(prm.FirstName) + "'");
|
|
// Last Name.
|
|
if (!StringUtil.IsEmpty(prm.LastName))
|
|
filter.Add(colAffiliate_LastName + "='" + DbQuery.FormatForCondition(prm.LastName) + "'");
|
|
|
|
// Partial Email.
|
|
if (!StringUtil.IsEmpty(prm.EmailPartial))
|
|
filter.Add(colAffiliate_Email + " LIKE '%" + DbQuery.FormatForLike(prm.EmailPartial) + "%'");
|
|
|
|
//---------------------------------------------------------------
|
|
// Partial Phone - type of phone number held against addresses.
|
|
if (!StringUtil.IsEmpty(prm.PhonePartial))
|
|
{
|
|
// Search for matches in any of the phone numbers associated with the affiliate.
|
|
String aliasAffAddPhone = "aAffAddPhone";
|
|
String colAddress_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAffAddPhone);
|
|
String colAddress_Owner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AffIdOwner, aliasAffAddPhone);
|
|
String colAddress_Phone = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Phone, aliasAffAddPhone);
|
|
String colAddress_Fax = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Fax, aliasAffAddPhone);
|
|
// Build the sub query to match addresses with this partial phone number.
|
|
DbQuery qryAddressPhone = new DbQuery(Database.DbmsType);
|
|
qryAddressPhone.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAffAddPhone);
|
|
qryAddressPhone.Columns.Add(colAddress_Id);
|
|
qryAddressPhone.Filters.Add(colAddress_Owner + "=" + colAffiliate_Id);
|
|
qryAddressPhone.Filters.Add(colAddress_Phone + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAddress_Phone, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAddress_Phone + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
qryAddressPhone.Filters.Add(colAddress_Fax + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAddress_Fax, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAddress_Fax + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
// Phone filters.
|
|
List<String> filterPhone = new List<String>();
|
|
filterPhone.Add(colAffiliate_PhoneMain + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAffiliate_PhoneMain, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAffiliate_PhoneMain + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
filterPhone.Add(colAffiliate_PhoneAlt + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAffiliate_PhoneAlt, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAffiliate_PhoneAlt + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
filterPhone.Add(colAffiliate_PhoneFax + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAffiliate_PhoneFax, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAffiliate_PhoneFax + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
filterPhone.Add(colAffiliate_PhoneMobile + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAffiliate_PhoneMobile, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAffiliate_PhoneMobile + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
filterPhone.Add(colAffiliate_PhoneDirect + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + DbQuery.FormatFn_Left(colAffiliate_PhoneDirect, DbQuery.FormatForCondition(prm.PhonePartial).Length) + "='" + DbQuery.FormatForCondition(prm.PhonePartial) + "' OR " + colAffiliate_PhoneMobile + " LIKE '%" + DbQuery.FormatForLike(prm.PhonePartial) + "%'");
|
|
filterPhone.Add("EXISTS (" + qryAddressPhone.BuildQuery() + ")");
|
|
filter.Add(filterPhone.Concat(" OR "));
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Partial Address & Partial Postcode - stripping spaces and using the formatted postcode column.
|
|
String postcodePartial = DbQuery.FormatForCondition(StringUtil.EmptyOnNull(prm.PostcodePartial).ReplaceAll(" ", ""));
|
|
String addressPartial = DbQuery.FormatForCondition(StringUtil.EmptyOnNull(prm.AddressPartial));
|
|
if (!StringUtil.IsEmpty(postcodePartial) || !StringUtil.IsEmpty(addressPartial))
|
|
{
|
|
String aliasAffiliate_Address = "aAffAdd";
|
|
String colAddress_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAffiliate_Address);
|
|
String colAddress_Owner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_AffIdOwner, aliasAffiliate_Address);
|
|
// Build the sub query.
|
|
DbQuery qryAddressPostcode = new DbQuery(Database.DbmsType);
|
|
qryAddressPostcode.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAffiliate_Address);
|
|
qryAddressPostcode.Columns.Add(colAddress_Id);
|
|
qryAddressPostcode.Filters.Add(colAddress_Owner + "=" + colAffiliate_Id);
|
|
if (!StringUtil.IsEmpty(prm.PostcodePartial))
|
|
{
|
|
String colAddress_Postcode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_PostcodeFmt, aliasAffiliate_Address);
|
|
qryAddressPostcode.Filters.Add(DbQuery.FormatFn_Left(colAddress_Postcode, postcodePartial.Length) + "='" + postcodePartial + "'");
|
|
}
|
|
if (!StringUtil.IsEmpty(prm.AddressPartial))
|
|
{
|
|
// Address filters.
|
|
List<SbmDbDfn.ColumnIdx> addressCols = new List<SbmDbDfn.ColumnIdx>()
|
|
{
|
|
SbmDbDfn.ColumnIdx.Address_Name,
|
|
SbmDbDfn.ColumnIdx.Address_Line1,
|
|
SbmDbDfn.ColumnIdx.Address_Line2,
|
|
SbmDbDfn.ColumnIdx.Address_Line3,
|
|
SbmDbDfn.ColumnIdx.Address_City,
|
|
//SbmDbDfn.ColumnIdx.Address_Province,
|
|
SbmDbDfn.ColumnIdx.Address_Contact,
|
|
};
|
|
List<String> filterAddress = new List<String>();
|
|
foreach (SbmDbDfn.ColumnIdx addressCol in addressCols)
|
|
filterAddress.Add(SbmDbDfn.GetColumnNameQual(addressCol, aliasAffiliate_Address) + " LIKE '%" + DbQuery.FormatForCondition(addressPartial) + "%'");
|
|
qryAddressPostcode.Filters.Add(filterAddress.Concat(" OR ", "(", ")"));
|
|
}
|
|
qryAddressPostcode.Filters.Add(GetPrimaryAddressFilter(true, aliasAffiliate_Address));
|
|
filter.Add("EXISTS (" + qryAddressPostcode.BuildQuery() + ")");
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Association.
|
|
if (SysId.IsValid(prm.AffiliateIdAssocOwner) || SysId.IsValid(prm.AffiliateIdAssocTarget) || prm.AssociationType > 0 || prm.AssociationTypeExclude > 0)
|
|
{
|
|
String aliasAffAssocRef = "aAffAssocRef";
|
|
String colAssociation_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAffAssocRef);
|
|
String colAssociation_AffOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAffAssocRef);
|
|
String colAssociation_AffTarget = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAffAssocRef);
|
|
String subFilter = "";
|
|
|
|
if (SysId.IsValid(prm.AffiliateIdAssocOwner))
|
|
{
|
|
// Restrict to affiliates that are the target of an association with the specified owner.
|
|
subFilter = colAffiliate_Id + "=" + colAssociation_AffTarget + " AND " + colAssociation_AffOwner + "=" + prm.AffiliateIdAssocOwner.ToString();
|
|
}
|
|
else if (SysId.IsValid(prm.AffiliateIdAssocTarget))
|
|
{
|
|
// Restrict to affiliates that are the owner of an association with the specified target.
|
|
subFilter = colAffiliate_Id + "=" + colAssociation_AffOwner + " AND " + colAssociation_AffTarget + "=" + prm.AffiliateIdAssocTarget.ToString();
|
|
}
|
|
else if (prm.AssociationType > 0)
|
|
{
|
|
// Restrict to affiliates that have an association of the specified type.
|
|
subFilter = colAffiliate_Id + "=" + colAssociation_AffOwner + " OR " + colAffiliate_Id + "=" + colAssociation_AffTarget;
|
|
}
|
|
else if (prm.AssociationTypeExclude > 0)
|
|
{
|
|
// Restrict to affiliates that don't have an association of the specified type.
|
|
subFilter = colAffiliate_Id + "=" + colAssociation_AffOwner + " OR " + colAffiliate_Id + "=" + colAssociation_AffTarget;
|
|
}
|
|
|
|
// Restrict to associations of the specified type.
|
|
if (prm.AssociationType > 0)
|
|
subFilter += " AND " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffAssocRef) + "=" + ((int)prm.AssociationType).ToString();
|
|
// Exclude associations of the specified type:
|
|
if (prm.AssociationTypeExclude > 0)
|
|
subFilter += " AND " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffAssocRef) + "<>" + prm.AssociationTypeExclude.ToString();
|
|
// Should these associations also be retricted to those that are 'supervisory':
|
|
if (prm.TargetSupervised != SbmAffiliate.Params.Supervised.Any)
|
|
{
|
|
bool superMatch = prm.TargetSupervised == SbmAffiliate.Params.Supervised.Yes;
|
|
subFilter += " AND " + GetFlagFilter(SbmAssociation.Flag_Supervised, superMatch, aliasAffAssocRef);
|
|
}
|
|
|
|
DbQuery qryAssociationTarget = new DbQuery(Database.DbmsType);
|
|
qryAssociationTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAffAssocRef);
|
|
qryAssociationTarget.Columns.Add(colAssociation_Id);
|
|
qryAssociationTarget.Filters.Add(subFilter);
|
|
if (!DateUtil.IsValid(prm.AssociationEffectiveOn))
|
|
{
|
|
// NB 'Association.Terminated' column is a long value (not a date).
|
|
String colAssociation_Terminated = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Terminated, aliasAffAssocRef);
|
|
List<String> filterApplication = new List<String>();
|
|
filterApplication.Add(colAssociation_Terminated + " IS NULL");
|
|
filterApplication.Add(colAssociation_Terminated + "=" + "0"); //DbQuery.FormatForCondition(Date(1,1,1970)));
|
|
filterApplication.Add(colAssociation_Terminated + ">=" + (prm.AssociationEffectiveOn.Year << 16 + prm.AssociationEffectiveOn.Month << 8 + prm.AssociationEffectiveOn.Day).ToString());
|
|
qryAssociationTarget.Filters.Add(filterApplication.Concat(" OR ", "(", ")"));
|
|
}
|
|
if (prm.CurrentAssociationsOnly)
|
|
qryAssociationTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasAffAssocRef) + "='" + StatusCurrent + "'");
|
|
filter.Add("EXISTS (" + qryAssociationTarget.BuildQuery() + ")");
|
|
}
|
|
|
|
// Affiliate Exclude TargetOf Id.
|
|
if (SysId.IsValid(prm.AffiliateIdExcludeTargetsOf))
|
|
{
|
|
// Restrict to affiliates that are the owner of an association with the specified target:
|
|
String aliasAffAssExclude = "aAffAssExc";
|
|
DbQuery qryAssociationTarget = new DbQuery(Database.DbmsType);
|
|
qryAssociationTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAffAssExclude);
|
|
qryAssociationTarget.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAffAssExclude));
|
|
qryAssociationTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAffAssExclude) + "=" + colAffiliate_Id);
|
|
qryAssociationTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAffAssExclude) + "=" + prm.AffiliateIdExcludeTargetsOf.ToString());
|
|
filter.Add("NOT EXISTS (" + qryAssociationTarget.BuildQuery() + ")");
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// User Id.
|
|
if (SysId.IsValid(prm.UserId))
|
|
filter.Add($"{colAffiliate_UserId}={SysId.ToString(prm.UserId)}");
|
|
|
|
// System User Interface.
|
|
if (SysId.IsValid(prm.InterfaceIdExcludeSystemUsers))
|
|
{
|
|
// Exclude affiliates that are already a system user for the specified Inteface.
|
|
String aliasSystemUser = "aSysUser";
|
|
DbQuery qrySystemUser = new DbQuery(Database.DbmsType);
|
|
qrySystemUser.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemUser), aliasSystemUser);
|
|
qrySystemUser.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SystemUser_Id, aliasSystemUser));
|
|
qrySystemUser.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SystemUser_AffiliateId, aliasSystemUser) + "=" + colAffiliate_Id);
|
|
filter.Add($"NOT EXISTS ({qrySystemUser.BuildQuery()})");
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Common properties.
|
|
|
|
// Partial Notes.
|
|
if (!StringUtil.IsEmpty(prm.NotesPartial))
|
|
filter.Add($"{colAffiliate_Notes} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
|
|
|
|
// Status.
|
|
String statusCatCondition = GetAffiliateStatusCatFilterCondition(prm.StatusCat);
|
|
if (!StringUtil.IsBlank(statusCatCondition))
|
|
filter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate)}{statusCatCondition}");
|
|
|
|
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
|
return filter;
|
|
}
|
|
|
|
internal static String GetAffiliateStatusCatFilterCondition(SbmAffiliate.StatusCat statusCat)
|
|
{
|
|
if (statusCat == SbmAffiliate.StatusCat.CurrentOnly)
|
|
return $"='{StatusCurrent}'";
|
|
else if (statusCat == SbmAffiliate.StatusCat.OnHoldOnly)
|
|
return $"='{StatusOnHold}'";
|
|
else if (statusCat == SbmAffiliate.StatusCat.NotDeleted)
|
|
return $"!='{StatusDeleted}'";
|
|
else if (statusCat == SbmAffiliate.StatusCat.DeletedOnly)
|
|
return $"='{StatusDeleted}'";
|
|
return "";
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Affiliate sort columns.
|
|
public List<String> GetAffiliateSortColumns(SbmAffiliate.Params prm)
|
|
{
|
|
// Sort sequence:
|
|
List<String> sortColumnNames = new List<String>();
|
|
foreach (var columnDfn in prm.SortColumns)
|
|
{
|
|
// Need to ensure correct alias used for Affiliate columns in case of conflict.
|
|
String sortCol = String.Empty;
|
|
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.Affiliate)
|
|
{
|
|
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasAffiliate);
|
|
}
|
|
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.Affiliate_Type, aliasAffiliate) + " ASC");
|
|
sortColumnNames.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAffiliate) + " ASC");
|
|
}
|
|
return sortColumnNames;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// GetAffiliateCount.
|
|
private long GetAffiliateCount(String filter)
|
|
{
|
|
ClearErrorState();
|
|
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate) + " As " + aliasAffiliate, filter);
|
|
}
|
|
public override long GetAffiliateCount(SbmAffiliate.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
return GetAffiliateCount(GetAffiliateQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
/* ToDo GetAffiliateIds.
|
|
public SysId GetAffiliateIds(SbmAffiliate.Params prmAffiliate)
|
|
{
|
|
ClearErrorState();
|
|
List<SysId> affiliateIds = new List<SysId>();
|
|
if (db != null)
|
|
{
|
|
DbQuery qryAffId = new DbQuery(Database.DbmsType);
|
|
qryAffId.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate));
|
|
String colAffiliate_Id = "AffiliateId";
|
|
qryAffId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Id, true), colAffiliate_Id);
|
|
qryAffId.Filters.AddRange(GetAffiliateQueryFilter(prmAffiliate));
|
|
Database.ErrorState = qryAffId.BuildQuery;
|
|
}
|
|
}*/
|
|
|
|
//-------------------------------------------------------------------
|
|
// Affiliate list.
|
|
public override List<SbmAffiliate> GetAffiliateList(SbmAffiliate.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
List<SbmAffiliate> affiliates = new List<SbmAffiliate>();
|
|
DbQuery qry = new DbQuery(Database.DbmsType);
|
|
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAffiliate);
|
|
Affiliate_Db dbAffiliate = new Affiliate_Db(DbInfo);
|
|
qry.Columns.AddRange(dbAffiliate.ExistingColumnNames);
|
|
qry.Filters.AddRange(GetAffiliateQueryFilter(prm));
|
|
qry.OrderBy.AddRange(GetAffiliateSortColumns(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())
|
|
{
|
|
dbAffiliate = new Affiliate_Db(DbInfo);
|
|
dbAffiliate.PopulateFrom(dbDataReader);
|
|
affiliates.Add(CreateAffiliate(dbAffiliate));
|
|
}
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState(Msg_DatabaseQueryException);
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return affiliates;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Affiliate query execution.
|
|
public override DbResultSet ExecuteAffiliateQuery(List<ColumnDfn> columns, SbmAffiliate.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
|
|
//---------------------------------------------------------------
|
|
// Construct query.
|
|
DbQuery query = new DbQuery(Database.DbmsType);
|
|
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAffiliate);
|
|
|
|
// Affiliate Properties - add columns as defined in query list.
|
|
if (columns.HasId(SbmAffiliate.Column.Id))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Type) || columns.HasId(SbmAffiliate.Column.Type_Code) || columns.HasId(SbmAffiliate.Column.Type_Desc))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Type, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Name))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Abbrev))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Abbrev, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Title))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Title, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Initials))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Initials, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.LastName))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_LastName, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.FirstName))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_FirstName, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Salutation))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Salutation, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Nature))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Nature, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.CompanyNo))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_CompanyNo, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.VatReg))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_VatReg, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Contact))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Contact, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.PhoneMain))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.PhoneAlt))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.PhoneDirect))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneDirect, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.PhoneFax))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.PhoneMobile))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Email))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Email, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Website))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Website, aliasAffiliate));
|
|
// Common Properties
|
|
if (columns.HasId(SbmAffiliate.Column.Notes))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Notes, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.Status) || columns.HasId(SbmAffiliate.Column.Status_Desc) || columns.HasId(SbmAffiliate.Column.Status_Ind))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.CreateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_CreateOn, aliasAffiliate));
|
|
if (columns.HasId(SbmAffiliate.Column.UpdateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UpdateOn, aliasAffiliate));
|
|
|
|
//---------------------------------------------------------------
|
|
// Primary address.
|
|
bool hasColsAddPrim = false;
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Summary);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Line1);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Line2);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Line3);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_City);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Province);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Postcode);
|
|
if (!hasColsAddPrim) hasColsAddPrim = columns.HasId(SbmAffiliate.Column.Address_Country);
|
|
if (hasColsAddPrim)
|
|
{
|
|
// Sub-query to identify primary address with lowest Id for each affiliate.
|
|
DbQuery qryAddPrimMinId = new DbQuery(Database.DbmsType);
|
|
qryAddPrimMinId.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address));
|
|
qryAddPrimMinId.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
|
|
qryAddPrimMinId.Filters.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Flags), SbmAddress.Flag_Primary, true));
|
|
qryAddPrimMinId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType));
|
|
qryAddPrimMinId.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId));
|
|
qryAddPrimMinId.Columns.Add("Min(" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Id) + ")", SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_Id, false));
|
|
qryAddPrimMinId.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType));
|
|
qryAddPrimMinId.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemId));
|
|
|
|
// Join to primary address with lowest Id.
|
|
String aliasAffiliate_AddPrimId = "AddPrimId";
|
|
DbQueryJoin joinAddPrimId = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAddPrimId.Table = new StringPair("(" + qryAddPrimMinId.BuildQuery() + ")", aliasAffiliate_AddPrimId);
|
|
joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasAffiliate_AddPrimId) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
|
|
joinAddPrimId.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasAffiliate_AddPrimId) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate));
|
|
query.Joins.Add(joinAddPrimId);
|
|
|
|
// Join to the primary address with lowest Id.
|
|
DbQueryJoin joinAddPrim = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAddPrim.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasAffiliate_AddPrim);
|
|
joinAddPrim.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAffiliate_AddPrim) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Id, aliasAffiliate_AddPrimId));
|
|
query.Joins.Add(joinAddPrim);
|
|
// Add the Address columns.
|
|
List<SbmDbDfn.ColumnIdx> addprimaryCols = new List<SbmDbDfn.ColumnIdx>()
|
|
{
|
|
SbmDbDfn.ColumnIdx.Address_Id,
|
|
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_Country,
|
|
SbmDbDfn.ColumnIdx.Address_Contact,
|
|
SbmDbDfn.ColumnIdx.Address_Phone,
|
|
SbmDbDfn.ColumnIdx.Address_Fax,
|
|
SbmDbDfn.ColumnIdx.Address_Email,
|
|
};
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in addprimaryCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasAffiliate_AddPrim), prefixAffiliate_AddPrim + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
if (columns.HasId(SbmAffiliate.Column.GroupMembers))
|
|
{
|
|
// Count group members.
|
|
String aliasAffiliate_GroupMembers = "AffGrpMembers";
|
|
DbQuery qryGrpMembers = new DbQuery(Database.DbmsType);
|
|
qryGrpMembers.Tables.Add((SbmDbDfn.TableIdx.Association).ToString(), aliasAffiliate_GroupMembers);
|
|
// Was: qryGrpMembers.Columns.Add("Count(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasGrpMembers) + ")");
|
|
qryGrpMembers.Columns.Add("Count(*)");
|
|
qryGrpMembers.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAffiliate_GroupMembers) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate));
|
|
qryGrpMembers.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffiliate_GroupMembers) + "=" + ((int)Sbm.AssociationType.Member).ToString());
|
|
query.Columns.Add("(" + qryGrpMembers.BuildQuery() + ")", colNameAffiliate_GroupMembers);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Associations.
|
|
|
|
if (columns.HasId(SbmAffiliate.Column.AssociationOwner_Count))
|
|
{
|
|
// Count active associations.
|
|
String aliasAffiliate_Associations_Owner = "AffAssOwner";
|
|
DbQuery qryAssocs = new DbQuery(Database.DbmsType);
|
|
qryAssocs.Tables.Add((SbmDbDfn.TableIdx.Association).ToString(), aliasAffiliate_Associations_Owner);
|
|
qryAssocs.Columns.Add("Count(*)");
|
|
qryAssocs.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasAffiliate_Associations_Owner)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate)}");
|
|
qryAssocs.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffiliate_Associations_Owner)}!={(int)Sbm.AssociationType.Internal}");
|
|
qryAssocs.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasAffiliate_Associations_Owner)}='{StatusCurrent}'");
|
|
query.Columns.Add("(" + qryAssocs.BuildQuery() + ")", colNameAffiliate_AssociationOwnerCount);
|
|
}
|
|
|
|
if (columns.HasId(SbmAffiliate.Column.AssociationTarget_Count))
|
|
{
|
|
// Count active associations.
|
|
String aliasAffiliate_Associations_Target = "AffAssTarget";
|
|
DbQuery qryAssocs = new DbQuery(Database.DbmsType);
|
|
qryAssocs.Tables.Add((SbmDbDfn.TableIdx.Association).ToString(), aliasAffiliate_Associations_Target);
|
|
qryAssocs.Columns.Add("Count(*)");
|
|
qryAssocs.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAffiliate_Associations_Target)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate)}");
|
|
qryAssocs.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffiliate_Associations_Target)}!={(int)Sbm.AssociationType.Internal}");
|
|
qryAssocs.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasAffiliate_Associations_Target)}='{StatusCurrent}'");
|
|
query.Columns.Add("(" + qryAssocs.BuildQuery() + ")", colNameAffiliate_AssociationTargetCount);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Populate filter.
|
|
query.Filters.AddRange(GetAffiliateQueryFilter(prm));
|
|
|
|
if (prm.IdsIncluded.Count != 1)
|
|
{
|
|
// Configure sort sequence.
|
|
foreach (String sortColumn in GetAffiliateSortColumns(prm))
|
|
query.OrderBy.Add(sortColumn);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
//return new DbResultSet_DataTableReader(db, query.BuildQuery());
|
|
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|