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; using Saxonite.Net.Standard.Dbas.Internal.Core; namespace Saxonite.Net.Standard.Dbas.Mgr { //======================================================================= partial class SaxActivityMgr_Dbas { //******************************************************************* // Activity Mgr - UserActivity //******************************************************************* // Utilities. private List GetLogProperties(SaxUserActivity userActivity) { return new List() { new StringPair("UserAccount",SysId.ToString(userActivity.UserAccountId)), new StringPair("ItemId",ItemId.ToString(userActivity.ItemId)), new StringPair("Status",SacsSystem.GetStatusDesc(userActivity.Status)), }; } //------------------------------------------------------------------- // Create item. public override SaxUserActivity CreateUserActivity(SysId userAccountId, ItemId itemId) { ClearErrorState(); return new SaxUserActivity_Dbas(CoreDatabase, null, userAccountId, itemId, 0); } private SaxUserActivity_Dbas CreateUserActivity(UserActivity_Db dbUserActivity) { ClearErrorState(); ItemId itemId = new ItemId(dbUserActivity._ItemType, new SysId(dbUserActivity._ItemId)); SaxUserActivity_Dbas userActivity = new SaxUserActivity_Dbas(CoreDatabase, new SysId(dbUserActivity._Id), new SysId(dbUserActivity._UserAccountId), itemId, (UInt16)dbUserActivity._Flags); PopulateFrom(dbUserActivity, userActivity); return userActivity; } //------------------------------------------------------------------- // Get item. public override SaxUserActivity GetUserActivity(SaxUserActivity.Params prm) { ClearErrorState(); return GetUserActivity(GetUserActivityQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxUserActivity GetUserActivity(String filter) { ClearErrorState(); long count = GetUserActivityCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxUserActivity userActivity = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo); dbUserActivity.PopulateFrom(dbCommand, aliasUserActivity, filter); userActivity = CreateUserActivity(dbUserActivity); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn(GetType().Name + ".GetUserActivity\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userActivity; } //------------------------------------------------------------------- // Validate item. public override bool IsValidUserActivityData(SaxUserActivity.Data data, SaxUserActivity.ErrField errField) { ClearErrorState(); if (!base.IsValidUserActivityData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertUserActivity"; ClearErrorState(); if (!IsValidUserActivity(userActivity)) return false; if (SysId.IsValid(userActivity.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo); PopulateTo(dbUserActivity, userActivity, dbUpdateInfo); if (UserActivity_Db.FieldsNonId.Contains("Id")) { // Generate next Id. // ToDo dbUserActivity._Id = CoreDatabase.GetNextIdFromTable("UserActivity"); } dbUserActivity.ExecuteInsertCommand(dbCommand); userActivity.Id = new SysId(dbUserActivity._Id); userActivity.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")); UpdateActivityFeedback(userActivity, null, dbUpdateInfo); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateUserActivity"; ClearErrorState(); if (!IsValidUserActivity(userActivity)) return false; if (!SysId.IsValid(userActivity.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!userActivity.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo); dbUserActivity.PopulateFrom(dbCommand, aliasUserActivity, "Id=" + SysId.ToString(userActivity.Id)); // Snapshot item. SaxUserActivity userActivity_Snapshot = CreateUserActivity(dbUserActivity); // ToDo SaxUpdateLogItemMonitor_UserActivity updateLogMonitor = new SaxUpdateLogItemMonitor_UserActivity(SessionContext, CreateUserActivity(dbUserActivity), dbUpdateInfo); // Update item. PopulateTo(dbUserActivity, userActivity, dbUpdateInfo); dbUserActivity.ExecuteUpdateCommand(dbCommand); userActivity.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(userActivity); // ToDo updateLogMonitor.LogUpdates(); // Update activity feedback. UpdateActivityFeedback(userActivity, userActivity_Snapshot, dbUpdateInfo); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } private bool UpdateActivityFeedback (SaxUserActivity userActivity, SaxUserActivity userActivity_Previous, DbUpdateInfo dbUpdateInfo) { // Calculate changes in feedback for this user activity compared to the previous instance. // User activity status - deleted are ignored. bool deletedPreviously = userActivity_Previous?.IsStatusDeleted ?? true; bool deletedCurrently = userActivity.IsStatusDeleted; // Activity viewing. bool viewedPreviously = userActivity_Previous?.ViewedAtFirst.IsValid() ?? false && !deletedPreviously; bool viewedCurrently = userActivity.ViewedAtFirst.IsValid() && !deletedCurrently; int viewCountIncrement = viewedCurrently == viewedPreviously ? 0 : viewedCurrently ? 1 : -1; // Activity feaction. int feedbackPreviously = Math.Max(0, (!deletedPreviously && userActivity_Previous != null) ? (int)userActivity_Previous.Reaction : 0); int feedbackCurrently = Math.Max(0, !deletedCurrently ? (int)userActivity.Reaction : 0); bool reactedPreviously = (userActivity_Previous?.ReactedAtFirst.IsValid() ?? false) && (feedbackPreviously > 0) && !deletedPreviously; bool reactedCurrently = (userActivity.ReactedAtFirst.IsValid() && feedbackCurrently > 0 && !deletedCurrently); int feedbackCountIncrement = reactedCurrently == reactedPreviously ? 0 : reactedCurrently ? 1 : -1; int feedbackTotalIncrement = feedbackCurrently - feedbackPreviously; // Update the Activity feedback. return ActivityMgr.UpdateActivityFeedback(userActivity.ItemId, viewCountIncrement, feedbackCountIncrement, feedbackTotalIncrement, dbUpdateInfo); } //------------------------------------------------------------------- // Delete item. public override bool UserActivityCanBeDeleted(SaxUserActivity userActivity) { ClearErrorState(); if (!base.UserActivityCanBeDeleted(userActivity)) return false; return true; } public override bool DeleteUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteUserActivity"; ClearErrorState(); if (!UserActivityCanBeDeleted(userActivity)) return false; // User Activities are logically deleted by changing the status. userActivity.Status = SaStatus.Deleted; return UpdateUserActivity(userActivity, dbUpdateInfo); /* * Physical deletion. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo); dbUserActivity.PopulateFrom(dbCommand, aliasUserActivity, "Id=" + SysId.ToLong(userActivity.Id)); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE " + aliasUserActivity + " FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity) + " As " + aliasUserActivity + " WHERE Id=" + SysId.ToLong(userActivity.Id) + "; "; dbCommand.ExecuteNonQuery(); userActivity.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); */ } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(UserActivity_Db dbUserActivity, SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo) { dbUserActivity._Id = SysId.ToInt(userActivity.Id); dbUserActivity._UserAccountId = SysId.ToInt(userActivity.UserAccountId); dbUserActivity._ItemType = userActivity.ItemId.Type; dbUserActivity._ItemId = SysId.ToInt(userActivity.ItemId.Id); dbUserActivity._CurrentlyListed = userActivity.CurrentlyListed; dbUserActivity._ListedAtFirst = userActivity.ListedAtFirst; dbUserActivity._ListedAtLast = userActivity.ListedAtLast; dbUserActivity._ViewedAtFirst = userActivity.ViewedAtFirst; dbUserActivity._ViewedAtLast = userActivity.ViewedAtLast; dbUserActivity._Reaction = (short)userActivity.Reaction; dbUserActivity._ReactedAtFirst = userActivity.ReactedAtFirst; dbUserActivity._ReactedAtLast = userActivity.ReactedAtLast; dbUserActivity._UserActivityData = userActivity.UserActivityData; dbUserActivity._Notes = userActivity.Notes; dbUserActivity._Status = SacsSystem.GetStatusCode(userActivity.Status); dbUserActivity._Flags = (short)userActivity.Flags; if (!DateUtil.IsValid(dbUserActivity._CreateOn)) { dbUserActivity._CreateOn = DateTime.Now; dbUserActivity._CreateBy = dbUpdateInfo.UserId.ToInt(); dbUserActivity._CreateHost = dbUpdateInfo.Host; } dbUserActivity._UpdateOn = DateTime.Now; dbUserActivity._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbUserActivity._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(UserActivity_Db dbUserActivity, SaxUserActivity userActivity) { //userActivity.Id = new SysId(dbUserActivity._Id); //userActivity.UserAccountId = new SysId(dbUserActivity._UserAccountId); //userActivity.ItemId = new ItemId(dbUserActivity._ItemType, new SysId(dbUserActivity._ItemId); userActivity.CurrentlyListed = dbUserActivity._CurrentlyListed; userActivity.ListedAtFirst = dbUserActivity._ListedAtFirst; userActivity.ListedAtLast = dbUserActivity._ListedAtLast; userActivity.ViewedAtFirst = dbUserActivity._ViewedAtFirst; userActivity.ViewedAtLast = dbUserActivity._ViewedAtLast; userActivity.Reaction = (Sax.ActivityReaction)dbUserActivity._Reaction; userActivity.ReactedAtFirst = dbUserActivity._ReactedAtFirst; userActivity.ReactedAtLast = dbUserActivity._ReactedAtLast; userActivity.UserActivityData = dbUserActivity._UserActivityData; userActivity.Notes = dbUserActivity._Notes; userActivity.Status = SacsSystem.GetStatusForCode(dbUserActivity._Status); userActivity.SetCreateStamp(dbUserActivity._CreateOn, new SysId(dbUserActivity._CreateBy), dbUserActivity._CreateHost); userActivity.SetUpdateStamp(dbUserActivity._UpdateOn, new SysId(dbUserActivity._UpdateBy), dbUserActivity._UpdateHost); userActivity.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasUserActivity = "UsrAct"; private static readonly String aliasUserActivity_UserAccount = "UsrAct_UsrAct"; private static readonly String prefixUserActivity_UserAccount = "UsrAct_UsrAct_"; //private static readonly String aliasUserActivity_Article = "UsrAct_JrnArt"; //private static readonly String prefixUserActivity_Article = "UsrAct_JrnArt_"; //private static readonly String aliasUserActivity_Opportunity = "UsrAct_OrgOpp"; //private static readonly String prefixUserActivity_Opportunity = "UsrAct_OrgOpp_"; private void SetUserActivityColDfn (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.UserActivity) alias = aliasUserActivity; 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 GetUserActivityColumnDfn(SaxUserActivity.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxUserActivity.Column.Pos: SetUserActivityColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaxUserActivity.Column.Id: SetUserActivityColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // User. case SaxUserActivity.Column.UserAccountId: SetUserActivityColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.User_EmailAddress: SetUserActivityColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.User_DisplayName: SetUserActivityColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.User_Title: SetUserActivityColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.User_FirstName: SetUserActivityColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.User_LastName: SetUserActivityColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // Item. case SaxUserActivity.Column.ItemType: SetUserActivityColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.ItemType_Code: SetUserActivityColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, ColumnAlignment.Center, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.ItemType_Desc: SetUserActivityColDfn(columnDfn, "Item type", 100, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, ColumnAlignment.Center, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.ItemId: SetUserActivityColDfn(columnDfn, "Item #", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Properties. case SaxUserActivity.Column.FirstListedAt: SetUserActivityColDfn(columnDfn, "First listed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime); break; case SaxUserActivity.Column.LastListedAt: SetUserActivityColDfn(columnDfn, "Last listed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime); break; case SaxUserActivity.Column.FirstViewedAt: SetUserActivityColDfn(columnDfn, "First viewed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime); break; case SaxUserActivity.Column.LastViewedAt: SetUserActivityColDfn(columnDfn, "Last viewed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime); break; case SaxUserActivity.Column.Reaction: SetUserActivityColDfn(columnDfn, "Reaction", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxUserActivity.Column.FirstReactedAt: SetUserActivityColDfn(columnDfn, "First reacted", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime); break; case SaxUserActivity.Column.LastReactedAt: SetUserActivityColDfn(columnDfn, "Last reacted", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime); break; //----------------------------------------------------------- // Derived properties. //----------------------------------------------------------- // Common properties. case SaxUserActivity.Column.Notes: SetUserActivityColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserActivity_Notes); break; case SaxUserActivity.Column.Flags: SetUserActivityColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserActivity_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxUserActivity.Column.Status: SetUserActivityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Status, ColumnAlignment.Center); break; case SaxUserActivity.Column.Status_Desc: SetUserActivityColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_Status, ColumnAlignment.Center); break; case SaxUserActivity.Column.Status_Ind: SetUserActivityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaxUserActivity.Column.CreateOn_Date: SetUserActivityColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxUserActivity.Column.UpdateOn_Date: SetUserActivityColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_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 GetUserActivityQueryFilter(SaxUserActivity.Params prm) { List filter = new List(); String aliasUserActivity = StringUtil.OnEmpty(prm.Alias_UserActivity, SaxActivityMgr_Dbas.aliasUserActivity); // Ids. String idsIncluded = prm.IdsIncluded.Concat(","); if (!idsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserActivity) + " IN (" + idsIncluded + ")"); String idsxcluded = prm.IdsExcluded.Concat(","); if (!idsxcluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserActivity) + " NOT IN (" + idsxcluded + ")"); // User accounts. String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(","); if (!userAccountIdsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserActivity) + " IN (" + userAccountIdsIncluded + ")"); // 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.UserActivity_ItemType, aliasUserActivity) + "=" + itemId.Type + " AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity) + "=" + SysId.ToInt(itemId.Id); itemIdFilters.Add(itemIdFilter); } if (!itemIdFilters.IsEmpty()) filter.Add(itemIdFilters.Concat(" OR ", "(", ")")); } if (filter.Count < 1) filter.Add("1=1"); return filter; } // Item sort columns. public List GetUserActivitySortColumns(SaxUserActivity.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UserActivity columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserActivity) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserActivity); } 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.UserActivity_UserAccountId, aliasUserActivity) + " ASC"); sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasUserActivity) + " ASC"); sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetUserActivityCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity) + " As " + aliasUserActivity, filter); } public override long GetUserActivityCount(SaxUserActivity.Params prm) { ClearErrorState(); return GetUserActivityCount(GetUserActivityQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetUserActivityList(SaxUserActivity.Params prm) { List userActivitys = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity), aliasUserActivity); UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo); qry.Columns.AddRange(dbUserActivity.ExistingColumnNames); qry.Filters.AddRange(GetUserActivityQueryFilter(prm)); qry.OrderBy.AddRange(GetUserActivitySortColumns(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()) { dbUserActivity = new UserActivity_Db(CoreDbInfo); dbUserActivity.PopulateFrom(dbDataReader); userActivitys.Add(CreateUserActivity(dbUserActivity)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetUserActivityList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userActivitys; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteUserActivityQuery(List columns, SaxUserActivity.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity), aliasUserActivity); // Add columns as defined in query list. if (columns.HasId(SaxUserActivity.Column.Id)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Id, aliasUserActivity)); bool hasUserAccountCols = (columns.HasId(SaxUserActivity.Column.User_EmailAddress) || columns.HasId(SaxUserActivity.Column.User_DisplayName) || columns.HasId(SaxUserActivity.Column.User_Title) || columns.HasId(SaxUserActivity.Column.User_FirstName) || columns.HasId(SaxUserActivity.Column.User_LastName)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasUserActivity)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.FirstListedAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtFirst, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.LastListedAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.FirstViewedAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtFirst, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.LastViewedAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.Reaction)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.FirstReactedAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtFirst, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.LastReactedAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, aliasUserActivity)); // Common properties. if (columns.HasId(SaxUserActivity.Column.Notes)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Notes, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.Flags)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Flags, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.Status) || columns.HasId(SaxUserActivity.Column.Status_Desc) || columns.HasId(SaxUserActivity.Column.Status_Ind)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Status, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_CreateOn, aliasUserActivity)); if (columns.HasId(SaxUserActivity.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UpdateOn, aliasUserActivity)); //--------------------------------------------------------------------- // User Account. if (hasUserAccountCols) { DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter); joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserActivity_UserAccount); joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserActivity_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity)); query.Joins.Add(joinUserAccount); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress); cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title); cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName); cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserActivity_UserAccount), prefixUserActivity_UserAccount + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetUserActivityQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetUserActivitySortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }