using Sarand.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Saxonite.Base.App; using Saxonite.Net.Standard.Dbas.Bus; using Saxonite.Net.Standard.Dbas.Internal; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Data.Common; using System.Text; using Saxonite.Net.Standard.Base.App; using System.Linq; using Sarand.Net.Standard.Base.Utils; using Saxonite.Net.Standard.Dbas.Internal.Core; namespace Saxonite.Net.Standard.Dbas.Mgr { //======================================================================= partial class SaxAccountMgr_Dbas { //******************************************************************* // Account Mgr - User Config //******************************************************************* // Utilities. private List GetLogProperties(SaxUserConfig userConfig) { return new List() { new StringPair("Id",SysId.ToString(userConfig.Id)), new StringPair("UserAccountId",SysId.ToString(userConfig.UserAccountId)), new StringPair("ConfigType",userConfig.ConfigType.ToString()), }; } //------------------------------------------------------------------- // Create item. public override SaxUserConfig CreateUserConfig(SysId userAccountId, Sax.UserConfigType configType) { ClearErrorState(); return new SaxUserConfig_Dbas(CoreDatabase, null, userAccountId, configType, 0); } private SaxUserConfig_Dbas CreateUserConfig(UserConfig_Db dbUserConfig) { ClearErrorState(); SaxUserConfig_Dbas userConfig = new SaxUserConfig_Dbas(CoreDatabase, new SysId(dbUserConfig._Id), new SysId(dbUserConfig._UserAccountId), (Sax.UserConfigType)dbUserConfig._ConfigType, 0); PopulateFrom(dbUserConfig, userConfig); return userConfig; } //------------------------------------------------------------------- // Get item. public override SaxUserConfig GetUserConfig(SaxUserConfig.Params prm) { ClearErrorState(); return GetUserConfig(GetUserConfigQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxUserConfig GetUserConfig(String filter) { ClearErrorState(); long count = GetUserConfigCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxUserConfig userConfig = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo); dbUserConfig.PopulateFrom(dbCommand, aliasUserConfig, filter); userConfig = CreateUserConfig(dbUserConfig); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return userConfig; } //------------------------------------------------------------------- // Validate item. public override bool IsValidUserConfigData(SaxUserConfig.Data data, SaxUserConfig.ErrField errField) { ClearErrorState(); if (!base.IsValidUserConfigData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertUserConfig"; ClearErrorState(); if (!IsValidUserConfig(userConfig)) return false; if (SysId.IsValid(userConfig.Id)) return SetErrorState(ErrorMessage.ValidItemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo); PopulateTo(dbUserConfig, userConfig, dbUpdateInfo); if (UserConfig_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbUserConfig._Id = CoreDatabase.GetNextIdFromTable("UserConfig"); } dbUserConfig.ExecuteInsertCommand(dbCommand); //userConfig.Id = new SysId(dbUserConfig._Id); userConfig.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateUserConfig"; ClearErrorState(); if (!IsValidUserConfig(userConfig)) return false; if (!SysId.IsValid(userConfig.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!userConfig.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo); dbUserConfig.PopulateFrom(dbCommand, aliasUserConfig, "Id=" + SysId.ToString(userConfig.Id)); // Update properties. PopulateTo(dbUserConfig, userConfig, dbUpdateInfo); dbUserConfig.ExecuteUpdateCommand(dbCommand); userConfig.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool UserConfigCanBeDeleted(SaxUserConfig userConfig) { ClearErrorState(); if (!base.UserConfigCanBeDeleted(userConfig)) return false; return true; } public override bool DeleteUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteUserConfig"; ClearErrorState(); if (!UserConfigCanBeDeleted(userConfig)) return false; using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo); dbUserConfig.PopulateFrom(dbCommand, aliasUserConfig, "Id=" + SysId.ToString(userConfig.Id)); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig) + " WHERE Id=" + SysId.ToString(userConfig.Id) + ";"; dbCommand.ExecuteNonQuery(); userConfig.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(UserConfig_Db dbUserConfig, SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo) { dbUserConfig._UserAccountId = SysId.ToInt(userConfig.UserAccountId); dbUserConfig._ConfigType = (short)userConfig.ConfigType; dbUserConfig._ConfigData = userConfig.ConfigData; // Common. //dbUserConfig._Flags = (short)userConfig.Flags; if (!DateUtil.IsValid(dbUserConfig._CreateOn)) { dbUserConfig._CreateOn = DateTime.Now; } dbUserConfig._UpdateOn = DateTime.Now; } private void PopulateFrom(UserConfig_Db dbUserConfig, SaxUserConfig userConfig) { //userConfig.UserAccountId = new SysId(dbUserConfig._UserAccountId); //userConfig.ConfigType = (Sax.UserConfigType)dbUserConfig._ConfigType; userConfig.ConfigData = dbUserConfig._ConfigData; // Common. userConfig.SetCreateStamp(dbUserConfig._CreateOn, new SysId(), ""); userConfig.SetUpdateStamp(dbUserConfig._UpdateOn, new SysId(), ""); userConfig.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasUserConfig = "UsrCfg"; private static readonly String aliasUserConfig_UserAccount = "UsrCfg_Usr"; private static readonly String prefixUserConfig_UserAccount = aliasUserConfig_UserAccount + "_"; private void SetUserConfigColDfn (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.UserConfig) alias = aliasUserConfig; 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 GetUserConfigColumnDfn(SaxUserConfig.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxUserConfig.Column.Pos: SetUserConfigColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaxUserConfig.Column.UserAccountId: SetUserConfigColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // User. case SaxUserConfig.Column.User_EmailAddress: SetUserConfigColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserConfig.Column.User_DisplayName: SetUserConfigColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxUserConfig.Column.User_Title: SetUserConfigColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserConfig.Column.User_FirstName: SetUserConfigColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount); columnDfn.ReadOnly = true; break; case SaxUserConfig.Column.User_LastName: SetUserConfigColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Configuration. case SaxUserConfig.Column.ConfigType: SetUserConfigColDfn(columnDfn, "Type", 60, SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Derived properties. //----------------------------------------------------------- // Common properties. /* case SaxUserConfig.Column.Flags: SetUserConfigColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserConfig_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; */ case SaxUserConfig.Column.CreateOn_Date: SetUserConfigColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserConfig_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxUserConfig.Column.UpdateOn_Date: SetUserConfigColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserConfig_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 GetUserConfigQueryFilter(SaxUserConfig.Params prm) { List filter = new List(); // User accounts. String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(","); if (!userAccountIdsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig) + " IN (" + userAccountIdsIncluded + ")"); // Config type. if (prm.ConfigType > 0) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, aliasUserConfig) + "=" + ((short)prm.ConfigType).ToString()); if (filter.Count < 1) filter.Add("1=1"); return filter; } // Item sort columns. public List GetUserConfigSortColumns(SaxUserConfig.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UserConfig columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserConfig) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserConfig); } 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.UserConfig_UserAccountId, aliasUserConfig) + " ASC"); sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, aliasUserConfig) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetUserConfigCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig) + " As " + aliasUserConfig, filter); } public override long GetUserConfigCount(SaxUserConfig.Params prm) { ClearErrorState(); return GetUserConfigCount(GetUserConfigQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetUserConfigList(SaxUserConfig.Params prm) { ClearErrorState(); List userConfigs = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig), aliasUserConfig); UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo); qry.Columns.AddRange(dbUserConfig.ExistingColumnNames); qry.Filters.AddRange(GetUserConfigQueryFilter(prm)); qry.OrderBy.AddRange(GetUserConfigSortColumns(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()) { dbUserConfig = new UserConfig_Db(CoreDbInfo); dbUserConfig.PopulateFrom(dbDataReader); userConfigs.Add(CreateUserConfig(dbUserConfig)); } } } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return userConfigs; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteUserConfigQuery(List columns, SaxUserConfig.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig), aliasUserConfig); // Add columns as defined in query list. bool hasUserAccountCols = (columns.HasId(SaxUserConfig.Column.User_EmailAddress) || columns.HasId(SaxUserConfig.Column.User_DisplayName) || columns.HasId(SaxUserConfig.Column.User_Title) || columns.HasId(SaxUserConfig.Column.User_FirstName) || columns.HasId(SaxUserConfig.Column.User_LastName)); if (columns.HasId(SaxUserConfig.Column.UserAccountId) || hasUserAccountCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig)); if (columns.HasId(SaxUserConfig.Column.ConfigType)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, aliasUserConfig)); // Common properties. //if (columns.HasId(SaxUserConfig.Column.Flags)) // query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_Flags, aliasUserConfig)); if (columns.HasId(SaxUserConfig.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_CreateOn, aliasUserConfig)); if (columns.HasId(SaxUserConfig.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UpdateOn, aliasUserConfig)); //--------------------------------------------------------------------- // User Account. if (hasUserAccountCols) { DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter); joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserConfig_UserAccount); joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserConfig_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig)); 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, aliasUserConfig_UserAccount), prefixUserConfig_UserAccount + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetUserConfigQueryFilter(prm)); // Sort is applied if the results are likely to be more than a single row. if (prm.UserAccountIdsIncluded.Count != 1 || prm.ConfigType <= 0) { // Configure sort sequence. foreach (String sortColumn in GetUserConfigSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }