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 - ActivityFeedback //******************************************************************* // Utilities. private List GetLogProperties(SaxActivityFeedback activityFeedback) { return new List() { new StringPair("ItemId",ItemId.ToString(activityFeedback.ItemId)), new StringPair("ViewCount",activityFeedback.ViewCount.ToString()), }; } //------------------------------------------------------------------- // Create item. public override SaxActivityFeedback CreateActivityFeedback(ItemId itemId) { ClearErrorState(); return new SaxActivityFeedback_Dbas(CoreDatabase, itemId); } private SaxActivityFeedback_Dbas CreateActivityFeedback(ActivityFeedback_Db dbActivityFeedback) { ClearErrorState(); ItemId itemId = new ItemId(dbActivityFeedback._ItemType, new SysId(dbActivityFeedback._ItemId)); SaxActivityFeedback_Dbas activityFeedback = new SaxActivityFeedback_Dbas(CoreDatabase, itemId); PopulateFrom(dbActivityFeedback, activityFeedback); return activityFeedback; } //------------------------------------------------------------------- // Get item. public override SaxActivityFeedback GetActivityFeedback(SaxActivityFeedback.Params prm) { ClearErrorState(); return GetActivityFeedback(GetActivityFeedbackQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxActivityFeedback GetActivityFeedback(String filter) { ClearErrorState(); long count = GetActivityFeedbackCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxActivityFeedback activityFeedback = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo); dbActivityFeedback.PopulateFrom(dbCommand, aliasActivityFeedback, filter); activityFeedback = CreateActivityFeedback(dbActivityFeedback); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn(GetType().Name + ".GetActivityFeedback\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return activityFeedback; } //------------------------------------------------------------------- // Validate item. public override bool IsValidActivityFeedbackData(SaxActivityFeedback.Data data, SaxActivityFeedback.ErrField errField) { ClearErrorState(); if (!base.IsValidActivityFeedbackData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertActivityFeedback(SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertActivityFeedback"; ClearErrorState(); if (!IsValidActivityFeedback(activityFeedback)) return false; //if (SysId.IsValid(activityFeedback.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo); PopulateTo(dbActivityFeedback, activityFeedback, dbUpdateInfo); if (ActivityFeedback_Db.FieldsNonId.Contains("Id")) { // Generate next Id. // ToDo dbActivityFeedback._Id = CoreDatabase.GetNextIdFromTable("ActivityFeedback"); } dbActivityFeedback.ExecuteInsertCommand(dbCommand); //activityFeedback.Id = new SysId(dbActivityFeedback._Id); activityFeedback.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateActivityFeedback(SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateActivityFeedback"; ClearErrorState(); if (!IsValidActivityFeedback(activityFeedback)) return false; //if (!SysId.IsValid(activityFeedback.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!activityFeedback.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo); dbActivityFeedback.PopulateFrom(dbCommand, aliasActivityFeedback, GetActivityFeedbackQueryFilter(activityFeedback, aliasActivityFeedback).Concat(" AND ", "(", ")")); // ToDo SaxUpdateLogItemMonitor_ActivityFeedback updateLogMonitor = new SaxUpdateLogItemMonitor_ActivityFeedback(SessionContext, CreateActivityFeedback(dbActivityFeedback), dbUpdateInfo); // Update item. PopulateTo(dbActivityFeedback, activityFeedback, dbUpdateInfo); dbActivityFeedback.ExecuteUpdateCommand(dbCommand); activityFeedback.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(activityFeedback); // ToDo updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool ActivityFeedbackCanBeDeleted(SaxActivityFeedback activityFeedback) { ClearErrorState(); if (!base.ActivityFeedbackCanBeDeleted(activityFeedback)) return false; return true; } public override bool DeleteActivityFeedback(SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteActivityFeedback"; ClearErrorState(); if (!ActivityFeedbackCanBeDeleted(activityFeedback)) return false; using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo); String filter = GetActivityFeedbackQueryFilter(activityFeedback, aliasActivityFeedback).Concat(" AND ", "(", ")"); dbActivityFeedback.PopulateFrom(dbCommand, aliasActivityFeedback, filter); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE " + aliasActivityFeedback + " FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback) + " As " + aliasActivityFeedback + " WHERE " + filter + ";"; dbCommand.ExecuteNonQuery(); activityFeedback.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(ActivityFeedback_Db dbActivityFeedback, SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo) { dbActivityFeedback._ItemType = activityFeedback.ItemId.Type; dbActivityFeedback._ItemId = SysId.ToInt(activityFeedback.ItemId.Id); dbActivityFeedback._ViewCount = activityFeedback.ViewCount; dbActivityFeedback._FeedbackCount = activityFeedback.FeedbackCount; dbActivityFeedback._FeedbackTotal = activityFeedback.FeedbackTotal; dbActivityFeedback._FeedbackAverage = activityFeedback.FeedbackAverage; if (!DateUtil.IsValid(dbActivityFeedback._CreateOn)) { dbActivityFeedback._CreateOn = DateTime.Now; } dbActivityFeedback._UpdateOn = DateTime.Now; } private void PopulateFrom(ActivityFeedback_Db dbActivityFeedback, SaxActivityFeedback activityFeedback) { //activityFeedback.ItemId = new ItemId(dbActivityFeedback._ItemType, new SysId(dbActivityFeedback._ItemId); activityFeedback.ViewCount = dbActivityFeedback._ViewCount; activityFeedback.FeedbackCount = dbActivityFeedback._FeedbackCount; activityFeedback.FeedbackTotal = dbActivityFeedback._FeedbackTotal; activityFeedback.FeedbackAverage = dbActivityFeedback._FeedbackAverage; activityFeedback.SetCreateStamp(dbActivityFeedback._CreateOn, null, null); activityFeedback.SetUpdateStamp(dbActivityFeedback._UpdateOn, null, null); activityFeedback.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. public static String aliasActivityFeedback { get; } = "ActFbk"; private void SetActivityFeedbackColDfn (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.ActivityFeedback) alias = aliasActivityFeedback; 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 GetActivityFeedbackColumnDfn(SaxActivityFeedback.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxActivityFeedback.Column.Pos: SetActivityFeedbackColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; //----------------------------------------------------------- // Item. case SaxActivityFeedback.Column.ItemType: SetActivityFeedbackColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.ItemType_Code: SetActivityFeedbackColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, ColumnAlignment.Center, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.ItemType_Desc: SetActivityFeedbackColDfn(columnDfn, "Item type", 100, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, ColumnAlignment.Center, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.ItemId: SetActivityFeedbackColDfn(columnDfn, "Item #", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Feedback. case SaxActivityFeedback.Column.ViewCount: SetActivityFeedbackColDfn(columnDfn, "Views", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ViewCount, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.FeedbackCount: SetActivityFeedbackColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackCount, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.FeedbackTotal: SetActivityFeedbackColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackTotal, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.FeedbackAverage: SetActivityFeedbackColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackAverage, ColumnAlignment.Center, DataValue.DataType.Double); columnDfn.NumDecimals = 2; columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Common properties. case SaxActivityFeedback.Column.CreateOn_Date: SetActivityFeedbackColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxActivityFeedback.Column.UpdateOn_Date: SetActivityFeedbackColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_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 GetActivityFeedbackQueryFilter(SaxActivityFeedback activityFeedback, String aliasActivityFeedback) { // 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.ActivityFeedback_ItemType, aliasActivityFeedback) + "=" + activityFeedback.ItemId.Type); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback) + "=" + SysId.ToInt(activityFeedback.ItemId.Id)); return filter; } public override List GetActivityFeedbackQueryFilter(SaxActivityFeedback.Params prm) { List filter = new List(); String aliasActivityFeedback = SaxActivityMgr_Dbas.aliasActivityFeedback; // 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.ActivityFeedback_ItemType, aliasActivityFeedback) + "=" + itemId.Type + " AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback) + "=" + 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 GetActivityFeedbackSortColumns(SaxActivityFeedback.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for ActivityFeedback columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ActivityFeedback) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasActivityFeedback); } 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.ActivityFeedback_ItemType, aliasActivityFeedback) + " ASC"); sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetActivityFeedbackCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback) + " As " + aliasActivityFeedback, filter); } public override long GetActivityFeedbackCount(SaxActivityFeedback.Params prm) { ClearErrorState(); return GetActivityFeedbackCount(GetActivityFeedbackQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetActivityFeedbackList(SaxActivityFeedback.Params prm) { List userActivitys = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback), aliasActivityFeedback); ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo); qry.Columns.AddRange(dbActivityFeedback.ExistingColumnNames); qry.Filters.AddRange(GetActivityFeedbackQueryFilter(prm)); qry.OrderBy.AddRange(GetActivityFeedbackSortColumns(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()) { dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo); dbActivityFeedback.PopulateFrom(dbDataReader); userActivitys.Add(CreateActivityFeedback(dbActivityFeedback)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetActivityFeedbackList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userActivitys; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteActivityFeedbackQuery(List columns, SaxActivityFeedback.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback), aliasActivityFeedback); // Add columns as defined in query list. query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, aliasActivityFeedback)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback)); if (columns.HasId(SaxActivityFeedback.Column.ViewCount)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ViewCount, aliasActivityFeedback)); if (columns.HasId(SaxActivityFeedback.Column.FeedbackCount)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackCount, aliasActivityFeedback)); if (columns.HasId(SaxActivityFeedback.Column.FeedbackTotal)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackTotal, aliasActivityFeedback)); if (columns.HasId(SaxActivityFeedback.Column.FeedbackAverage)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackAverage, aliasActivityFeedback)); // Common properties. if (columns.HasId(SaxActivityFeedback.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_CreateOn, aliasActivityFeedback)); if (columns.HasId(SaxActivityFeedback.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_UpdateOn, aliasActivityFeedback)); //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetActivityFeedbackQueryFilter(prm)); if (prm.ItemIdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetActivityFeedbackSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }