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.App; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Data.Common; using System.Text; using Sarand.Net.Standard.Base.Utils; using System.Linq; namespace Saxonite.Net.Standard.Dbas.Mgr { //======================================================================= partial class SaxAccountMgr_Dbas { //******************************************************************* // Account Mgr - Organisation //******************************************************************* // Utilities. private List GetLogProperties(SaxOrganisation organisation) { return new List() { new StringPair("Id", SysId.ToString(organisation.Id)), new StringPair("Name", organisation.Name), new StringPair("Status", organisation.StatusCode) }; } //------------------------------------------------------------------- // Create item. public override SaxOrganisation CreateOrganisation() { ClearErrorState(); return new SaxOrganisation_Dbas(CoreDatabase, null, 0); } private SaxOrganisation_Dbas CreateOrganisation(Organisation_Db dbOrganisation) { ClearErrorState(); SaxOrganisation_Dbas organisation = new SaxOrganisation_Dbas(CoreDatabase, new SysId(dbOrganisation._Id), (UInt16)dbOrganisation._Flags); PopulateFrom(dbOrganisation, organisation); return organisation; } //------------------------------------------------------------------- // Get item. public override SaxOrganisation GetOrganisation(SaxOrganisation.Params prm) { ClearErrorState(); return GetOrganisation(GetOrganisationQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxOrganisation GetOrganisation(String filter) { ClearErrorState(); long count = GetOrganisationCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxOrganisation organisation = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo); dbOrganisation.PopulateFrom(dbCommand, aliasOrganisation, filter); organisation = CreateOrganisation(dbOrganisation); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn(GetType().Name + ".GetOrganisation\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return organisation; } //------------------------------------------------------------------- // Validate item. public override bool IsValidOrganisationData(SaxOrganisation.Data data, SaxOrganisation.ErrField errField) { ClearErrorState(); if (!base.IsValidOrganisationData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertOrganisation"; ClearErrorState(); if (!IsValidOrganisation(organisation)) return false; if (SysId.IsValid(organisation.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo); PopulateTo(dbOrganisation, organisation, dbUpdateInfo); if (Organisation_Db.FieldsNonId.Contains("Id")) { // Generate next Id. // ToDo dbOrganisation._Id = CoreDatabase.GetNextIdFromTable("Organisation"); } dbOrganisation.ExecuteInsertCommand(dbCommand); organisation.Id = new SysId(dbOrganisation._Id); organisation.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateOrganisation"; ClearErrorState(); if (!IsValidOrganisation(organisation)) return false; if (!SysId.IsValid(organisation.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!organisation.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo); dbOrganisation.PopulateFrom(dbCommand, aliasOrganisation, "Id=" + SysId.ToString(organisation.Id)); // ToDo SaxUpdateLogItemMonitor_Organisation updateLogMonitor = new SaxUpdateLogItemMonitor_Organisation(SessionContext, CreateOrganisation(dbOrganisation), dbUpdateInfo); // Update item. PopulateTo(dbOrganisation, organisation, dbUpdateInfo); dbOrganisation.ExecuteUpdateCommand(dbCommand); organisation.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(organisation); // ToDo updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool OrganisationCanBeDeleted(SaxOrganisation organisation) { ClearErrorState(); if (!base.OrganisationCanBeDeleted(organisation)) return false; return true; } public override bool DeleteOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteOrganisation"; ClearErrorState(); if (!OrganisationCanBeDeleted(organisation)) return false; // Organisations are logically deleted by changing the status. organisation.Status = SaStatus.Deleted; return UpdateOrganisation(organisation, dbUpdateInfo); /* * Physical deletion. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo); dbOrganisation.PopulateFrom(dbCommand, aliasOrganisation, "Id=" + organisation.Id.ToString()); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation) + " WHERE Id=" + SysId.ToString(organisation.Id) + ";"; dbCommand.ExecuteNonQuery(); organisation.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); */ } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(Organisation_Db dbOrganisation, SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo) { dbOrganisation._Id = SysId.ToInt(organisation.Id); dbOrganisation._Name = organisation.Name; dbOrganisation._OrganisationType = OrganisationTypeCodes.GetCodeForType(organisation.OrganisationType); dbOrganisation._OrganisationCategory = OrganisationCategoryCodes.GetCodeForType(organisation.OrganisationCategory); dbOrganisation._SportIdPrimary = SysId.ToInt(organisation.SportIdPrimary); dbOrganisation._RegionIdPrimary = SysId.ToInt(organisation.RegionIdPrimary); dbOrganisation._About = StringUtil.EmptyOnNull(organisation.About); dbOrganisation._Facilities = StringUtil.EmptyOnNull(organisation.Facilities); dbOrganisation._ContactData = StringUtil.EmptyOnNull(organisation.ContactData); dbOrganisation._PhoneMain = StringUtil.EmptyOnNull(organisation.PhoneMain); dbOrganisation._PhoneAlt = StringUtil.EmptyOnNull(organisation.PhoneAlt); dbOrganisation._Notes = StringUtil.EmptyOnNull(organisation.Notes); dbOrganisation._Status = SacsSystem.GetStatusCode(organisation.Status); dbOrganisation._Flags = (short)organisation.Flags; if (!SysId.IsValid(organisation.Id)) { dbOrganisation._CreateOn = DateTime.Now; dbOrganisation._CreateBy = dbUpdateInfo.UserId.ToInt(); dbOrganisation._CreateHost = dbUpdateInfo.Host; } dbOrganisation._UpdateOn = DateTime.Now; dbOrganisation._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbOrganisation._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(Organisation_Db dbOrganisation, SaxOrganisation organisation) { //organisation.Id = new SysId(dbOrganisation._Id); //organisation.UserAccountId = new SysId(dbOrganisation._UserAccountId); organisation.Name = dbOrganisation._Name; organisation.OrganisationType = (Sax.OrganisationType)OrganisationTypeCodes.GetTypeForCode(dbOrganisation._OrganisationType); organisation.OrganisationCategory = (Sax.OrganisationCategory)OrganisationCategoryCodes.GetTypeForCode(dbOrganisation._OrganisationCategory); organisation.SportIdPrimary = new SysId(dbOrganisation._SportIdPrimary); organisation.RegionIdPrimary = new SysId(dbOrganisation._RegionIdPrimary); organisation.About = dbOrganisation._About; organisation.Facilities = dbOrganisation._Facilities; organisation.ContactData = dbOrganisation._ContactData; organisation.PhoneMain = dbOrganisation._PhoneMain; organisation.PhoneAlt = dbOrganisation._PhoneAlt; organisation.Notes = dbOrganisation._Notes; organisation.Status = SacsSystem.GetStatusForCode(dbOrganisation._Status); organisation.SetCreateStamp(dbOrganisation._CreateOn, new SysId(dbOrganisation._CreateBy), dbOrganisation._CreateHost); organisation.SetUpdateStamp(dbOrganisation._UpdateOn, new SysId(dbOrganisation._UpdateBy), dbOrganisation._UpdateHost); organisation.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasOrganisation = "Org"; private static readonly String aliasOrganisation_Sport = "Org_Spt"; private static readonly String prefixOrganisation_Sport = "Org_Spt_"; private static readonly String aliasOrganisation_Region = "Org_Rgn"; private static readonly String prefixOrganisation_Region = "Org_Rgn_"; private static readonly String colOrganisation_User_Count = "Org_Usr_Count"; private static readonly String colOrganisation_Member_Count = "Org_Mbr_Count"; private void SetOrganisationColDfn (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.Organisation) alias = aliasOrganisation; 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 GetOrganisationColumnDfn(SaxOrganisation.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxOrganisation.Column.Pos: SetOrganisationColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaxOrganisation.Column.Id: SetOrganisationColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.Organisation_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxOrganisation.Column.Name: SetOrganisationColDfn(columnDfn, "Name", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name); break; case SaxOrganisation.Column.OrganisationType: SetOrganisationColDfn(columnDfn, "Type", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, ColumnAlignment.Center, DataValue.DataType.String); break; case SaxOrganisation.Column.OrganisationType_Desc: SetOrganisationColDfn(columnDfn, "Type", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, ColumnAlignment.Center, DataValue.DataType.String); break; case SaxOrganisation.Column.OrganisationCategory: SetOrganisationColDfn(columnDfn, "Category", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, ColumnAlignment.Center, DataValue.DataType.String); break; case SaxOrganisation.Column.OrganisationCategory_Desc: SetOrganisationColDfn(columnDfn, "Category", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, ColumnAlignment.Center, DataValue.DataType.String); break; case SaxOrganisation.Column.PhoneMain: SetOrganisationColDfn(columnDfn, "Phone", 100, SaxDbDfn_Core.ColumnIdx.Organisation_PhoneMain); break; case SaxOrganisation.Column.PhoneAlt: SetOrganisationColDfn(columnDfn, "Alt. phone", 100, SaxDbDfn_Core.ColumnIdx.Organisation_PhoneAlt); break; //----------------------------------------------------------- // Sport. case SaxOrganisation.Column.SportId: SetOrganisationColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.Sport_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasOrganisation_Sport, prefixOrganisation_Sport); columnDfn.ReadOnly = true; break; case SaxOrganisation.Column.Sport_Name: SetOrganisationColDfn(columnDfn, "Sport", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisation_Sport, prefixOrganisation_Sport); break; //----------------------------------------------------------- // Region. case SaxOrganisation.Column.RegionId: SetOrganisationColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.Region_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasOrganisation_Region, prefixOrganisation_Region); columnDfn.ReadOnly = true; break; case SaxOrganisation.Column.Region_Name: SetOrganisationColDfn(columnDfn, "Region", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisation_Region, prefixOrganisation_Region); break; //----------------------------------------------------------- // Derived properties. case SaxOrganisation.Column.User_Count: SetOrganisationColDfn(columnDfn, "Users", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colOrganisation_User_Count; break; case SaxOrganisation.Column.Member_Count: SetOrganisationColDfn(columnDfn, "Members", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colOrganisation_Member_Count; break; //----------------------------------------------------------- // Common properties. case SaxOrganisation.Column.Notes: SetOrganisationColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.Organisation_Notes); break; case SaxOrganisation.Column.Flags: SetOrganisationColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.Organisation_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxOrganisation.Column.Status: SetOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Organisation_Status, ColumnAlignment.Center); break; case SaxOrganisation.Column.Status_Desc: SetOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.Organisation_Status, ColumnAlignment.Center); break; case SaxOrganisation.Column.Status_Ind: SetOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Organisation_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaxOrganisation.Column.CreateOn_Date: SetOrganisationColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.Organisation_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxOrganisation.Column.UpdateOn_Date: SetOrganisationColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.Organisation_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 GetOrganisationQueryFilter(SaxOrganisation.Params prm) { List filter = new List(); // Item Ids. String idsIncluded = prm.IdsIncluded.Concat(","); if (!idsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation) + " IN (" + idsIncluded + ")"); String idsExcluded = prm.IdsExcluded.Concat(","); if (!idsExcluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation) + " NOT IN (" + idsExcluded + ")"); // Name. if (!StringUtil.IsEmpty(prm.NameFull)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation) + "='" + DbQuery.FormatForCondition(prm.NameFull) + "'"); if (!StringUtil.IsEmpty(prm.NamePartial)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation) + " Like '%" + DbQuery.FormatForLike(prm.NamePartial, true) + "%'"); // Organisation Type. if (prm.OrganisationType > 0) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, aliasOrganisation) + "='" + OrganisationTypeCodes.GetCodeForType(prm.OrganisationType) + "'"); // Organisation Category. if (prm.OrganisationCategory > 0) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, aliasOrganisation) + "='" + OrganisationCategoryCodes.GetCodeForType(prm.OrganisationCategory) + "'"); if (!prm.OrganisationCategoriesExcluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, aliasOrganisation) + " Not In (" + prm.OrganisationCategoriesExcluded.Select(cat => "'" + OrganisationCategoryCodes.GetCodeForType(cat) + "'").Concat(",") + ")"); // Organisation filter. if (!StringUtil.IsEmpty(prm.OrganisationFilter)) { // Split filter into words. List searchFilter = new List(); List filterWords = prm.OrganisationFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList(); filterWords.RemoveDuplicatesCI(); filterWords.RemoveBlanks(); foreach (String filterWord in filterWords) { List organisationFilter = new List(); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'"); searchFilter.Add(organisationFilter.Concat(" OR ", "(", ")")); } filter.Add(searchFilter.Concat(" AND ", "(", ")")); } // Sport Ids. String sportIdsIncluded = prm.SportIdsIncluded.Concat(","); if (!sportIdsIncluded.IsEmpty()) { // Sport can be matched directly or as the parent of the sport. List sportFilter = new List(); String aliasSport = prm.Alias_Sport_Primary; if (StringUtil.IsEmpty(aliasSport)) { // Sport table is not linked in query. aliasSport = "aSpt"; DbQuery sportQuery = new DbQuery(CoreDatabase.DbmsType); sportQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasSport); sportQuery.Columns.Add("1"); sportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation)); sportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + " IN (" + sportIdsIncluded + ")"); sportFilter.Add("Exists(" + sportQuery.BuildQuery() + ")"); } else { // Sport table is linked in the main query. sportFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + " IN (" + sportIdsIncluded + ")"); } sportFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation) + " IN (" + sportIdsIncluded + ")"); filter.Add(sportFilter.Concat(" OR ", "(", ")")); } // Region Ids. String regionIdsIncluded = prm.RegionIdsIncluded.Concat(","); if (!regionIdsIncluded.IsEmpty()) { // Region can be matched directly or as the parent of the region. List regionFilter = new List(); String aliasRegion = prm.Alias_Region_Primary; if (StringUtil.IsEmpty(aliasRegion)) { // Region table is not linked in query. aliasRegion = "aRgn"; DbQuery regionQuery = new DbQuery(CoreDatabase.DbmsType); regionQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasRegion); regionQuery.Columns.Add("1"); regionQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation)); regionQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + " IN (" + regionIdsIncluded + ")"); regionFilter.Add("Exists(" + regionQuery.BuildQuery() + ")"); } else { // Region table is linked in the main query. regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + " IN (" + regionIdsIncluded + ")"); } regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation) + " IN (" + regionIdsIncluded + ")"); filter.Add(regionFilter.Concat(" OR ", "(", ")")); } // Notes. if (!StringUtil.IsEmpty(prm.NotesPartial)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Notes, aliasOrganisation) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'"); // Status. if (prm.StatusCat != SaxOrganisation.StatusCat.Any) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasOrganisation) + GetOrganisationStatusCatFilterCondition(prm.StatusCat)); if (filter.Count < 1) filter.Add("1=1"); return filter; } internal static String GetOrganisationStatusCatFilterCondition(SaxOrganisation.StatusCat statusCat) { if (statusCat == SaxOrganisation.StatusCat.AwaitingOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "'"; if (statusCat == SaxOrganisation.StatusCat.ActiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"; if (statusCat == SaxOrganisation.StatusCat.InactiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'"; if (statusCat == SaxOrganisation.StatusCat.NotDeleted) return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; if (statusCat == SaxOrganisation.StatusCat.DeletedOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; return ""; } // Item sort columns. public List GetOrganisationSortColumns(SaxOrganisation.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for Organisation columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.Organisation) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasOrganisation); } 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.Organisation_Id, aliasOrganisation) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetOrganisationCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation) + " As " + aliasOrganisation, filter); } public override long GetOrganisationCount(SaxOrganisation.Params prm) { ClearErrorState(); return GetOrganisationCount(GetOrganisationQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetOrganisationList(SaxOrganisation.Params prm) { List userAccounts = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasOrganisation); Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo); qry.Columns.AddRange(dbOrganisation.ExistingColumnNames); qry.Filters.AddRange(GetOrganisationQueryFilter(prm)); qry.OrderBy.AddRange(GetOrganisationSortColumns(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()) { dbOrganisation = new Organisation_Db(CoreDbInfo); dbOrganisation.PopulateFrom(dbDataReader); userAccounts.Add(CreateOrganisation(dbOrganisation)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetOrganisationList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userAccounts; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteOrganisationQuery(List columns, SaxOrganisation.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasOrganisation); // Add columns as defined in query list. if (columns.HasId(SaxOrganisation.Column.Id)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.Name)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.PhoneMain)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_PhoneMain, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.PhoneAlt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_PhoneAlt, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.OrganisationType) || columns.HasId(SaxOrganisation.Column.OrganisationType_Desc)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.OrganisationCategory) || columns.HasId(SaxOrganisation.Column.OrganisationCategory_Desc)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, aliasOrganisation)); // Sport. bool hasSportCols = columns.HasId(SaxOrganisation.Column.Sport_Name); if (columns.HasId(SaxOrganisation.Column.SportId) || hasSportCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation)); // Region. bool hasRegionCols = columns.HasId(SaxOrganisation.Column.Region_Name); if (columns.HasId(SaxOrganisation.Column.RegionId) || hasRegionCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation)); // Common properties. if (columns.HasId(SaxOrganisation.Column.Notes)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Notes, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.Flags)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Flags, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.Status) || columns.HasId(SaxOrganisation.Column.Status_Desc) || columns.HasId(SaxOrganisation.Column.Status_Ind)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_CreateOn, aliasOrganisation)); if (columns.HasId(SaxOrganisation.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_UpdateOn, aliasOrganisation)); //--------------------------------------------------------------------- // Sport. if (hasSportCols || prm.SportIdsIncluded.HasValidIds()) { prm.Alias_Sport_Primary = aliasOrganisation_Sport; DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter); joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasOrganisation_Sport); joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasOrganisation_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation)); query.Joins.Add(joinSport); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisation_Sport), prefixOrganisation_Sport + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Region. if (hasRegionCols || prm.RegionIdsIncluded.HasValidIds()) { prm.Alias_Region_Primary = aliasOrganisation_Region; DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter); joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasOrganisation_Region); joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasOrganisation_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation)); query.Joins.Add(joinRegion); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisation_Region), prefixOrganisation_Region + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // User count. if (columns.HasId(SaxOrganisation.Column.User_Count)) { String aliasUserCount = "aUsrOrg_Count"; DbQuery queryUserCount = new DbQuery(CoreDatabase.DbmsType); queryUserCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasUserCount); queryUserCount.Columns.Add("Count(*)"); queryUserCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation)); queryUserCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasUserCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); query.Columns.Add("(" + queryUserCount.BuildQuery() + ")", colOrganisation_User_Count); } //--------------------------------------------------------------------- // Member count. if (columns.HasId(SaxOrganisation.Column.Member_Count)) { String aliasMemberCount = "aUsrOrg_Count"; DbQuery queryMemberCount = new DbQuery(CoreDatabase.DbmsType); queryMemberCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasMemberCount); queryMemberCount.Columns.Add("Count(*)"); queryMemberCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasMemberCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation)); queryMemberCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasMemberCount) + ">0"); queryMemberCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasMemberCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); query.Columns.Add("(" + queryMemberCount.BuildQuery() + ")", colOrganisation_Member_Count); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetOrganisationQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetOrganisationSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }