This commit is contained in:
2021-10-21 18:04:57 +01:00
parent 057b75462e
commit ea61d37840
32 changed files with 1486 additions and 523 deletions
@@ -289,6 +289,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
private static readonly String prefixUserAccount_Region_Country = "UsrAct_Ctr_";
private static readonly String aliasUserAccount_Region_Province = "UsrAct_Prv";
private static readonly String prefixUserAccount_Region_Province = "UsrAct_Prv_";
private static readonly String aliasUserAccount_UserSport = "UsrAct_UsrSpt";
//private static readonly String prefixUserAccount_UserSport = "UsrAct_UsrSpt_";
private static readonly String aliasUserAccount_UserRole = "UsrAct_UsrRol";
//private static readonly String prefixUserAccount_UserRole = "UsrAct_UsrRol_";
private static readonly String colUserAccount_UserRoleCount = "UsrAct_RoleCount";
private static readonly String colUserAccount_SystemAdminRole = "UsrAct_SystemAdminRole";
private void SetUserAccountColDfn
@@ -462,18 +466,73 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// Name.
if (!StringUtil.IsEmpty(prm.NamePartial))
{
List<String> nameFilter = new List<string>();
nameFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(prm.NamePartial) + "%'");
nameFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(prm.NamePartial) + "%'");
nameFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(prm.NamePartial) + "%'");
filter.Add(nameFilter.Concat(" OR ", "(", ")"));
// Split filter into words.
List<String> filterWords = prm.NamePartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userFilter = new List<string>();
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 ", "(", ")"));
}
}
// User Account filter.
if (!StringUtil.IsEmpty(prm.UserAccountFilter))
// 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 th equery.
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<String> regionFilter = new List<string>();
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))
{
// Split filter into words.
List<String> filterWords = prm.UserAccountFilter.Split((char[])null).ToList();
List<String> filterWords = prm.UserFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userFilter = new List<string>();
// Exact match for each word to avoid Online user search allowing partial lookup.
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
filter.Add(userFilter.Concat(" OR ", "(", ")"));
}
}
// User filter - partial.
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
{
// Split filter into words.
List<String> filterWords = prm.UserFilterPartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
@@ -488,21 +547,27 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
}
// Active roles.
if (!prm.ActiveRoles.IsEmpty())
List<String> roleCodes = new List<string>();
foreach (Sax.UserRole userRole in prm.ActiveRoles)
roleCodes.Add(UserRoleCodes.GetCodeForType(userRole));
if (roleCodes.Exists(item => !item.Trim().IsEmpty()))
{
String aliasUserRole = "UsrRol";
DbQuery roleQuery = new DbQuery(CoreDatabase.DbmsType);
roleQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole);
roleQuery.Columns.Add("1");
roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
foreach (Sax.UserRole userRole in prm.ActiveRoles)
if (prm.Alias_UserRole.IsEmpty())
{
roleQuery.Filters.Clear();
roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserRole) + "='" + UserRoleCodes.GetCodeForType(userRole) + "'");
// 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.
@@ -445,20 +445,19 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// User Account status.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
{
String aliasUserOrganisation_UserAccount = StringUtil.OnEmpty(prm.Alias_UserAccount, SaxAccountMgr_Dbas.aliasUserOrganisation_UserAccount);
if (StringUtil.IsEmpty(prm.Alias_UserAccount))
{
// User Account table isn't linked.
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount);
qry.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount));
qry.Columns.Add("1");
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserOrganisation_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
filter.Add("Exists (" + qry.BuildQuery() + ")");
}
else
// User Account table is linked - filter directly.
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserOrganisation_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, prm.Alias_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
}
// Organisations.
@@ -469,20 +468,19 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// Organisation status.
if (prm.OrganisationStatusCat != SaxOrganisation.StatusCat.Any)
{
String aliasUserOrganisation_Organisation = StringUtil.OnEmpty(prm.Alias_Organisation, SaxAccountMgr_Dbas.aliasUserOrganisation_Organisation);
if (StringUtil.IsEmpty(prm.Alias_Organisation))
{
// User Account table isn't linked.
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserOrganisation_Organisation);
qry.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserOrganisation_Organisation));
qry.Columns.Add("1");
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserOrganisation_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasUserOrganisation_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat));
filter.Add("Exists (" + qry.BuildQuery() + ")");
}
else
// User Account table is linked - filter directly.
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasUserOrganisation_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat));
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, prm.Alias_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat));
}
// Organisation roles.