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 Sarand.Net.Standard.Base.Utils; using Saxonite.Net.Standard.Base.App; using System.Linq; using Saxonite.Net.Standard.Dbas.Internal.Core; namespace Saxonite.Net.Standard.Dbas.Mgr { //======================================================================= partial class SaxAccountMgr_Dbas { //******************************************************************* // Account Mgr - User Account //******************************************************************* // Utilities. private List GetLogProperties(SaxUserAccount userAccount) { return new List() { new StringPair("Id",SysId.ToString(userAccount.Id)), new StringPair("Email",userAccount.EmailAddress), new StringPair("Status",userAccount.StatusCode) }; } //------------------------------------------------------------------- // Create item. public override SaxUserAccount CreateUserAccount() { ClearErrorState(); return new SaxUserAccount_Dbas(CoreDatabase, null, 0); } private SaxUserAccount_Dbas CreateUserAccount(UserAccount_Db dbUserAccount) { ClearErrorState(); SaxUserAccount_Dbas userAccount = new SaxUserAccount_Dbas(CoreDatabase, new SysId(dbUserAccount._Id), (ushort)dbUserAccount._Flags); PopulateFrom(dbUserAccount, userAccount); return userAccount; } //------------------------------------------------------------------- // Get item. public override SaxUserAccount GetUserAccount(SaxUserAccount.Params prm) { ClearErrorState(); return GetUserAccount(GetUserAccountQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxUserAccount GetUserAccount(String filter) { ClearErrorState(); long count = GetUserAccountCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxUserAccount userAccount = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo); dbUserAccount.PopulateFrom(dbCommand, aliasUserAccount, filter); userAccount = CreateUserAccount(dbUserAccount); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn(GetType().Name + ".GetUserAccount\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userAccount; } //------------------------------------------------------------------- // Validate item. public override bool IsValidUserAccountData(SaxUserAccount.Data data, SaxUserAccount.ErrField errField) { ClearErrorState(); if (!base.IsValidUserAccountData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertUserAccount"; ClearErrorState(); if (!IsValidUserAccount(userAccount)) return false; if (SysId.IsValid(userAccount.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo); PopulateTo(dbUserAccount, userAccount, dbUpdateInfo); if (UserAccount_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbUserAccount._Id = CoreDatabase.GetNextIdFromTable("UserAccount"); } dbUserAccount.ExecuteInsertCommand(dbCommand); userAccount.Id = new SysId(dbUserAccount._Id); userAccount.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateUserAccount"; ClearErrorState(); if (!IsValidUserAccount(userAccount)) return false; if (!SysId.IsValid(userAccount.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!userAccount.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo); dbUserAccount.PopulateFrom(dbCommand, aliasUserAccount, "Id=" + SysId.ToString(userAccount.Id)); // ToDo SaxUpdateLogItemMonitor_UserAccount updateLogMonitor = new SaxUpdateLogItemMonitor_UserAccount(SessionContext, CreateUserAccount(dbUserAccount), dbUpdateInfo); // Update item. PopulateTo(dbUserAccount, userAccount, dbUpdateInfo); dbUserAccount.ExecuteUpdateCommand(dbCommand); userAccount.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(userAccount); // ToDo updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool UserAccountCanBeDeleted(SaxUserAccount userAccount) { ClearErrorState(); if (!base.UserAccountCanBeDeleted(userAccount)) return false; return true; } public override bool DeleteUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteUserAccount"; ClearErrorState(); if (!UserAccountCanBeDeleted(userAccount)) return false; // User Accounts are logically deleted by changing the status. userAccount.Status = SaStatus.Deleted; return UpdateUserAccount(userAccount, dbUpdateInfo); /* * Physical deletion. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo); dbUserAccount.PopulateFrom(dbCommand, aliasUserAccount, "Id=" + userAccount.Id.ToString()); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount) + " WHERE Id=" + SysId.ToString(userAccount.Id) + ";"; dbCommand.ExecuteNonQuery(); userAccount.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); */ } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(UserAccount_Db dbUserAccount, SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo) { dbUserAccount._Id = SysId.ToInt(userAccount.Id); dbUserAccount._EmailAddress = userAccount.EmailAddress; dbUserAccount._Title = userAccount.Title; dbUserAccount._FirstName = userAccount.FirstName; dbUserAccount._Initials = userAccount.Initials; dbUserAccount._LastName = userAccount.LastName; dbUserAccount._About = userAccount.About; dbUserAccount._PhoneMain = StringUtil.EmptyOnNull(userAccount.PhoneMain); dbUserAccount._PhoneMobile = StringUtil.EmptyOnNull(userAccount.PhoneMobile); dbUserAccount._Gender = (byte)userAccount.Gender; dbUserAccount._DateOfBirthDay = userAccount.DateOfBirthDay; dbUserAccount._DateOfBirthMonth = userAccount.DateOfBirthMonth; dbUserAccount._DateOfBirthYear = userAccount.DateOfBirthYear; dbUserAccount._RegionIdCountry = SysId.ToInt(userAccount.RegionIdCountry); dbUserAccount._RegionIdProvince = SysId.ToInt(userAccount.RegionIdProvince); // Security dbUserAccount._PasswordHashed = userAccount.PasswordHashed; dbUserAccount._PasswordToken = userAccount.PasswordToken; dbUserAccount._PasswordHistory = userAccount.PasswordHistory.Concat(SaxUserAccount.PasswordHistoryDelim); dbUserAccount._PasswordChangedAt = userAccount.PasswordChangedAt; // Login. dbUserAccount._LastLoginAt = userAccount.LastLoginAt; dbUserAccount._LastInvalidLoginAt = userAccount.LastInvalidLoginAt; dbUserAccount._InvalidLoginCount = userAccount.InvalidLoginCount; // Common. dbUserAccount._Notes = userAccount.Notes; dbUserAccount._Status = SacsSystem.GetStatusCode(userAccount.Status); dbUserAccount._Flags = (short)userAccount.Flags; if (!SysId.IsValid(userAccount.Id)) { dbUserAccount._CreateOn = DateTime.Now; dbUserAccount._CreateBy = dbUpdateInfo.UserId.ToInt(); dbUserAccount._CreateHost = dbUpdateInfo.Host; } dbUserAccount._UpdateOn = DateTime.Now; dbUserAccount._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbUserAccount._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(UserAccount_Db dbUserAccount, SaxUserAccount userAccount) { //userAccount.Id = new SysId(dbUserAccount._Id); userAccount.EmailAddress = dbUserAccount._EmailAddress; userAccount.Title = dbUserAccount._Title; userAccount.FirstName = dbUserAccount._FirstName; userAccount.Initials = dbUserAccount._Initials; userAccount.LastName = dbUserAccount._LastName; userAccount.About = dbUserAccount._About; userAccount.PhoneMain = dbUserAccount._PhoneMain; userAccount.PhoneMobile = dbUserAccount._PhoneMobile; userAccount.Gender = (Sax.Gender)dbUserAccount._Gender; userAccount.DateOfBirthDay = dbUserAccount._DateOfBirthDay; userAccount.DateOfBirthMonth = dbUserAccount._DateOfBirthMonth; userAccount.DateOfBirthYear = dbUserAccount._DateOfBirthYear; userAccount.RegionIdCountry = new SysId(dbUserAccount._RegionIdCountry); userAccount.RegionIdProvince = new SysId(dbUserAccount._RegionIdProvince); // Security. userAccount.PasswordHashed = dbUserAccount._PasswordHashed; userAccount.PasswordToken = dbUserAccount._PasswordToken; userAccount.PasswordHistory = StringListUtil.Split(dbUserAccount._PasswordHistory, SaxUserAccount.PasswordHistoryDelim); userAccount.PasswordChangedAt = dbUserAccount._PasswordChangedAt; // Login. userAccount.LastLoginAt = dbUserAccount._LastLoginAt; userAccount.LastInvalidLoginAt = dbUserAccount._LastInvalidLoginAt; userAccount.InvalidLoginCount = dbUserAccount._InvalidLoginCount; // Common. userAccount.Notes = dbUserAccount._Notes; userAccount.Status = SacsSystem.GetStatusForCode(dbUserAccount._Status); userAccount.SetCreateStamp(dbUserAccount._CreateOn, new SysId(dbUserAccount._CreateBy), dbUserAccount._CreateHost); userAccount.SetUpdateStamp(dbUserAccount._UpdateOn, new SysId(dbUserAccount._UpdateBy), dbUserAccount._UpdateHost); userAccount.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasUserAccount = "UsrAct"; private static readonly String aliasUserAccount_Region_Country = "UsrAct_Ctr"; private static readonly String prefixUserAccount_Region_Country = aliasUserAccount_Region_Country + "_"; private static readonly String aliasUserAccount_Region_Province = "UsrAct_Prv"; private static readonly String prefixUserAccount_Region_Province = aliasUserAccount_Region_Province + "_"; private static readonly String aliasUserAccount_UserRole_SysAdmin = "UsrAct_UsrRol_SysAdm"; private static readonly String prefixUserAccount_UserRole_SysAdmin = aliasUserAccount_UserRole_SysAdmin + "_"; private static readonly String aliasUserAccount_UserSport = "UsrAct_UsrSpt"; //private static readonly String prefixUserAccount_UserSport = aliasUserAccount_UserSport + "_"; private static readonly String aliasUserAccount_UserRole = "UsrAct_UsrRol"; //private static readonly String prefixUserAccount_UserRole = aliasUserAccount_UserRole + "_"; private static readonly String colUserAccount_UserSportCount = "UsrAct_SportCount"; private static readonly String colUserAccount_UserSportCount_Active = "UsrAct_SportCount_Act"; private static readonly String colUserAccount_UserRoleCount = "UsrAct_RoleCount"; private static readonly String colUserAccount_SystemAdminRole = "UsrAct_SystemAdminRole"; private void SetUserAccountColDfn (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.UserAccount) alias = aliasUserAccount; 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 GetUserAccountColumnDfn(SaxUserAccount.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxUserAccount.Column.Pos: SetUserAccountColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaxUserAccount.Column.Id: SetUserAccountColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.EmailAddress: SetUserAccountColDfn(columnDfn, "Email", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.Title: SetUserAccountColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title); break; case SaxUserAccount.Column.FirstName: SetUserAccountColDfn(columnDfn, "FirstName", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName); break; case SaxUserAccount.Column.Initials: SetUserAccountColDfn(columnDfn, "Initials", 60, SaxDbDfn_Core.ColumnIdx.UserAccount_Initials); break; case SaxUserAccount.Column.LastName: SetUserAccountColDfn(columnDfn, "LastName", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName); break; case SaxUserAccount.Column.PhoneMain: SetUserAccountColDfn(columnDfn, "PhoneMain", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMain); break; case SaxUserAccount.Column.PhoneMobile: SetUserAccountColDfn(columnDfn, "PhoneMobile", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile); break; case SaxUserAccount.Column.DateOfBirthDay: SetUserAccountColDfn(columnDfn, "DOB day", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthDay, ColumnAlignment.Center, DataValue.DataType.Date); break; case SaxUserAccount.Column.DateOfBirthMonth: SetUserAccountColDfn(columnDfn, "DOB month", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthMonth, ColumnAlignment.Center, DataValue.DataType.Date); break; case SaxUserAccount.Column.DateOfBirthYear: SetUserAccountColDfn(columnDfn, "DOB year", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthYear, ColumnAlignment.Center, DataValue.DataType.Date); break; case SaxUserAccount.Column.DateOfBirth: SetUserAccountColDfn(columnDfn, "DOB", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date); break; //------------------------------------------------------- // Regions. case SaxUserAccount.Column.RegionIdCountry: SetUserAccountColDfn(columnDfn, "Country #", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, ColumnAlignment.Right, DataValue.DataType.Long); break; case SaxUserAccount.Column.RegionCountry_Name: SetUserAccountColDfn(columnDfn, "Country", 120, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasUserAccount_Region_Country, prefixUserAccount_Region_Country); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.RegionIdProvince: SetUserAccountColDfn(columnDfn, "Province #", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, ColumnAlignment.Right, DataValue.DataType.Long); break; case SaxUserAccount.Column.RegionProvince_Name: SetUserAccountColDfn(columnDfn, "Province", 120, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasUserAccount_Region_Province, prefixUserAccount_Region_Province); columnDfn.ReadOnly = true; break; //------------------------------------------------------- // Security. case SaxUserAccount.Column.LastLoginOn: SetUserAccountColDfn(columnDfn, "Last login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastLoginAt: SetUserAccountColDfn(columnDfn, "Last login", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastInvalidLoginOn: SetUserAccountColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastInvalidLoginAt: SetUserAccountColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.InvalidLoginCount: SetUserAccountColDfn(columnDfn, "Invalid logins", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Derived properties. // User Sports. case SaxUserAccount.Column.UserSportCount: SetUserAccountColDfn(columnDfn, "Sports", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colUserAccount_UserSportCount; columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.UserSportCount_Active: SetUserAccountColDfn(columnDfn, "Sports (active)", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colUserAccount_UserSportCount_Active; columnDfn.ReadOnly = true; break; // User roles. case SaxUserAccount.Column.UserRoleCount: SetUserAccountColDfn(columnDfn, "Roles", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colUserAccount_UserRoleCount; columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.SystemAdminUser: SetUserAccountColDfn(columnDfn, "System Admin", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Bool); columnDfn.DataName = colUserAccount_SystemAdminRole; columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastAdminLoginOn: SetUserAccountColDfn(columnDfn, "Last Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastAdminLoginAt: SetUserAccountColDfn(columnDfn, "Last Admin login", 120, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastInvalidAdminLoginOn: SetUserAccountColDfn(columnDfn, "Last invalid Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.LastInvalidAdminLoginAt: SetUserAccountColDfn(columnDfn, "Last invalid Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.InvalidAdminLoginCount: SetUserAccountColDfn(columnDfn, "Invalid Admin logins", 80, SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Common properties. case SaxUserAccount.Column.Notes: SetUserAccountColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserAccount_Notes); break; case SaxUserAccount.Column.Flags: SetUserAccountColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserAccount_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxUserAccount.Column.Status: SetUserAccountColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center); break; case SaxUserAccount.Column.Status_Desc: SetUserAccountColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center); break; case SaxUserAccount.Column.Status_Ind: SetUserAccountColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaxUserAccount.Column.CreateOn_Date: SetUserAccountColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxUserAccount.Column.UpdateOn_Date: SetUserAccountColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_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 GetUserAccountQueryFilter(SaxUserAccount.Params prm) { List filter = new List(); // Item Ids. String includedIds = prm.IdsIncluded.Concat(","); if (!includedIds.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + " IN (" + includedIds + ")"); String excludedIds = prm.IdsExcluded.Concat(","); if (!excludedIds.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + " NOT IN (" + excludedIds + ")"); // Email address. if (!StringUtil.IsEmpty(prm.EmailAddress)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + " = '" + DbQuery.FormatForCondition(prm.EmailAddress) + "'"); // Name. if (!StringUtil.IsEmpty(prm.NamePartial)) { // Split filter into words. List filterWords = prm.NamePartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList(); filterWords.RemoveDuplicatesCI(); filterWords.RemoveBlanks(); foreach (String filterWord in filterWords) { List userFilter = new List(); userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(filterWord) + "%'"); userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(filterWord) + "%'"); userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(filterWord) + "%'"); filter.Add(userFilter.Concat(" OR ", "(", ")")); } } // Sport Ids. String sportIdsIncluded = prm.SportIdsIncluded.Concat(","); if (!sportIdsIncluded.IsEmpty()) { if (prm.Alias_UserSport.IsEmpty()) { // User Sport table is not linked in query. DbQuery userSportQuery = new DbQuery(CoreDatabase.DbmsType); userSportQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserAccount_UserSport); userSportQuery.Columns.Add("1"); userSportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserAccount_UserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); userSportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, aliasUserAccount_UserSport) + " IN (" + sportIdsIncluded + ")"); filter.Add("Exists(" + userSportQuery.BuildQuery() + ")"); } else // User Sport table is already linked in the query. filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, prm.Alias_UserSport) + " IN (" + sportIdsIncluded + ")"); } // Region Ids. String regionIdsIncluded = prm.RegionIdsIncluded.Concat(","); if (!regionIdsIncluded.IsEmpty()) { List regionFilter = new List(); regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserAccount) + " IN (" + regionIdsIncluded + ")"); regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount) + " IN (" + regionIdsIncluded + ")"); filter.Add(regionFilter.Concat(" OR ", "(", ")")); } // User filter. if (!StringUtil.IsEmpty(prm.UserFilter)) filter.AddRange(GetUserAccountFilters(prm.UserFilter, aliasUserAccount)); // User filter - partial. if (!StringUtil.IsEmpty(prm.UserFilterPartial)) filter.AddRange(GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserAccount)); // Active roles. List roleCodes = new List(); foreach (Sax.UserRole userRole in prm.ActiveRoles) roleCodes.Add(UserRoleCodes.GetCodeForType(userRole)); if (roleCodes.Exists(item => !item.Trim().IsEmpty())) { if (prm.Alias_UserRole.IsEmpty()) { // User Role table is not linked in the query. DbQuery roleQuery = new DbQuery(CoreDatabase.DbmsType); roleQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserAccount_UserRole); roleQuery.Columns.Add("1"); roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserAccount_UserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserAccount_UserRole) + " IN (" + DbQuery.FormatForIn(roleCodes) + ")"); filter.Add("Exists(" + roleQuery.BuildQuery() + ")"); } else { // User Role table is already linked in the query. filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, prm.Alias_UserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, prm.Alias_UserRole) + " IN (" + DbQuery.FormatForIn(roleCodes) + ")"); } } // Notes. if (!StringUtil.IsEmpty(prm.NotesPartial)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Notes, aliasUserAccount) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'"); // Status. if (prm.StatusCat != SaxUserAccount.StatusCat.Any) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount) + GetUserAccountStatusCatFilterCondition(prm.StatusCat)); if (filter.Count < 1) filter.Add("1=1"); return filter; } internal static List GetUserAccountFilters(String userFilter, String aliasUserAccount) { List filter = new List(); if (!StringUtil.IsEmpty(userFilter)) { // Split filter into words. List filterWords = userFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList(); filterWords.RemoveDuplicatesCI(); filterWords.RemoveBlanks(); foreach (String filterWord in filterWords) { List userAccountFilter = new List(); // Exact match for each word to avoid Online user search allowing partial lookup. userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'"); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'"); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'"); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'"); filter.Add(userAccountFilter.Concat(" OR ", "(", ")")); } } return filter; } internal static List GetPartialUserAccountFilters(String userFilterPartial, String aliasUserAccount) { List filter = new List(); if (!StringUtil.IsEmpty(userFilterPartial)) { // Split filter into words. List filterWords = userFilterPartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList(); filterWords.RemoveDuplicatesCI(); filterWords.RemoveBlanks(); foreach (String filterWord in filterWords) { List userAccountFilter = new List(); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'"); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'"); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'"); userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'"); filter.Add(userAccountFilter.Concat(" OR ", "(", ")")); } } return filter; } internal static String GetUserAccountStatusCatFilterCondition(SaxUserAccount.StatusCat statusCat) { if (statusCat == SaxUserAccount.StatusCat.AwaitingOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "'"; if (statusCat == SaxUserAccount.StatusCat.ActiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"; if (statusCat == SaxUserAccount.StatusCat.AwaitingOrActive) return " In ('" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "','" + SacsSystem.GetStatusCode(SaStatus.Active) + "')"; if (statusCat == SaxUserAccount.StatusCat.InactiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'"; if (statusCat == SaxUserAccount.StatusCat.NotDeleted) return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; if (statusCat == SaxUserAccount.StatusCat.DeletedOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; return ""; } //------------------------------------------------------------------- // Item sort columns. public List GetUserAccountSortColumns(SaxUserAccount.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UserAccount columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserAccount) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserAccount); } 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.UserAccount_Id, aliasUserAccount) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetUserAccountCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount) + " As " + aliasUserAccount, filter); } public override long GetUserAccountCount(SaxUserAccount.Params prm) { ClearErrorState(); return GetUserAccountCount(GetUserAccountQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetUserAccountList(SaxUserAccount.Params prm) { List userAccounts = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount); UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo); qry.Columns.AddRange(dbUserAccount.ExistingColumnNames); qry.Filters.AddRange(GetUserAccountQueryFilter(prm)); qry.OrderBy.AddRange(GetUserAccountSortColumns(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()) { dbUserAccount = new UserAccount_Db(CoreDbInfo); dbUserAccount.PopulateFrom(dbDataReader); userAccounts.Add(CreateUserAccount(dbUserAccount)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetUserAccountList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return userAccounts; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteUserAccountQuery(List columns, SaxUserAccount.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount); // Add columns as defined in query list. if (columns.HasId(SaxUserAccount.Column.Id)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.EmailAddress)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.Title)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.FirstName)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.Initials)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Initials, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.LastName)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.PhoneMain)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMain, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.PhoneMobile)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.DateOfBirthDay) || columns.HasId(SaxUserAccount.Column.DateOfBirth)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthDay, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.DateOfBirthMonth) || columns.HasId(SaxUserAccount.Column.DateOfBirth)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthMonth, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.DateOfBirthYear) || columns.HasId(SaxUserAccount.Column.DateOfBirth)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthYear, aliasUserAccount)); // Regions. bool hasCountryRegionCols = columns.HasId(SaxUserAccount.Column.RegionCountry_Name); if (columns.HasId(SaxUserAccount.Column.RegionIdCountry) || hasCountryRegionCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserAccount)); bool hasProvinceRegionCols = columns.HasId(SaxUserAccount.Column.RegionProvince_Name); if (columns.HasId(SaxUserAccount.Column.RegionIdProvince) || hasProvinceRegionCols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount)); // Login. if (columns.HasId(SaxUserAccount.Column.LastLoginOn) || columns.HasId(SaxUserAccount.Column.LastLoginAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.LastInvalidLoginOn) || columns.HasId(SaxUserAccount.Column.LastInvalidLoginAt)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.InvalidLoginCount)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_InvalidLoginCount, aliasUserAccount)); // Common properties. if (columns.HasId(SaxUserAccount.Column.Notes)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Notes, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.Flags)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Flags, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.Status) || columns.HasId(SaxUserAccount.Column.Status_Desc) || columns.HasId(SaxUserAccount.Column.Status_Ind)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_CreateOn, aliasUserAccount)); if (columns.HasId(SaxUserAccount.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_UpdateOn, aliasUserAccount)); //--------------------------------------------------------------------- // Country Region. if (hasCountryRegionCols) { DbQueryJoin joinRegionCountry = new DbQueryJoin(DbJoinType.LeftOuter); joinRegionCountry.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserAccount_Region_Country); joinRegionCountry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserAccount_Region_Country) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserAccount)); query.Joins.Add(joinRegionCountry); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_Region_Country), prefixUserAccount_Region_Country + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // Province Region. if (hasProvinceRegionCols) { DbQueryJoin joinRegionProvince = new DbQueryJoin(DbJoinType.LeftOuter); joinRegionProvince.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserAccount_Region_Province); joinRegionProvince.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserAccount_Region_Province) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount)); query.Joins.Add(joinRegionProvince); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_Region_Province), prefixUserAccount_Region_Province + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // System Admin User Role. if (columns.Exists(item => SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)item.DbColumn) == SaxDbDfn_Core.TableIdx.UserRole)) { DbQueryJoin joinSysAdmin = new DbQueryJoin(DbJoinType.LeftOuter); joinSysAdmin.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserAccount_UserRole_SysAdmin); joinSysAdmin.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserAccount_UserRole_SysAdmin) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); joinSysAdmin.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserAccount_UserRole_SysAdmin) + "='" + UserRoleCodes.GetCodeForType(Sax.UserRole.SystemAdmin) + "'"); query.Joins.Add(joinSysAdmin); List cols = new List(); cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt); cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt); cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount); foreach (var col in cols) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_UserRole_SysAdmin), prefixUserAccount_UserRole_SysAdmin + SaxDbDfn_Core.GetColumnName(col, false)); } //--------------------------------------------------------------------- // User Sport count. if (columns.HasId(SaxUserAccount.Column.UserSportCount) || columns.HasId(SaxUserAccount.Column.UserSportCount_Active)) { String aliasUserSport = "aUsrSpt"; DbQuery queryUserSport = new DbQuery(CoreDatabase.DbmsType); queryUserSport.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserSport); queryUserSport.Columns.Add("Count(*)"); queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Status, aliasUserSport) + "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"); query.Columns.Add("(" + queryUserSport.BuildQuery() + ")", colUserAccount_UserSportCount); // Active user sports. queryUserSport.Filters.Clear(); queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Status, aliasUserSport) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); query.Columns.Add("(" + queryUserSport.BuildQuery() + ")", colUserAccount_UserSportCount_Active); } //--------------------------------------------------------------------- // User Role count. if (columns.HasId(SaxUserAccount.Column.UserRoleCount)) { String aliasUserRole = "aUsrRol"; DbQuery queryUserRole = new DbQuery(CoreDatabase.DbmsType); queryUserRole.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole); queryUserRole.Columns.Add("Count(*)"); queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Status, aliasUserRole) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); query.Columns.Add("(" + queryUserRole.BuildQuery() + ")", colUserAccount_UserRoleCount); } //--------------------------------------------------------------------- // System Admin user. if (columns.HasId(SaxUserAccount.Column.SystemAdminUser)) { String aliasUserRole = "aUsrRol"; DbQuery queryUserRole = new DbQuery(CoreDatabase.DbmsType); queryUserRole.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole); queryUserRole.Columns.Add("Count(*)"); queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount)); queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserRole) + "='" + UserRoleCodes.GetCodeForType(Sax.UserRole.SystemAdmin) + "'"); queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Status, aliasUserRole) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"); query.Columns.Add("(" + queryUserRole.BuildQuery() + ")", colUserAccount_SystemAdminRole); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetUserAccountQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetUserAccountSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }