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 Sarand.Net.Standard.Base.Utils; using Saxonite.Base.App; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Saxonite.Net.Standard.Base.Mgr { //======================================================================= partial class SaxAccountMgr { //******************************************************************* // Account Mgr - User Organisation //******************************************************************* // Utilities. /// /// Is the user a member of the organisation - excluding relationships which just indicate an 'interest'. /// public bool UserIsOrganisationMember(SysId userAccountId, SysId organisationId, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly) { if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId)) return false; SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId); prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId); prmUserOrganisation.OrganisationMembersOnly = true; prmUserOrganisation.StatusCat = statusCat; return GetUserOrganisationCount(prmUserOrganisation) > 0; } /// /// Does the user have the specified role with the organisation. /// public bool UserHasOrganisationRole(SysId userAccountId, SysId organisationId, Sax.OrganisationRole organisationRole, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly) { if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId) || organisationRole <= 0) return false; return GetOrganisationRolesForUser(userAccountId, organisationId, statusCat).Contains(organisationRole); } /// /// Retrieve the roles that a user has with the organisation. /// public List GetOrganisationRolesForUser(SysId userAccountId, SysId organisationId, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly) { List organisationRoles = new List(); if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId)) return organisationRoles; SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId); prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId); prmUserOrganisation.StatusCat = statusCat; using (SaxUserOrganisation userOrganisation = GetUserOrganisation(prmUserOrganisation)) if (userOrganisation != null) organisationRoles = userOrganisation.GetOrganisationRoles().ToList(); return organisationRoles; } public class OrganisationIdName { public SysId Id { get; internal set; } public String Name { get; internal set; } } /// /// Get list of organisation Ids that the user has the specified role with. /// public List GetOrganisationsForUserRole(SysId userAccountId, Sax.OrganisationRole organisationRole, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly) { List organisationsData = new List(); String organisationRoleCode = Internals.OrganisationRoleCodes.GetCodeForType(organisationRole); if (!SysId.IsValid(userAccountId) || StringUtil.IsEmpty(organisationRoleCode)) return organisationsData; // Columns. ColumnDfn colOrganisationId = GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId); ColumnDfn colOrganisationName = GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name); // Filter. SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId); prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.OrganisationMembersOnly = true; prmUserOrganisation.OrganisationRoles.Add(organisationRole); prmUserOrganisation.StatusCat = statusCat; prmUserOrganisation.SortColumns.Add(colOrganisationName); // Query. using (DbResultSet resultSet = ExecuteUserOrganisationQuery(new List() { colOrganisationId, colOrganisationName }, prmUserOrganisation)) { while (resultSet != null && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); SysId organisationId = new SysId(values.GetLong(colOrganisationId.DataName)); String organisationName = values.GetString(colOrganisationName.DataName); if (SysId.IsValid(organisationId) && !StringUtil.IsEmpty(organisationName)) { OrganisationIdName organisationData = new OrganisationIdName() { Id = organisationId, Name = organisationName }; organisationsData.Add(organisationData); } } } return organisationsData; } //------------------------------------------------------------------- // Create item. public abstract SaxUserOrganisation CreateUserOrganisation(SysId userAccountId, SysId OrganisationId); //------------------------------------------------------------------- // Item exists. public bool UserOrganisationExistsById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return false; SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.IdsIncluded.Add(id); prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any; return GetUserOrganisationCount(prmUserOrganisation) == 1; } //------------------------------------------------------------------- // Retrieve individual items. public abstract SaxUserOrganisation GetUserOrganisation(SaxUserOrganisation.Params prmUserOrganisation); public SaxUserOrganisation GetUserOrganisationById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return null; SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.IdsIncluded.Add(id); prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any; return GetUserOrganisation(prmUserOrganisation); } public SaxUserOrganisation GetUserOrganisationByUserOrganisation(SysId userAccountId, SysId organisationId) { ClearErrorState(); if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId)) return null; SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId); prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId); prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any; return GetUserOrganisation(prmUserOrganisation); } //------------------------------------------------------------------- // Validate item data. public bool IsValidUserOrganisation(SaxUserOrganisation userOrganisation) { ClearErrorState(); if (userOrganisation == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidUserOrganisationData(userOrganisation.GetData(), new SaxUserOrganisation.ErrField()); } public virtual bool IsValidUserOrganisationData(SaxUserOrganisation.Data data, SaxUserOrganisation.ErrField errField) { ClearErrorState(); // User Account. if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId)) { errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("User Account Id must be specified"); } // Organisation. if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.OrganisationId)) { errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Organisation Id must be specified"); } // Admin comment. if (errField.AdminComment != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AdminComment, "comment", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment))) { errField.AdminComment = SacsHierarchyItem.ValidValue.Invalid; return false; } //--------------------------------------------------------------- // Common properties. if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaxUserOrganisation.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } } //--------------------------------------------------------------- // Associated data - ignore for deleted items. if (!data.IsStatusDeleted) { // User & Organisation combination must be unique. if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore) { if (SysId.IsValid(data.UserAccountId) && SysId.IsValid(data.OrganisationId)) { SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); if (SysId.IsValid(data.Id)) prmUserOrganisation.IdsExcluded.Add(data.Id); prmUserOrganisation.UserAccountIdsIncluded.Add(data.UserAccountId); prmUserOrganisation.OrganisationIdsIncluded.Add(data.OrganisationId); prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any; if (GetUserOrganisationCount(prmUserOrganisation) > 0) { errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Organisation must be unique for user"); } } } } //--------------------------------------------------------------- return true; } //------------------------------------------------------------------- // Item database interface. public abstract bool InsertUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo); public virtual bool UserOrganisationCanBeDeleted(SaxUserOrganisation userOrganisation) { ClearErrorState(); return true; } public abstract bool DeleteUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Item list. public abstract ColumnDfn GetUserOrganisationColumnDfn(SaxUserOrganisation.Column columnId, String caption = "", int width = 0); public abstract List GetUserOrganisationQueryFilter(SaxUserOrganisation.Params prmUserOrganisation); public abstract long GetUserOrganisationCount(SaxUserOrganisation.Params prmUserOrganisation); public abstract List GetUserOrganisationList(SaxUserOrganisation.Params prmUserOrganisation); public abstract DbResultSet ExecuteUserOrganisationQuery(List columns, SaxUserOrganisation.Params prmUserOrganisation); //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// public virtual DataValue GetUserOrganisationDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaxUserOrganisation.Column)column.Id) { //----------------------------------------------------------- // User Display Name. case SaxUserOrganisation.Column.User_DisplayName: { String userTitle = values.GetValue(GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.User_Title).DataName).ToString(); String userFirstName = values.GetValue(GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.User_FirstName).DataName).ToString(); String userLastName = values.GetValue(GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.User_LastName).DataName).ToString(); value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName)); } break; /* //----------------------------------------------------------- // User Role. case SaxUserOrganisation.Column.UserOrganisation_Desc: { String userOrganisationCode = values.GetValue(column.DataName).ToString(); value = new DataValue(UserOrganisations.GetDescForCode(userOrganisationCode)); } break; */ //----------------------------------------------------------- // Notes. case SaxUserOrganisation.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- // Status. case SaxUserOrganisation.Column.Status_Desc: case SaxUserOrganisation.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaxUserOrganisation.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDesc(status)); else if (column.Id == (int)SaxUserOrganisation.Column.Status_Ind) value = new DataValue(SaxUserOrganisation.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }