using Sarand.Net.Standard.Dbas.Data; 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 Saxonite.Base.App; using Saxonite.Net.Standard.Dbas.Bus; using Saxonite.Net.Standard.Dbas.Internal; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Data.Common; using System.Text; using Saxonite.Net.Standard.Base.App; using System.Linq; using Sarand.Net.Standard.Base.Utils; using Saxonite.Net.Standard.Dbas.Internal.Core; namespace Saxonite.Net.Standard.Dbas.Mgr { //======================================================================= partial class SaxAccountMgr_Dbas { //******************************************************************* // Account Mgr - User Organisation //******************************************************************* // Utilities. private List GetLogProperties(SaxUserOrganisation userOrganisation) { return new List() { new StringPair("Id",SysId.ToString(userOrganisation.Id)), new StringPair("UserAccountId",SysId.ToString(userOrganisation.UserAccountId)), new StringPair("OrganisationId",SysId.ToString(userOrganisation.OrganisationId)), new StringPair("Roles",userOrganisation.GetOrganisationRoles().ToList().Select(item => item.ToString()).Concat(", ")), new StringPair("Status",userOrganisation.StatusCode) }; } //------------------------------------------------------------------- // Create item. public override SaxUserOrganisation CreateUserOrganisation(SysId userAccountId, SysId organisationId) { ClearErrorState(); return new SaxUserOrganisation_Dbas(CoreDatabase, null, userAccountId, organisationId, 0); } private SaxUserOrganisation_Dbas CreateUserOrganisation(UserOrganisation_Db dbUserOrganisation) { ClearErrorState(); SaxUserOrganisation_Dbas userOrganisation = new SaxUserOrganisation_Dbas(CoreDatabase, new SysId(dbUserOrganisation._Id), new SysId(dbUserOrganisation._UserAccountId), new SysId(dbUserOrganisation._OrganisationId), (ushort)dbUserOrganisation._Flags); PopulateFrom(dbUserOrganisation, userOrganisation); return userOrganisation; } //------------------------------------------------------------------- // Get item. public override SaxUserOrganisation GetUserOrganisation(SaxUserOrganisation.Params prm) { ClearErrorState(); return GetUserOrganisation(GetUserOrganisationQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxUserOrganisation GetUserOrganisation(String filter) { ClearErrorState(); long count = GetUserOrganisationCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxUserOrganisation userOrganisation = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo); dbUserOrganisation.PopulateFrom(dbCommand, aliasUserOrganisation, filter); userOrganisation = CreateUserOrganisation(dbUserOrganisation); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return userOrganisation; } //------------------------------------------------------------------- // Validate item. public override bool IsValidUserOrganisationData(SaxUserOrganisation.Data data, SaxUserOrganisation.ErrField errField) { ClearErrorState(); if (!base.IsValidUserOrganisationData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertUserOrganisation"; ClearErrorState(); if (!IsValidUserOrganisation(userOrganisation)) return false; if (SysId.IsValid(userOrganisation.Id)) return SetErrorState(ErrorMessage.ValidItemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo); PopulateTo(dbUserOrganisation, userOrganisation, dbUpdateInfo); if (UserOrganisation_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbUserOrganisation._Id = CoreDatabase.GetNextIdFromTable("UserOrganisation"); } dbUserOrganisation.ExecuteInsertCommand(dbCommand); userOrganisation.Id = new SysId(dbUserOrganisation._Id); userOrganisation.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateUserOrganisation"; ClearErrorState(); if (!IsValidUserOrganisation(userOrganisation)) return false; if (!SysId.IsValid(userOrganisation.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!userOrganisation.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo); dbUserOrganisation.PopulateFrom(dbCommand, aliasUserOrganisation, "Id=" + SysId.ToString(userOrganisation.Id)); // ToDo SaxUpdateLogItemMonitor_UserOrganisation updateLogMonitor = new SaxUpdateLogItemMonitor_UserOrganisation(SessionContext, CreateUserOrganisation(dbUserOrganisation), dbUpdateInfo); // Update item. PopulateTo(dbUserOrganisation, userOrganisation, dbUpdateInfo); dbUserOrganisation.ExecuteUpdateCommand(dbCommand); userOrganisation.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(userOrganisation); // ToDo updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool UserOrganisationCanBeDeleted(SaxUserOrganisation userOrganisation) { ClearErrorState(); if (!base.UserOrganisationCanBeDeleted(userOrganisation)) return false; return true; } public override bool DeleteUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteUserOrganisation"; ClearErrorState(); if (!UserOrganisationCanBeDeleted(userOrganisation)) return false; // User Organisations are logically deleted by changing the status. userOrganisation.Status = SaStatus.Deleted; return UpdateUserOrganisation(userOrganisation, dbUpdateInfo); /* * Physical deletion. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo); dbUserOrganisation.PopulateFrom(dbCommand, aliasUserOrganisation, "Id=" + userOrganisation.Id.ToString()); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation) + " WHERE Id=" + SysId.ToString(userOrganisation.Id) + ";"; dbCommand.ExecuteNonQuery(); userOrganisation.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); */ } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(UserOrganisation_Db dbUserOrganisation, SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo) { dbUserOrganisation._Id = SysId.ToInt(userOrganisation.Id); dbUserOrganisation._UserAccountId = SysId.ToInt(userOrganisation.UserAccountId); dbUserOrganisation._OrganisationId = SysId.ToInt(userOrganisation.OrganisationId); dbUserOrganisation._OrganisationRoleCodes = userOrganisation.GetOrganisationRoleCodesData(); dbUserOrganisation._OrganisationRoleCount = (byte)userOrganisation.OrganisationRoleCount; dbUserOrganisation._AdminComment = userOrganisation.AdminComment; // Common. dbUserOrganisation._Notes = userOrganisation.Notes; dbUserOrganisation._Status = SacsSystem.GetStatusCode(userOrganisation.Status); dbUserOrganisation._Flags = (short)userOrganisation.Flags; if (!SysId.IsValid(userOrganisation.Id)) { dbUserOrganisation._CreateOn = DateTime.Now; dbUserOrganisation._CreateBy = dbUpdateInfo.UserId.ToInt(); dbUserOrganisation._CreateHost = dbUpdateInfo.Host; } dbUserOrganisation._UpdateOn = DateTime.Now; dbUserOrganisation._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbUserOrganisation._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(UserOrganisation_Db dbUserOrganisation, SaxUserOrganisation userOrganisation) { //userOrganisation.Id = new SysId(dbUserOrganisation._Id); //userOrganisation.UserAccountId = new SysId(dbUserOrganisation._UserAccountId); //userOrganisation.OrganisationId = new SysId(dbUserOrganisation._OrganisationId); userOrganisation.OrganisationRoles = SaxUserOrganisation.GetOrganisationRolesFromCodes(dbUserOrganisation._OrganisationRoleCodes); userOrganisation.AdminComment = dbUserOrganisation._AdminComment; // Common. userOrganisation.Notes = dbUserOrganisation._Notes; userOrganisation.Status = SacsSystem.GetStatusForCode(dbUserOrganisation._Status); userOrganisation.SetCreateStamp(dbUserOrganisation._CreateOn, new SysId(dbUserOrganisation._CreateBy), dbUserOrganisation._CreateHost); userOrganisation.SetUpdateStamp(dbUserOrganisation._UpdateOn, new SysId(dbUserOrganisation._UpdateBy), dbUserOrganisation._UpdateHost); userOrganisation.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasUserOrganisation = "UsrOrg"; private static readonly String aliasUserOrganisation_UserAccount = "UsrOrg_Usr"; private static readonly String prefixUserOrganisation_UserAccount = "UsrOrg_Usr_"; private static readonly String aliasUserOrganisation_Organisation = "UsrOrg_Org"; private static readonly String prefixUserOrganisation_Organisation = "UsrOrg_Org_"; private static readonly String aliasUserOrganisation_Organisation_Region = "UsrOrg_Org_Rgn"; private static readonly String prefixUserOrganisation_Organisation_Region = "UsrOrg_Org_Rgn_"; private static readonly String aliasUserOrganisation_Organisation_Sport = "UsrOrg_Org_Spt"; private static readonly String prefixUserOrganisation_Organisation_Sport = "UsrOrg_Org_Spt_"; private static readonly String dataName_UserOrganisation_Organisation_Member_Count = "UsrOrg_Org_Mbr_Count"; private static readonly String dataName_UserOrganisation_Organisation_Opportunity_Count = "UsrOrg_Org_Opp_Count"; private static readonly String dataName_UserOrganisation_Organisation_LogoImage_Count = "UsrOrg_Org_Logo_Count"; private void SetUserOrganisationColDfn (ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol, ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, String alias = "", String prefix = "") { if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserOrganisation) alias = aliasUserOrganisation; col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align); if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown) col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol); } public override ColumnDfn GetUserOrganisationColumnDfn(SaxUserOrganisation.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxUserOrganisation.Column.Pos: SetUserOrganisationColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaxUserOrganisation.Column.Id: SetUserOrganisationColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.UserAccountId: SetUserOrganisationColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.OrganisationId: SetUserOrganisationColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // Organisation roles. case SaxUserOrganisation.Column.OrganisationRoleCount: SetUserOrganisationColDfn(columnDfn, "Role count", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.OrganisationRoleCodes: SetUserOrganisationColDfn(columnDfn, "Roles", 100, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, ColumnAlignment.Left); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.OrganisationRoleDescs: SetUserOrganisationColDfn(columnDfn, "Roles", 100, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, ColumnAlignment.Left); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // User. case SaxUserOrganisation.Column.User_EmailAddress: SetUserOrganisationColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.User_DisplayName: SetUserOrganisationColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.User_Title: SetUserOrganisationColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.User_FirstName: SetUserOrganisationColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.User_LastName: SetUserOrganisationColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.User_Status: SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.User_Status_Desc: SetUserOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // Organisation. case SaxUserOrganisation.Column.Organisation_Name: SetUserOrganisationColDfn(columnDfn, "Organisation", 160, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_Category: SetUserOrganisationColDfn(columnDfn, "Category", 60, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_Type: SetUserOrganisationColDfn(columnDfn, "Type", 60, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_RegionId: SetUserOrganisationColDfn(columnDfn, "Organisation region Id", 80, SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_Region_Name: SetUserOrganisationColDfn(columnDfn, "Organisation region", 160, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_Organisation_Region, prefixUserOrganisation_Organisation_Region); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_SportId: SetUserOrganisationColDfn(columnDfn, "Organisation sport Id", 80, SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_Sport_Name: SetUserOrganisationColDfn(columnDfn, "Organisation sport", 160, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_Organisation_Sport, prefixUserOrganisation_Organisation_Sport); columnDfn.ReadOnly = true; break; // Derived properties. case SaxUserOrganisation.Column.Organisation_Member_Count: SetUserOrganisationColDfn(columnDfn, "Members", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = dataName_UserOrganisation_Organisation_Member_Count; columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_Opportunity_Count: SetUserOrganisationColDfn(columnDfn, "Opportunities", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = dataName_UserOrganisation_Organisation_Opportunity_Count; columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.Organisation_LogoImage_Count: SetOrganisationColDfn(columnDfn, "Logos", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = dataName_UserOrganisation_Organisation_LogoImage_Count; break; //----------------------------------------------------------- // Properties. case SaxUserOrganisation.Column.AdminComment: SetUserOrganisationColDfn(columnDfn, "Comment", 240, SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment); break; //----------------------------------------------------------- // Derived properties. //----------------------------------------------------------- // Common properties. case SaxUserOrganisation.Column.Notes: SetUserOrganisationColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes); break; case SaxUserOrganisation.Column.Flags: SetUserOrganisationColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxUserOrganisation.Column.Status: SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, ColumnAlignment.Center); break; case SaxUserOrganisation.Column.Status_Desc: SetUserOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, ColumnAlignment.Center); break; case SaxUserOrganisation.Column.Status_Ind: SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaxUserOrganisation.Column.CreateOn_Date: SetUserOrganisationColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxUserOrganisation.Column.UpdateOn_Date: SetUserOrganisationColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_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; } //------------------------------------------------------------------- // Item query filter. public override List GetUserOrganisationQueryFilter(SaxUserOrganisation.Params prm) { List filter = new List(); String aliasUserOrganisation = StringUtil.OnEmpty(prm.Alias_UserOrganisation, SaxAccountMgr_Dbas.aliasUserOrganisation); // Item Ids. String colUserOrganisation_Id = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation); if (prm.IdsIncluded.HasValidIds()) filter.Add($"{colUserOrganisation_Id} IN ({prm.IdsIncluded.Concat(",")})"); if (prm.IdsExcluded.HasValidIds()) filter.Add($"{colUserOrganisation_Id} NOT IN ({prm.IdsExcluded.Concat(",")})"); // User accounts. if (prm.UserAccountIdsIncluded.HasValidIds()) filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation)} IN ({prm.UserAccountIdsIncluded.Concat(",")})"); // User Account filters. if (StringUtil.IsEmpty(prm.Alias_UserAccount)) { // User Account table isn't linked - use sub-query. DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount); qry.Columns.Add("1"); // Construct required filters. if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any) qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserOrganisation_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat)); if (!StringUtil.IsEmpty(prm.UserFilter)) qry.Filters.AddRange(SaxAccountMgr_Dbas.GetUserAccountFilters(prm.UserFilter, aliasUserOrganisation_UserAccount)); if (!StringUtil.IsEmpty(prm.UserFilterPartial)) qry.Filters.AddRange(SaxAccountMgr_Dbas.GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserOrganisation_UserAccount)); if (!qry.Filters.IsEmpty()) { // At least one User Account filter has been applied. Include Id filter and construct main query filter. qry.Filters.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount)}={SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation)}"); filter.Add($"Exists ({qry.BuildQuery()})"); } } else { // User Account table is linked - filter directly. if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, prm.Alias_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat)); if (!StringUtil.IsEmpty(prm.UserFilter)) filter.AddRange(SaxAccountMgr_Dbas.GetUserAccountFilters(prm.UserFilter, prm.Alias_UserAccount)); if (!StringUtil.IsEmpty(prm.UserFilterPartial)) filter.AddRange(SaxAccountMgr_Dbas.GetPartialUserAccountFilters(prm.UserFilterPartial, prm.Alias_UserAccount)); } // Organisations. String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(","); if (!organisationIdsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation) + " IN (" + organisationIdsIncluded + ")"); // Scheduled events. if (prm.OrganisationHasScheduledEvents) { // Sub-query on Organisation Events. String aliasOrganisationEvent = "UsrOrg_OrgEvt"; DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationEvent), aliasOrganisationEvent); qry.Columns.Add("1"); qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); qry.Filters.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent)}>=DateAdd(day,-7,GetDate())"); qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, aliasOrganisationEvent) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat)); filter.Add($"Exists ({qry.BuildQuery()})"); } // Organisation status. if (prm.OrganisationStatusCat != SaxOrganisation.StatusCat.Any) { if (StringUtil.IsEmpty(prm.Alias_Organisation)) { // User Account table isn't linked. DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserOrganisation_Organisation); qry.Columns.Add("1"); qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserOrganisation_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasUserOrganisation_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat)); filter.Add($"Exists ({qry.BuildQuery()})"); } else // User Account table is linked - filter directly. filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, prm.Alias_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat)); } // Organisation roles. if (prm.OrganisationMembersOnly) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasUserOrganisation) + ">0"); if (!prm.OrganisationRoles.IsEmpty()) { foreach (Sax.OrganisationRole organisationRole in prm.OrganisationRoles) { String organisationRoleCode = OrganisationRoleCodes.GetCodeForType(organisationRole).TrimAll(); if (!StringUtil.IsEmpty(organisationRoleCode)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation) + " LIKE '%" + DbQuery.FormatForLike(organisationRoleCode) + "%'"); } } if (!prm.OrganisationRolesAny.IsEmpty()) { List roleFilter = new List(); foreach (Sax.OrganisationRole organisationRole in prm.OrganisationRolesAny) { String organisationRoleCode = OrganisationRoleCodes.GetCodeForType(organisationRole).TrimAll(); if (!StringUtil.IsEmpty(organisationRoleCode)) roleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation) + " LIKE '%" + DbQuery.FormatForLike(organisationRoleCode) + "%'"); } if (!roleFilter.IsEmpty()) filter.Add(roleFilter.Concat(" OR ")); } // Notes. if (!StringUtil.IsEmpty(prm.NotesPartial)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes, aliasUserOrganisation) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'"); // Status. if (prm.StatusCat != SaxUserOrganisation.StatusCat.Any) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasUserOrganisation) + GetUserOrganisationStatusCatFilterCondition(prm.StatusCat)); if (filter.Count < 1) filter.Add("1=1"); return filter; } internal static String GetUserOrganisationStatusCatFilterCondition(SaxUserOrganisation.StatusCat statusCat) { if (statusCat == SaxUserOrganisation.StatusCat.ActiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"; if (statusCat == SaxUserOrganisation.StatusCat.NotDeleted) return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; if (statusCat == SaxUserOrganisation.StatusCat.DeletedOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; return ""; } //------------------------------------------------------------------- // Item sort columns. public List GetUserOrganisationSortColumns(SaxUserOrganisation.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UserOrganisation columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserOrganisation) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserOrganisation); } 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(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetUserOrganisationCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation) + " As " + aliasUserOrganisation, filter); } public override long GetUserOrganisationCount(SaxUserOrganisation.Params prm) { ClearErrorState(); return GetUserOrganisationCount(GetUserOrganisationQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetUserOrganisationList(SaxUserOrganisation.Params prm) { ClearErrorState(); List userOrganisations = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasUserOrganisation); UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo); qry.Columns.AddRange(dbUserOrganisation.ExistingColumnNames); qry.Filters.AddRange(GetUserOrganisationQueryFilter(prm)); qry.OrderBy.AddRange(GetUserOrganisationSortColumns(prm)); // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo); dbUserOrganisation.PopulateFrom(dbDataReader); userOrganisations.Add(CreateUserOrganisation(dbUserOrganisation)); } } } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return userOrganisations; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteUserOrganisationQuery(List columns, SaxUserOrganisation.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasUserOrganisation); prm.Alias_UserOrganisation = aliasUserOrganisation; // Add columns as defined in query list. if (columns.HasId(SaxUserOrganisation.Column.Id)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation)); bool hasUserAccountCols = (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName) || columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_LastName) || columns.HasId(SaxUserOrganisation.Column.User_Status) || columns.HasId(SaxUserOrganisation.Column.User_Status_Desc)); if (columns.HasId(SaxUserOrganisation.Column.UserAccountId) || hasUserAccountCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation)); bool hasOrganisationCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Name) || columns.HasId(SaxUserOrganisation.Column.Organisation_RegionId) || columns.HasId(SaxUserOrganisation.Column.Organisation_SportId)); bool hasOrganisationRegionCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Region_Name)); bool hasOrganisationSportCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Sport_Name)); if (columns.HasId(SaxUserOrganisation.Column.OrganisationId) || hasOrganisationCols || hasOrganisationRegionCols || hasOrganisationSportCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.OrganisationRoleCodes) || columns.HasId(SaxUserOrganisation.Column.OrganisationRoleDescs)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.OrganisationRoleCount)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.AdminComment)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment, aliasUserOrganisation)); // Common properties. if (columns.HasId(SaxUserOrganisation.Column.Notes)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.Flags)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Flags, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.Status) || columns.HasId(SaxUserOrganisation.Column.Status_Desc) || columns.HasId(SaxUserOrganisation.Column.Status_Ind)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_CreateOn, aliasUserOrganisation)); if (columns.HasId(SaxUserOrganisation.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UpdateOn, aliasUserOrganisation)); //--------------------------------------------------------------------- // User Account. if (hasUserAccountCols) { // Inform the parameters that the User Account table is linked. prm.Alias_UserAccount = aliasUserOrganisation_UserAccount; // User Account join. DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter); joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount); joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation)); query.Joins.Add(joinUserAccount); List cols = new List(); if (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress)) cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress); if (columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName)) cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title); if (columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName)) cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName); if (columns.HasId(SaxUserOrganisation.Column.User_LastName) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName)) cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName); if (columns.HasId(SaxUserOrganisation.Column.User_Status) || columns.HasId(SaxUserOrganisation.Column.User_Status_Desc)) cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Status); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_UserAccount), prefixUserOrganisation_UserAccount + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Organisation. if (hasOrganisationCols || hasOrganisationRegionCols || hasOrganisationSportCols) { // Inform the parameters that the Organisation table is linked. prm.Alias_Organisation = aliasUserOrganisation_Organisation; // Organisation join. DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter); joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserOrganisation_Organisation); joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserOrganisation_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); query.Joins.Add(joinOrganisation); List OrganisationCols = new List(); OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name); OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory); OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType); OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary); OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary); foreach (var col in OrganisationCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_Organisation), prefixUserOrganisation_Organisation + SaxDbDfn_Core.GetColumnName(col, false)); if (hasOrganisationRegionCols) { DbQueryJoin joinOrganisationRegion = new DbQueryJoin(DbJoinType.LeftOuter); joinOrganisationRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserOrganisation_Organisation_Region); joinOrganisationRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserOrganisation_Organisation_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasUserOrganisation_Organisation)); query.Joins.Add(joinOrganisationRegion); List regionCols = new List(); regionCols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name); foreach (var col in regionCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_Organisation_Region), prefixUserOrganisation_Organisation_Region + SaxDbDfn_Core.GetColumnName(col, false)); } if (hasOrganisationSportCols) { DbQueryJoin joinOrganisationSport = new DbQueryJoin(DbJoinType.LeftOuter); joinOrganisationSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasUserOrganisation_Organisation_Sport); joinOrganisationSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasUserOrganisation_Organisation_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasUserOrganisation_Organisation)); query.Joins.Add(joinOrganisationSport); List regionCols = new List(); regionCols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name); foreach (var col in regionCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_Organisation_Sport), prefixUserOrganisation_Organisation_Sport + SaxDbDfn_Core.GetColumnName(col, false)); } } //--------------------------------------------------------------------- // Organisation Member count. if (columns.HasId(SaxUserOrganisation.Column.Organisation_Member_Count)) { // Count 'Member' entries on User Organisation for the Organisation. String aliasOrgMbr = "OrgMbr"; DbQuery qryOrgMbr = new DbQuery(CoreDatabase.DbmsType); qryOrgMbr.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasOrgMbr); qryOrgMbr.Columns.Add("Count(*)"); qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasOrgMbr) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasOrgMbr) + ">0"); qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasOrgMbr) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); // Join to User Account. String aliasUserAccount = "aUsrOrg_UsrAcc"; DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.Inner); joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount); joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasOrgMbr)); joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); qryOrgMbr.Joins.Add(joinUserAccount); // Construct sub-query. query.Columns.Add("(" + qryOrgMbr.BuildQuery() + ")", dataName_UserOrganisation_Organisation_Member_Count); } //--------------------------------------------------------------------- // Organisation Opportunity count. if (columns.HasId(SaxUserOrganisation.Column.Organisation_Opportunity_Count)) { // Count Organisation Opportunities. String aliasOrgOpp = "OrgOpp"; DbQuery qryOrgOpp = new DbQuery(CoreDatabase.DbmsType); qryOrgOpp.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasOrgOpp); qryOrgOpp.Columns.Add("Count(*)"); qryOrgOpp.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrgOpp) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); // ToDo Should be limited by expiry etc. query.Columns.Add("(" + qryOrgOpp.BuildQuery() + ")", dataName_UserOrganisation_Organisation_Opportunity_Count); } //--------------------------------------------------------------------- // Organisation Logo Image count. if (columns.HasId(SaxUserOrganisation.Column.Organisation_LogoImage_Count)) { String aliasLogoCount = "Img_Org_Logo"; DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType); queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount); queryLogoCount.Columns.Add("Count(*)"); queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation); queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation)); queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo); queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); // Construct sub-query. query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", dataName_UserOrganisation_Organisation_LogoImage_Count); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetUserOrganisationQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetUserOrganisationSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }