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.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; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { //======================================================================= partial class SbmAccountMgr_Dbas { //******************************************************************* // A f f i l i a t e //******************************************************************* // Utilities. private List GetLogProperties(SbmAffiliate affiliate) { return new List() { new StringPair("Id",SysId.ToString(affiliate.Id)), new StringPair("Name",affiliate.Name), new StringPair("Status",affiliate.StatusCode) }; } //------------------------------------------------------------------- // Create Affiliate. public override SbmAffiliate CreateAffiliate(Sbm.AffiliateType affiliateType) { return new SbmAffiliate_Dbas(Internals, null, affiliateType, 0); } private SbmAffiliate_Dbas CreateAffiliate(Affiliate_Db dbAffiliate) { ClearErrorState(); SbmAffiliate_Dbas affiliate = new SbmAffiliate_Dbas(Internals, new SysId(dbAffiliate._Id), (Sbm.AffiliateType)dbAffiliate._Type, (ushort)dbAffiliate._Flags); PopulateFrom(dbAffiliate, affiliate); return affiliate; } //------------------------------------------------------------------- // Get Affiliate. 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("Multiple Contacts found"); return null; } SbmAffiliate affiliate = null; // Query data. using (var dbConnection = db.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("Database query exception"); SaLogger.Warn(GetType().Name + ".GetAffiliate\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return affiliate; } //------------------------------------------------------------------- public override String GetAffiliateName(SysId affiliateId) { ClearErrorState(); if (!SysId.IsValid(affiliateId)) return ""; // Filter to target specified contact. SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params(); prmAffiliate.IncludedIds.Add(affiliateId); prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any; if (GetAffiliateCount(prmAffiliate) != 1) return ""; // Columns to query. ColumnDfn colName = GetAffiliateColumnDfn(SbmAffiliate.Column.Name); List columnsToQuery = new List() { 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.IncludedIds.Add(associationIdOwner); prmAssociation.StatusCat = SbmAssociation.StatusCat.Any; if (GetAssociationCount(prmAssociation) != 1) return ""; // Columns to query. ColumnDfn colAssocOwnerName = GetAssociationColumnDfn(SbmAssociation.Column.Owner_Name); List columnsToQuery = new List() { 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.IncludedIds.Add(associationIdTarget); prmAssociation.StatusCat = SbmAssociation.StatusCat.Any; if (GetAssociationCount(prmAssociation) != 1) return ""; // Columns to query. ColumnDfn colAssocTargetName = GetAssociationColumnDfn(SbmAssociation.Column.Target_Name); List columnsToQuery = new List() { 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) { String fn = GetType().Name + ".InsertAffiliate"; ClearErrorState(); if (!IsValidAffiliate(affiliate)) return false; if (SysId.IsValid(affiliate.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = db.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(db.GetNextId("Affiliate", dbUpdateInfo)); } dbAffiliate.ExecuteInsertCommand(dbCommand); affiliate.Id = new SysId(dbAffiliate._Id); affiliate.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update Affiliate. public override bool UpdateAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateAffiliate"; ClearErrorState(); if (!IsValidAffiliate(affiliate)) return false; if (!SysId.IsValid(affiliate.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!affiliate.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = db.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(fn + " Updated. " + GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")); // Record updates. updateLogMonitor.RecordUpdatedValues(affiliate); updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // 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) { String fn = GetType().Name + ".DeleteAffiliate"; ClearErrorState(); if (!AffiliateCanBeDeleted(affiliate)) return false; using (var dbConnection = db.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(fn + " Deleted. " + GetLogProperties(affiliate).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // 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(); 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; if (affiliate.AffiliateType == Sbm.AffiliateType.Individual) dbAffiliate._Name = affiliate.GetDisplayName(); 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); 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; affiliate.BirthMonth = dbAffiliate._BirthMonth; affiliate.BirthYear = dbAffiliate._BirthYear; affiliate.MaritalStatus = dbAffiliate._MaritalStatus; affiliate.Spouse = dbAffiliate._Spouse; affiliate.Children = dbAffiliate._Children; affiliate.Hometown = dbAffiliate._Hometown; affiliate.UserId = new SysId(dbAffiliate._UserId); // Common properties. affiliate.Notes = dbAffiliate._Notes; affiliate.Status = SacsSystem.GetStatusForCode(dbAffiliate._Status); affiliate.SetCreateStamp(dbAffiliate._CreateOn, new SysId(dbAffiliate._CreateBy), dbAffiliate._CreateHost); affiliate.SetUpdateStamp(dbAffiliate._UpdateOn, new SysId(dbAffiliate._UpdateBy), dbAffiliate._UpdateHost); affiliate.AcceptChanges(); } //------------------------------------------------------------------- // Affiliate column definitions. private static readonly String aliasAffiliate = "aAffil"; private static readonly String aliasAffiliate_AddPrim = "AffAddPrim"; private static readonly String prefixAffiliate_AddPrim = "AffAddPrim_"; private static readonly String colNameAffiliate_GroupMembers = "GroupMembers"; 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)SbmDbDfn.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; //----------------------------------------------------------------- // 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 GetAffiliateQueryFilter(SbmAffiliate.Params prm) { List filter = new List(); // Affiliate Id. String colAffiliate_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate); String includedIds = prm.IncludedIds.Concat(","); if (!includedIds.IsEmpty()) filter.Add(colAffiliate_Id + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.Concat(","); if (!excludedIds.IsEmpty()) filter.Add(colAffiliate_Id + " NOT IN (" + excludedIds + ")"); // Type. String colAffiliate_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Type, aliasAffiliate); // Affiliate type - Individual. if (prm.AffiliateType == Sbm.AffiliateType.AnyOrganisation) filter.Add(colAffiliate_Type + "<>" + ((int)Sbm.AffiliateType.Individual).ToString()); // Affiliate type - ContactGroup. else if (prm.AffiliateType == Sbm.AffiliateType.AnyContact) filter.Add(colAffiliate_Type + "<>" + ((int)Sbm.AffiliateType.ContactGroup).ToString()); // Affiliate type. else if (prm.AffiliateType != Sbm.AffiliateType.Any && prm.AffiliateType != Sbm.AffiliateType.Unknown) filter.Add(colAffiliate_Type + "=" + ((int)prm.AffiliateType).ToString()); // Parent Id? String colAffiliate_AffIdParent = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_AffIdParent, aliasAffiliate); if (SysId.IsValid(prm.AffiliateIdParent)) 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 searchFilter = new List(); foreach (String rawSearchValue in prm.Search.Split(new char[] { ' ', ',', ';' })) { String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue)); if (StringUtil.IsEmpty(searchValue)) continue; List searchValueFilter = new List(); 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 ", "(", ")")); } 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) + "%'"); // 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(db.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 filterPhone = new List(); 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(db.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 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, }; List filterAddress = new List(); 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(db.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 filterApplication = new List(); 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(db.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. String colAffiliate_UserId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UserId, aliasAffiliate); 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(db.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.EmailPartial)) filter.Add(colAffiliate_Notes + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'"); // Status. if (prm.StatusCat == SbmAffiliate.StatusCat.CurrentOnly) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate) + "='" + StatusCurrent + "'"); else if (prm.StatusCat == SbmAffiliate.StatusCat.OnHoldOnly) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate) + "='" + SacsSystem.GetStatusCode(SaStatus.OnHold) + "'"); else if (prm.StatusCat == SbmAffiliate.StatusCat.NotDeleted) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate) + "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"); else if (prm.StatusCat == SbmAffiliate.StatusCat.DeletedOnly) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate) + "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); return filter; } //------------------------------------------------------------------- // Affiliate sort columns. public List GetAffiliateSortColumns(SbmAffiliate.Params prm) { // Sort sequence: List sortColumnNames = new List(); 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"); } return sortColumnNames; } //------------------------------------------------------------------- // GetAffiliateCount. private long GetAffiliateCount(String filter) { ClearErrorState(); return db.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 affiliateIds = new List(); if (db != null) { DbQuery qryAffId = new DbQuery(db.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)); db.ErrorState = qryAffId.BuildQuery; } }*/ //------------------------------------------------------------------- // Affiliate list. public override List GetAffiliateList(SbmAffiliate.Params prm) { List prmAffiliates = new List(); DbQuery qry = new DbQuery(db.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 = db.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); prmAffiliates.Add(CreateAffiliate(dbAffiliate)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetAffiliateList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return prmAffiliates; } //------------------------------------------------------------------- // Affiliate query execution. public override DbResultSet ExecuteAffiliateQuery(List columns, SbmAffiliate.Params prm) { ClearErrorState(); //--------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(db.DbmsType); query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAffiliate); // Affiliate Properties - add columns as defined in query list. if (columns.HasId((int)SbmAffiliate.Column.Id)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Type) || columns.HasId((int)SbmAffiliate.Column.Type_Code) || columns.HasId((int)SbmAffiliate.Column.Type_Desc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Type, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Name)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Abbrev)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Abbrev, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Title)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Title, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Initials)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Initials, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.LastName)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_LastName, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.FirstName)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_FirstName, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Salutation)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Salutation, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Nature)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Nature, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.CompanyNo)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_CompanyNo, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.VatReg)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_VatReg, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Contact)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Contact, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.PhoneMain)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.PhoneAlt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.PhoneDirect)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneDirect, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.PhoneFax)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.PhoneMobile)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Email)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Email, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Website)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Website, aliasAffiliate)); // Common Properties if (columns.HasId((int)SbmAffiliate.Column.Notes)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Notes, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.Status) || columns.HasId((int)SbmAffiliate.Column.Status_Desc) || columns.HasId((int)SbmAffiliate.Column.Status_Ind)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Status, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.CreateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_CreateOn, aliasAffiliate)); if (columns.HasId((int)SbmAffiliate.Column.UpdateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UpdateOn, aliasAffiliate)); //--------------------------------------------------------------- // Primary address. bool hasColsAddPrim = false; if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Summary); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Line1); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Line2); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Line3); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_City); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Province); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Postcode); if (!hasColsAddPrim) hasColsAddPrim = columns.HasId((int)SbmAffiliate.Column.Address_Country); if (hasColsAddPrim) { // Sub-query to identify primary address with lowest Id for each affiliate. DbQuery qryAddPrimMinId = new DbQuery(db.DbmsType); qryAddPrimMinId.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address)); qryAddPrimMinId.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Address_ItemType) + "=" + ((int)Sbm.ItemType.Affiliate).ToString()); 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 addprimaryCols = new List() { 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)); } //--------------------------------------------------------------- bool hasColsGrpMembers = false; if (!hasColsGrpMembers) hasColsGrpMembers = columns.HasId((int)SbmAffiliate.Column.GroupMembers); if (hasColsGrpMembers) { // Count group members. String aliasAffiliate_GroupMembers = "AffGrpMembers"; DbQuery qryGrpMembers = new DbQuery(db.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); } //--------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetAffiliateQueryFilter(prm)); if (prm.IncludedIds.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(db, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }