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 SaxActivityMgr_Dbas { //******************************************************************* // Activity Mgr - ActivityIndex //******************************************************************* // Utilities. private List GetLogProperties(SaxActivityIndex activityIndex) { return new List() { new StringPair("ItemId",ItemId.ToString(activityIndex.ItemId)), new StringPair("Sport",SysId.ToString(activityIndex.SportId)), new StringPair("Region",SysId.ToString(activityIndex.RegionId)), new StringPair("Effective",DateUtil.Format(activityIndex.EffectiveOn, "d-MMM-yyyy")), }; } //------------------------------------------------------------------- // Create item. public override SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn) { ClearErrorState(); return new SaxActivityIndex_Dbas(CoreDatabase, itemId, sportId, regionId, effectiveOn, 0); } private SaxActivityIndex_Dbas CreateActivityIndex(ActivityIndex_Db dbActivityIndex) { ClearErrorState(); ItemId itemId = new ItemId(dbActivityIndex._ItemType, new SysId(dbActivityIndex._ItemId)); SaxActivityIndex_Dbas activityIndex = new SaxActivityIndex_Dbas(CoreDatabase, itemId, new SysId(dbActivityIndex._SportId), new SysId(dbActivityIndex._RegionId), dbActivityIndex._EffectiveOn, (UInt16)dbActivityIndex._Flags); PopulateFrom(dbActivityIndex, activityIndex); return activityIndex; } //------------------------------------------------------------------- // Get item. public override SaxActivityIndex GetActivityIndex(SaxActivityIndex.Params prm) { ClearErrorState(); return GetActivityIndex(GetActivityIndexQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxActivityIndex GetActivityIndex(String filter) { ClearErrorState(); long count = GetActivityIndexCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxActivityIndex activityIndex = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo); dbActivityIndex.PopulateFrom(dbCommand, aliasActivityIndex, filter); activityIndex = CreateActivityIndex(dbActivityIndex); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn(GetType().Name + ".GetActivityIndex\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return activityIndex; } //------------------------------------------------------------------- // Validate item. public override bool IsValidActivityIndexData(SaxActivityIndex.Data data, SaxActivityIndex.ErrField errField) { ClearErrorState(); if (!base.IsValidActivityIndexData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertActivityIndex"; ClearErrorState(); if (!IsValidActivityIndex(activityIndex)) return false; //if (SysId.IsValid(activityIndex.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo); PopulateTo(dbActivityIndex, activityIndex, dbUpdateInfo); if (ActivityIndex_Db.FieldsNonId.Contains("Id")) { // Generate next Id. // ToDo dbActivityIndex._Id = CoreDatabase.GetNextIdFromTable("ActivityIndex"); } dbActivityIndex.ExecuteInsertCommand(dbCommand); //activityIndex.Id = new SysId(dbActivityIndex._Id); activityIndex.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateActivityIndex"; ClearErrorState(); if (!IsValidActivityIndex(activityIndex)) return false; //if (!SysId.IsValid(activityIndex.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!activityIndex.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo); dbActivityIndex.PopulateFrom(dbCommand, aliasActivityIndex, GetActivityIndexQueryFilter(activityIndex, aliasActivityIndex).Concat(" AND ", "(", ")")); // ToDo SaxUpdateLogItemMonitor_ActivityIndex updateLogMonitor = new SaxUpdateLogItemMonitor_ActivityIndex(SessionContext, CreateActivityIndex(dbActivityIndex), dbUpdateInfo); // Update properties. PopulateTo(dbActivityIndex, activityIndex, dbUpdateInfo); dbActivityIndex.ExecuteUpdateCommand(dbCommand); activityIndex.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(activityIndex); // ToDo updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool ActivityIndexCanBeDeleted(SaxActivityIndex activityIndex) { ClearErrorState(); if (!base.ActivityIndexCanBeDeleted(activityIndex)) return false; return true; } public override bool DeleteActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteActivityIndex"; ClearErrorState(); if (!ActivityIndexCanBeDeleted(activityIndex)) return false; using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo); String filter = GetActivityIndexQueryFilter(activityIndex, aliasActivityIndex).Concat(" AND ", "(", ")"); dbActivityIndex.PopulateFrom(dbCommand, aliasActivityIndex, filter); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex) + " '" + aliasActivityIndex + "' WHERE " + filter + ";"; dbCommand.ExecuteNonQuery(); activityIndex.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(ActivityIndex_Db dbActivityIndex, SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo) { dbActivityIndex._ItemType = activityIndex.ItemId.Type; dbActivityIndex._ItemId = SysId.ToInt(activityIndex.ItemId.Id); dbActivityIndex._SportId = SysId.ToInt(activityIndex.SportId); dbActivityIndex._RegionId = SysId.ToInt(activityIndex.RegionId); dbActivityIndex._EffectiveOn = activityIndex.EffectiveOn; dbActivityIndex._Notes = activityIndex.Notes; dbActivityIndex._Status = SacsSystem.GetStatusCode(activityIndex.Status); dbActivityIndex._Flags = (short)activityIndex.Flags; if (!DateUtil.IsValid(dbActivityIndex._CreateOn)) { dbActivityIndex._CreateOn = DateTime.Now; dbActivityIndex._CreateBy = dbUpdateInfo.UserId.ToInt(); dbActivityIndex._CreateHost = dbUpdateInfo.Host; } dbActivityIndex._UpdateOn = DateTime.Now; dbActivityIndex._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbActivityIndex._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(ActivityIndex_Db dbActivityIndex, SaxActivityIndex activityIndex) { //activityIndex.ItemId = new ItemId(dbActivityIndex._ItemType, new SysId(dbActivityIndex._ItemId); //activityIndex.SportId = new SysId(dbActivityIndex._SportId); //activityIndex.RegionId = new SysId(dbActivityIndex._RegionId); activityIndex.EffectiveOn = dbActivityIndex._EffectiveOn; activityIndex.Notes = dbActivityIndex._Notes; activityIndex.Status = SacsSystem.GetStatusForCode(dbActivityIndex._Status); activityIndex.SetCreateStamp(dbActivityIndex._CreateOn, new SysId(dbActivityIndex._CreateBy), dbActivityIndex._CreateHost); activityIndex.SetUpdateStamp(dbActivityIndex._UpdateOn, new SysId(dbActivityIndex._UpdateBy), dbActivityIndex._UpdateHost); activityIndex.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasActivityIndex = "ActIdx"; private static readonly String aliasActivityIndex_Article = "ActIdx_JrnArt"; private static readonly String prefixActivityIndex_Article = "ActIdx_JrnArt_"; private static readonly String aliasActivityIndex_Opportunity = "ActIdx_OrgOpp"; private static readonly String prefixActivityIndex_Opportunity = "ActIdx_OrgOpp_"; private static readonly String aliasActivityIndex_Region = "ActIdx_Rgn"; private static readonly String prefixActivityIndex_Region = "ActIdx_Rgn_"; private static readonly String aliasActivityIndex_Sport = "ActIdx_Spt"; private static readonly String prefixActivityIndex_Sport = "ActIdx_Spt_"; private void SetActivityIndexColDfn (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.ActivityIndex) alias = aliasActivityIndex; 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 GetActivityIndexColumnDfn(SaxActivityIndex.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxActivityIndex.Column.Pos: SetActivityIndexColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; //----------------------------------------------------------- // Item. case SaxActivityIndex.Column.ItemType: SetActivityIndexColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.ItemType_Code: SetActivityIndexColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, ColumnAlignment.Center, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.ItemType_Desc: SetActivityIndexColDfn(columnDfn, "Item type", 100, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, ColumnAlignment.Center, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.ItemId: SetActivityIndexColDfn(columnDfn, "Item #", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Article. case SaxActivityIndex.Column.Article_Headline: SetActivityIndexColDfn(columnDfn, "Headline", 160, SaxDbDfn_Core.ColumnIdx.JournalistArticle_Headline, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Article, prefixActivityIndex_Article); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.Article_Summary: SetActivityIndexColDfn(columnDfn, "Summary", 240, SaxDbDfn_Core.ColumnIdx.JournalistArticle_Summary, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Article, prefixActivityIndex_Article); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Opportunity. case SaxActivityIndex.Column.Opportunity_Position: SetActivityIndexColDfn(columnDfn, "Position", 160, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Opportunity, prefixActivityIndex_Opportunity); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.Opportunity_Outline: SetActivityIndexColDfn(columnDfn, "Outliner", 240, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Opportunity, prefixActivityIndex_Opportunity); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Sport. case SaxActivityIndex.Column.SportId: SetActivityIndexColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.Sport_Name: SetActivityIndexColDfn(columnDfn, "Sport", 100, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Sport, prefixActivityIndex_Sport); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Region. case SaxActivityIndex.Column.RegionId: SetActivityIndexColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.Region_Name: SetActivityIndexColDfn(columnDfn, "Region", 100, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Region, prefixActivityIndex_Region); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Properties. case SaxActivityIndex.Column.EffectiveOn: SetActivityIndexColDfn(columnDfn, "Effective", 90, SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yyyy"; break; //----------------------------------------------------------- // Derived properties. //----------------------------------------------------------- // Common properties. case SaxActivityIndex.Column.Notes: SetActivityIndexColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Notes); break; case SaxActivityIndex.Column.Flags: SetActivityIndexColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxActivityIndex.Column.Status: SetActivityIndexColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, ColumnAlignment.Center); break; case SaxActivityIndex.Column.Status_Desc: SetActivityIndexColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, ColumnAlignment.Center); break; case SaxActivityIndex.Column.Status_Ind: SetActivityIndexColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaxActivityIndex.Column.CreateOn_Date: SetActivityIndexColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxActivityIndex.Column.UpdateOn_Date: SetActivityIndexColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_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 List GetActivityIndexQueryFilter(SaxActivityIndex activityIndex, String aliasActivityIndex) { // NB Only the Ids need to be queried. Effective date is a property of the Ids. List filter = new List(); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + activityIndex.ItemId.Type); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex) + "=" + SysId.ToInt(activityIndex.ItemId.Id)); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex) + " IN (" + activityIndex.SportId + ")"); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex) + " IN (" + activityIndex.RegionId + ")"); return filter; } public override List GetActivityIndexQueryFilter(SaxActivityIndex.Params prm) { List filter = new List(); String aliasActivityIndex = StringUtil.OnEmpty(prm.Alias_ActivityIndex, SaxActivityMgr_Dbas.aliasActivityIndex); // Item Ids. if (!prm.ItemIdsIncluded.IsEmpty()) { List itemIdFilters = new List(); foreach (ItemId itemId in prm.ItemIdsIncluded) { if (!ItemId.IsValid(itemId)) continue; String itemIdFilter = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + itemId.Type + " AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex) + "=" + SysId.ToInt(itemId.Id); itemIdFilters.Add(itemIdFilter); } if (!itemIdFilters.IsEmpty()) filter.Add(itemIdFilters.Concat(" OR ", "(", ")")); } // Sport Ids. String sportIdsIncluded = prm.SportIdsIncluded.Concat(","); if (!sportIdsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex) + " IN (" + sportIdsIncluded + ")"); // Region Ids. String regionIdsIncluded = prm.RegionIdsIncluded.Concat(","); if (!regionIdsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex) + " IN (" + regionIdsIncluded + ")"); // Effective period. if (DateUtil.IsValid(prm.EffectiveFrom)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex) + ">=" + DbQuery.FormatDateForCondition(prm.EffectiveFrom.Date)); if (DateUtil.IsValid(prm.EffectiveTo)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex) + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.EffectiveTo.Date, 1))); if (filter.Count < 1) filter.Add("1=1"); return filter; } // Item sort columns. public List GetActivityIndexSortColumns(SaxActivityIndex.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for ActivityIndex columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ActivityIndex) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasActivityIndex); } 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.ActivityIndex_ItemType, aliasActivityIndex) + " ASC"); sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetActivityIndexCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex) + " As " + aliasActivityIndex, filter); } public override long GetActivityIndexCount(SaxActivityIndex.Params prm) { ClearErrorState(); return GetActivityIndexCount(GetActivityIndexQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetActivityIndexList(SaxActivityIndex.Params prm) { List userActivitys = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex), aliasActivityIndex); ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo); qry.Columns.AddRange(dbActivityIndex.ExistingColumnNames); qry.Filters.AddRange(GetActivityIndexQueryFilter(prm)); qry.OrderBy.AddRange(GetActivityIndexSortColumns(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()) { dbActivityIndex = new ActivityIndex_Db(CoreDbInfo); dbActivityIndex.PopulateFrom(dbDataReader); userActivitys.Add(CreateActivityIndex(dbActivityIndex)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetActivityIndexList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userActivitys; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteActivityIndexQuery(List columns, SaxActivityIndex.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex), aliasActivityIndex); // Add columns as defined in query list. query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex)); // Common properties. if (columns.HasId(SaxActivityIndex.Column.Notes)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_Notes, aliasActivityIndex)); if (columns.HasId(SaxActivityIndex.Column.Flags)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_Flags, aliasActivityIndex)); if (columns.HasId(SaxActivityIndex.Column.Status) || columns.HasId(SaxActivityIndex.Column.Status_Desc) || columns.HasId(SaxActivityIndex.Column.Status_Ind)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, aliasActivityIndex)); if (columns.HasId(SaxActivityIndex.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_CreateOn, aliasActivityIndex)); if (columns.HasId(SaxActivityIndex.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_UpdateOn, aliasActivityIndex)); //--------------------------------------------------------------------- // Article. if (columns.HasId(SaxActivityIndex.Column.Article_Headline) || columns.HasId(SaxActivityIndex.Column.Article_Summary)) { DbQueryJoin joinArticle = new DbQueryJoin(DbJoinType.LeftOuter); joinArticle.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.JournalistArticle), aliasActivityIndex_Article); joinArticle.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + ((int)Sax.DataItemType.JournalistArticle).ToString()); joinArticle.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.JournalistArticle_Id, aliasActivityIndex_Article) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex)); query.Joins.Add(joinArticle); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.JournalistArticle_Headline); cols.Add(SaxDbDfn_Core.ColumnIdx.JournalistArticle_Summary); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Article), prefixActivityIndex_Article + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Opportunity. if (columns.HasId(SaxActivityIndex.Column.Opportunity_Position) || columns.HasId(SaxActivityIndex.Column.Opportunity_Outline)) { DbQueryJoin joinOpportunity = new DbQueryJoin(DbJoinType.LeftOuter); joinOpportunity.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasActivityIndex_Opportunity); joinOpportunity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + ((int)Sax.DataItemType.OrganisationOpportunity).ToString()); joinOpportunity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, aliasActivityIndex_Opportunity) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex)); query.Joins.Add(joinOpportunity); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position); cols.Add(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Opportunity), prefixActivityIndex_Opportunity + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Sport. if (columns.HasId(SaxActivityIndex.Column.Sport_Name)) { DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter); joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasActivityIndex_Sport); joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasActivityIndex_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex)); 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, aliasActivityIndex_Sport), prefixActivityIndex_Sport + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Region. if (columns.HasId(SaxActivityIndex.Column.Region_Name)) { DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter); joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasActivityIndex_Region); joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasActivityIndex_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex)); 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, aliasActivityIndex_Region), prefixActivityIndex_Region + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetActivityIndexQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetActivityIndexSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }