This commit is contained in:
2021-07-23 14:01:49 +01:00
parent 10907d3aff
commit 0d7be69e1e
109 changed files with 3161 additions and 943 deletions
@@ -505,6 +505,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
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)
@@ -31,7 +31,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
new StringPair("Id",SysId.ToString(userOrganisation.Id)),
new StringPair("UserAccountId",SysId.ToString(userOrganisation.UserAccountId)),
new StringPair("OrganisationId",SysId.ToString(userOrganisation.OrganisationId)),
new StringPair("Roles",userOrganisation.OrganisationRoles.Select(item => item.ToString()).Concat(", ")),
new StringPair("Roles",userOrganisation.GetOrganisationRoles().ToList().Select(item => item.ToString()).Concat(", ")),
new StringPair("Status",userOrganisation.StatusCode)
};
}
@@ -216,7 +216,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
dbUserOrganisation._UserAccountId = SysId.ToInt(userOrganisation.UserAccountId);
dbUserOrganisation._OrganisationId = SysId.ToInt(userOrganisation.OrganisationId);
dbUserOrganisation._OrganisationRoleCodes = userOrganisation.GetOrganisationRoleCodesData();
dbUserOrganisation._OrganisationRoleCount = (byte)userOrganisation.OrganisationRoles.Count;
dbUserOrganisation._OrganisationRoleCount = (byte)userOrganisation.OrganisationRoleCount;
dbUserOrganisation._AdminComment = userOrganisation.AdminComment;
// Common.
dbUserOrganisation._Notes = userOrganisation.Notes;
dbUserOrganisation._Status = SacsSystem.GetStatusCode(userOrganisation.Status);
@@ -237,6 +238,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
//userOrganisation.UserAccountId = new SysId(dbUserOrganisation._UserAccountId);
//userOrganisation.OrganisationId = new SysId(dbUserOrganisation._OrganisationId);
userOrganisation.OrganisationRoles = SaxUserOrganisation.GetOrganisationRolesFromCodes(dbUserOrganisation._OrganisationRoleCodes);
userOrganisation.AdminComment = dbUserOrganisation._AdminComment;
// Common.
userOrganisation.Notes = dbUserOrganisation._Notes;
userOrganisation.Status = SacsSystem.GetStatusForCode(dbUserOrganisation._Status);
@@ -256,6 +258,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
private static readonly String prefixUserOrganisation_Organisation_Region = "UsrOrg_Org_Rgn_";
private static readonly String aliasUserOrganisation_Organisation_Sport = "UsrOrg_Org_Spt";
private static readonly String prefixUserOrganisation_Organisation_Sport = "UsrOrg_Org_Spt_";
private static readonly String dataName_UserOrganisation_Organisation_Member_Count = "UsrOrg_Org_Mbr_Count";
private static readonly String dataName_UserOrganisation_Organisation_Opportunity_Count = "UsrOrg_Org_Opp_Count";
private void SetUserOrganisationColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
@@ -329,6 +333,14 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
SetUserOrganisationColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_Status:
SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_Status_Desc:
SetUserOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Organisation.
@@ -353,6 +365,24 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
columnDfn.ReadOnly = true;
break;
// Derived properties.
case SaxUserOrganisation.Column.Organisation_Member_Count:
SetUserOrganisationColDfn(columnDfn, "Members", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = dataName_UserOrganisation_Organisation_Member_Count;
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_Opportunity_Count:
SetUserOrganisationColDfn(columnDfn, "Opportunities", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = dataName_UserOrganisation_Organisation_Opportunity_Count;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Properties.
case SaxUserOrganisation.Column.AdminComment:
SetUserOrganisationColDfn(columnDfn, "Comment", 240, SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment);
break;
//-----------------------------------------------------------
// Derived properties.
@@ -436,6 +466,25 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (!organisationIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation) + " IN (" + organisationIdsIncluded + ")");
// 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.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));
}
// Organisation roles.
if (prm.OrganisationMembersOnly)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasUserOrganisation) + ">0");
@@ -465,8 +514,6 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
{
if (statusCat == SaxUserOrganisation.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserOrganisation.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxUserOrganisation.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserOrganisation.StatusCat.DeletedOnly)
@@ -572,7 +619,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// Add columns as defined in query list.
if (columns.HasId(SaxUserOrganisation.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation));
bool hasUserAccountCols = (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName) || columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_LastName));
bool hasUserAccountCols = (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName) || columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_LastName) || columns.HasId(SaxUserOrganisation.Column.User_Status) || columns.HasId(SaxUserOrganisation.Column.User_Status_Desc));
if (columns.HasId(SaxUserOrganisation.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
bool hasOrganisationCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Name) || columns.HasId(SaxUserOrganisation.Column.Organisation_RegionId) || columns.HasId(SaxUserOrganisation.Column.Organisation_SportId));
@@ -584,6 +631,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.OrganisationRoleCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.AdminComment))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment, aliasUserOrganisation));
// Common properties.
if (columns.HasId(SaxUserOrganisation.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes, aliasUserOrganisation));
@@ -608,10 +657,16 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
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);
if (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
if (columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
if (columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
if (columns.HasId(SaxUserOrganisation.Column.User_LastName) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
if (columns.HasId(SaxUserOrganisation.Column.User_Status) || columns.HasId(SaxUserOrganisation.Column.User_Status_Desc))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Status);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_UserAccount), prefixUserOrganisation_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
@@ -659,6 +714,34 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
}
}
//---------------------------------------------------------------------
// Organisation Member count.
if (columns.HasId(SaxUserOrganisation.Column.Organisation_Member_Count))
{
// Count 'Member' entries on User Organisation for the Organisation.
String aliasOrgMbr = "OrgMbr";
DbQuery qryOrgMbr = new DbQuery(CoreDatabase.DbmsType);
qryOrgMbr.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasOrgMbr);
qryOrgMbr.Columns.Add("Count(*)");
qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasOrgMbr) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasOrgMbr) + ">0");
query.Columns.Add("(" + qryOrgMbr.BuildQuery() + ")", dataName_UserOrganisation_Organisation_Member_Count);
}
//---------------------------------------------------------------------
// Organisation Opportunity count.
if (columns.HasId(SaxUserOrganisation.Column.Organisation_Opportunity_Count))
{
// Count Organisation Opportunities.
String aliasOrgOpp = "OrgOpp";
DbQuery qryOrgOpp = new DbQuery(CoreDatabase.DbmsType);
qryOrgOpp.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasOrgOpp);
qryOrgOpp.Columns.Add("Count(*)");
qryOrgOpp.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrgOpp) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
// ToDo Should be limited by expiry etc.
query.Columns.Add("(" + qryOrgOpp.BuildQuery() + ")", dataName_UserOrganisation_Organisation_Opportunity_Count);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserOrganisationQueryFilter(prm));