199 lines
8.7 KiB
C#
199 lines
8.7 KiB
C#
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Core;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
|
|
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.ItemOptions;
|
|
using Sarand.Net.Standard.Base.Security;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.App
|
|
{
|
|
//=======================================================================
|
|
public class SbmUserContext : ISbmUserOrganisationContext
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Definitions.
|
|
|
|
// User profile.
|
|
public class UserData
|
|
{
|
|
protected UserData() { }
|
|
protected readonly List<SysIdString> supervisedOwners = new List<SysIdString>();
|
|
/// <summary>User Security Item Id.</summary>
|
|
public SysId SecurityItemId { get; protected set; } = new SysId();
|
|
/// <summary>User Affiliate Id.</summary>
|
|
public SysId AffiliateId { get; protected set; } = new SysId();
|
|
/// <summary>User first name.</summary>
|
|
public String FirstName { get; protected set; } = "";
|
|
/// <summary>User last name.</summary>
|
|
public String LastName { get; protected set; } = "";
|
|
/// <summary>User display name.</summary>
|
|
public String DisplayName { get; protected set; } = "";
|
|
/// <summary>User email address.</summary>
|
|
public String EmailAddress { get; protected set; } = "";
|
|
/// <summary>User managed associations - Id and display name.</summary>
|
|
public List<SysIdString> SupervisedOrganisations { get { return new List<SysIdString>(supervisedOwners); } }
|
|
}
|
|
private class UserData_Internal : UserData
|
|
{
|
|
internal UserData_Internal() { }
|
|
internal void Clear()
|
|
{
|
|
SecurityItemId = new SysId();
|
|
AffiliateId = new SysId();
|
|
FirstName = "";
|
|
LastName = "";
|
|
DisplayName = "";
|
|
EmailAddress = "";
|
|
supervisedOwners.Clear();
|
|
}
|
|
internal void Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOwners)
|
|
{
|
|
SecurityItemId = SysId.InvalidOnNull(securityItemUser?.Id ?? null);
|
|
AffiliateId = SysId.InvalidOnNull(affiliateUser?.Id ?? null);
|
|
FirstName = StringUtil.EmptyOnNull(affiliateUser?.FirstName ?? "").TrimAll();
|
|
LastName = StringUtil.EmptyOnNull(affiliateUser?.LastName ?? "").TrimAll();
|
|
DisplayName = StringUtil.EmptyOnNull(affiliateUser?.GetDisplayName() ?? "").TrimAll();
|
|
EmailAddress = StringUtil.EmptyOnNull(securityItemUser?.EmailAddress ?? "");
|
|
this.supervisedOwners.Clear();
|
|
this.supervisedOwners.AddRange(supervisedOwners);
|
|
}
|
|
}
|
|
|
|
// Owner profile - selected organisation to manage.
|
|
public class OrganisationData
|
|
{
|
|
internal OrganisationData() { }
|
|
/// <summary>Organisation Affiliate Id.</summary>
|
|
public SysId AffiliateId { get; protected set; } = new SysId();
|
|
/// <summary>Organisation Affiliate Type.</summary>
|
|
public Sbm.AffiliateType AffiliateType { get; protected set; } = Sbm.AffiliateType.Unknown;
|
|
/// <summary>Organisation display name.</summary>
|
|
public String DisplayName { get; protected set; } = "";
|
|
/// <summary>Organisation Interface context - to qualify interfaces belonging to the organisation.</summary>
|
|
public String InterfaceContext { get; protected set; } = "";
|
|
/// <summary>Organisation 'Internal' Association Id.</summary>
|
|
public SysId AssociationId { get; protected set; } = new SysId();
|
|
}
|
|
private class OrganisationData_Internal : OrganisationData
|
|
{
|
|
internal OrganisationData_Internal() { }
|
|
internal void Clear()
|
|
{
|
|
AffiliateId = new SysId();
|
|
AffiliateType = Sbm.AffiliateType.Unknown;
|
|
DisplayName = "";
|
|
InterfaceContext = "";
|
|
}
|
|
internal void Refresh(SbmAffiliate affiliateOrganisation, SbmAssociation associationInternal, String interfaceContext)
|
|
{
|
|
AffiliateId = SysId.InvalidOnNull(affiliateOrganisation.Id);
|
|
AffiliateType = affiliateOrganisation.AffiliateType;
|
|
DisplayName = StringUtil.EmptyOnNull(affiliateOrganisation.GetDisplayName()).TrimAll();
|
|
InterfaceContext = StringUtil.EmptyOnNull(interfaceContext);
|
|
AssociationId = associationInternal.Id;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
private readonly UserData_Internal userData = new UserData_Internal();
|
|
private readonly OrganisationData_Internal organisationData;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
protected SbmUserContext(SbmSessionContext sessionContext)
|
|
{
|
|
SessionContext = sessionContext;
|
|
organisationData = new OrganisationData_Internal();
|
|
securityProfile = new SbmSecurityProfile(this, true);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
public SbmSessionContext SessionContext { get; protected set; }
|
|
|
|
// User properties.
|
|
public UserData User { get { return userData; } }
|
|
/// <summary>User Security Item Id.</summary>
|
|
public SysId UserSecurityItemId { get { return User?.SecurityItemId; } }
|
|
/// <summary>User Affiliate Id.</summary>
|
|
public SysId UserAffiliateId { get { return User?.AffiliateId; } }
|
|
/// <summary>User display name.</summary>
|
|
public String UserDisplayName { get { return userData?.DisplayName; } }
|
|
/// <summary>User email address.</summary>
|
|
public String UserEmailAddress { get { return userData?.EmailAddress; } }
|
|
public bool ValidUser { get { return SysId.IsValid(userData.SecurityItemId) && SysId.IsValid(userData?.AffiliateId); } }
|
|
public DbUpdateInfo DbUpdateInfo { get { return new DbUpdateInfo(userData?.AffiliateId, userData?.DisplayName ?? "", SacsSystem.ComputerName); } }
|
|
|
|
// Organisation properties.
|
|
public OrganisationData Organisation { get { return organisationData; } }
|
|
/// <summary>Organisation Affiliate Id.</summary>
|
|
public SysId OrganisationAffiliateId { get { return Organisation?.AffiliateId; } }
|
|
/// <summary>Organisation Affiliate Type.</summary>
|
|
public Sbm.AffiliateType OrganisationAffiliateType { get { return Organisation?.AffiliateType ?? Sbm.AffiliateType.Unknown; } }
|
|
/// <summary>Organisation 'Internal' Association Id.</summary>
|
|
public SysId OrganisationAssociationId { get { return Organisation?.AssociationId; } }
|
|
/// <summary>Organisation display name.</summary>
|
|
public String OrganisationDisplayName { get { return Organisation?.DisplayName; } }
|
|
/// <summary>Organisation Interface context - to qualify interfaces belonging to the organisation.</summary>
|
|
public String OrganisationInterfaceContext { get { return Organisation?.InterfaceContext; } }
|
|
public List<SysIdString> SupervisedOrganisations { get { return new List<SysIdString>(userData.SupervisedOrganisations); } }
|
|
|
|
//-------------------------------------------------------------------
|
|
// Security profile.
|
|
private SbmSecurityProfile securityProfile { get; set; }
|
|
public ISbmSecurityProfile_Core SecurityProfile_Core { get { return securityProfile; } }
|
|
|
|
//-------------------------------------------------------------------
|
|
// Modify properties - internal only.
|
|
protected void SetUserData(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOwners)
|
|
{
|
|
userData.Refresh(securityItemUser, affiliateUser, supervisedOwners);
|
|
}
|
|
protected void ClearUserData()
|
|
{
|
|
userData.Clear();
|
|
organisationData.Clear();
|
|
SetSecurityProfile(new SbmSecurityProfile(this, true));
|
|
}
|
|
protected void SetOrganisationData(SysId affiliateIdOrganisation)
|
|
{
|
|
// Interface context for selected organisation.
|
|
String interfaceContext = SbmAccountMgr.GetInterfaceContext(affiliateIdOrganisation);
|
|
|
|
if (SysId.IsValid(affiliateIdOrganisation))
|
|
{
|
|
using (SbmAccountMgr accountMgr = SbmGlobals.System.CreateAccountMgr(this))
|
|
// Affiliate.
|
|
using (SbmAffiliate affiliateOrganisation = accountMgr.GetAffiliateById(affiliateIdOrganisation))
|
|
// 'Internal' association.
|
|
using (SbmAssociation associationInternal = accountMgr.GetAssociationByOwnerTypeTarget(affiliateIdOrganisation, Sbm.AssociationType.Internal, affiliateIdOrganisation))
|
|
|
|
if (affiliateOrganisation != null && associationInternal != null)
|
|
{
|
|
// Refresh the organisation properties.
|
|
organisationData.Refresh(affiliateOrganisation, associationInternal, interfaceContext);
|
|
}
|
|
else ClearOrganisationData();
|
|
}
|
|
}
|
|
protected void ClearOrganisationData()
|
|
{
|
|
organisationData.Clear();
|
|
}
|
|
protected void SetSecurityProfile(SbmSecurityProfile securityProfile)
|
|
{
|
|
this.securityProfile = securityProfile;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|