Portal signin via Control Instance

This commit is contained in:
Andy Howard
2024-10-29 08:40:47 +00:00
parent bf6bb966bc
commit c5ee285e27
467 changed files with 25771 additions and 3347 deletions
+5 -4
View File
@@ -314,6 +314,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
/// </summary>
public enum ConfigOption
{
Unknown,
//---------------------------------------------------------------
// Application.
/// <summary>Display system menu [Default: True for debug session]</summary>
@@ -1879,11 +1880,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
};
public enum VehicleOdometerUnits
{
OdoUnits_Any = -1,
OdoUnits_Unknown = 0,
Any = -1,
Unknown = 0,
// NB Do not change the positive values, as tied to the database.
OdoUnits_Mile = 10,
OdoUnits_Kilometre = 11,
Mile = 10,
Kilometre = 11,
};
//-------------------------------------------------------------------
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Interfaces;
@@ -16,10 +17,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// A p p l i c a t i o n V i e w s
//-------------------------------------------------------------------
// Jul-2021 ConfigConsole parameter added to avoid local creation. To be reviewed/replaced.
public static bool IsViewApplicable(ISbmUserContext userContext, SbmConfigConsole configConsole, Sbm.View view)
public static bool IsViewApplicable(ISbmUserContext_Core userContext, SbmConfigConsole configConsole, Sbm.View view)
{
//SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext);
ISbmSecurityProfile securityProfile = userContext.SecurityProfile;
ISbmSecurityProfile_Core securityProfile = userContext.SecurityProfile_Core;
switch (view)
{
//-----------------------------------------------------------
@@ -264,7 +265,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// A p p l i c a t i o n M e n u
//-------------------------------------------------------------------
public static bool IsMenuOptionApplicable(ISbmUserContext userContext, SbmConfigConsole configConsole, Sbm.MenuOption menuOption)
public static bool IsMenuOptionApplicable(ISbmUserContext_Core userContext, SbmConfigConsole configConsole, Sbm.MenuOption menuOption)
{
if (!userContext.ValidUser)
{
+12 -12
View File
@@ -52,8 +52,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public abstract ISacsDatabase GetControlDatabase();
public abstract ISacsDatabase GetTemplateDatabase();
// Business Mgr Database.
public abstract List<string> GetDbIdentifiers(SbmSessionContext sessionContext);
public abstract ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext);
public abstract HashSet<string> GetDbIdentifiers(SbmSessionContext sessionContext);
public abstract ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext);
public IDatabaseInfo CreateBusMgrDbInfo(SbmSessionContext sessionContext)
{
return GetBusMgrDatabase(sessionContext).CreateDbInfo();
@@ -83,16 +83,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Create consoles.
public abstract SbmConfigConsole CreateConfigConsole(SbmSessionContext sessionContext);
public abstract SaDiaryConsole CreateDiaryConsole(ISbmUserContext userContext);
public abstract SaSecurityConsole CreateSecurityConsole(ISbmUserContext userContext);
public abstract SaCodeTypeConsole CreateCodeTypeConsole(ISbmUserContext userContext);
public abstract SaReferenceDataConsole CreateReferenceDataConsole(ISbmUserContext userContext);
public abstract SaItemDataConsole CreateItemDataConsole(ISbmUserContext userContext);
public abstract SaItemDocConsole CreateItemDocConsole(ISbmUserContext userContext);
public abstract SaItemOptionConsole CreateItemOptionConsole(ISbmUserContext userContext);
public abstract SaInterfaceConsole CreateInterfaceConsole(ISbmUserContext userContext);
public abstract SaUpdateLogConsole CreateUpdateLogConsole(ISbmUserContext userContext);
public abstract SbmEmailConsole CreateEmailConsole(ISbmUserContext userContext);
public abstract SaDiaryConsole CreateDiaryConsole(ISbmUserContext_Core userContext);
public abstract SaSecurityConsole CreateSecurityConsole(ISbmUserContext_Core userContext);
public abstract SaCodeTypeConsole CreateCodeTypeConsole(ISbmUserContext_Core userContext);
public abstract SaReferenceDataConsole CreateReferenceDataConsole(ISbmUserContext_Core userContext);
public abstract SaItemDataConsole CreateItemDataConsole(ISbmUserContext_Core userContext);
public abstract SaItemDocConsole CreateItemDocConsole(ISbmUserContext_Core userContext);
public abstract SaItemOptionConsole CreateItemOptionConsole(ISbmUserContext_Core userContext);
public abstract SaInterfaceConsole CreateInterfaceConsole(ISbmUserContext_Core userContext);
public abstract SaUpdateLogConsole CreateUpdateLogConsole(ISbmUserContext_Core userContext);
public abstract SbmEmailConsole CreateEmailConsole(ISbmUserContext_Core userContext);
//-------------------------------------------------------------------
}
@@ -101,7 +101,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public virtual String LinkSuffix { get { return ""; } }
//---------------------------------------------------------------
// Utilities.
public virtual bool Refresh(ISbmUserContext userContext)
public virtual bool Refresh(ISbmUserContext_Core userContext)
{
ItemCount = 0;
switch (LinkType)
+101 -61
View File
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 6-Jun-2024 17:06:27
// Code generated by Sarand Database Utilities Mon 21-Oct-2024 18:34:08
//---------------------------------------------------------------------------
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
@@ -17,8 +17,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public enum TableIdx
{
Unknown = 0,
Database,
DatabaseAccount,
ItemParam,
Owner,
Repository,
UserAccount,
}
@@ -27,34 +28,53 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public enum ColumnIdx
{
Unknown = 0,
Database_Id,
Database_ServerName,
Database_InstanceName,
Database_DatabaseName,
Database_UserName,
Database_Password,
Database_OrganisationName,
Database_Notes,
Database_Flags,
Database_Status,
Database_CreateOn,
Database_CreateBy,
Database_CreateHost,
Database_UpdateOn,
Database_UpdateBy,
Database_UpdateHost,
DatabaseAccount_Id,
DatabaseAccount_DatabaseId,
DatabaseAccount_EmailAddress,
DatabaseAccount_Notes,
DatabaseAccount_Flags,
DatabaseAccount_Status,
DatabaseAccount_CreateOn,
DatabaseAccount_CreateBy,
DatabaseAccount_CreateHost,
DatabaseAccount_UpdateOn,
DatabaseAccount_UpdateBy,
DatabaseAccount_UpdateHost,
ItemParam_Id,
ItemParam_ItemType,
ItemParam_ItemId,
ItemParam_Context,
ItemParam_Name,
ItemParam_Value,
ItemParam_Notes,
ItemParam_Flags,
ItemParam_Status,
ItemParam_CreateOn,
ItemParam_CreateBy,
ItemParam_CreateHost,
ItemParam_UpdateOn,
ItemParam_UpdateBy,
ItemParam_UpdateHost,
Owner_Id,
Owner_Name,
Owner_ContactName,
Owner_ContactEmailAddress,
Owner_ContactPhoneMain,
Owner_ContactPhoneAlt,
Owner_Notes,
Owner_Flags,
Owner_Status,
Owner_CreateOn,
Owner_CreateBy,
Owner_CreateHost,
Owner_UpdateOn,
Owner_UpdateBy,
Owner_UpdateHost,
Repository_Id,
Repository_OwnerId,
Repository_Context,
Repository_ServerName,
Repository_InstanceName,
Repository_DatabaseName,
Repository_UserName,
Repository_Password,
Repository_Notes,
Repository_Flags,
Repository_Status,
Repository_CreateOn,
Repository_CreateBy,
Repository_CreateHost,
Repository_UpdateOn,
Repository_UpdateBy,
Repository_UpdateHost,
UserAccount_Id,
UserAccount_EmailAddress,
UserAccount_Title,
@@ -84,8 +104,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 3;
private static readonly int columnCount = 53;
private static readonly int tableCount = 4;
private static readonly int columnCount = 72;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -257,8 +277,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
}
private static readonly TableDfn[] tables =
{
new TableDfn("dbo","Database"),
new TableDfn("dbo","DatabaseAccount"),
new TableDfn("dbo","ItemParam"),
new TableDfn("dbo","Owner"),
new TableDfn("dbo","Repository"),
new TableDfn("dbo","UserAccount"),
};
@@ -285,13 +306,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
private static readonly ColumnDfn[] columns =
{
new ColumnDfn(1,"Id",4,4,true,10),
new ColumnDfn(1,"ServerName",0,-9,false,200),
new ColumnDfn(1,"InstanceName",0,-9,false,200),
new ColumnDfn(1,"DatabaseName",0,-9,false,200),
new ColumnDfn(1,"UserName",0,-9,false,100),
new ColumnDfn(1,"Password",0,-9,false,100),
new ColumnDfn(1,"OrganisationName",0,-9,false,200),
new ColumnDfn(1,"Notes",0,-9,false,2000),
new ColumnDfn(1,"ItemType",3,5,false,5),
new ColumnDfn(1,"ItemId",5,-5,false,19),
new ColumnDfn(1,"Context",0,-9,false,200),
new ColumnDfn(1,"Name",0,-9,false,200),
new ColumnDfn(1,"Value",0,-9,false,0),
new ColumnDfn(1,"Notes",0,-9,false,4000),
new ColumnDfn(1,"Flags",3,5,false,5),
new ColumnDfn(1,"Status",0,12,false,3),
new ColumnDfn(1,"CreateOn",9,93,false,23),
@@ -301,9 +321,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
new ColumnDfn(1,"UpdateBy",4,4,false,10),
new ColumnDfn(1,"UpdateHost",0,12,false,100),
new ColumnDfn(2,"Id",4,4,true,10),
new ColumnDfn(2,"DatabaseId",4,4,false,10),
new ColumnDfn(2,"EmailAddress",0,-9,false,200),
new ColumnDfn(2,"Notes",0,-9,false,2000),
new ColumnDfn(2,"Name",0,-9,false,200),
new ColumnDfn(2,"ContactName",0,-9,false,200),
new ColumnDfn(2,"ContactEmailAddress",0,-9,false,200),
new ColumnDfn(2,"ContactPhoneMain",0,-9,false,100),
new ColumnDfn(2,"ContactPhoneAlt",0,-9,false,100),
new ColumnDfn(2,"Notes",0,-9,false,4000),
new ColumnDfn(2,"Flags",3,5,false,5),
new ColumnDfn(2,"Status",0,12,false,3),
new ColumnDfn(2,"CreateOn",9,93,false,23),
@@ -313,22 +336,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
new ColumnDfn(2,"UpdateBy",4,4,false,10),
new ColumnDfn(2,"UpdateHost",0,12,false,100),
new ColumnDfn(3,"Id",4,4,true,10),
new ColumnDfn(3,"EmailAddress",0,-9,false,200),
new ColumnDfn(3,"Title",0,-9,false,20),
new ColumnDfn(3,"FirstName",0,-9,false,100),
new ColumnDfn(3,"Initials",0,-9,false,10),
new ColumnDfn(3,"LastName",0,-9,false,100),
new ColumnDfn(3,"PhoneMain",0,-9,false,50),
new ColumnDfn(3,"PhoneMobile",0,-9,false,50),
new ColumnDfn(3,"PhoneAlt",0,-9,false,50),
new ColumnDfn(3,"PasswordToken",0,12,false,32),
new ColumnDfn(3,"PasswordHashed",0,-9,false,100),
new ColumnDfn(3,"PasswordHistory",0,-9,false,0),
new ColumnDfn(3,"PasswordChangedAt",9,93,false,16),
new ColumnDfn(3,"LastLoginAt",9,93,false,16),
new ColumnDfn(3,"LastInvalidLoginAt",9,93,false,16),
new ColumnDfn(3,"InvalidLoginCount",3,5,false,5),
new ColumnDfn(3,"Notes",0,-9,false,2000),
new ColumnDfn(3,"OwnerId",4,4,false,10),
new ColumnDfn(3,"Context",0,-9,false,100),
new ColumnDfn(3,"ServerName",0,-9,false,200),
new ColumnDfn(3,"InstanceName",0,-9,false,200),
new ColumnDfn(3,"DatabaseName",0,-9,false,200),
new ColumnDfn(3,"UserName",0,-9,false,100),
new ColumnDfn(3,"Password",0,-9,false,100),
new ColumnDfn(3,"Notes",0,-9,false,4000),
new ColumnDfn(3,"Flags",3,5,false,5),
new ColumnDfn(3,"Status",0,12,false,3),
new ColumnDfn(3,"CreateOn",9,93,false,23),
@@ -337,6 +352,31 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
new ColumnDfn(3,"UpdateOn",9,93,false,23),
new ColumnDfn(3,"UpdateBy",4,4,false,10),
new ColumnDfn(3,"UpdateHost",0,12,false,100),
new ColumnDfn(4,"Id",4,4,true,10),
new ColumnDfn(4,"EmailAddress",0,-9,false,200),
new ColumnDfn(4,"Title",0,-9,false,20),
new ColumnDfn(4,"FirstName",0,-9,false,100),
new ColumnDfn(4,"Initials",0,-9,false,10),
new ColumnDfn(4,"LastName",0,-9,false,100),
new ColumnDfn(4,"PhoneMain",0,-9,false,50),
new ColumnDfn(4,"PhoneMobile",0,-9,false,50),
new ColumnDfn(4,"PhoneAlt",0,-9,false,50),
new ColumnDfn(4,"PasswordToken",0,12,false,32),
new ColumnDfn(4,"PasswordHashed",0,-9,false,100),
new ColumnDfn(4,"PasswordHistory",0,-9,false,0),
new ColumnDfn(4,"PasswordChangedAt",9,93,false,16),
new ColumnDfn(4,"LastLoginAt",9,93,false,16),
new ColumnDfn(4,"LastInvalidLoginAt",9,93,false,16),
new ColumnDfn(4,"InvalidLoginCount",3,5,false,5),
new ColumnDfn(4,"Notes",0,-9,false,2000),
new ColumnDfn(4,"Flags",3,5,false,5),
new ColumnDfn(4,"Status",0,12,false,3),
new ColumnDfn(4,"CreateOn",9,93,false,23),
new ColumnDfn(4,"CreateBy",4,4,false,10),
new ColumnDfn(4,"CreateHost",0,12,false,100),
new ColumnDfn(4,"UpdateOn",9,93,false,23),
new ColumnDfn(4,"UpdateBy",4,4,false,10),
new ColumnDfn(4,"UpdateHost",0,12,false,100),
};
//-------------------------------------------------------------------
@@ -0,0 +1,119 @@
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Sarand.BusinessMgr.Net.Standard.Base.App.SbmInstanceConfig;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
//=======================================================================
/// <summary>
/// Application configuration associated with an instance.
/// </summary>
public abstract class SbmInstanceConfig
{
//-------------------------------------------------------------------
// Definitions.
protected const String ParamContext_Config = "Config";
protected const String ParamContext_ConfigPrefix = "Config-";
protected const String ApplicationOptionValue_Allow = "Allow";
protected const String ApplicationOptionValue_Disallow = "Disallow";
protected const String ApplicationOptionValue_Default= "Default";
//-------------------------------------------------------------------
// Owner/Instance configuration parameters.
public enum ConfigParamType
{
// Affiliate types.
AllowedAffiliateTypes,
DisallowedAffiliateTypes,
// Association types.
AllowedAssociationTypes,
DisallowedAssociationTypes,
// Transaction types.
AllowedTransactionTypes,
DisallowedTransactionTypes,
// Application options.
ApplicationOption,
}
public class ConfigParamData
{
public ConfigParamType ConfigParam { get; set; }
public String Context { get; set; }
public String Name { get; set; }
public HashSet<String> Values { get; } = new HashSet<string>();
public bool Password { get; set; }
}
public bool IsConfigParamOfType(ConfigParamType configParam, SbmcItemParam itemParam)
{
switch (configParam)
{
// Affiliate types.
case ConfigParamType.AllowedAffiliateTypes:
case ConfigParamType.DisallowedAffiliateTypes:
// Association types.
case ConfigParamType.AllowedAssociationTypes:
case ConfigParamType.DisallowedAssociationTypes:
// Transaction types.
case ConfigParamType.AllowedTransactionTypes:
case ConfigParamType.DisallowedTransactionTypes:
return itemParam.Context.EqualsCI(ParamContext_Config) && itemParam.Name.EqualsCI(configParam.ToString());
// Application options.
case ConfigParamType.ApplicationOption:
return itemParam.Context.EqualsCI($"{ParamContext_ConfigPrefix}{ConfigParamType.ApplicationOption.ToString()}");
}
return false;
}
public ConfigParamData GetConfigParamData(ConfigParamType configParam)
{
switch (configParam)
{
// Affiliate types.
case ConfigParamType.AllowedAffiliateTypes:
case ConfigParamType.DisallowedAffiliateTypes:
// Association types.
case ConfigParamType.AllowedAssociationTypes:
case ConfigParamType.DisallowedAssociationTypes:
// Transaction types.
case ConfigParamType.AllowedTransactionTypes:
case ConfigParamType.DisallowedTransactionTypes:
return new ConfigParamData() { ConfigParam = configParam, Context = ParamContext_Config, Name = configParam.ToString() };
}
return null;
}
public ConfigParamData GetAllowOptionConfigParamData(Sbm.ConfigOption option)
{
ConfigParamData configParamData = new ConfigParamData() { ConfigParam = ConfigParamType.ApplicationOption, Context = $"{ParamContext_ConfigPrefix}{ConfigParamType.ApplicationOption.ToString()}", Name = option.ToString() };
configParamData.Values.UnionWith(new List<String>() { ApplicationOptionValue_Allow, ApplicationOptionValue_Disallow, ApplicationOptionValue_Default });
return configParamData;
}
//-------------------------------------------------------------------
// Application options.
//-------------------------------------------------------------------
public abstract bool AllowApplicationOption(Sbm.ConfigOption option, bool defaultResponse);
//-------------------------------------------------------------------
// Allowed data component types.
//-------------------------------------------------------------------
// Supported affiliate types.
public abstract bool AllowAffiliateType(Sbm.AffiliateType type);
// Supported Association types.
public abstract bool AllowAssociationType(Sbm.AssociationType type);
// Supported Transaction types.
public abstract bool AllowTransactionType(Sbm.TransactionType type);
//-------------------------------------------------------------------
// Allow Option.
//-------------------------------------------------------------------
}
//=======================================================================
}
+23 -5
View File
@@ -2,6 +2,7 @@
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Core;
@@ -18,6 +19,7 @@ using Sarand.Net.Standard.Base.UpdateLog;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
@@ -52,14 +54,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// Configurations.
private SbmStockControlConfig stockControlConfig;
private SbmRequirementCostingConfig requirementCostingConfig;
// Currency.
// Reference data.
private List<SaCurrency> currencies = null;
private List<SaTaxCode> taxCodes = null;
private List<SaUnitMeasure> unitsOfMeasure = null;
//-------------------------------------------------------------------
// Construction.
public SbmInternals(ISbmUserContext userContext)
public SbmInternals(ISbmUserContext_Core userContext)
{
UserContext = userContext;
}
@@ -76,6 +78,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
if (stockMgr != null) stockMgr.Dispose();
if (processMgr != null) processMgr.Dispose();
if (dataItemMgr != null) dataItemMgr.Dispose();
// Reference data.
if (currencies != null) currencies.ClearAndDispose();
if (taxCodes != null) taxCodes.ClearAndDispose();
if (unitsOfMeasure != null) unitsOfMeasure.ClearAndDispose();
@@ -97,9 +100,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Session properties.
public SbmApplication Application { get { return SbmGlobals.Application; } }
public ISbmUserContext UserContext { get; }
public ISbmUserContext_Core UserContext { get; }
public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } }
public ISbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } }
public ISbmSecurityProfile_Core SecurityProfile { get { return UserContext.SecurityProfile_Core; } }
public SbmAccountsDfn AccountsDfn { get { if (accountsDfn == null) accountsDfn = new SbmAccountsDfn(UserContext); { return accountsDfn; } } }
// Database.
public ISacsDatabase BusMgrDatabase { get { return Application.GetBusMgrDatabase(SessionContext); } }
@@ -117,6 +120,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public List<TypeCodeDesc> AffiliateTypeCodes { get { return GetCodesOfType(Sbm.SystemCode.AffiliateType); } }
public List<TypeCodeDesc> AssociationTypeCodes { get { return GetCodesOfType(Sbm.SystemCode.AssociationType); } }
public List<TypeCodeDesc> CommodityTypeCodes { get { return GetCodesOfType(Sbm.SystemCode.CommodityType); } }
public List<TypeCodeDesc> AssetTypeCodes { get { return GetCodesOfType(Sbm.SystemCode.AssetType); } }
//-------------------------------------------------------------------
// Code types.
private Dictionary<Sbm.ApplCodeType, List<SaCode>> codeTypeCodes { get; } = new Dictionary<Sbm.ApplCodeType, List<SaCode>>();
public String GetCodeTypeCode(Sbm.ApplCodeType codeType)
{
return SbmSystem.GetCodeTypeCode(codeType);
}
public List<SaCode> GetCodesForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
if (!codeTypeCodes.ContainsKey(codeType))
codeTypeCodes.Add(codeType, CodeTypeConsole.GetCodesForCodeType(GetCodeTypeCode(codeType), false));
return new List<SaCode>(codeTypeCodes.GetValueOrDefault(codeType, new List<SaCode>()).Where(c => !activeOnly || c.IsStatusActive));
}
//-------------------------------------------------------------------
// Managers.
@@ -291,7 +309,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public SaEmailConfig EmailConfig { get { return Application.EmailConfig; } }
public SbmEmailConsole EmailConsole
{
get
get
{
if (emailConsole == null)
emailConsole = Application.CreateEmailConsole(UserContext);
@@ -1,5 +1,6 @@
using Newtonsoft.Json;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -12,7 +13,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
//=======================================================================
public class SbmSecurityProfile : SaErrorStateItem, ISbmSecurityProfile
public class SbmSecurityProfile : SaErrorStateItem, ISbmSecurityProfile_Core
{
//-------------------------------------------------------------------
// Data members.
@@ -24,7 +25,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Construction.
public SbmSecurityProfile(ISbmUserContext userContext, bool includeHostSecurityProfile)
public SbmSecurityProfile(ISbmUserContext_Core userContext, bool includeHostSecurityProfile)
{
this.UserContext = userContext;
this.includeHostSecurityProfile = includeHostSecurityProfile;
@@ -38,7 +39,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Properties.
[JsonIgnore]
public ISbmUserContext UserContext { get; }
public ISbmUserContext_Core UserContext { get; }
//-------------------------------------------------------------------
// Refresh profile.
+13 -98
View File
@@ -28,12 +28,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
SessionIdx = sessionIdx;
ItemIdx = itemIdx;
SessionContext = sessionContext;
userData = CreateUserData(SessionContext, null, null, null);
organisationData = new OrganisationData(null, null);
}
/// <summary>
/// Plain constructor - Contorl application.
/// <para>SessionContext must be supplied.</para>
/// Plain constructor.
/// <para>- SessionContext must be supplied.</para>
/// </summary>
protected SbmSessionData(SbmSessionContext sessionContext)
{
@@ -41,19 +39,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
ItemIdx = 1000;
SessionContext = sessionContext;
}
/// <summary>
/// Primary constructor - on user login.
/// <para>SessionContext and UserAccount must be supplied.</para>
/// <para>Roles list is optional.</para>
/// </summary>
protected SbmSessionData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation)
{
SessionIdx = ++sessionIdxRoot;
ItemIdx = 1000;
SessionContext = sessionContext;
userData = CreateUserData(SessionContext, securityItemUser, affiliateUser, supervisedOrganisations);
organisationData = new OrganisationData(associationOrganisation, affiliateOrganisation);
}
//-------------------------------------------------------------------
// Properties.
@@ -66,115 +51,45 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// Session context.
public SbmSessionContext SessionContext { get; }
// User properties.
[JsonIgnore]
public bool ValidUserSession { get { return SysId.IsValid(User.AffiliateId) && SysId.IsValid(User.AffiliateId); } }
public abstract String UserEmailAddress { get; }
[JsonIgnore]
public DbUpdateInfo DbUpdateInfo
{
get
{
return new DbUpdateInfo(User.AffiliateId, StringUtil.OnEmpty(userData.DisplayName, userData.EmailAddress), SbmSystem.ComputerName);
}
}
public abstract String UserDisplayName { get; }
[JsonIgnore]
public abstract bool ValidUser { get; }
[JsonIgnore]
public abstract DbUpdateInfo DbUpdateInfo { get; }
//-------------------------------------------------------------------
// User.
public class UserData : ISbmUserContext.IUserData
public class UserData
{
protected UserData() { }
protected UserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations)
protected UserData(SbmSessionContext sessionContext)
{
if (securityItemUser != null)
{
SecurityItemId = securityItemUser.Id;
}
if (affiliateUser != null)
{
AffiliateId = affiliateUser.Id;
Refresh(securityItemUser, affiliateUser, supervisedOrganisations);
if (sessionContext.Application == Sbm.Application.WebControl)
KeepLoggedIn = affiliateUser.KeepLoggedIn_Control;
else if (sessionContext.Application == Sbm.Application.WebPortal)
KeepLoggedIn = affiliateUser.KeepLoggedIn_Portal;
else Debugger.Break();
}
this.supervisedOrganisations = supervisedOrganisations ?? new List<SysIdString>();
}
protected UserData(UserData userData)
{
SecurityItemId = userData.SecurityItemId;
AffiliateId = userData.AffiliateId;
Title = userData.Title;
FirstName = userData.FirstName;
LastName = userData.LastName;
DisplayName = userData.DisplayName;
EmailAddress = userData.EmailAddress;
supervisedOrganisations = userData.supervisedOrganisations;
KeepLoggedIn = userData.KeepLoggedIn;
}
// Properties.
public SysId SecurityItemId { get; protected set; }
public SysId AffiliateId { get; protected set; }
public String Title { get; protected set; }
public String FirstName { get; protected set; }
public String LastName { get; protected set; }
public String DisplayName { get; protected set; }
public String EmailAddress { get; protected set; }
/// <summary>User managed associations - Id and display name.</summary>
public List<SysIdString> SupervisedOrganisations { get { return new List<SysIdString>(supervisedOrganisations); } }
protected List<SysIdString> supervisedOrganisations { get; } = new List<SysIdString>();
public bool KeepLoggedIn { get; protected set; }
public bool UserAccountSupplied { get; protected set; }
// Refresh properties.
protected bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations)
protected bool Refresh()
{
// Check that user matches the session.
if (!SysId.IsValid(SecurityItemId) || !SysId.IsValid(securityItemUser?.Id ?? null) || !SecurityItemId.Equals(securityItemUser.Id)) return false;
if (!SysId.IsValid(AffiliateId) || !SysId.IsValid(affiliateUser?.Id ?? null) || !AffiliateId.Equals(affiliateUser.Id)) return false;
// Refresh properties.
EmailAddress = securityItemUser.EmailAddress;
Title = affiliateUser.Title;
FirstName = affiliateUser.FirstName;
LastName = affiliateUser.LastName;
DisplayName = affiliateUser.GetDisplayName();
this.supervisedOrganisations.Clear();
this.supervisedOrganisations.AddRange(supervisedOrganisations);
return true;
}
}
protected abstract UserData CreateUserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations);
[JsonProperty("User")]
protected UserData userData;
[JsonIgnore]
/// <summary>User account details.</summary>
public ISbmUserContext.IUserData User { get { return userData; } }
public bool ValidUser { get { return SysId.IsValid(userData.SecurityItemId) && SysId.IsValid(userData.AffiliateId); } }
public bool KeepLoggedIn { get { return userData.KeepLoggedIn; } }
//-------------------------------------------------------------------
// Organisation.
public class OrganisationData : ISbmUserContext.IOrganisationData
{
private OrganisationData() { }
public OrganisationData(SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation)
{
AffiliateId = affiliateOrganisation?.Id ?? null;
AffiliateType = affiliateOrganisation?.AffiliateType ?? Sbm.AffiliateType.Unknown;
AssociationId = associationOrganisation?.Id ?? null;
DisplayName = affiliateOrganisation?.GetDisplayName() ?? "";
InterfaceContext = SbmAccountMgr.GetInterfaceContext(AffiliateId);
}
public SysId AffiliateId { get; protected set; }
public Sbm.AffiliateType AffiliateType { get; protected set; }
public SysId AssociationId { get; protected set; }
public String DisplayName { get; protected set; }
public String InterfaceContext { get; }
}
[JsonProperty("Organisation")]
protected OrganisationData organisationData;
[JsonIgnore]
public ISbmUserContext.IOrganisationData Organisation { get { return organisationData; } }
//-------------------------------------------------------------------
}
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.Net.Standard.Base.App;
@@ -53,17 +54,17 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Protected Construction - use derived objects.
protected SbmSessionProfile(SbmSessionContext sessionContext)
protected SbmSessionProfile(SbmSessionContext sessionContext, SysId affiliateIdUser)
{
userContext = new SbmUserContext_Internal(sessionContext);
SysParamCache = new SbmSysParamCache(userContext);
SysParamCache = new SbmSysParamCache(userContext, affiliateIdUser);
}
//-------------------------------------------------------------------
// Properties.
public SbmUserContext UserContext { get { return userContext; } }
public SbmSessionContext SessionContext { get { return userContext.SessionContext; } }
public ISbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } }
public ISbmSecurityProfile_Core SecurityProfile { get { return UserContext.SecurityProfile_Core; } }
protected SaItemOption.Cache OrganisationConfigOptionsCache { get { return UserContext.OrganisationConfigOptionsCache; } }
// User parameters.
protected SbmSysParamCache SysParamCache { get; }
@@ -49,9 +49,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Construction.
public SbmSysParamCache(ISbmUserContext userContext)
public SbmSysParamCache(ISbmUserContext_Core userContext, SysId affiliateIdUser)
{
this.UserContext = userContext;
this.AffiliateIdUser = affiliateIdUser;
}
protected override void Dispose(bool disposing)
@@ -63,8 +64,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Properties.
public ISbmUserContext UserContext { get; }
public SysId AffiliateIdUser { get { return UserContext.User.AffiliateId; } }
public ISbmUserContext_Core UserContext { get; }
public SysId AffiliateIdUser { get; }
public bool Modified { get; private set; }
//-------------------------------------------------------------------
@@ -108,7 +109,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
/// <summary>Retrieve the value for the user parameter.</summary>
public String GetUserParamValue(String name, SysId affiliateIdTarget = null, SysId associationId = null)
{
if (!SysId.IsValid(UserContext.User.AffiliateId)) return "";
if (!SysId.IsValid(AffiliateIdUser)) return "";
return GetParam(name, affiliateIdTarget, associationId)?.Value ?? "";
}
@@ -124,7 +125,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public bool SetUserParamValue(String name, String value, SysId affiliateIdTarget = null, SysId associationId = null)
{
bool success = false;
if (!SysId.IsValid(UserContext.User.AffiliateId)) return false;
if (!SysId.IsValid(AffiliateIdUser)) return false;
SbmSysParam sysParam = GetParam(name, affiliateIdTarget, associationId);
if (sysParam != null)
{
@@ -146,7 +147,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
return userSysParams.Find
(item => item.Category == Sbm.SysParamCategory.UserParam &&
item.Name.EqualsCI(name) &&
item.AffiliateIdOwner.Equals(UserContext.User.AffiliateId) &&
item.AffiliateIdOwner.Equals(AffiliateIdUser) &&
SysId.ToInt(item.AffiliateIdTarget) == SysId.ToInt(affiliateIdTarget) &&
SysId.ToInt(item.AssociationId) == SysId.ToInt(associationId));
}
@@ -159,14 +160,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
using (SbmAccountMgr accountMgr = CreateAccountMgr())
{
// Retrieve a matching parameter from the database.
sysParam = accountMgr.GetSysParam(Sbm.SysParamCategory.UserParam, name, UserContext.User.AffiliateId, affiliateIdTarget, associationId);
sysParam = accountMgr.GetSysParam(Sbm.SysParamCategory.UserParam, name, AffiliateIdUser, affiliateIdTarget, associationId);
if (sysParam == null)
{
// Parameter not found - create a new one.
sysParam = accountMgr.CreateSysParam(Sbm.SysParamCategory.UserParam, name);
if (sysParam != null)
{
sysParam.AffiliateIdOwner = UserContext.User.AffiliateId;
sysParam.AffiliateIdOwner = AffiliateIdUser;
sysParam.AffiliateIdTarget = affiliateIdTarget;
sysParam.AssociationId = associationId;
}
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Core;
@@ -24,7 +25,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// R e g i s t e r C o d e T y p e s
//-------------------------------------------------------------------
public static void RegisterCodeTypes(SbmConfigConsole configConsole, SaCodeTypeConsole codeTypeConsole, ISbmUserContext userContext)
public static void RegisterCodeTypes(SbmConfigConsole configConsole, SaCodeTypeConsole codeTypeConsole, ISbmUserContext_Core userContext)
{
//---------------------------------------------------------------
// C o m m o d i t i e s
@@ -384,8 +384,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
fuelTypes.Add(Sbm.VehicleFuelType.Electric, "ELEC", "Electric");
fuelTypes.Add(Sbm.VehicleFuelType.Hybrid, "HYBRID", "Hybrid");
// OdometerUnits.
odometerUnits.Add(Sbm.VehicleOdometerUnits.OdoUnits_Mile, "MILE", "Miles");
odometerUnits.Add(Sbm.VehicleOdometerUnits.OdoUnits_Kilometre, "KM", "Kilometres");
odometerUnits.Add(Sbm.VehicleOdometerUnits.Mile, "MILE", "Miles");
odometerUnits.Add(Sbm.VehicleOdometerUnits.Kilometre, "KM", "Kilometres");
// DiscountType.
discountTypes.Add(Sbm.DiscountType.NoDiscount, "NoDisc", "No Discount");
discountTypes.Add(Sbm.DiscountType.ValueDiscount, "ValDisc", "Value discount");
+17 -11
View File
@@ -1,5 +1,7 @@
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
@@ -75,14 +77,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// S y s t e m C o d e s
//-------------------------------------------------------------------
private static String GetOwnerOption_Caption(ISbmUserContext userContext, Sbm.OrgOption_Caption orgOption_Caption, String defaultValue)
private static String GetOwnerOption_Caption(ISbmUserContext_Core userContext, Sbm.OrgOption_Caption orgOption_Caption, String defaultValue)
{
// In case user context not specified, eg. Security Console initialising list of transaction types before user logged in.
if (userContext != null)
return userContext.GetOwnerOption_Caption(orgOption_Caption, defaultValue);
return defaultValue;
}
public static List<TypeCodeDesc> GetCodesOfType(ISbmUserContext userContext, Sbm.SystemCode systemCode)
public static List<TypeCodeDesc> GetCodesOfType(ISbmUserContext_Core userContext, Sbm.SystemCode systemCode)
{
SbmConfigConsole configConsole = null; // SbmGlobals.GetConfigConsole(userContext.SessionContext);
switch (systemCode)
@@ -481,14 +483,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// D a t a M a n a g e r s
//-------------------------------------------------------------------
public abstract SbmAccountMgr CreateAccountMgr(ISbmUserContext userContext);
public abstract SbmAssetMgr CreateAssetMgr(ISbmUserContext userContext);
public abstract SbmCommodityMgr CreateCommodityMgr(ISbmUserContext userContext);
public abstract SbmPriceMgr CreatePriceMgr(ISbmUserContext userContext);
public abstract SbmDataItemMgr CreateDataItemMgr(ISbmUserContext userContext);
public abstract SbmProcessMgr CreateProcessMgr(ISbmUserContext userContext);
public abstract SbmStockMgr CreateStockMgr(ISbmUserContext userContext);
public abstract SbmTransactionMgr CreateTransactionMgr(ISbmUserContext userContext);
public abstract SbmAccountMgr CreateAccountMgr(ISbmUserContext_Core userContext);
public abstract SbmAssetMgr CreateAssetMgr(ISbmUserContext_Core userContext);
public abstract SbmCommodityMgr CreateCommodityMgr(ISbmUserContext_Core userContext);
public abstract SbmPriceMgr CreatePriceMgr(ISbmUserContext_Core userContext);
public abstract SbmDataItemMgr CreateDataItemMgr(ISbmUserContext_Core userContext);
public abstract SbmProcessMgr CreateProcessMgr(ISbmUserContext_Core userContext);
public abstract SbmStockMgr CreateStockMgr(ISbmUserContext_Core userContext);
public abstract SbmTransactionMgr CreateTransactionMgr(ISbmUserContext_Core userContext);
// Control.
public abstract SbmcAccountMgr CreateControlAccountMgr();
public abstract SbmcInstanceMgr CreateControlInstanceMgr();
public abstract SbmcItemMgr CreateControlItemMgr();
//-------------------------------------------------------------------
// A p p l i c a t i o n P r o p e r t i e s
@@ -14,12 +14,13 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
//=======================================================================
public class SbmUserContext : ISbmUserContext
public class SbmUserContext : ISbmUserContext_Core
{
//-------------------------------------------------------------------
// Definitions.
// User profile.
public class UserData : ISbmUserContext.IUserData
public class UserData
{
protected UserData() { }
protected readonly List<SysIdString> supervisedOwners = new List<SysIdString>();
@@ -63,8 +64,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
this.supervisedOwners.AddRange(supervisedOwners);
}
}
// Owner profile - selected organisation to manage.
public class OrganisationData : ISbmUserContext.IOrganisationData
public class OrganisationData
{
internal OrganisationData() { }
// Organisation options.
@@ -135,15 +137,38 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Properties.
public SbmSessionContext SessionContext { get; protected set; }
public ISbmUserContext.IUserData User { get { return userData; } }
public bool ValidUser { get { return SysId.IsValid(userData.SecurityItemId) && SysId.IsValid(userData.AffiliateId); } }
public ISbmUserContext.IOrganisationData Organisation { get { return organisationData; } }
public DbUpdateInfo DbUpdateInfo { get { return new DbUpdateInfo(User?.AffiliateId, User?.DisplayName ?? "", SacsSystem.ComputerName); } }
// 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 SecurityProfile { get { return securityProfile; } }
public ISbmSecurityProfile_Core SecurityProfile_Core { get { return securityProfile; } }
//-------------------------------------------------------------------
// Organisation configuration.
@@ -0,0 +1,47 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus.Control
{
//=======================================================================
public class SbmcHierarchyItem : SacsHierarchyItem
{
//-------------------------------------------------------------------
// Construction.
protected SbmcHierarchyItem() : base()
{
}
protected SbmcHierarchyItem(SysId id) : base(id)
{
}
//-------------------------------------------------------------------
// Item types.
public enum ItemType
{
Unknown = 0,
UserAccount = 2000,
Owner = 2010,
Repository = 2020,
ItemParam = 2120,
}
public static String getItemTypeCaption(ItemType itemType)
{
switch (itemType)
{
case ItemType.UserAccount: return "User account";
case ItemType.ItemParam: return "Item param";
}
return itemType.ToString();
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,257 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Sarand.BusinessMgr.Net.Standard.Base.App.SbmSysParamCache;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus.Control
{
//=======================================================================
public class SbmcItemParam : SbmcHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
Id,
// Item.
ItemType,
ItemType_Caption,
ItemId,
Item_Caption,
// Param.
Context,
Name,
Value,
// Common.
Notes,
Flags,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public ItemId ItemId { get; set; } = new ItemId();
public String Context { get; set; } = "";
public String Name { get; set; } = "";
public String Value { get; set; } = "";
}
//-------------------------------------------------------------------
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
Status = SbmcItemParam.DefaultStatus;
}
public ItemId ItemId
{
get { return data.ItemId; }
set { CheckChanged(data.ItemId, value); data.ItemId = value ?? new ItemId(); }
}
public String Context
{
get { return data.Context; }
set { CheckChanged(data.Context, value); data.Context = value; }
}
public String Name
{
get { return data.Name; }
set { CheckChanged(data.Name, value); data.Name = value; }
}
public String Value
{
get { return data.Value; }
set { CheckChanged(data.Value, value); data.Value = value; }
}
internal void PopulateFrom(Data data)
{
this.ItemId = data.ItemId;
Context = data.Context;
Name = data.Name;
Value = data.Value;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
public new class ErrField : SacsHierarchyItem.ErrField
{
// Identifies the field that has invalid data.
public ValidValue ItemId { get; set; } = ValidValue.Valid;
public ValidValue Name { get; set; } = ValidValue.Valid;
public ValidValue Context { get; set; } = ValidValue.Valid;
public ValidValue Value { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
public static readonly Byte Flag_Password = 0x01;
//-------------------------------------------------------------------
// Construction.
protected SbmcItemParam(SysId id, ItemId itemId) : base(id)
{
base.SetData(data);
ItemId = itemId;
}
//-------------------------------------------------------------------
// Item status.
private static readonly List<SaStatus> ownerStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(ownerStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.OnHold:
return DataValue.TriStateType.Amber;
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
public static List<SbmcHierarchyItem.ItemType> ValidItemTypes =>
new List<ItemType>()
{
ItemType.Owner,
ItemType.Repository
};
public static bool IsPasswordValue(String paramContext, String paramName, ushort flags)
{
if (GetFlag(flags, Flag_Password)) return true;
if (paramContext.ContainsCI("password") || paramName.ContainsCI("password")) return true;
if (paramContext.ContainsCI("pword") || paramName.ContainsCI("pword")) return true;
if (paramContext.ContainsCI("secret") || paramName.ContainsCI("secret")) return true;
return false;
}
public bool IsPasswordValue()
{
return IsPasswordValue(Context, Name, Flags);
}
//-------------------------------------------------------------------
// Properties.
public Data GetData() { return data.Clone(); }
public void SetData(Data data)
{
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
if (ItemId.IsValid(ItemId) && (ItemId.Type != data.ItemId.Type || SysId.ToInt(ItemId.Id) != SysId.ToInt(data.ItemId.Id)))
throw new NotSupportedException($"{SysUtil.Fn} Item Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Properties.
// ItemParam.
public ItemId ItemId
{
get { return data.ItemId; }
protected set { data.ItemId = value; }
}
public String Context
{
get { return data.Context; }
set { data.Context = value; }
}
public String Name
{
get { return data.Name; }
set { data.Name = value; }
}
public String Value
{
get { return data.Value; }
set { data.Value = value; }
}
//-------------------------------------------------------------------
// Flags.
public bool IsPrimary
{
get { return GetFlag(Flag_Password); }
set { SetFlag(Flag_Password, value); }
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
// List parameters.
/// <summary> Status filter options.</summary>
public enum StatusCat
{
Any,
ActiveOnly,
InactiveOnly,
NotDeleted,
DeletedOnly,
}
/// <summary>Parameters - used to define the filters that should be applied to a list of items.</summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
public HashSet<ItemId> ItemIdsIncluded { get; } = new HashSet<ItemId>();
/// <summary>Generic search value - name, contact, email, phone etc.</summary>
public String Search { get; set; }
public String NotesPartial { get; set; }
/// <summary>Contact status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Table aliases.
public String Alias_Item_Owner { get; set; }
public String Alias_Item_Repository { get; set; }
}
}
//=======================================================================
// Item list.
public static class SbmcItemParamList
{
}
//=======================================================================
}
@@ -0,0 +1,237 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus.Control
{
//=======================================================================
public class SbmcOwner : SbmcHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
// Owner.
Id,
Name,
ContactName,
ContactEmailAddress,
ContactPhoneMain,
ContactPhoneAlt,
// Repositories.
RepositoryCount,
// Common.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public String Name { get; set; } = "";
public String ContactName { get; set; } = "";
public String ContactEmailAddress { get; set; } = "";
public String ContactPhoneMain { get; set; } = "";
public String ContactPhoneAlt { get; set; } = "";
}
//-------------------------------------------------------------------
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
Status = SbmcOwner.DefaultStatus;
}
public String Name
{
get { return data.Name; }
set { CheckChanged(data.Name, value); data.Name = value; }
}
public String ContactName
{
get { return data.ContactName; }
set { CheckChanged(data.ContactName, value); data.ContactName = value; }
}
public String ContactEmailAddress
{
get { return data.ContactEmailAddress; }
set { CheckChanged(data.ContactEmailAddress, value); data.ContactEmailAddress = value; }
}
public String ContactPhoneMain
{
get { return data.ContactPhoneMain; }
set { CheckChanged(data.ContactPhoneMain, value); data.ContactPhoneMain = value; }
}
public String ContactPhoneAlt
{
get { return data.ContactPhoneAlt; }
set { CheckChanged(data.ContactPhoneAlt, value); data.ContactPhoneAlt = value; }
}
internal void PopulateFrom(Data data)
{
Name = data.Name;
ContactName = data.ContactName;
ContactEmailAddress = data.ContactEmailAddress;
ContactPhoneMain = data.ContactPhoneMain;
ContactPhoneAlt = data.ContactPhoneAlt;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
public new class ErrField : SacsHierarchyItem.ErrField
{
// Identifies the field that has invalid data.
public ValidValue Name { get; set; } = ValidValue.Valid;
public ValidValue ContactName { get; set; } = ValidValue.Valid;
public ValidValue ContactEmailAddress { get; set; } = ValidValue.Valid;
public ValidValue ContactPhoneMain { get; set; } = ValidValue.Valid;
public ValidValue ContactPhoneAlt { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmcOwner(SysId id) : base(id)
{
base.SetData(data);
}
//-------------------------------------------------------------------
// Owner status.
private static readonly List<SaStatus> ownerStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.OnHold,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(ownerStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.OnHold:
return DataValue.TriStateType.Amber;
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// Properties.
public Data GetData() { return data.Clone(); }
public void SetData(Data data)
{
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Properties.
// Owner.
public String Name
{
get { return data.Name; }
set { data.Name = value; }
}
public String ContactName
{
get { return data.ContactName; }
set { data.ContactName = value; }
}
public String ContactEmailAddress
{
get { return data.ContactEmailAddress; }
set { data.ContactEmailAddress = value; }
}
public String ContactPhoneMain
{
get { return data.ContactPhoneMain; }
set { data.ContactPhoneMain = value; }
}
public String ContactPhoneAlt
{
get { return data.ContactPhoneAlt; }
set { data.ContactPhoneAlt = value; }
}
//-------------------------------------------------------------------
// Flags.
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
// List parameters.
/// <summary> Status filter options.</summary>
public enum StatusCat
{
Any,
ActiveOnly,
OnHoldOnly,
InactiveOnly,
NotDeleted,
DeletedOnly,
}
/// <summary>Parameters - used to define the filters that should be applied to a list of items.</summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
/// <summary>Generic search value - name, contact, email, phone etc.</summary>
public String Search { get; set; }
public String NotesPartial { get; set; }
/// <summary>Contact status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
}
//=======================================================================
// Item list.
public static class SbmcOwnerList
{
}
//=======================================================================
}
@@ -0,0 +1,280 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus.Control
{
//=======================================================================
public class SbmcRepository : SbmcHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
// Repository.
Id,
Context,
ServerName,
InstanceName,
DatabaseName,
UserName,
// Owner.
OwnerId,
OwnerName,
ContactName,
ContactEmailAddress,
ContactPhoneMain,
ContactPhoneAlt,
// Common properties.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public SysId OwnerId { get; set; }
public String Context { get; set; } = "";
public String ServerName { get; set; } = "";
public String InstanceName { get; set; } = "";
public String DatabaseName { get; set; }
public String UserName { get; set; } = "";
public String Password { get; set; } = "";
}
//-------------------------------------------------------------------
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
Status = SbmcRepository.DefaultStatus;
}
public SysId OwnerId
{
get { return data.OwnerId; }
set { CheckChanged(data.OwnerId, value); data.OwnerId = value; }
}
public String Context
{
get { return data.Context; }
set { CheckChanged(data.Context, value); data.Context = value; }
}
public String ServerName
{
get { return data.ServerName; }
set { CheckChanged(data.ServerName, value); data.ServerName = value; }
}
public String InstanceName
{
get { return data.InstanceName; }
set { CheckChanged(data.InstanceName, value); data.InstanceName = value; }
}
public String DatabaseName
{
get { return data.DatabaseName; }
set { CheckChanged(data.DatabaseName, value); data.DatabaseName = value; }
}
public String UserName
{
get { return data.UserName; }
set { CheckChanged(data.UserName, value); data.UserName = value; }
}
public String Password
{
get { return data.Password; }
set { CheckChanged(data.Password, value); data.Password = value; }
}
internal void PopulateFrom(Data data)
{
OwnerId = data.OwnerId;
Context = data.Context;
ServerName = data.ServerName;
InstanceName = data.InstanceName;
DatabaseName = data.DatabaseName;
UserName = data.UserName;
Password = data.Password;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
public new class ErrField : SacsHierarchyItem.ErrField
{
// Identifies the field that has invalid data.
public ValidValue OwnerId { get; set; } = ValidValue.Valid;
public ValidValue Context { get; set; } = ValidValue.Valid;
public ValidValue ServerName { get; set; } = ValidValue.Valid;
public ValidValue InstanceName { get; set; } = ValidValue.Valid;
public ValidValue DatabaseName { get; set; } = ValidValue.Valid;
public ValidValue UserName { get; set; } = ValidValue.Valid;
public ValidValue Password { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmcRepository(SysId id) : base(id)
{
base.SetData(data);
}
//-------------------------------------------------------------------
// Repository status.
private static readonly List<SaStatus> repositoryStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.OnHold,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(repositoryStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.OnHold:
return DataValue.TriStateType.Amber;
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// Properties.
public Data GetData() { return data.Clone(); }
public void SetData(Data data)
{
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Properties.
// Owner.
public SysId OwnerId
{
get { return data.OwnerId; }
set { data.OwnerId = value; }
}
// Repository.
public String Context
{
get { return data.Context; }
set { data.Context = value; }
}
public String ServerName
{
get { return data.ServerName; }
set { data.ServerName = value; }
}
public String InstanceName
{
get { return data.InstanceName; }
set { data.InstanceName = value; }
}
public String DatabaseName
{
get { return data.DatabaseName; }
set { data.DatabaseName = value; }
}
// Credentials.
public String UserName
{
get { return data.UserName; }
set { data.UserName = value; }
}
public String Password
{
get { return data.Password; }
set { data.Password = value; }
}
//-------------------------------------------------------------------
// Flags.
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
// List parameters.
/// <summary> Status filter options.</summary>
public enum StatusCat
{
Any,
ActiveOnly,
OnHoldOnly,
InactiveOnly,
NotDeleted,
DeletedOnly,
}
/// <summary>Parameters - used to define the filters that should be applied to a list of items.</summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
/// <summary>Repository owners.</summary>
public HashSet<SysId> OwnerIdsIncluded { get; } = new HashSet<SysId>();
/// <summary>Repository contexts.</summary>
public HashSet<String> ContextsIncluded { get; set; } = new HashSet<String>();
/// <summary>Generic search value - context, server, instance, database etc.</summary>
public String Search { get; set; }
public String NotesPartial { get; set; }
/// <summary>Contact status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Table alises.
public String Alias_Owner { get; set; }
}
}
//=======================================================================
// Item list.
public static class SbmcRepositoryList
{
}
//=======================================================================
}
@@ -0,0 +1,425 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus.Control
{
//=======================================================================
public class SbmcUserAccount : SbmcHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
// User Account.
Id,
EmailAddress,
DisplayName,
Title,
FirstName,
LastName,
Initials,
PhoneMain,
PhoneMobile,
PhoneAlt,
// Security.
LastLoginOn,
LastLoginAt,
LastInvalidLoginOn,
LastInvalidLoginAt,
InvalidLoginCount,
// Common.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public String EmailAddress { get; set; } = "";
public String Title { get; set; } = "";
public String FirstName { get; set; } = "";
public String Initials { get; set; } = "";
public String LastName { get; set; } = "";
public String PhoneMain { get; set; } = "";
public String PhoneMobile { get; set; } = "";
public String PhoneAlt { get; set; } = "";
public String PasswordToken { get; set; }
public String PasswordHashed { get; set; } = "";
public List<String> PasswordHistory { get; } = new List<string>();
public DateTime? PasswordChangedAt { get; set; }
public DateTime? LastLoginAt { get; set; }
public DateTime? LastInvalidLoginAt { get; set; }
public short InvalidLoginCount { get; set; }
}
//-------------------------------------------------------------------
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
//Status = SbmAccountMgr.AffiliateStatusDefault;
}
public String EmailAddress
{
get { return data.EmailAddress; }
set { CheckChanged(data.EmailAddress, value); data.EmailAddress = value; }
}
public String Title
{
get { return data.Title; }
set { CheckChanged(data.Title, value); data.Title = value; }
}
public String FirstName
{
get { return data.FirstName; }
set { CheckChanged(data.FirstName, value); data.FirstName = value; }
}
public String Initials
{
get { return data.Initials; }
set { CheckChanged(data.Initials, value); data.Initials = value; }
}
public String LastName
{
get { return data.LastName; }
set { CheckChanged(data.LastName, value); data.LastName = value; }
}
public String PhoneMain
{
get { return data.PhoneMain; }
set { CheckChanged(data.PhoneMain, value); data.PhoneMain = value; }
}
public String PhoneMobile
{
get { return data.PhoneMobile; }
set { CheckChanged(data.PhoneMobile, value); data.PhoneMobile = value; }
}
public String PhoneAlt
{
get { return data.PhoneAlt; }
set { CheckChanged(data.PhoneAlt, value); data.PhoneAlt = value; }
}
public String PasswordToken
{
get { return data.PasswordToken; }
set { CheckChanged(data.PasswordToken, value); data.PasswordToken = value; }
}
public String PasswordHashed
{
get { return data.PasswordHashed; }
set { CheckChanged(data.PasswordHashed, value); data.PasswordHashed = value; }
}
public List<String> PasswordHistory
{
get { return data.PasswordHistory; }
set
{
CheckChanged(data.PasswordHistory, value);
data.PasswordHistory.Clear();
data.PasswordHistory.AddRange((value ?? new List<String>()).FindAll(item => !StringUtil.IsEmpty(StringUtil.TrimAll(item))));
}
}
public DateTime? PasswordChangedAt
{
get { return data.PasswordChangedAt; }
set { CheckChangedNullable(data.PasswordChangedAt, value); data.PasswordChangedAt = value; }
}
public DateTime? LastLoginAt
{
get { return data.LastLoginAt; }
set { CheckChangedNullable(data.LastLoginAt, value); data.LastLoginAt = value; }
}
public DateTime? LastInvalidLoginAt
{
get { return data.LastInvalidLoginAt; }
set { CheckChangedNullable(data.LastInvalidLoginAt, value); data.LastInvalidLoginAt = value; }
}
public short InvalidLoginCount
{
get { return data.InvalidLoginCount; }
set { CheckChanged(data.InvalidLoginCount, value); data.InvalidLoginCount = value; }
}
internal void PopulateFrom(Data data)
{
EmailAddress = data.EmailAddress;
Title = data.Title;
LastName = data.LastName;
Initials = data.Initials;
FirstName = data.FirstName;
PhoneMain = data.PhoneMain;
PhoneMobile = data.PhoneMobile;
PhoneAlt = data.PhoneAlt;
PasswordToken = data.PasswordToken;
PasswordHashed = data.PasswordHashed;
PasswordHistory = data.PasswordHistory;
PasswordChangedAt = data.PasswordChangedAt;
LastLoginAt = data.LastLoginAt;
LastInvalidLoginAt = data.LastInvalidLoginAt;
InvalidLoginCount = data.InvalidLoginCount;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
public new class ErrField : SacsHierarchyItem.ErrField
{
// Identifies the field that has invalid data.
public ValidValue EmailAddress { get; set; } = ValidValue.Valid;
public ValidValue Title { get; set; } = ValidValue.Valid;
public ValidValue FirstName { get; set; } = ValidValue.Valid;
public ValidValue Initials { get; set; } = ValidValue.Valid;
public ValidValue LastName { get; set; } = ValidValue.Valid;
public ValidValue PhoneMain { get; set; } = ValidValue.Valid;
public ValidValue PhoneMobile { get; set; } = ValidValue.Valid;
public ValidValue PhoneAlt { get; set; } = ValidValue.Valid;
public ValidValue PasswordToken { get; set; } = ValidValue.Valid;
public ValidValue PasswordHashed { get; set; } = ValidValue.Valid;
public ValidValue PasswordHistory { get; set; } = ValidValue.Valid;
public ValidValue PasswordChangedAt { get; set; } = ValidValue.Valid;
public ValidValue LastLoginAt { get; set; } = ValidValue.Valid;
public ValidValue LastInvalidLoginAt { get; set; } = ValidValue.Valid;
public ValidValue InvalidLoginCount { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
public static readonly String PasswordHistoryDelim = ",";
public static readonly Byte Flag_KeepLoggedIn = 0x01;
//-------------------------------------------------------------------
// Construction.
protected SbmcUserAccount(SysId id) : base(id)
{
base.SetData(data);
Status = DefaultStatus;
}
//-------------------------------------------------------------------
// Affiliate status.
private static readonly List<SaStatus> affiliateStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(affiliateStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// Properties.
public Data GetData() { return data.Clone(); }
public void SetData(Data data)
{
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Properties.
public String EmailAddress
{
get { return data.EmailAddress; }
set { data.EmailAddress = value; }
}
// Name.
public String Title
{
get { return data.Title; }
set { data.Title = value; }
}
public String FirstName
{
get { return data.FirstName; }
set { data.FirstName = value; }
}
public String Initials
{
get { return data.Initials; }
set { data.Initials = value; }
}
public String LastName
{
get { return data.LastName; }
set { data.LastName = value; }
}
public String GetFullName(String title, String first, String last)
{
// <Title> <FirstName> <LastName>:
List<String> Names = new List<string>();
Names.Add(title);
Names.Add(first);
Names.Add(last);
return Names.Concat(" ", null, null, true, true);
}
public String GetFullName()
{
return GetFullName(Title, FirstName, LastName);
}
public static String GetDisplayName(String firstName, String lastName)
{
// <LastName>, <FirstName>.
List<String> Names = new List<string>();
Names.Add(lastName);
Names.Add(firstName);
Names.RemoveBlanks();
return Names.Concat(", ");
}
public String GetDisplayName()
{
return GetDisplayName(FirstName, LastName);
}
// Phone numbers.
public String PhoneMain
{
get { return data.PhoneMain; }
set { data.PhoneMain = value; }
}
public String PhoneMobile
{
get { return data.PhoneMobile; }
set { data.PhoneMobile = value; }
}
public String PhoneAlt
{
get { return data.PhoneAlt; }
set { data.PhoneAlt = value; }
}
// Security.
public String PasswordToken
{
get { return data.PasswordToken; }
set { data.PasswordToken = value; }
}
public String PasswordHashed
{
get { return data.PasswordHashed; }
set { data.PasswordHashed = value; }
}
public List<String> PasswordHistory
{
get { return data.PasswordHistory; }
set { data.PasswordHistory = value; }
}
public DateTime? PasswordChangedAt
{
get { return data.PasswordChangedAt; }
set { data.PasswordChangedAt = value; }
}
public DateTime? LastLoginAt
{
get { return data.LastLoginAt; }
set { data.LastLoginAt = value; }
}
public DateTime? LastInvalidLoginAt
{
get { return data.LastInvalidLoginAt; }
set { data.LastInvalidLoginAt = value; }
}
public short InvalidLoginCount
{
get { return data.InvalidLoginCount; }
set { data.InvalidLoginCount = value; }
}
//-------------------------------------------------------------------
// Flags.
public bool KeepLoggedIn
{
get { return GetFlag(Flag_KeepLoggedIn); }
set { SetFlag(Flag_KeepLoggedIn, value); }
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
// List parameters.
/// <summary> Status filter options.</summary>
public enum StatusCat
{
Any,
ActiveOnly,
InactiveOnly,
NotDeleted,
DeletedOnly,
}
/// <summary>Parameters - used to define the filters that should be applied to a list of items.</summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
/// <summary>Generic search value - email, name, phone etc.</summary>
public String Search { get; set; }
public String Name { get; set; }
public String NamePartial { get; set; }
public String EmailAddress { get; set; }
public String EmailAddressPartial { get; set; }
public String NotesPartial { get; set; }
/// <summary>Contact status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
}
//=======================================================================
// Item list.
public static class SbmcUserAccountList
{
}
//=======================================================================
}
@@ -155,7 +155,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
}
private class QBooksParams
{
public QBooksParams(ISbmUserContext userContext)
public QBooksParams(ISbmUserContext_Core userContext)
{
}
// QuickBooks interface definitions.
@@ -175,7 +175,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
}
private class SageParams
{
public SageParams(ISbmUserContext userContext, SbmInternals internals)
public SageParams(ISbmUserContext_Core userContext, SbmInternals internals)
{
UserContext = userContext;
this.internals = internals;
@@ -249,7 +249,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
SalesOrderColumnSources.Add(SageDbDfn.GetColumnName(SageDbDfn.ColumnIdx.SalesOrder_Notes1), "Notes line 1");
}
//---------------------------------------------------------------
private ISbmUserContext UserContext { get; }
private ISbmUserContext_Core UserContext { get; }
private readonly SbmInternals internals;
// Sage interface definitions.
public SaInterface.Data dfnInt_Sage { get; set; } = new SaInterface.Data();
@@ -62,7 +62,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
public SbmAccountsDfn(ISbmUserContext userContext)
public SbmAccountsDfn(ISbmUserContext_Core userContext)
{
UserContext = userContext;
internals = new SbmInternals(userContext);
@@ -82,7 +82,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Properties.
public ISbmUserContext UserContext { get; }
public ISbmUserContext_Core UserContext { get; }
protected SaInterfaceConsole InterfaceConsole { get { return internals.InterfaceConsole; } }
protected SaItemOptionConsole ItemOptionConsole { get { return internals.ItemOptionConsole; } }
@@ -730,7 +730,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
// Retrieve accounts interfaces.
SaInterface.Params prmInterface_Accounts = new SaInterface.Params();
prmInterface_Accounts.Context = UserContext.Organisation.InterfaceContext;
prmInterface_Accounts.Context = UserContext.OrganisationInterfaceContext;
prmInterface_Accounts.InterfaceCategory = SaInterfaceCategory.Accounts;
prmInterface_Accounts.ActiveOnly = true;
prmInterface_Accounts.StatusCat = SaInterface.StatusCat.ActiveOnly;
+2 -2
View File
@@ -355,7 +355,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmAddress(ISbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType) :
protected SbmAddress(ISbmUserContext_Core userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType) :
base(userContext, id)
{
base.SetData(data);
@@ -698,7 +698,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String DeliveryBookInCode { get; set; }
public bool PrimaryOnly { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
}
@@ -337,7 +337,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmAffiliate(ISbmUserContext userContext, SysId id, Sbm.AffiliateType affiliateType) : base(userContext, id)
protected SbmAffiliate(ISbmUserContext_Core userContext, SysId id, Sbm.AffiliateType affiliateType) : base(userContext, id)
{
base.SetData(data);
AffiliateType = affiliateType;
@@ -779,7 +779,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
// Interfaces.
public SysId InterfaceIdExcludeSystemUsers { get; set; }
/// <summary>Contact status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
+10 -10
View File
@@ -376,7 +376,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmAsset(ISbmUserContext userContext, SysId id, SysId assetCatId) : base(userContext, id)
protected SbmAsset(ISbmUserContext_Core userContext, SysId id, SysId assetCatId) : base(userContext, id)
{
base.SetData(data);
Id = id;
@@ -388,22 +388,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
// Asset status.
private static readonly List<SaStatus> assetStatuses = new List<SaStatus>()
{
/*SaStatus.Provisional,*/
SaStatus.Active,
/*SaStatus.Actioned,*/
SaStatus.Cancelled,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> AssetStatuses { get { return new List<SaStatus>(assetStatuses); } }
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(assetStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.Cancelled:
return DataValue.TriStateType.Red;
case SaStatus.Disabled:
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
@@ -620,6 +617,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
Any,
ActiveOnly,
NotDeleted,
Deleted,
}
/// <summary>
/// Item list parameters.
@@ -631,6 +630,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public List<SysId> ExcludedIds { get; } = new List<SysId>();
// Asset.
public SysId AssetCatId { get; set; }
public String Search { get; set; }
public Sbm.ItemType ItemType { get; set; }
public String SerialNumber { get; set; }
public String SerialNumberPartial { get; set; }
@@ -640,7 +640,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public SysId ProcessIdActive { get; set; }
public bool RestrictToActive { get; set; }
/// <summary>Asset status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -21,7 +21,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
// AssetCategory.
AffIdOwner,
AssetType,
Type_Desc,
AssetType_Desc,
Code,
DescBrief,
IncomeType,
@@ -215,9 +215,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmAssetCategory(ISbmUserContext userContext, SysId id) : base(userContext, id)
protected SbmAssetCategory(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.AssetType assetType) : base(userContext, id)
{
base.SetData(data);
AffIdOwner = affiliateIdOwner;
AssetType = assetType;
Status = DefaultStatus;
}
@@ -225,22 +227,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
// AssetCategory status.
private static readonly List<SaStatus> assetCategoryStatuses = new List<SaStatus>()
{
/*SaStatus.Provisional,*/
SaStatus.Active,
/*SaStatus.Actioned,*/
SaStatus.Cancelled,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> AssetCategoryStatuses { get { return new List<SaStatus>(assetCategoryStatuses); } }
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(assetCategoryStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.Cancelled:
return DataValue.TriStateType.Red;
case SaStatus.Disabled:
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
@@ -259,6 +258,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
if (SysId.IsValid(AffIdOwner) && SysId.ToInt(AffIdOwner) != SysId.ToInt(data.AffIdOwner))
throw new NotSupportedException($"{SysUtil.Fn} Owner Affiliate Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
@@ -368,6 +369,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
NotDeleted,
Deleted,
}
/// <summary>
/// Item list parameters.
@@ -375,23 +378,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public List<SysId> IncludedIds { get; } = new List<SysId>();
public List<SysId> ExcludedIds { get; } = new List<SysId>();
public List<SysId> IdsIncluded { get; } = new List<SysId>();
public List<SysId> IdsExcluded { get; } = new List<SysId>();
// AssetCategory.
public Sbm.AssetType AssetType { get; set; }
public String Search { get; set; }
public String Code { get; set; }
public String CodePartial { get; set; }
public String DescBrief { get; set; }
public String DescBriefPartial { get; set; }
public bool RestrictToActive { get; set; }
/// <summary>Asset Category status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
// Utilities.
public List<StringPair> GetDisplayValues()
{
List<StringPair> values = new List<StringPair>();
return values;
}
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
@@ -122,7 +122,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmAssetProcess(ISbmUserContext userContext, SysId id, SysId assetId, SysId processId) : base(userContext, id)
protected SbmAssetProcess(ISbmUserContext_Core userContext, SysId id, SysId assetId, SysId processId) : base(userContext, id)
{
base.SetData(data);
Id = id;
@@ -216,6 +216,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -231,7 +233,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String Seq { get; set; }
public bool RestrictToActive { get; set; }
/// <summary>Asset Process status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -504,7 +504,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmAssociation(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) : base(userContext, id)
protected SbmAssociation(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -902,7 +902,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public List<String> DeliveryCourierCodes { get; } = new List<String>();
public List<String> DeliveryBookInCodes { get; } = new List<String>();
/// <summary>Association must have a transaction active at some time between the specified dates (one date can be specified for open ended period).</summary>
public SbmTransaction.StatusCat TransactionStatusCat { get; set; } = SbmTransaction.StatusCat.Any;
public SbmTransaction.StatusCat TransactionStatusCat { get; set; } = SbmTransaction.StatusCat.NotDeleted;
/// <summary>Has transactions active from.</summary>
public DateTime TransActiveFrom { get; set; } = DateTime.MinValue;
/// <summary>Has transactions active up to (inclusive).</summary>
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.Net.Standard.Base.Bus;
@@ -1085,7 +1086,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmCommodity(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) : base(userContext, id)
protected SbmCommodity(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -1874,7 +1875,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
/// <summary>Commodity status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues(ISbmUserContext userContext)
public List<StringPair> GetDisplayValues(ISbmUserContext_Core userContext)
{
SbmAccountMgr accountMgr = null;
List<StringPair> lValue = new List<StringPair>();
@@ -125,7 +125,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmCommodityCustomer(ISbmUserContext userContext, SysId commodityId, SysId assocIdCustomer) : base(userContext)
protected SbmCommodityCustomer(ISbmUserContext_Core userContext, SysId commodityId, SysId assocIdCustomer) : base(userContext)
{
base.SetData(data);
CommodityId = commodityId;
@@ -221,6 +221,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -239,7 +241,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String ProductCodePartial { get; set; }
public bool RestrictToActive { get; set; } = true;
/// <summary>Commodity Customer status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -116,7 +116,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmCommoditySupplier(ISbmUserContext userContext, SysId commodityId, SysId assocIdSupplier) : base(userContext)
protected SbmCommoditySupplier(ISbmUserContext_Core userContext, SysId commodityId, SysId assocIdSupplier) : base(userContext)
{
base.SetData(data);
CommodityId = commodityId;
@@ -209,7 +209,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
// List parameters.
public enum StatusCat
{
Any, Active,
Any,
ActiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -227,7 +230,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public SysId CurrencyIdCost { get; set; }
public bool RestrictToActive { get; set; } = true;
/// <summary>Commodity Supplier status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -395,7 +395,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmConstituent(ISbmUserContext userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType) : base(userContext)
protected SbmConstituent(ISbmUserContext_Core userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType) : base(userContext)
{
base.SetData(data);
Id = id;
@@ -680,7 +680,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public DateTime UpdatedSince { get; set; }
public bool UseJobNumber { get; set; }
/// <summary>Constituent status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
}
//=======================================================================
@@ -156,7 +156,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmContainer(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType) : base(userContext, id)
protected SbmContainer(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -275,6 +275,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
Any,
ActiveOnly,
InactiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -322,7 +324,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public bool HasItems { get; set; }
public SaStatus ContainerStatus { get; set; }
/// <summary>Container status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -159,7 +159,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmContainerItem(ISbmUserContext userContext, SysId containerId, Sbm.ItemType itemType, SysId itemId) : base(userContext)
protected SbmContainerItem(ISbmUserContext_Core userContext, SysId containerId, Sbm.ItemType itemType, SysId itemId) : base(userContext)
{
base.SetData(data);
ContainerId = containerId;
@@ -265,7 +265,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
ActiveOnly
ActiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>Item list parameters.</summary>
public new class Params : SacsHierarchyItem.Params
@@ -296,7 +298,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public SaStatus ContainerStatus { get; set; }
public bool ContainerHasItems { get; set; } = false;
/// <summary>Container Item status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -134,13 +134,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
public SbmCostEstimate(ISbmUserContext userContext, Sbm.CostEstimateCategory costEstimateCategory) : base(userContext)
public SbmCostEstimate(ISbmUserContext_Core userContext, Sbm.CostEstimateCategory costEstimateCategory) : base(userContext)
{
CostEstimateCategory = costEstimateCategory;
Status = DefaultStatus;
}
// Conversion from ItemLink.
public SbmCostEstimate(ISbmUserContext userContext, String archive) : base(userContext)
public SbmCostEstimate(ISbmUserContext_Core userContext, String archive) : base(userContext)
{
String[] data = archive.Split(new String[] { delimArchive }, StringSplitOptions.None);
costEstimateCategory = (Sbm.CostEstimateCategory)(data.Length > 0 ? StringUtil.ToShort(data[0]) : 0);
@@ -442,7 +442,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
}
//-------------------------------------------------------------------
public static void SetCommodityCosts(this List<SbmCostEstimate> values, ISbmUserContext userContext, SbmCommodity commodity, decimal quantity)
public static void SetCommodityCosts(this List<SbmCostEstimate> values, ISbmUserContext_Core userContext, SbmCommodity commodity, decimal quantity)
{
// Retrieve costs from commodity and remove unwanted costs (for other quantities).
List<SbmCostEstimate> costEstimatesCommodity = commodity.GetCostEstimates();
@@ -9,18 +9,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
//-------------------------------------------------------------------
// Construction.
protected SbmHierarchyItem(ISbmUserContext userContext) : base()
protected SbmHierarchyItem(ISbmUserContext_Core userContext) : base()
{
UserContext = userContext;
}
protected SbmHierarchyItem(ISbmUserContext userContext, SysId id) : base(id)
protected SbmHierarchyItem(ISbmUserContext_Core userContext, SysId id) : base(id)
{
UserContext = userContext;
}
//-------------------------------------------------------------------
// Properties.
public ISbmUserContext UserContext { get; }
public ISbmUserContext_Core UserContext { get; }
//-------------------------------------------------------------------
}
@@ -118,7 +118,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmItemBatch(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ItemBatchType itemBatchType, String refs) : base(userContext, id)
protected SbmItemBatch(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.ItemBatchType itemBatchType, String refs) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -213,6 +213,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -229,7 +231,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String DescBrief { get; set; }
public bool NotCompleted { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
}
+4 -2
View File
@@ -152,7 +152,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmItemLink(ISbmUserContext userContext, SysId id, Sbm.ItemLinkType itemLinkType, Sbm.ItemType itemTypeFrom, SysId itemIdFrom, Sbm.ItemType itemTypeTo, SysId itemIdTo) : base(userContext, id)
protected SbmItemLink(ISbmUserContext_Core userContext, SysId id, Sbm.ItemLinkType itemLinkType, Sbm.ItemType itemTypeFrom, SysId itemIdFrom, Sbm.ItemType itemTypeTo, SysId itemIdTo) : base(userContext, id)
{
base.SetData(data);
ItemLinkType = itemLinkType;
@@ -357,6 +357,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -376,7 +378,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public DateTime Completed { get; set; }
public String DataContent { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
}
@@ -92,12 +92,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
public SbmItemPrice(ISbmUserContext userContext) : base(userContext)
public SbmItemPrice(ISbmUserContext_Core userContext) : base(userContext)
{
Status = DefaultStatus;
}
// Conversion from ItemLink.
public SbmItemPrice(ISbmUserContext userContext, String archive) : base(userContext)
public SbmItemPrice(ISbmUserContext_Core userContext, String archive) : base(userContext)
{
String[] data = archive.Split(new String[] { delimArchive }, StringSplitOptions.None);
type = (data.Length > 1 ? data[1] : "");
@@ -185,7 +185,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmItemProcess(ISbmUserContext userContext, Sbm.ItemType itemType, SysId itemId, SysId processId) : base(userContext)
protected SbmItemProcess(ISbmUserContext_Core userContext, Sbm.ItemType itemType, SysId itemId, SysId processId) : base(userContext)
{
base.SetData(data);
ItemType = itemType;
@@ -334,11 +334,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// <summary>Parameters - used to define the filters that should be applied to a List of Item Processses</summary>
/// <summary>Parameters - used to define the filters that should be applied to a List of Item Processes</summary>
// List parameters.
public enum StatusCat
{
Any, ActiveOnly,
Any,
ActiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -354,7 +357,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public SysId ProcessId { get; set; }
public bool RestrictToActive { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
}
+4 -2
View File
@@ -113,7 +113,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmLocation(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.LocationCategory locationCategory) : base(userContext, id)
protected SbmLocation(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.LocationCategory locationCategory) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -212,6 +212,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
Any,
ActiveOnly,
InactiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -231,7 +233,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public bool RestrictToSalesStock { get; set; } = false;
public bool RestrictToCalculateStock { get; set; } = false;
/// <summary>Location status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
+4 -2
View File
@@ -171,7 +171,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public static readonly Byte Flag_DiaryEntry = 0x01;
//-------------------------------------------------------------------
// Construction.
protected SbmMovement(ISbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType) : base(userContext, id)
protected SbmMovement(ISbmUserContext_Core userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType) : base(userContext, id)
{
base.SetData(data);
ItemType = itemType;
@@ -296,6 +296,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -326,7 +328,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public SysId MovementIdSource { get; set; }
public SaStatus Status { get; set; }
/// <summary>Movement status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -180,7 +180,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmPortfolioItem(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType) : base(userContext, id)
protected SbmPortfolioItem(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -346,7 +346,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String CodePartial { get; set; }
public String ShortCut { get; set; }
/// <summary>Portfolio Item status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
+4 -2
View File
@@ -163,7 +163,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmPrice(ISbmUserContext userContext, SysId priceSetId, SysId commodityId, Sbm.PriceType priceType) : base(userContext)
protected SbmPrice(ISbmUserContext_Core userContext, SysId priceSetId, SysId commodityId, Sbm.PriceType priceType) : base(userContext)
{
base.SetData(data);
PriceSetId = priceSetId;
@@ -274,6 +274,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
Any,
ActiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -289,7 +291,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public Sbm.PriceRounderMethod RounderMethod { get; set; } = Sbm.PriceRounderMethod.Unknown;
public Sbm.PriceRounderDirection RounderDirection { get; set; } = Sbm.PriceRounderDirection.Unknown;
/// <summary>Price status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
+5 -3
View File
@@ -121,7 +121,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmPriceSet(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, String reference, Sbm.PriceType priceType) : base(userContext, id)
protected SbmPriceSet(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, String reference, Sbm.PriceType priceType) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -221,7 +221,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public enum StatusCat
{
Any,
ActiveOnly
ActiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -238,7 +240,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String Name { get; set; }
public String NamePartial { get; set; }
/// <summary>Price Set status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
+1 -1
View File
@@ -129,7 +129,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmProcess(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ProcessCategory processCategory) : base(userContext, id)
protected SbmProcess(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.ProcessCategory processCategory) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -702,7 +702,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmRequirement(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId associationId, SysId transactionId, Sbm.RequirementType requirementType) : base(userContext, id)
protected SbmRequirement(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, SysId associationId, SysId transactionId, Sbm.RequirementType requirementType) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -1251,7 +1251,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public SysId TransReqntSourceId { get; set; } // Identifies the transaction to which the source requirement belongs.
public Sbm.TransactionType TransactionType { get; set; } = Sbm.TransactionType.Any;
public SysId TransLocationIdStock { get; set; }
public SbmTransaction.StatusCat TransactionStatusCat { get; set; } = SbmTransaction.StatusCat.Any;
public SbmTransaction.StatusCat TransactionStatusCat { get; set; } = SbmTransaction.StatusCat.NotDeleted;
public String TransRefPartial { get; set; }
public String TransRefExtPartial { get; set; }
public String TransDescBriefPartial { get; set; }
@@ -140,14 +140,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
public SbmRequirementCosts(ISbmUserContext userContext)
public SbmRequirementCosts(ISbmUserContext_Core userContext)
{
UserContext = userContext;
}
//-------------------------------------------------------------------
// Properties.
public ISbmUserContext UserContext { get; }
public ISbmUserContext_Core UserContext { get; }
//-------------------------------------------------------------------
// Calculation.
@@ -156,7 +156,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmStockLevel(ISbmUserContext userContext, SysId id, SysId idCommodity, SysId idLocation, Sbm.StockLevelType type, Sbm.StockLevelSource source) : base(userContext, id)
protected SbmStockLevel(ISbmUserContext_Core userContext, SysId id, SysId idCommodity, SysId idLocation, Sbm.StockLevelType type, Sbm.StockLevelSource source) : base(userContext, id)
{
base.SetData(data);
CommodityId = idCommodity;
+1 -1
View File
@@ -123,7 +123,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmSysParam(ISbmUserContext userContext, SysId id, Sbm.SysParamCategory category, String name) : base(userContext, id)
protected SbmSysParam(ISbmUserContext_Core userContext, SysId id, Sbm.SysParamCategory category, String name) : base(userContext, id)
{
base.SetData(data);
Category = category;
@@ -135,7 +135,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmSystemAccount(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.SystemAccountType systemAccountType, SysId interfaceId, SysId associationId) : base(userContext, id)
protected SbmSystemAccount(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, Sbm.SystemAccountType systemAccountType, SysId interfaceId, SysId associationId) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -91,7 +91,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmSystemAccountUser(ISbmUserContext userContext, SysId accountId, SysId userId) : base(userContext)
protected SbmSystemAccountUser(ISbmUserContext_Core userContext, SysId accountId, SysId userId) : base(userContext)
{
base.SetData(data);
AccountId = accountId;
@@ -116,7 +116,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmSystemUser(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId interfaceId, SysId affiliateId) : base(userContext, id)
protected SbmSystemUser(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, SysId interfaceId, SysId affiliateId) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -647,7 +648,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmTransaction(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId associationId, Sbm.TransactionType transactionType) : base(userContext, id)
protected SbmTransaction(ISbmUserContext_Core userContext, SysId id, SysId affiliateIdOwner, SysId associationId, Sbm.TransactionType transactionType) : base(userContext, id)
{
base.SetData(data);
Id = id;
@@ -789,7 +790,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Status Categories.
public static List<TypeCodeDesc> GetTransactionStatusCats(ISbmUserContext userContext, Sbm.TransactionType transactionType)
public static List<TypeCodeDesc> GetTransactionStatusCats(ISbmUserContext_Core userContext, Sbm.TransactionType transactionType)
{
List<TypeCodeDesc> statusCats = new List<TypeCodeDesc>();
List<TypeCodeDesc> statusCatsFull = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.TransactionStatusCat);
@@ -850,7 +851,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
return GetTaxEffectiveDate(UserContext, TransactionType, Status, Raised, InProgress, Closed);
}
public static DateTime GetTaxEffectiveDate(ISbmUserContext userContext, Sbm.TransactionType transactionType, SaStatus status, DateTime raised, DateTime inProgress, DateTime closed)
public static DateTime GetTaxEffectiveDate(ISbmUserContext_Core userContext, Sbm.TransactionType transactionType, SaStatus status, DateTime raised, DateTime inProgress, DateTime closed)
{
// Original thinking was that the status would have an effect on the tax point.
SbmTransaction.StatusCat transactionStatusCat = GetCategoryForStatus(status);
@@ -1603,8 +1604,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public abstract bool HasPendingStockMovements();
public abstract bool HasDiaryLinks();
//public abstract void SetDefaults(class SbmRequirement *) const;
public abstract long GetRequirementCount(SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.Any);
public abstract List<SbmRequirement> GetRequirements(SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.Any);
public abstract long GetRequirementCount(SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.NotDeleted);
public abstract List<SbmRequirement> GetRequirements(SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.NotDeleted);
public abstract bool ItemsRequireJobNumber();
public abstract bool UpdateRequirements(List<SbmRequirement> requirements);
public abstract bool CommitAssociatedData();
@@ -90,12 +90,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
public SbmTransactionPayment(ISbmUserContext userContext) : base(userContext)
public SbmTransactionPayment(ISbmUserContext_Core userContext) : base(userContext)
{
Status = DefaultStatus;
}
// Conversion from ItemLink.
public SbmTransactionPayment(ISbmUserContext userContext, String archive) : base(userContext)
public SbmTransactionPayment(ISbmUserContext_Core userContext, String archive) : base(userContext)
{
String[] data = archive.Split(new String[] { delimArchive }, StringSplitOptions.None);
type = (data.Length > 1 ? data[1] : "");
+2 -2
View File
@@ -333,7 +333,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmVehicle(ISbmUserContext userContext, SysId id) : base(userContext, id)
protected SbmVehicle(ISbmUserContext_Core userContext, SysId id) : base(userContext, id)
{
base.SetData(data);
//Database = database;
@@ -348,7 +348,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
SaStatus.Cancelled,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> VehicleStatuses { get { return new List<SaStatus>(vehicleStatuses); } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(vehicleStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
@@ -63,7 +63,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public Sbm.VehicleType VehicleType { get; set; } = Sbm.VehicleType.Unknown;
public String VehicleCategoryCode { get; set; } = "";
public Sbm.VehicleFuelType FuelType { get; set; } = Sbm.VehicleFuelType.Unknown;
public Sbm.VehicleOdometerUnits OdometerUnits { get; set; } = Sbm.VehicleOdometerUnits.OdoUnits_Unknown;
public Sbm.VehicleOdometerUnits OdometerUnits { get; set; } = Sbm.VehicleOdometerUnits.Unknown;
public short Seats { get; set; } = 0;
public decimal Weight { get; set; } = 0.0m;
public String InsuranceCode { get; set; } = "";
@@ -236,7 +236,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public static readonly Byte Flag_DescBriefFixed = 0x01;
//-------------------------------------------------------------------
// Construction.
protected SbmVehicleClass(ISbmUserContext userContext, SysId id) : base(userContext, id)
protected SbmVehicleClass(ISbmUserContext_Core userContext, SysId id) : base(userContext, id)
{
base.SetData(data);
Status = DefaultStatus;
@@ -247,22 +247,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
private static readonly List<SaStatus> vehicleClassStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.Cancelled,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> VehicleClassStatuses { get { return new List<SaStatus>(vehicleClassStatuses); } }
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(vehicleClassStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.Awaiting:
case SaStatus.Inactive:
return DataValue.TriStateType.Amber;
case SaStatus.Disabled:
return DataValue.TriStateType.Red;
case SaStatus.Cancelled:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
@@ -420,7 +417,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
Any,
ActiveOnly,
CancelledOnly,
InactiveOnly,
NotDeleted,
DeletedOnly
}
/// <summary>
/// Item list parameters.
@@ -428,9 +427,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public List<SysId> IncludedIds { get; } = new List<SysId>();
public List<SysId> ExcludedIds { get; } = new List<SysId>();
// VehicleClass.
public List<SysId> IdsIncluded { get; } = new List<SysId>();
public List<SysId> IdsExcluded { get; } = new List<SysId>();
/// <summary>Generic property search - make, model, derivative etc.</summary>
public String Search { get; set; }
// Item properties.
public String MakeCode { get; set; }
public String Model { get; set; }
public String ModelPartial { get; set; }
@@ -438,9 +439,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
public String DescBriefPartial { get; set; }
public String Derivative { get; set; }
public String VehicleCategoryCode { get; set; }
public bool RestrictToActive { get; set; }
/// <summary>Vehicle Class status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// Utilities.
public List<StringPair> GetDisplayValues()
{
@@ -185,7 +185,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmVehicleEvent(ISbmUserContext userContext, SysId vehicleId, Sbm.VehicleEventType vehicleEventType) : base(userContext, vehicleId)
protected SbmVehicleEvent(ISbmUserContext_Core userContext, SysId vehicleId, Sbm.VehicleEventType vehicleEventType) : base(userContext, vehicleId)
{
base.SetData(data);
VehicleId = vehicleId;
@@ -201,7 +201,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
SaStatus.Cancelled,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> VehicleEventStatuses { get { return new List<SaStatus>(vehicleEventStatuses); } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(vehicleEventStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
@@ -162,7 +162,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SbmVehicleFeature(ISbmUserContext userContext, SysId vehicleId, Sbm.VehicleFeatureSource vehicleFeatureSource, Sbm.VehicleFeatureType vehicleFeatureType) : base(userContext)
protected SbmVehicleFeature(ISbmUserContext_Core userContext, SysId vehicleId, Sbm.VehicleFeatureSource vehicleFeatureSource, Sbm.VehicleFeatureType vehicleFeatureType) : base(userContext)
{
base.SetData(data);
VehicleId = vehicleId;
@@ -179,7 +179,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
SaStatus.Cancelled,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> VehicleFeatureStatuses { get { return new List<SaStatus>(vehicleFeatureStatuses); } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(vehicleFeatureStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Procs;
using Sarand.Net.Standard.Accounts.QuickBooks.App;
@@ -12,7 +13,7 @@ using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles
{
//=======================================================================
public class SbmConfigConsole : SacsDisposable
@@ -144,7 +145,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Application Configuration. - AllowOption.
public virtual bool AllowOption(ISbmUserContext userContext, Sbm.ConfigOption option)
public virtual bool AllowOption(ISbmUserContext_Core userContext, Sbm.ConfigOption option)
{
switch (option)
{
@@ -191,7 +192,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// O r g a n i s a t i o n
//-------------------------------------------------------------------
// Allows validation of organisation name is required. Default: true.
// Allows validation of organisation name if required. Default: true.
public virtual bool OwnerIsValid()
{
return true;
@@ -322,24 +323,24 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// I t e m s
//-------------------------------------------------------------------
// Item Data Interface.
public virtual bool CanUpdateItemData(ISbmUserContext userContext, Sbm.ItemDataType itemDataType)
public virtual bool CanUpdateItemData(ISbmUserContext_Core userContext, Sbm.ItemDataType itemDataType)
{
return false;
}
public virtual bool DoUpdateItemData(ISbmUserContext userContext, Sbm.ItemDataType itemDataType)
public virtual bool DoUpdateItemData(ISbmUserContext_Core userContext, Sbm.ItemDataType itemDataType)
{
return false;
}
public virtual bool CanRemoveItemData(ISbmUserContext userContext, Sbm.ItemDataType itemDataType)
public virtual bool CanRemoveItemData(ISbmUserContext_Core userContext, Sbm.ItemDataType itemDataType)
{
return false;
}
//-------------------------------------------------------------------
// Update Log.
public virtual bool IsColumnChangeLogged(ISbmUserContext userContext, SbmDbDfn.ColumnIdx column)
public virtual bool IsColumnChangeLogged(ISbmUserContext_Core userContext, SbmDbDfn.ColumnIdx column)
{
return false;
}
@@ -352,21 +353,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
}
//-------------------------------------------------------------------
// A l l o w T y p e s
// Allowed data component types.
//-------------------------------------------------------------------
// Supported Data Item Types.
// Supported affiliate types (all allowed by default).
public virtual bool AllowAffiliateType(ISbmUserContext userContext, Sbm.AffiliateType type)
public virtual bool AllowAffiliateType(ISbmUserContext_Core userContext, Sbm.AffiliateType type)
{
return true;
}
// Supported Association types (all allowed by default).
public virtual bool AllowAssociationType(ISbmUserContext userContext, Sbm.AssociationType type)
public virtual bool AllowAssociationType(ISbmUserContext_Core userContext, Sbm.AssociationType type)
{
return true;
}
// Supported Transaction types.
public virtual bool AllowTransactionType(ISbmUserContext userContext, Sbm.TransactionType type)
public virtual bool AllowTransactionType(ISbmUserContext_Core userContext, Sbm.TransactionType type)
{
switch (type)
{
@@ -391,7 +392,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// D a t a O p t i o n s
//-------------------------------------------------------------------
// Application Configuration. - Display and caption for data attributes.
public virtual bool DisplayAttribute(ISbmUserContext userContext, SbmDbDfn.ColumnIdx column)
public virtual bool DisplayAttribute(ISbmUserContext_Core userContext, SbmDbDfn.ColumnIdx column)
{
switch (column)
{
@@ -435,7 +436,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Alternative data value captions.
public virtual String GetAttributeCaption(ISbmUserContext userContext, SbmDbDfn.ColumnIdx column, string Default)
public virtual String GetAttributeCaption(ISbmUserContext_Core userContext, SbmDbDfn.ColumnIdx column, string Default)
{
String Caption = "";
if (column != SbmDbDfn.ColumnIdx.Unknown)
@@ -450,7 +451,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// T r a n s a c t i o n O p t i o n s
//-------------------------------------------------------------------
// Job Tracking Options.
public virtual String GetDefaultQuoteDescIntro(ISbmUserContext userContext)
public virtual String GetDefaultQuoteDescIntro(ISbmUserContext_Core userContext)
{
return "";
}
@@ -470,17 +471,17 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Create Transaction.
public virtual bool CanCreateTransactionLocally(ISbmUserContext userContext, Sbm.TransactionType type)
public virtual bool CanCreateTransactionLocally(ISbmUserContext_Core userContext, Sbm.TransactionType type)
{
if (!AllowTransactionType(userContext, type)) return false;
// Refresh options.
if (dfnSageInt.AffiliateId_Owner != userContext.Organisation.AffiliateId || dfnQBooksInt.AffiliateId_Owner != userContext.Organisation.AffiliateId)
if (dfnSageInt.AffiliateId_Owner != userContext.OrganisationAffiliateId || dfnQBooksInt.AffiliateId_Owner != userContext.OrganisationAffiliateId)
{
// Reset the accounts interface configurations.
dfnSageInt.ClearConfig();
dfnSageInt.AffiliateId_Owner = userContext.Organisation.AffiliateId;
dfnSageInt.AffiliateId_Owner = userContext.OrganisationAffiliateId;
dfnQBooksInt.ClearConfig();
dfnQBooksInt.AffiliateId_Owner = userContext.Organisation.AffiliateId;
dfnQBooksInt.AffiliateId_Owner = userContext.OrganisationAffiliateId;
// Identify the interfaces.
SbmAccountsDfn accountsDfn = new SbmAccountsDfn(userContext);
dfnSageInt.InterfaceId = accountsDfn.GetAccountInterfaceId(Sbm.InterfaceType_Accounts.SageLine50);
@@ -552,7 +553,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
System, Manual, Option
}
public virtual AssignTransRefMethod TransactionAssignRefMethod(ISbmUserContext userContext, Sbm.TransactionType transTypes)
public virtual AssignTransRefMethod TransactionAssignRefMethod(ISbmUserContext_Core userContext, Sbm.TransactionType transTypes)
{
return AssignTransRefMethod.System;
}
@@ -560,20 +561,20 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
ByOwnerType, ByType
}
public virtual AssignTransRefSource TransactionAssignRefSource(ISbmUserContext userContext, Sbm.TransactionType transTypes)
public virtual AssignTransRefSource TransactionAssignRefSource(ISbmUserContext_Core userContext, Sbm.TransactionType transTypes)
{
return AssignTransRefSource.ByOwnerType;
}
// By default all types of transaction have their own Id sequence.
// Override this method to allow different types of transaction to share Id sequence.
public virtual Sbm.TransactionType GetTransactionTypeForNextId(ISbmUserContext userContext, Sbm.TransactionType transTypes)
public virtual Sbm.TransactionType GetTransactionTypeForNextId(ISbmUserContext_Core userContext, Sbm.TransactionType transTypes)
{
return transTypes;
}
// NextId key value.
public virtual String GetTransactionNextIdKey(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType eType)
public virtual String GetTransactionNextIdKey(ISbmUserContext_Core userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType eType)
{
idAssoc = new SysId();
Sbm.TransactionType transTypes = GetTransactionTypeForNextId(userContext, eType);
@@ -589,7 +590,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
}
// Set the minimum Id for transactions of the specified type.
public virtual bool SetMinTransactionId(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long iId)
public virtual bool SetMinTransactionId(ISbmUserContext_Core userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long iId)
{
bool set = false;
if (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) != null)
@@ -603,7 +604,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// The implementation in this class will generate simple numeric values for the owner
// and global options that can be formatted (eg. to fixed length) by overwridden versions.
public virtual String GetTransactionCreateRef
(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes)
(ISbmUserContext_Core userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes)
{
String Ref = "";
if (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) != null)
@@ -616,7 +617,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
}
public virtual String FormatTransactionCreateRef
(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long RefInt)
(ISbmUserContext_Core userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long RefInt)
{
String Ref = "";
if (RefInt > 0)
@@ -632,7 +633,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
return Ref;
}
public virtual int GetTransactionRefSeqLength(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes)
public virtual int GetTransactionRefSeqLength(ISbmUserContext_Core userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes)
{
return 5;
}
@@ -646,7 +647,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Raise Transaction.
public virtual bool CanRaiseTransaction(ISbmUserContext userContext, Sbm.TransactionType typeFrom, Sbm.TransactionType typeTo)
public virtual bool CanRaiseTransaction(ISbmUserContext_Core userContext, Sbm.TransactionType typeFrom, Sbm.TransactionType typeTo)
{
if (!AllowTransactionType(userContext, typeFrom) || !AllowTransactionType(userContext, typeTo)) return false;
if (!CanCreateTransactionLocally(userContext, typeTo)) return false;
@@ -742,7 +743,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
}
//-------------------------------------------------------------------
public virtual List<TypeCodeDesc> GetTransactionTypesForRaiseFrom(ISbmUserContext userContext, Sbm.TransactionType typeFrom)
public virtual List<TypeCodeDesc> GetTransactionTypesForRaiseFrom(ISbmUserContext_Core userContext, Sbm.TransactionType typeFrom)
{
// Build the list of transaction types that are allowed to be raised from the specified type.
List<TypeCodeDesc> transTypes = new List<TypeCodeDesc>();
@@ -757,7 +758,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
}
//-------------------------------------------------------------------
public virtual List<TypeCodeDesc> GetTransactionTypesForRaiseTo(ISbmUserContext userContext, Sbm.TransactionType typeTo)
public virtual List<TypeCodeDesc> GetTransactionTypesForRaiseTo(ISbmUserContext_Core userContext, Sbm.TransactionType typeTo)
{
// Build the list of transaction types that are allowed to be raised to the specified type.
List<TypeCodeDesc> transTypes = new List<TypeCodeDesc>();
@@ -775,7 +776,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Prepare Requirements Transaction. - Prepare copied list of requirements, eg. when raising from another transaction.
public virtual bool PrepareCopiedRequirements(ISbmUserContext userContext, SbmTransaction transSource, List<SbmRequirement> requireList, Sbm.TransactionType type)
public virtual bool PrepareCopiedRequirements(ISbmUserContext_Core userContext, SbmTransaction transSource, List<SbmRequirement> requireList, Sbm.TransactionType type)
{
type = new Sbm.TransactionType();
//transSource; requireList; type;
@@ -784,7 +785,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Remove Transaction.- By default, not allowed if transaction has requirements.
public virtual bool CanRemoveTransactionWithRequirements(ISbmUserContext userContext, SbmTransaction transaction, int requirementCount)
public virtual bool CanRemoveTransactionWithRequirements(ISbmUserContext_Core userContext, SbmTransaction transaction, int requirementCount)
{
if (transaction == null || !SysId.IsValid(transaction.Id)) return false;
return (requirementCount < 1);
@@ -792,7 +793,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Tax Effective Date. - TransTypes that should use the 'In Progress' date as tax point as opposed to the 'Raised' date.
public virtual bool UseInProgressTaxDateAsTaxPoint(ISbmUserContext userContext, Sbm.TransactionType transactionType)
public virtual bool UseInProgressTaxDateAsTaxPoint(ISbmUserContext_Core userContext, Sbm.TransactionType transactionType)
{
switch (transactionType)
{
@@ -810,14 +811,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// R e q u i r e m e n t O p t i o n s
//-------------------------------------------------------------------
// Requirement Actions.
public virtual bool SearchCommodityOnCreateRequirement(ISbmUserContext userContext, Sbm.TransactionType transactionType)
public virtual bool SearchCommodityOnCreateRequirement(ISbmUserContext_Core userContext, Sbm.TransactionType transactionType)
{
return false;
}
//-------------------------------------------------------------------
// Requirement Costing.
public virtual SbmRequirementCostingConfig GetRequirementCostingConfig(ISbmUserContext userContext)
public virtual SbmRequirementCostingConfig GetRequirementCostingConfig(ISbmUserContext_Core userContext)
{
SbmRequirementCostingConfig cfgRequirementCosting = new SbmRequirementCostingConfig();
return cfgRequirementCosting;
@@ -827,21 +828,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// C o m m o d i t y O p t i o n s
//-------------------------------------------------------------------
// Commodity Management.
public virtual Sbm.CommodityType GetCommodityTypeDefault(ISbmUserContext userContext, Sbm.OrgOption_CommodityType commodityType)
public virtual Sbm.CommodityType GetCommodityTypeDefault(ISbmUserContext_Core userContext, Sbm.OrgOption_CommodityType commodityType)
{
// Default = 'Stock'.
return Sbm.CommodityType.Stock;
}
// Clean-up imported data (default no action).
public virtual bool CleanupImportedCommodity(ISbmUserContext userContext, SbmCommodity commodity)
public virtual bool CleanupImportedCommodity(ISbmUserContext_Core userContext, SbmCommodity commodity)
{
return true;
}
//-------------------------------------------------------------------
// Stock Control
public virtual SbmStockControlConfig GetStockControlConfig(ISbmUserContext userContext)
public virtual SbmStockControlConfig GetStockControlConfig(ISbmUserContext_Core userContext)
{
SbmStockControlConfig cfgStockControl = new SbmStockControlConfig();
return cfgStockControl;
@@ -851,11 +852,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
// R e p o r t i n g
//-------------------------------------------------------------------
// Available reports (over and above standard).
public virtual List<SbmReport_Base> GetReports(ISbmUserContext userContext, Sbm.View view)
public virtual List<SbmReport_Base> GetReports(ISbmUserContext_Core userContext, Sbm.View view)
{
return new List<SbmReport_Base>();
}
public virtual bool ItemHasDiaryReports(ISbmUserContext userContext/*SaItemId &*/)
public virtual bool ItemHasDiaryReports(ISbmUserContext_Core userContext/*SaItemId &*/)
{
return false;
}
@@ -881,7 +882,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
/// <summary>Sales Invoice report horizontal lines [Bool]</summary>
RptSalesInvoiceHorizontalLines = 111,
}
public virtual DataValue GetDefaultProcessParam(ISbmUserContext userContext, ProcessParam prm)
public virtual DataValue GetDefaultProcessParam(ISbmUserContext_Core userContext, ProcessParam prm)
{
switch (prm)
{
@@ -894,18 +895,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// Automated processes.
public virtual bool PerformProcess(ISbmUserContext userContext, Sbm.ProcessType type)
public virtual bool PerformProcess(ISbmUserContext_Core userContext, Sbm.ProcessType type)
{
return false;
}
// Available data import/export processes (over and above standard).
public virtual List<ISbmProcess_DataImport> GetImportProcesses(ISbmUserContext userContext, Sbm.InterfaceDataType dataType, List<SysId> itemIds)
public virtual List<ISbmProcess_DataImport> GetImportProcesses(ISbmUserContext_Core userContext, Sbm.InterfaceDataType dataType, List<SysId> itemIds)
{
return new List<ISbmProcess_DataImport>();
}
public virtual List<ISbmProcess_DataExport> GetExportProcesses(ISbmUserContext userContext, Sbm.InterfaceDataType dataType, List<SysId> itemIds)
public virtual List<ISbmProcess_DataExport> GetExportProcesses(ISbmUserContext_Core userContext, Sbm.InterfaceDataType dataType, List<SysId> itemIds)
{
return new List<ISbmProcess_DataExport>();
}
@@ -924,7 +925,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
public String ItemDesc { get; }
public String ItemText { get; }
};
public virtual DataExportItemDetails GetDataExportInvoiceItemDetails(ISbmUserContext userContext, SbmRequirement requirement)
public virtual DataExportItemDetails GetDataExportInvoiceItemDetails(ISbmUserContext_Core userContext, SbmRequirement requirement)
{
return null;
}
@@ -932,7 +933,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
//-------------------------------------------------------------------
// I n t e r f a c e O p t i o n s
//-------------------------------------------------------------------
public virtual bool AllowInterfaces(ISbmUserContext userContext)
public virtual bool AllowInterfaces(ISbmUserContext_Core userContext)
{
if (AllowInterfaceCategory(userContext, SaInterfaceCategory.Website)) return true;
if (AllowInterfaceCategory(userContext, SaInterfaceCategory.Accounts)) return true;
@@ -941,7 +942,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
return false;
}
public virtual bool AllowInterfaceCategory(ISbmUserContext userContext, SaInterfaceCategory interfaceCategory)
public virtual bool AllowInterfaceCategory(ISbmUserContext_Core userContext, SaInterfaceCategory interfaceCategory)
{
// By default, only website and file interfaces are allowed.
switch (interfaceCategory)
@@ -953,7 +954,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App
return false;
}
public virtual bool AllowInterface(ISbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType)
public virtual bool AllowInterface(ISbmUserContext_Core userContext, SaInterfaceCategory interfaceCategory, short interfaceType)
{
if (!AllowInterfaceCategory(userContext, interfaceCategory)) return false;
switch (interfaceCategory)
@@ -43,7 +43,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles
/// Replace dynamic tags in email message body.
/// <para></para>
/// </summary>
public void ReplaceDynamicEmailBodyTags(SaEmailData emailData, ISbmUserContext userContext)
public void ReplaceDynamicEmailBodyTags(SaEmailData emailData, ISbmUserContext_Core userContext)
{
// Replace core tags, eg. main stylesheet.
SaEmailConsole.ReplaceDynamicEmailTags(emailData);
@@ -53,21 +53,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles
if (EmailContainsTag(emailData, EmailTag_MainStylesheet))
{
// Tag replacement is expanded to avoid reading main stylesheet resource unless required.
ReplaceDynamicEmailTag(emailData, EmailTag_MainStylesheet, "<style>\n" + SbmResourceHelper.GetTextResource(SbmResourceHelper.TextResource.Email_Main_Css) + "</style>");
ReplaceDynamicEmailTag(emailData, EmailTag_MainStylesheet, "<style>\n" + SbmResourceHelper.GetResourceText(SbmResourceHelper.TextResource.Email_Main_Css) + "</style>");
}
// Partial content - Header.
if (EmailContainsTag(emailData, EmailTag_Header))
{
// Tag replacement is expanded to avoid reading Header resource unless required.
ReplaceDynamicEmailTag(emailData, EmailTag_Header, SbmResourceHelper.GetTextResource(SbmResourceHelper.TextResource.Email_Header_Html));
ReplaceDynamicEmailTag(emailData, EmailTag_Header, SbmResourceHelper.GetResourceText(SbmResourceHelper.TextResource.Email_Header_Html));
}
// Partial content - Footer.
if (EmailContainsTag(emailData, EmailTag_Footer))
{
// Tag replacement is expanded to avoid reading Footer resource unless required.
ReplaceDynamicEmailTag(emailData, EmailTag_Footer, SbmResourceHelper.GetTextResource(SbmResourceHelper.TextResource.Email_Footer_Html));
ReplaceDynamicEmailTag(emailData, EmailTag_Footer, SbmResourceHelper.GetResourceText(SbmResourceHelper.TextResource.Email_Footer_Html));
}
// Session data is optional.
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Security;
@@ -9,7 +10,7 @@ using System.Text;
namespace Sarand.BusinessMgr.Net.Standard.Base.Core
{
//=======================================================================
public interface ISbmSecurityProfile
public interface ISbmSecurityProfile_Core
{
//-------------------------------------------------------------------
// User properties.
@@ -1,9 +1,9 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Dbas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Core
{
@@ -11,77 +11,20 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Core
public interface ISbmUserContext
{
//-------------------------------------------------------------------
/// <summary>Session Context - Identifies database connections etc.</summary>
SbmSessionContext SessionContext { get; }
// Properties.
//-------------------------------------------------------------------
/// <summary>User data - account details.</summary>
public interface IUserData
{
/// <summary>User Security Item Id.</summary>
SysId SecurityItemId { get; }
/// <summary>User Affiliate Id.</summary>
SysId AffiliateId { get; }
/// <summary>User first name.</summary>
String FirstName { get; }
/// <summary>User last name.</summary>
String LastName { get; }
/// <summary>User display name.</summary>
String DisplayName { get; }
/// <summary>User email address.</summary>
String EmailAddress { get; }
/// <summary>User managed organisations - Affiliate Id and display name.</summary>
List<SysIdString> SupervisedOrganisations { get; }
}
/// <summary>User display name.</summary>
String UserDisplayName { get; }
/// <summary>Current user account details.</summary>
IUserData User { get; }
/// <summary>User email address.</summary>
String UserEmailAddress { get; }
/// <summary>Does the context represent a valid user account.</summary>
bool ValidUser { get; }
/// <summary>Database update info - user session specific properties for database inserts/updates.</summary>
DbUpdateInfo DbUpdateInfo { get; }
//-------------------------------------------------------------------
/// <summary>Security profile - what the user is allowed to do based on security roles and groups.</summary>
ISbmSecurityProfile SecurityProfile { get; }
//-------------------------------------------------------------------
/// <summary>User data - logged in account details.</summary>
public interface IOrganisationData
{
/// <summary>Organisation Affiliate Id.</summary>
SysId AffiliateId { get; }
/// <summary>Organisation Affiliate Type.</summary>
Sbm.AffiliateType AffiliateType { get; }
/// <summary>Organisation display name.</summary>
String DisplayName { get; }
/// <summary>Organisation Interface context - to qualify interfaces belonging to the organisation.</summary>
public String InterfaceContext { get; }
/// <summary>Organisation 'Internal' Association Id.</summary>
public SysId AssociationId { get; }
}
/// <summary>Current selected organisation.</summary>
IOrganisationData Organisation { get; }
//-------------------------------------------------------------------
// Organisation configuration.
String GetOrganisationOption(Sbm.OrganisationOption option, String context);
String GetOrganisationOption(String optionName, String context);
String GetOwnerOption_Value(Sbm.OrgOption_Value eCol);
String GetOwnerOption_Folder(Sbm.OrgOption_Folder eCol);
bool GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption eCol);
String GetOwnerOption_Caption(Sbm.OrgOption_Caption eCol, String defaultValue);
bool GetOwnerOption_ShowField(SbmDbDfn.ColumnIdx eCol);
bool GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn eCol);
String GetOwnerOption_FieldLabel(SbmDbDfn.ColumnIdx eCol, String defautValue);
int GetOwnerOption_Minutes(Sbm.OrgOption_Minutes eLimit, int defautValue);
int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays eLimit, int defautValue);
int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks eLimit, int defautValue);
int GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals eNumDecimals, int defautValue = 2);
Sbm.CommodityType GetOwnerOption_CommodityType(Sbm.OrgOption_CommodityType commodityTypeContext);
SysId GetOwnerOption_StockLocation(Sbm.OrgOption_StockLocation eLoc);
//-------------------------------------------------------------------
}
//=======================================================================
@@ -0,0 +1,67 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using System;
using System.Collections.Generic;
using System.Text;
namespace Sarand.BusinessMgr.Net.Standard.Base.Core
{
//=======================================================================
public interface ISbmUserContext_Core : ISbmUserContext
{
//-------------------------------------------------------------------
/// <summary>Session Context - Identifies database connections etc.</summary>
SbmSessionContext SessionContext { get; }
//-------------------------------------------------------------------
// User properties.
/// <summary>User Security Item Id.</summary>
SysId UserSecurityItemId { get; }
/// <summary>User Affiliate Id.</summary>
SysId UserAffiliateId { get; }
//-------------------------------------------------------------------
/// <summary>Security profile - what the user is allowed to do based on security roles and groups.</summary>
ISbmSecurityProfile_Core SecurityProfile_Core { get; }
//-------------------------------------------------------------------
// Organisation properties.
/// <summary>Organisation Affiliate Id.</summary>
SysId OrganisationAffiliateId { get; }
/// <summary>Organisation Affiliate Type.</summary>
Sbm.AffiliateType OrganisationAffiliateType { get; }
/// <summary>Organisation 'Internal' Association Id.</summary>
SysId OrganisationAssociationId { get; }
/// <summary>Organisation display name.</summary>
String OrganisationDisplayName { get; }
/// <summary>Organisation Interface context - to qualify interfaces belonging to the organisation.</summary>
String OrganisationInterfaceContext { get; }
//-------------------------------------------------------------------
// Organisation configuration.
String GetOrganisationOption(Sbm.OrganisationOption option, String context);
String GetOrganisationOption(String optionName, String context);
String GetOwnerOption_Value(Sbm.OrgOption_Value eCol);
String GetOwnerOption_Folder(Sbm.OrgOption_Folder eCol);
bool GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption eCol);
String GetOwnerOption_Caption(Sbm.OrgOption_Caption eCol, String defaultValue);
bool GetOwnerOption_ShowField(SbmDbDfn.ColumnIdx eCol);
bool GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn eCol);
String GetOwnerOption_FieldLabel(SbmDbDfn.ColumnIdx eCol, String defautValue);
int GetOwnerOption_Minutes(Sbm.OrgOption_Minutes eLimit, int defautValue);
int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays eLimit, int defautValue);
int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks eLimit, int defautValue);
int GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals eNumDecimals, int defautValue = 2);
Sbm.CommodityType GetOwnerOption_CommodityType(Sbm.OrgOption_CommodityType commodityTypeContext);
SysId GetOwnerOption_StockLocation(Sbm.OrgOption_StockLocation eLoc);
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -52,7 +52,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers
//-------------------------------------------------------------------
// Text resources.
public static String GetTextResource(TextResource textResource)
public static String GetResourceText(TextResource textResource)
{
String partialPath = "";
String resourceFilename = "";
@@ -102,7 +102,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers
//-------------------------------------------------------------------
// Image resources.
public static byte[] GetImageResource(ImageResource imageResource)
public static byte[] GetResourceImage(ImageResource imageResource)
{
String partialPath = "";
String resourceFilename = "";
@@ -0,0 +1,76 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
public class SbmInternals_Control : SacsDisposable
{
//-------------------------------------------------------------------
// Data members.
private readonly SbmSystem system = SbmGlobals.System;
private class MgrData
{
public SbmcAccountMgr controlAccountMgr;
public SbmcInstanceMgr controlInstanceMgr;
public SbmcItemMgr controlItemMgr;
}
private MgrData mgr { get; } = new MgrData();
//-------------------------------------------------------------------
// Construction.
public SbmInternals_Control()
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (mgr.controlAccountMgr != null) mgr.controlAccountMgr.Dispose();
if (mgr.controlInstanceMgr != null) mgr.controlInstanceMgr.Dispose();
if (mgr.controlItemMgr != null) mgr.controlItemMgr.Dispose();
}
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
// Control managers.
public SbmcAccountMgr ControlAccountMgr
{
get
{
if (mgr.controlAccountMgr == null)
mgr.controlAccountMgr = system.CreateControlAccountMgr();
return mgr.controlAccountMgr;
}
}
public SbmcInstanceMgr ControlInstanceMgr
{
get
{
if (mgr.controlInstanceMgr == null)
mgr.controlInstanceMgr = system.CreateControlInstanceMgr();
return mgr.controlInstanceMgr;
}
}
public SbmcItemMgr ControlItemMgr
{
get
{
if (mgr.controlItemMgr == null)
mgr.controlItemMgr = system.CreateControlItemMgr();
return mgr.controlItemMgr;
}
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Core;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
public abstract partial class SbmcAccountMgr : SbmcControlMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
protected SbmcAccountMgr() : base()
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,220 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
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 System;
using System.Collections.Generic;
using System.Net.Mail;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
partial class SbmcAccountMgr
{
//-------------------------------------------------------------------
// Retrieve individual userAccounts.
//-------------------------------------------------------------------
// UserAccount exists.
public bool UserAccountExistsById(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return false;
SbmcUserAccount.Params prmUserAccount = new SbmcUserAccount.Params();
prmUserAccount.IdsIncluded.Add(userAccountId);
prmUserAccount.StatusCat = SbmcUserAccount.StatusCat.Any;
return GetUserAccountCount(prmUserAccount) == 1;
}
public bool UserAccountExistsByUserId(SysId userAccountIdOwner)
{
ClearErrorState();
if (!SysId.IsValid(userAccountIdOwner)) return false;
SbmcUserAccount.Params prmUserAccount = new SbmcUserAccount.Params();
prmUserAccount.IdsIncluded.Add(userAccountIdOwner);
prmUserAccount.StatusCat = SbmcUserAccount.StatusCat.Any;
return GetUserAccountCount(prmUserAccount) == 1;
}
public bool OrganisationExistsByName(String organisationName, SysId userAccountIdExclude)
{
ClearErrorState();
if (!StringUtil.IsEmpty(organisationName) || !SysId.IsValid(userAccountIdExclude)) return false;
SbmcUserAccount.Params prmUserAccount = new SbmcUserAccount.Params();
prmUserAccount.Name = organisationName;
prmUserAccount.IdsExcluded.Add(userAccountIdExclude);
prmUserAccount.StatusCat = SbmcUserAccount.StatusCat.Any;
return GetUserAccountCount(prmUserAccount) == 1;
}
public bool IndividualExistsByName(String firstName, String lastName, SysId userAccountIdExclude)
{
ClearErrorState();
if (!StringUtil.IsEmpty(firstName) || !StringUtil.IsEmpty(lastName) || !SysId.IsValid(userAccountIdExclude)) return false;
SbmcUserAccount.Params prmUserAccount = new SbmcUserAccount.Params();
prmUserAccount.Name = firstName;
prmUserAccount.Name = lastName;
prmUserAccount.IdsExcluded.Add(userAccountIdExclude);
prmUserAccount.StatusCat = SbmcUserAccount.StatusCat.Any;
return GetUserAccountCount(prmUserAccount) == 1;
}
//-------------------------------------------------------------------
// Get UserAccount.
public abstract SbmcUserAccount GetUserAccount(SbmcUserAccount.Params prm);
public SbmcUserAccount GetUserAccountById(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return null;
SbmcUserAccount.Params prmUserAccount = new SbmcUserAccount.Params();
prmUserAccount.IdsIncluded.Add(userAccountId);
prmUserAccount.StatusCat = SbmcUserAccount.StatusCat.Any;
return GetUserAccount(prmUserAccount);
}
public SbmcUserAccount GetUserAccountByEmailAddress(String emailAddress)
{
ClearErrorState();
if (StringUtil.IsBlank(emailAddress)) return null;
SbmcUserAccount.Params prmUserAccount = new SbmcUserAccount.Params();
prmUserAccount.EmailAddress = emailAddress;
prmUserAccount.StatusCat = SbmcUserAccount.StatusCat.Any;
return GetUserAccount(prmUserAccount);
}
//-------------------------------------------------------------------
// Create UserAccount.
public abstract SbmcUserAccount CreateUserAccount();
//-------------------------------------------------------------------
// Validate UserAccount data.
public bool IsValidUserAccount(SbmcUserAccount userAccount)
{
ClearErrorState();
if (userAccount == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserAccountData(userAccount.GetData(), new SbmcUserAccount.ErrField());
}
public virtual bool IsValidUserAccountData(SbmcUserAccount.Data data, SbmcUserAccount.ErrField errField)
{
// UserAccount properties.
ClearErrorState();
if (data == null) return SetErrorState("item not specified");
// Name.
if (errField.Title != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Title, "title", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_Title)))
{
errField.Title = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.FirstName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.FirstName, "first name", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_FirstName)))
{
errField.FirstName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Initials != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Initials, "initials", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_Initials)))
{
errField.Initials = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.LastName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.LastName, "last name", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_LastName), true))
{
errField.LastName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Phone numbers.
if (errField.PhoneMain != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMain, "phone number", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_PhoneMain)))
{
errField.PhoneMain = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneMobile != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMobile, "mobile number", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_PhoneMobile)))
{
errField.PhoneMobile = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneAlt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneAlt, "alt number", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_PhoneAlt)))
{
errField.PhoneAlt = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.UserAccount_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmcUserAccount.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// UserAccount database interface.
public abstract bool InsertUserAccount(SbmcUserAccount userAccount, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserAccount(SbmcUserAccount userAccount, DbUpdateInfo dbUpdateInfo);
public virtual bool UserAccountCanBeDeleted(SbmcUserAccount userAccount)
{
if (userAccount == null) return SetErrorState("item not specified");
//ClearErrorState();
return true;
}
public abstract bool DeleteUserAccount(SbmcUserAccount userAccount, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// UserAccount list.
public abstract ColumnDfn GetUserAccountColumnDfn(SbmcUserAccount.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserAccountQueryFilter(SbmcUserAccount.Params prm);
public abstract long GetUserAccountCount(SbmcUserAccount.Params prm);
public abstract List<SbmcUserAccount> GetUserAccountList(SbmcUserAccount.Params prm);
public abstract DbResultSet ExecuteUserAccountQuery(List<ColumnDfn> columns, SbmcUserAccount.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public DataValue GetUserAccountDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmcUserAccount.Column)column.Id)
{
// Notes.
case SbmcUserAccount.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status.
case SbmcUserAccount.Column.Status_Desc:
case SbmcUserAccount.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmcUserAccount.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SbmcUserAccount.Column.Status_Ind)
value = new DataValue(SbmcUserAccount.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,106 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Interfaces;
using Sarand.Net.Standard.Base.ItemDocs;
using Sarand.Net.Standard.Base.ItemOptions;
using Sarand.Net.Standard.Base.ReferenceData;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.UpdateLog;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
public abstract class SbmcControlMgr : SbmItemMgr
{
//-------------------------------------------------------------------
// Data members.
private SbmInternals_Control internals = null;
//-------------------------------------------------------------------
// Static initialisation.
static SbmcControlMgr()
{
}
//-------------------------------------------------------------------
// Construction.
protected SbmcControlMgr()
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (internals != null) internals.Dispose();
internals = null;
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
protected SbmInternals_Control Internals_Control { get { if (internals == null) internals = new SbmInternals_Control(); return internals; } }
//-------------------------------------------------------------------
// Control managers.
protected SbmcAccountMgr ControlAccountMgr { get { return Internals_Control.ControlAccountMgr; } }
protected SbmcInstanceMgr ControlInstanceMgr { get { return Internals_Control.ControlInstanceMgr; } }
protected SbmcItemMgr ControlItemMgr { get { return Internals_Control.ControlItemMgr; } }
//-------------------------------------------------------------------
/// <summary>
/// Get suitable display test to identity Control data item.
/// </summary>
/// <param name="itemId"></param>
/// <returns></returns>
public String GetItemCaption(ItemId itemId)
{
if (ItemId.IsValid(itemId))
{
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposables = new DisposableCollection<SacsHierarchyItem>())
{
if (itemId.Type == (short)SbmcHierarchyItem.ItemType.UserAccount)
{
SbmcUserAccount userAccount = ControlAccountMgr.GetUserAccountById(itemId.Id);
disposables.Add(userAccount);
if (userAccount != null)
return userAccount.GetDisplayName();
return $"UserAccount #{itemId.Id}";
}
if (itemId.Type == (short)SbmcHierarchyItem.ItemType.Owner)
{
SbmcOwner owner = ControlInstanceMgr.GetOwnerById(itemId.Id);
disposables.Add(owner);
if (owner != null)
return owner.Name;
return $"Owner #{itemId.Id}";
}
if (itemId.Type == (short)SbmcHierarchyItem.ItemType.Repository)
{
SbmcRepository repository = ControlInstanceMgr.GetRepositoryById(itemId.Id);
disposables.Add(repository);
if (repository != null)
return repository.Context;
return $"Repository #{itemId.Id}";
}
}
}
return "";
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,34 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Core;
using System.Collections.Generic;
using static Sarand.BusinessMgr.Net.Standard.Base.App.Sbm.Config;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
public abstract partial class SbmcInstanceMgr : SbmcControlMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
protected SbmcInstanceMgr() : base()
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,170 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
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 System;
using System.Collections.Generic;
using System.Net.Mail;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
// Control Instance Manager - Owners.
//=======================================================================
partial class SbmcInstanceMgr
{
//-------------------------------------------------------------------
// Owner exists.
public bool OwnerExistsById(SysId ownerId)
{
ClearErrorState();
if (!SysId.IsValid(ownerId)) return false;
SbmcOwner.Params prmOwner = new SbmcOwner.Params();
prmOwner.IdsIncluded.Add(ownerId);
prmOwner.StatusCat = SbmcOwner.StatusCat.Any;
return GetOwnerCount(prmOwner) == 1;
}
//-------------------------------------------------------------------
// Get Owner.
public abstract SbmcOwner GetOwner(SbmcOwner.Params prm);
public SbmcOwner GetOwnerById(SysId ownerId)
{
ClearErrorState();
if (!SysId.IsValid(ownerId)) return null;
SbmcOwner.Params prmOwner = new SbmcOwner.Params();
prmOwner.IdsIncluded.Add(ownerId);
prmOwner.StatusCat = SbmcOwner.StatusCat.Any;
return GetOwner(prmOwner);
}
//-------------------------------------------------------------------
// Create Owner.
public abstract SbmcOwner CreateOwner();
//-------------------------------------------------------------------
// Validate Owner data.
public bool IsValidOwner(SbmcOwner owner)
{
ClearErrorState();
if (owner == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidOwnerData(owner.GetData(), new SbmcOwner.ErrField());
}
public virtual bool IsValidOwnerData(SbmcOwner.Data data, SbmcOwner.ErrField errField)
{
// Owner properties.
ClearErrorState();
if (data == null) return SetErrorState("item not specified");
// Contact.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_Name), true))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ContactName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactName, "contact", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_ContactName)))
{
errField.ContactName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ContactEmailAddress != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactEmailAddress, "contact email", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_ContactEmailAddress)))
{
errField.ContactEmailAddress = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ContactPhoneMain != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactPhoneMain, "contact phone", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_ContactPhoneMain)))
{
errField.ContactPhoneMain = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ContactPhoneAlt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactPhoneAlt, "contact alt phone", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_ContactPhoneAlt)))
{
errField.ContactPhoneAlt = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Owner_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmcOwner.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// Owner owner interface.
public abstract bool InsertOwner(SbmcOwner owner, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateOwner(SbmcOwner owner, DbUpdateInfo dbUpdateInfo);
public virtual bool OwnerCanBeDeleted(SbmcOwner owner)
{
if (owner == null) return SetErrorState("item not specified");
//ClearErrorState();
return true;
}
public abstract bool DeleteOwner(SbmcOwner owner, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Owner list.
public abstract ColumnDfn GetOwnerColumnDfn(SbmcOwner.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetOwnerQueryFilter(SbmcOwner.Params prm);
public abstract long GetOwnerCount(SbmcOwner.Params prm);
public abstract List<SbmcOwner> GetOwnerList(SbmcOwner.Params prm);
public abstract DbResultSet ExecuteOwnerQuery(List<ColumnDfn> columns, SbmcOwner.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public DataValue GetOwnerDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmcOwner.Column)column.Id)
{
// Notes.
case SbmcOwner.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status.
case SbmcOwner.Column.Status_Desc:
case SbmcOwner.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmcOwner.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SbmcOwner.Column.Status_Ind)
value = new DataValue(SbmcOwner.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,198 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
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 System;
using System.Collections.Generic;
using System.Net.Mail;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
// Control - Instance Manager - Repositories.
//=======================================================================
partial class SbmcInstanceMgr
{
//-------------------------------------------------------------------
// Repository exists.
public bool RepositoryExistsById(SysId repositoryId)
{
ClearErrorState();
if (!SysId.IsValid(repositoryId)) return false;
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.IdsIncluded.Add(repositoryId);
prmRepository.StatusCat = SbmcRepository.StatusCat.Any;
return GetRepositoryCount(prmRepository) == 1;
}
public bool RepositoryExistsByContext(String context)
{
ClearErrorState();
if (!StringUtil.IsBlank(context)) return false;
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.ContextsIncluded.Add(context);
prmRepository.StatusCat = SbmcRepository.StatusCat.Any;
return GetRepositoryCount(prmRepository) == 1;
}
//-------------------------------------------------------------------
// Get Repository.
public abstract SbmcRepository GetRepository(SbmcRepository.Params prm);
public SbmcRepository GetRepositoryById(SysId repositoryId)
{
ClearErrorState();
if (!SysId.IsValid(repositoryId)) return null;
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.IdsIncluded.Add(repositoryId);
prmRepository.StatusCat = SbmcRepository.StatusCat.Any;
return GetRepository(prmRepository);
}
public SbmcRepository GetRepositoryByContext(String context)
{
ClearErrorState();
if (StringUtil.IsBlank(context)) return null;
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.ContextsIncluded.Add(context);
prmRepository.StatusCat = SbmcRepository.StatusCat.Any;
return GetRepository(prmRepository);
}
//-------------------------------------------------------------------
// Create Repository.
public abstract SbmcRepository CreateRepository();
//-------------------------------------------------------------------
// Validate Repository data.
public bool IsValidRepository(SbmcRepository repository)
{
ClearErrorState();
if (repository == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidRepositoryData(repository.GetData(), new SbmcRepository.ErrField());
}
public virtual bool IsValidRepositoryData(SbmcRepository.Data data, SbmcRepository.ErrField errField)
{
// Repository properties.
ClearErrorState();
if (data == null) return SetErrorState("item not specified");
// Owner.
if (!SysId.IsValid(data.OwnerId)) return SetErrorState("Owner must be specified");
// Repository.
if (errField.Context != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Context, "context", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_Context), true))
{
errField.Context = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ServerName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ServerName, "server", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_ServerName), true))
{
errField.ServerName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.InstanceName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.InstanceName, "instance", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_InstanceName)))
{
errField.InstanceName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DatabaseName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DatabaseName, "database", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_DatabaseName), true))
{
errField.DatabaseName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Credentials.
if (errField.UserName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.UserName, "user", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_UserName)))
{
errField.UserName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Password != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Password, "password", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_Password)))
{
errField.Password = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.Repository_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmcRepository.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// Repository repository interface.
public abstract bool InsertRepository(SbmcRepository repository, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateRepository(SbmcRepository repository, DbUpdateInfo dbUpdateInfo);
public virtual bool RepositoryCanBeDeleted(SbmcRepository repository)
{
if (repository == null) return SetErrorState("item not specified");
//ClearErrorState();
return true;
}
public abstract bool DeleteRepository(SbmcRepository repository, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Repository list.
public abstract ColumnDfn GetRepositoryColumnDfn(SbmcRepository.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetRepositoryQueryFilter(SbmcRepository.Params prm);
public abstract long GetRepositoryCount(SbmcRepository.Params prm);
public abstract List<SbmcRepository> GetRepositoryList(SbmcRepository.Params prm);
public abstract DbResultSet ExecuteRepositoryQuery(List<ColumnDfn> columns, SbmcRepository.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public DataValue GetRepositoryDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmcRepository.Column)column.Id)
{
// Notes.
case SbmcRepository.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status.
case SbmcRepository.Column.Status_Desc:
case SbmcRepository.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmcRepository.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SbmcRepository.Column.Status_Ind)
value = new DataValue(SbmcRepository.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Core;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
public abstract partial class SbmcItemMgr : SbmcControlMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
protected SbmcItemMgr() : base()
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,212 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
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 System;
using System.Collections.Generic;
using System.Net.Mail;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control
{
//=======================================================================
// Control Item Manager - ItemParams.
//=======================================================================
partial class SbmcItemMgr
{
//-------------------------------------------------------------------
// Item exists.
public bool ItemParamExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SbmcItemParam.Params prmItemParam = new SbmcItemParam.Params();
prmItemParam.IdsIncluded.Add(id);
prmItemParam.StatusCat = SbmcItemParam.StatusCat.NotDeleted;
return GetItemParamCount(prmItemParam) == 1;
}
//-------------------------------------------------------------------
// Get item.
public abstract SbmcItemParam GetItemParam(SbmcItemParam.Params prm);
public SbmcItemParam GetItemParamById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SbmcItemParam.Params prmItemParam = new SbmcItemParam.Params();
prmItemParam.IdsIncluded.Add(id);
prmItemParam.StatusCat = SbmcItemParam.StatusCat.NotDeleted;
return GetItemParam(prmItemParam);
}
//-------------------------------------------------------------------
// Create item.
public abstract SbmcItemParam CreateItemParam(ItemId itemId);
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidItemParam(SbmcItemParam itemParam)
{
ClearErrorState();
if (itemParam == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidItemParamData(itemParam.GetData(), new SbmcItemParam.ErrField());
}
public virtual bool IsValidItemParamData(SbmcItemParam.Data data, SbmcItemParam.ErrField errField)
{
// Item properties.
ClearErrorState();
if (data == null) return SetErrorState("item not specified");
// Item.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore)
{
if (!ItemId.IsValid(data.ItemId))
{
errField.Context = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be specified");
}
if (!SbmcItemParam.ValidItemTypes.Contains((SbmcHierarchyItem.ItemType)data.ItemId.Type))
{
errField.Context = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid item type specified");
}
}
// Param.
if (errField.Context != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Context, "context", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.ItemParam_Context), true))
{
errField.Context = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.ItemParam_Name), true))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Value != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Value, "contact email", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.ItemParam_Value)))
{
errField.Value = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.ItemParam_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn_Control.GetColTextLen(SbmDbDfn_Control.ColumnIdx.ItemParam_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmcItemParam.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// Item interface.
public abstract bool InsertItemParam(SbmcItemParam itemParam, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateItemParam(SbmcItemParam itemParam, DbUpdateInfo dbUpdateInfo);
public virtual bool ItemParamCanBeDeleted(SbmcItemParam itemParam)
{
if (itemParam == null) return SetErrorState("item not specified");
//ClearErrorState();
return true;
}
public abstract bool DeleteItemParam(SbmcItemParam itemParam, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetItemParamColumnDfn(SbmcItemParam.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetItemParamQueryFilter(SbmcItemParam.Params prm);
public abstract long GetItemParamCount(SbmcItemParam.Params prm);
public abstract List<SbmcItemParam> GetItemParamList(SbmcItemParam.Params prm);
public abstract DbResultSet ExecuteItemParamQuery(List<ColumnDfn> columns, SbmcItemParam.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public DataValue GetItemParamDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmcItemParam.Column)column.Id)
{
// Item Type caption.
case SbmcItemParam.Column.ItemType_Caption:
{
short itemTypeValue = (short)values.GetValue(column.DataName).AsLong();
SbmcHierarchyItem.ItemType itemType = (SbmcHierarchyItem.ItemType)itemTypeValue;
value = new DataValue(SbmcHierarchyItem.getItemTypeCaption(itemType));
}
break;
// Item caption.
case SbmcItemParam.Column.Item_Caption:
{
value = new DataValue(values.GetValue(column.DataName).AsString());
if (StringUtil.IsBlank(value.ToString()))
{
short itemType = (short)values.GetValue(GetItemParamColumnDfn(SbmcItemParam.Column.ItemType).DataName).AsLong();
SysId itemId = new SysId(values.GetValue(GetItemParamColumnDfn(SbmcItemParam.Column.ItemId).DataName).AsLong());
value = new DataValue($"[{GetItemCaption(new ItemId(itemType, itemId))}]");
}
}
break;
// Value.
case SbmcItemParam.Column.Value:
String paramContext = values.GetValue(GetItemParamColumnDfn(SbmcItemParam.Column.Context).DataName).AsString();
String paramName = values.GetValue(GetItemParamColumnDfn(SbmcItemParam.Column.Name).DataName).AsString();
ushort paramFlags = (ushort)values.GetValue(GetItemParamColumnDfn(SbmcItemParam.Column.Flags).DataName).AsLong();
if (SbmcItemParam.IsPasswordValue(paramContext, paramName, paramFlags))
value = new DataValue("******");
else value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Notes.
case SbmcItemParam.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status.
case SbmcItemParam.Column.Status_Desc:
case SbmcItemParam.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmcItemParam.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SbmcItemParam.Column.Status_Ind)
value = new DataValue(SbmcItemParam.GetStatusTriState(status));
}
break;
default:
value = new DataValue(column.FormatValue(values));
break;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -6,7 +6,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmAccountMgr : SbmItemMgr
public abstract partial class SbmAccountMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -35,7 +35,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmAccountMgr(ISbmUserContext userContext) :
protected SbmAccountMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
@@ -1,5 +1,6 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.ItemOptions;
+2 -2
View File
@@ -6,14 +6,14 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmAssetMgr : SbmItemMgr
public abstract partial class SbmAssetMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
protected SbmAssetMgr(ISbmUserContext userContext) :
protected SbmAssetMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
@@ -98,169 +98,126 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.SerialNumber = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.RefExt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.RefExt, "RefExt", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_RefExt), true))
if (errField.RefExt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.RefExt, "RefExt", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_RefExt)))
{
errField.RefExt = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "DescBrief", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_DescBrief), true))
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "DescBrief", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_DescBrief)))
{
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Item.
if (errField.ItemType != SacsHierarchyItem.ValidValue.Ignore)
{
if ((int)data.ItemId.Type < 1)
{
errField.ItemType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item type must be supplied");
}
}
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.ItemId.Id))
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore)
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be specified");
}
if (errField.PurchaseOn != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.PurchaseOn))
// Purchase.
if (errField.PurchaseOn != SacsHierarchyItem.ValidValue.Ignore)
{
errField.PurchaseOn = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.AssocIdSupplier != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.AssocIdSupplier) < 1)
if (errField.AssocIdSupplier != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AssocIdSupplier = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Assoc Id Supplier must be supplied");
}
if (errField.PurchaseInvoiceRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PurchaseInvoiceRef, "Purchase Invoice Ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_PurchaseInvoiceRef), true))
if (errField.PurchaseInvoiceRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PurchaseInvoiceRef, "Purchase Invoice Ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_PurchaseInvoiceRef)))
{
errField.PurchaseInvoiceRef = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PaymentTerms != SacsHierarchyItem.ValidValue.Ignore)
{
errField.PaymentTerms = SacsHierarchyItem.ValidValue.Invalid;
}
if (errField.AmountPurchase != SacsHierarchyItem.ValidValue.Ignore)
{
}
if (errField.TaxCodeIdPurchase != SacsHierarchyItem.ValidValue.Ignore)
{
}
if (errField.AmountPurchaseGross != SacsHierarchyItem.ValidValue.Ignore)
{
}
if (errField.AmountSettlementGross != SacsHierarchyItem.ValidValue.Ignore)
{
}
if (errField.AmountEnhancementGross != SacsHierarchyItem.ValidValue.Ignore)
{
}
// Sale.
if (errField.AssocIdCustomer != SacsHierarchyItem.ValidValue.Ignore)
{
}
if (errField.SellCategoryCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.SellCategoryCode, "Sell category code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_SellCategoryCode)))
{
errField.SellCategoryCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.AmountPurchase != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountPurchase < 1)
if (errField.AmountSell != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AmountPurchase = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.TaxCodeIdPurchase != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdPurchase) < 1)
if (errField.TaxCodeIdSell != SacsHierarchyItem.ValidValue.Ignore)
{
errField.TaxCodeIdPurchase = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Purchase must be supplied");
}
if (errField.AmountPurchaseGross != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountPurchaseGross < 1)
if (errField.AmountSellGross != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AmountPurchaseGross = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.AmountSettlementGross != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountSettlementGross < 1)
if (errField.TaxCodeIdProfit != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AmountSettlementGross = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.AmountPurchaseGross != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountPurchaseGross < 1)
if (errField.SoldOn != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AmountPurchaseGross = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.AssocIdCustomer != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.AssocIdCustomer) < 1)
if (errField.AmountSold != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AssocIdCustomer = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Assoc Id Customer must be supplied");
}
if (errField.PurchaseInvoiceRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PurchaseInvoiceRef, "Purchase Invoice Ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_PurchaseInvoiceRef), true))
if (errField.AmountSoldGross != SacsHierarchyItem.ValidValue.Ignore)
{
errField.PurchaseInvoiceRef = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.AmountSell != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountSell < 1)
{
errField.AmountSell = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.TaxCodeIdSell != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdSell) < 1)
{
errField.TaxCodeIdSell = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Aff Id Owner must be supplied");
}
if (errField.AmountSellGross != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountSellGross < 1)
{
errField.AmountSellGross = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.TaxCodeIdProfit != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdProfit) < 1)
{
errField.TaxCodeIdProfit = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Aff Id Owner must be supplied");
}
if (errField.SoldOn != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.SoldOn))
{
errField.SoldOn = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.AmountSold != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountSold < 1)
{
errField.AmountSold = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.AmountSoldGross != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountSoldGross < 1)
{
errField.AmountSoldGross = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.DisposeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DisposeCode, "dispose code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_DisposeCode), true))
// Disposal.
if (errField.DisposeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DisposeCode, "dispose code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_DisposeCode)))
{
errField.DisposeCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DisposeOn != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.DisposeOn))
{
errField.DisposeOn = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DueBackOn != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.DueBackOn))
// Rental.
if (errField.DueBackOn != SacsHierarchyItem.ValidValue.Ignore)
{
errField.DueBackOn = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.AmountRentalCost != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountRentalCost < 1)
if (errField.AmountRentalCost != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AmountRentalCost = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.UomIdRentalCost != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.UomIdRentalCost) < 1)
if (errField.UomIdRentalCost != SacsHierarchyItem.ValidValue.Ignore)
{
errField.UomIdRentalCost = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Uom Id Rental Cost must be supplied");
}
if (errField.TaxCodeIdRentalCost != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdRentalCost) < 1)
if (errField.TaxCodeIdRentalCost != SacsHierarchyItem.ValidValue.Ignore)
{
errField.TaxCodeIdRentalCost = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Rental Cost must be supplied");
}
if (errField.AmountRentalPrice != SacsHierarchyItem.ValidValue.Ignore && (short)data.AmountRentalPrice < 1)
if (errField.AmountRentalPrice != SacsHierarchyItem.ValidValue.Ignore)
{
errField.AmountRentalPrice = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Tax Rate must be supplied");
}
if (errField.UomIdRentalPrice != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.UomIdRentalPrice) < 1)
if (errField.UomIdRentalPrice != SacsHierarchyItem.ValidValue.Ignore)
{
errField.UomIdRentalPrice = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Uom Id Rental Cost must be supplied");
}
if (errField.TaxCodeIdRentalPrice != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdRentalPrice) < 1)
if (errField.TaxCodeIdRentalPrice != SacsHierarchyItem.ValidValue.Ignore)
{
errField.TaxCodeIdRentalPrice = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Rental Price must be supplied");
}
if (errField.ProcessIdNext != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.ProcessIdNext) < 1)
// Processes.
if (errField.ProcessIdNext != SacsHierarchyItem.ValidValue.Ignore)
{
errField.ProcessIdNext = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Rental Price must be supplied");
}
// Common.
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAsset_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
@@ -273,7 +230,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmAsset.AssetStatuses.Contains(data.Status))
if (!SbmAsset.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
@@ -19,7 +19,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
// Utilities.
//-------------------------------------------------------------------
// Retrieve individual assetCategories.
// Retrieve individual items.
//-------------------------------------------------------------------
// AssetCategory exists.
public bool AssetCategoryExistsById(SysId assetCategoryId)
@@ -27,7 +27,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
ClearErrorState();
if (!SysId.IsValid(assetCategoryId)) return false;
SbmAssetCategory.Params prmAssetCategory = new SbmAssetCategory.Params();
prmAssetCategory.IncludedIds.Add(assetCategoryId);
prmAssetCategory.IdsIncluded.Add(assetCategoryId);
prmAssetCategory.StatusCat = SbmAssetCategory.StatusCat.Any;
return GetAssetCategoryCount(prmAssetCategory) == 1;
}
@@ -46,7 +46,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
}
//----------------------------------------------------------
// Get assetCategories.
// Get item.
public abstract SbmAssetCategory GetAssetCategory(SbmAssetCategory.Params prm);
public SbmAssetCategory GetAssetCategoryById(SysId assetCategoryId)
@@ -54,7 +54,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
ClearErrorState();
if (!SysId.IsValid(assetCategoryId)) return null;
SbmAssetCategory.Params prmAssetCategory = new SbmAssetCategory.Params();
prmAssetCategory.IncludedIds.Add(assetCategoryId);
prmAssetCategory.IdsIncluded.Add(assetCategoryId);
prmAssetCategory.StatusCat = SbmAssetCategory.StatusCat.Any;
return GetAssetCategory(prmAssetCategory);
}
@@ -100,61 +100,38 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
}
if (errField.IncomeType != SacsHierarchyItem.ValidValue.Ignore)
{
if ((int)data.IncomeType < 1)
{
errField.IncomeType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Type must be supplied");
}
}
if (errField.AssocIdSupplier != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.AssocIdSupplier) < 1)
{
errField.AssocIdSupplier = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Assoc Id Supplier must be supplied");
}
if (errField.PaymentTerms != SacsHierarchyItem.ValidValue.Ignore)
{
errField.PaymentTerms = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.TaxCodeIdPurchase != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdPurchase) < 1)
{
errField.TaxCodeIdPurchase = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Purchase must be supplied");
}
if (errField.AssocIdCustomer != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.AssocIdCustomer) < 1)
{
errField.AssocIdCustomer = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Assoc Id Customer must be supplied");
}
if (errField.TaxCodeIdSell != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdSell) < 1)
{
errField.TaxCodeIdSell = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Sell must be supplied");
}
if (errField.TaxCodeIdProfit != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdProfit) < 1)
{
errField.TaxCodeIdProfit = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Profit must be supplied");
}
if (errField.DisposeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DisposeCode, "dispose code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAssetCategory_DisposeCode), true))
if (errField.DisposeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DisposeCode, "dispose code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaAssetCategory_DisposeCode)))
{
errField.DisposeCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.TaxCodeIdRentalCost != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdRentalCost) < 1)
{
errField.TaxCodeIdRentalCost = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Rental Cost must be supplied");
}
if (errField.UomIdRentalCost != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.UomIdRentalCost) < 1)
{
errField.UomIdRentalCost = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Uom Id Rental Cost must be supplied");
}
if (errField.TaxCodeIdRentalPrice != SacsHierarchyItem.ValidValue.Ignore && SysId.ToInt(data.TaxCodeIdRentalPrice) < 1)
{
errField.TaxCodeIdRentalPrice = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Taxcode Id Rental Price must be supplied");
}
// Common properties.
@@ -170,7 +147,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmAssetCategory.AssetCategoryStatuses.Contains(data.Status))
if (!SbmAssetCategory.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
@@ -133,7 +133,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmVehicle.VehicleStatuses.Contains(data.Status))
if (!SbmVehicle.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
@@ -33,7 +33,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SbmVehicleClass.Params prm = new SbmVehicleClass.Params();
prm.IncludedIds.Add(id);
prm.IdsIncluded.Add(id);
prm.StatusCat = SbmVehicleClass.StatusCat.Any;
return GetVehicleClassCount(prm) == 1;
}
@@ -58,7 +58,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SbmVehicleClass.Params prm = new SbmVehicleClass.Params();
prm.IncludedIds.Add(id);
prm.IdsIncluded.Add(id);
prm.StatusCat = SbmVehicleClass.StatusCat.Any;
return GetVehicleClass(prm);
}
@@ -119,12 +119,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.VehicleCategoryCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.VehicleCategoryCode, "vehicle category code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode), true))
if (errField.VehicleCategoryCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.VehicleCategoryCode, "vehicle category code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode)))
{
errField.VehicleCategoryCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.InsuranceCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.InsuranceCode, "insurance code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode), true))
if (errField.InsuranceCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.InsuranceCode, "insurance code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode)))
{
errField.InsuranceCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
@@ -142,7 +142,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmVehicleClass.VehicleClassStatuses.Contains(data.Status))
if (!SbmVehicleClass.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
@@ -109,7 +109,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmVehicleEvent.VehicleEventStatuses.Contains(data.Status))
if (!SbmVehicleEvent.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
@@ -103,7 +103,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmVehicleFeature.VehicleFeatureStatuses.Contains(data.Status))
if (!SbmVehicleFeature.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
@@ -7,7 +7,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmCommodityMgr : SbmItemMgr
public abstract partial class SbmCommodityMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -29,7 +29,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmCommodityMgr(ISbmUserContext userContext) :
protected SbmCommodityMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
@@ -371,7 +371,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Create commodities.
public abstract SbmCommodity CreateCommodity(SysId affIdOwner, Sbm.CommodityType commodityType, String code);
public abstract SbmCommodity CreateCommodity(Sbm.CommodityType commodityType, String code);
//-------------------------------------------------------------------
// Validate Commodity data.
@@ -36,7 +36,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
// Build list of portfolios that are published to website(s):
List<SysId> portfolioIdsPublished = new List<SysId>();
List<SaInterfaceDfn> interfaceDfns = InterfaceConsole.GetInterfaceDfns(UserContext.Organisation.InterfaceContext, SaInterfaceCategory.Website, (short)Sbm.InterfaceType_Website.WebStore, false);
List<SaInterfaceDfn> interfaceDfns = InterfaceConsole.GetInterfaceDfns(UserContext.OrganisationInterfaceContext, SaInterfaceCategory.Website, (short)Sbm.InterfaceType_Website.WebStore, false);
foreach (SaInterfaceDfn interfaceDfn in interfaceDfns)
{
// Retrieve Portfolio Item Id option.
@@ -80,7 +80,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Create Item.
public abstract SbmPortfolioItem CreatePortfolioItem(SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType);
public abstract SbmPortfolioItem CreatePortfolioItem(Sbm.PortfolioItemType portfolioItemType);
//-------------------------------------------------------------------
// Retrieve individual portfolioItems.
+393
View File
@@ -0,0 +1,393 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Interfaces;
using Sarand.Net.Standard.Base.ItemDocs;
using Sarand.Net.Standard.Base.ItemOptions;
using Sarand.Net.Standard.Base.ReferenceData;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.UpdateLog;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract class SbmCoreMgr : SbmItemMgr
{
//-------------------------------------------------------------------
// System code cache.
/// <summary>Central repository for system codes used by manager.</summary>
private class SystemCodeCache
{
public SystemCodeCache(ISbmUserContext_Core userContext)
{
this.userContext = userContext;
}
private readonly ISbmUserContext_Core userContext;
private Dictionary<Sbm.SystemCode, List<TypeCodeDesc>> systemCodes = new Dictionary<Sbm.SystemCode, List<TypeCodeDesc>>();
public List<TypeCodeDesc> GetCodesOfType(Sbm.SystemCode systemCode)
{
if (!systemCodes.ContainsKey(systemCode))
systemCodes[systemCode] = SbmSystem.GetCodesOfType(userContext, systemCode);
return new List<TypeCodeDesc>(systemCodes.GetValue(systemCode, new List<TypeCodeDesc>()));
}
}
//-------------------------------------------------------------------
// Code type cache.
public class CodeTypeCache
{
/// <summary>
/// Cached codes by code type.
/// <para>NB Likely to only contain a subset of code types depending on context.</para>
/// </summary>
private Dictionary<String, List<SaCode>> codesByCodeType { get; }
// Construction.
public CodeTypeCache(Dictionary<String, List<SaCode>> codes)
{
codesByCodeType = codes;
}
/// <summary>Are there any codes of the specified type.</summary>
public bool CodeTypeHasCodes(Sbm.ApplCodeType codeType)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
return codesByCodeType.ContainsKey(codeTypeCode)
? codesByCodeType[codeTypeCode].Count > 0
: false;
}
/// <summary>Get the description for the code belonging to the specified code type.</summary>
public String GetDescForCodeTypeCode(Sbm.ApplCodeType codeType, String code, bool defaultToCode = true)
{
List<SaCode> codes = GetCodesForCodeType(codeType, false);
return codes?.GetDescForCode(code, defaultToCode ? code : "") ?? "";
}
/// <summary>Retrieve codes for specified code type.</summary>
public List<SaCode> GetCodesForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
return codesByCodeType.ContainsKey(codeTypeCode)
? new List<SaCode>(codesByCodeType[codeTypeCode].FindAll(code => !activeOnly || code.Status == SaCode.ActiveStatus))
: null;
}
/// <summary>Retrieve code descs for specified code type.</summary>
public List<CodeDesc> GetCodeDescsForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
return codesByCodeType.ContainsKey(codeTypeCode)
? new List<CodeDesc>(codesByCodeType[codeTypeCode].FindAll(code => !activeOnly || code.Status == SaCode.ActiveStatus).Select(code => new CodeDesc(code.Code, code.Description)))
: null;
}
}
//-------------------------------------------------------------------
// Data members.
private SbmInternals internals;
private readonly SystemCodeCache systemCodeCache;
private readonly List<TypeCodeDesc> currencyCodes;
private List<SaCurrency> currencies;
private List<SaLanguage> languages;
private List<SaRegion> regions;
private List<SaTaxCode> taxCodes;
private List<SaUnitMeasure> unitsOfMeasure;
//-------------------------------------------------------------------
// Static initialisation.
static SbmCoreMgr()
{
}
//-------------------------------------------------------------------
// Construction.
protected SbmCoreMgr(ISbmUserContext_Core userContext)
{
if (userContext == null)
throw new NotSupportedException("SbmItemMgr User context must be supplied");
UserContext = userContext;
systemCodeCache = new SystemCodeCache(userContext);
// Numeric formatting values.
WeightDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityWeight);
LengthDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityLength);
VolumeDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityVolume);
DensityDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityDensity);
BoxQuantityDecimals = 0;
// Reference data.
currencyCodes = SaReferenceDataConsole.GetReferenceDataCodes(ReferenceDataSystemCode.CurrencyCode);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (internals != null) internals.Dispose();
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Async initialisation.
public async void InitialiseCodeTypesAsync()
{
if (codeTypeCache != null) return;
// Populate cache with codes for all supported code types.
// Intended to minimise db I/O to retrieve all required codes.
SaCode.Params prmCode = new SaCode.Params();
foreach (Sbm.ApplCodeType codeType in SupportedCodeTypes)
prmCode.CodeTypeCodes.Add(SbmSystem.GetCodeTypeCode(codeType));
prmCode.StatusCat = SaCode.StatusCat.Any;
codeTypeCache = new CodeTypeCache(await CodeTypeConsole.GetCodesByCodeTypeAsync(prmCode));
}
//-------------------------------------------------------------------
// Properties.
// System codes.
protected List<TypeCodeDesc> ItemTypes { get { return GetCodesOfType(Sbm.SystemCode.ItemType); } }
protected List<TypeCodeDesc> InterfaceOptionCodes { get { return GetCodesOfType(Sbm.SystemCode.InterfaceOption); } }
// Numeric control values.
protected int WeightDecimals { get; set; } = 0;
protected int LengthDecimals { get; set; } = 0;
protected int VolumeDecimals { get; set; } = 0;
protected int DensityDecimals { get; set; } = 0;
protected int BoxQuantityDecimals { get; set; } = 0;
protected int OrderQuantityDecimals { get; set; } = 0;
// Session.
protected ISbmUserContext_Core UserContext { get; }
protected SbmSessionContext SessionContext { get { return UserContext.SessionContext; } }
protected SbmInternals Internals
{
get
{
if (internals == null) internals = new SbmInternals(UserContext);
return internals;
}
}
public SysId AffiliateId_Owner { get { return UserContext.OrganisationAffiliateId; } }
protected SbmAccountsDfn AccountsDfn { get { return Internals.AccountsDfn; } }
protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } }
// Managers.
protected SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } }
protected SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } }
protected SbmPriceMgr PriceMgr { get { return Internals.PriceMgr; } }
protected SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } }
protected SbmStockMgr StockMgr { get { return Internals.StockMgr; } }
protected SbmProcessMgr ProcessMgr { get { return Internals.ProcessMgr; } }
protected SbmDataItemMgr DataItemMgr { get { return Internals.DataItemMgr; } }
// Consoles.
protected SbmConfigConsole ConfigConsole { get { return Internals.ConfigConsole; } }
protected SaSecurityConsole SecurityConsole { get { return Internals.SecurityConsole; } }
protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } }
protected SaReferenceDataConsole ReferenceDataConsole { get { return Internals.ReferenceDataConsole; } }
protected SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } }
protected SaItemOptionConsole ItemOptionConsole { get { return Internals.ItemOptionConsole; } }
protected SaInterfaceConsole InterfaceConsole { get { return Internals.InterfaceConsole; } }
protected SaItemDocConsole ItemDocConsole { get { return Internals.ItemDocConsole; } }
// Configurations.
protected SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } }
protected SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } }
// Currencies.
protected List<TypeCodeDesc> CurrencyCodes { get { return new List<TypeCodeDesc>(currencyCodes); } }
protected List<SaCurrency> GetCurrencies()
{
return Internals.GetCurrencies();
}
protected SaCurrency GetCurrencyById(SysId currencyId)
{
return Internals.GetCurrencyById(currencyId);
}
protected SaCurrency GetCurrencyByCode(String currencyCode)
{
return Internals.GetCurrencyByCode(currencyCode);
}
protected static byte CurrencyDecimalsDefault { get { return SbmInternals.CurrencyDecimalsDefault; } }
protected byte GetCurrencyDecimalsForCurrencyById(SysId currencyId)
{
return Internals.GetCurrencyDecimalsForCurrencyById(currencyId);
}
//-------------------------------------------------------------------
// Utilities.
public List<TypeCodeDesc> GetCodesOfType(Sbm.SystemCode systemCode)
{
return systemCodeCache.GetCodesOfType(systemCode);
}
// Database utilities.
public bool TableExists(SbmDbDfn.TableIdx tableIdx)
{
SbmApplication application = SbmGlobals.Application;
if (application != null)
{
ISacsDatabase busMgrDb = application.GetBusMgrDatabase(SessionContext);
return application.DbTableExists(busMgrDb, tableIdx);
}
return false;
}
public bool ColumnExists(SbmDbDfn.ColumnIdx columnIdx)
{
SbmApplication application = SbmGlobals.Application;
if (application != null)
{
ISacsDatabase busMgrDb = application.GetBusMgrDatabase(SessionContext);
return application.DbColumnExists(busMgrDb, columnIdx);
}
return false;
}
//-------------------------------------------------------------------
// Configuration console utilities.
public bool AllowConfigOption(Sbm.ConfigOption configOption)
{
return ConfigConsole.AllowOption(UserContext, configOption);
}
public bool AllowAffiliateType(Sbm.AffiliateType affiliateType)
{
return ConfigConsole.AllowAffiliateType(UserContext, affiliateType);
}
public bool AllowAssociationType(Sbm.AssociationType associationType)
{
return ConfigConsole.AllowAssociationType(UserContext, associationType);
}
public bool AllowTransactionType(Sbm.TransactionType transactionType)
{
return ConfigConsole.AllowTransactionType(UserContext, transactionType);
}
public String GetAttributeCaption(SbmDbDfn.ColumnIdx columnIdx, String defaultValue)
{
return ConfigConsole.GetAttributeCaption(UserContext, columnIdx, defaultValue);
}
//-------------------------------------------------------------------
// C o d e T y p e s
//-------------------------------------------------------------------
public virtual List<Sbm.ApplCodeType> SupportedCodeTypes { get; } = new List<Sbm.ApplCodeType>();
private CodeTypeCache codeTypeCache;
public bool CodeTypeHasCodes(Sbm.ApplCodeType codeType)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
return codeTypeCache.CodeTypeHasCodes(codeType);
}
public String GetCodeTypeCodeDesc(Sbm.ApplCodeType codeType, String code, bool defaultToCode = true)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
List<SaCode> codes = codeTypeCache.GetCodesForCodeType(codeType, false);
if (codes != null)
return codes.GetDescForCode(code, defaultToCode ? code : "");
return "";
}
public List<SaCode> GetCodesForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
return codeTypeCache.GetCodesForCodeType(codeType, activeOnly);
}
public List<CodeDesc> GetCodeDescsForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
return codeTypeCache.GetCodeDescsForCodeType(codeType, activeOnly);
}
private void PopulateCodeTypes()
{
if (codeTypeCache != null) return;
// Populate cache with codes for all supported code types.
// Intended to minimise db I/O to retrieve all required codes.
SaCode.Params prmCode = new SaCode.Params();
foreach (Sbm.ApplCodeType codeType in SupportedCodeTypes)
prmCode.CodeTypeCodes.Add(SbmSystem.GetCodeTypeCode(codeType));
prmCode.StatusCat = SaCode.StatusCat.Any;
Dictionary<String, List<SaCode>> codesByCodeType = CodeTypeConsole.GetCodesByCodeType(prmCode);
// Populate any supported code types without codes.
foreach (Sbm.ApplCodeType codeType in SupportedCodeTypes)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
if (!codesByCodeType.ContainsKey(codeTypeCode))
codesByCodeType[codeTypeCode] = new List<SaCode>();
}
codeTypeCache = new CodeTypeCache(codesByCodeType);
}
//-------------------------------------------------------------------
// R e f e r e n c e D a t a
//-------------------------------------------------------------------
// Currencies.
private void PopulateCurrencies()
{
if (currencies != null) return;
SaCurrency.Params prmCurrency = new SaCurrency.Params();
prmCurrency.StatusCat = SaCurrency.StatusCat.Any;
currencies = ReferenceDataConsole.GetCurrencyList(prmCurrency);
}
public SaCurrency GetDefaultCurrency()
{
PopulateCurrencies();
String currencyCode = CurrencyCodes.GetCodeForType(SaCurrencyCode.Sterling);
return currencies.Find(item => item.Code.EqualsCI(currencyCode));
}
public SaCurrency GetCurrency(SysId currencyId)
{
PopulateCurrencies();
return currencies.Find(item => item.Id.Equals(currencyId));
}
//-------------------------------------------------------------------
// Regions.
private void PopulateRegions()
{
if (regions != null) return;
SaRegion.Params prmRegion = new SaRegion.Params();
regions = ReferenceDataConsole.GetRegionList(prmRegion);
}
public SaRegion FindRegionById(SysId regionId)
{
PopulateRegions();
return regions.FindById(regionId);
}
//-------------------------------------------------------------------
// Tax codes.
private void PopulateTaxCodes()
{
if (taxCodes != null) return;
SaTaxCode.Params prmTaxCode = new SaTaxCode.Params();
taxCodes = ReferenceDataConsole.GetTaxCodeList(prmTaxCode);
}
public SaTaxCode FindTaxCodeById(SysId taxCodeId)
{
PopulateTaxCodes();
return taxCodes.Find(item => item.Id.Equals(taxCodeId));
}
public SaTaxCode FindTaxCodeEffectiveOn(String taxCode, DateTime effectiveOn)
{
PopulateTaxCodes();
return taxCodes.FindByCodeEffectiveOn(taxCode, effectiveOn);
}
//-------------------------------------------------------------------
// Units of measure.
private void PopulateUnitsOfMeasure()
{
if (taxCodes != null) return;
SaUnitMeasure.Params prmUnitOfMeasure = new SaUnitMeasure.Params();
prmUnitOfMeasure.StatusCat = SaUnitMeasure.StatusCat.Any;
unitsOfMeasure = ReferenceDataConsole.GetUnitMeasureList(prmUnitOfMeasure);
}
public SaUnitMeasure FindUnitOfMeasureById(SysId uomId)
{
PopulateUnitsOfMeasure();
return unitsOfMeasure.FindById(uomId);
}
public List<SaUnitMeasure> FindUnitsOfMeasureByCategory(SaUomCategory uomCategory)
{
PopulateUnitsOfMeasure();
return unitsOfMeasure.FindAll(item => item.Category == uomCategory);
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -4,7 +4,7 @@ using Sarand.BusinessMgr.Net.Standard.Base.Core;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmDataItemMgr : SbmItemMgr
public abstract partial class SbmDataItemMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -24,7 +24,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmDataItemMgr(ISbmUserContext userContext) :
protected SbmDataItemMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
+5 -351
View File
@@ -1,102 +1,21 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Interfaces;
using Sarand.Net.Standard.Base.ItemDocs;
using Sarand.Net.Standard.Base.ItemOptions;
using Sarand.Net.Standard.Base.ReferenceData;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.UpdateLog;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract class SbmItemMgr : SacsItemMgr
public class SbmItemMgr : SacsItemMgr
{
//-------------------------------------------------------------------
// System code cache.
/// <summary>Central repository for system codes used by manager.</summary>
private class SystemCodeCache
{
public SystemCodeCache(ISbmUserContext userContext)
{
this.userContext = userContext;
}
private readonly ISbmUserContext userContext;
private Dictionary<Sbm.SystemCode, List<TypeCodeDesc>> systemCodes = new Dictionary<Sbm.SystemCode, List<TypeCodeDesc>>();
public List<TypeCodeDesc> GetCodesOfType(Sbm.SystemCode systemCode)
{
if (!systemCodes.ContainsKey(systemCode))
systemCodes[systemCode] = SbmSystem.GetCodesOfType(userContext, systemCode);
return new List<TypeCodeDesc>(systemCodes.GetValue(systemCode, new List<TypeCodeDesc>()));
}
}
//-------------------------------------------------------------------
// Code type cache.
public class CodeTypeCache
{
/// <summary>
/// Cached codes by code type.
/// <para>NB Likely to only contain a subset of code types depending on context.</para>
/// </summary>
private Dictionary<String, List<SaCode>> codesByCodeType { get; }
// Construction.
public CodeTypeCache(Dictionary<String, List<SaCode>> codes)
{
codesByCodeType = codes;
}
/// <summary>Are there any codes of the specified type.</summary>
public bool CodeTypeHasCodes(Sbm.ApplCodeType codeType)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
return codesByCodeType.ContainsKey(codeTypeCode)
? codesByCodeType[codeTypeCode].Count > 0
: false;
}
/// <summary>Get the description for the code belonging to the specified code type.</summary>
public String GetDescForCodeTypeCode(Sbm.ApplCodeType codeType, String code, bool defaultToCode = true)
{
List<SaCode> codes = GetCodesForCodeType(codeType, false);
return codes?.GetDescForCode(code, defaultToCode ? code : "") ?? "";
}
/// <summary>Retrieve codes for specified code type.</summary>
public List<SaCode> GetCodesForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
return codesByCodeType.ContainsKey(codeTypeCode)
? new List<SaCode>(codesByCodeType[codeTypeCode].FindAll(code => !activeOnly || code.Status == SaCode.ActiveStatus))
: null;
}
/// <summary>Retrieve code descs for specified code type.</summary>
public List<CodeDesc> GetCodeDescsForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
return codesByCodeType.ContainsKey(codeTypeCode)
? new List<CodeDesc>(codesByCodeType[codeTypeCode].FindAll(code => !activeOnly || code.Status == SaCode.ActiveStatus).Select(code => new CodeDesc(code.Code, code.Description)))
: null;
}
}
//-------------------------------------------------------------------
// Data members.
private SbmInternals internals;
private readonly SystemCodeCache systemCodeCache;
private readonly List<TypeCodeDesc> currencyCodes;
private List<SaCurrency> currencies;
private List<SaLanguage> languages;
private List<SaRegion> regions;
private List<SaTaxCode> taxCodes;
private List<SaUnitMeasure> unitsOfMeasure;
//-------------------------------------------------------------------
// Static initialisation.
@@ -106,59 +25,23 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmItemMgr(ISbmUserContext userContext)
protected SbmItemMgr()
{
if (userContext == null)
throw new NotSupportedException("SbmItemMgr User context must be supplied");
UserContext = userContext;
ElapsedLogger = new ElapsedTimeLogger(GetType().Name);
systemCodeCache = new SystemCodeCache(userContext);
// Numeric formatting values.
WeightDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityWeight);
LengthDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityLength);
VolumeDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityVolume);
DensityDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityDensity);
BoxQuantityDecimals = 0;
// Reference data.
currencyCodes = SaReferenceDataConsole.GetReferenceDataCodes(ReferenceDataSystemCode.CurrencyCode);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (internals != null) internals.Dispose();
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Async initialisation.
public async void InitialiseCodeTypesAsync()
{
if (codeTypeCache != null) return;
// Populate cache with codes for all supported code types.
// Intended to minimise db I/O to retrieve all required codes.
SaCode.Params prmCode = new SaCode.Params();
foreach (Sbm.ApplCodeType codeType in SupportedCodeTypes)
prmCode.CodeTypeCodes.Add(SbmSystem.GetCodeTypeCode(codeType));
prmCode.StatusCat = SaCode.StatusCat.Any;
codeTypeCache = new CodeTypeCache(await CodeTypeConsole.GetCodesByCodeTypeAsync(prmCode));
}
//-------------------------------------------------------------------
// Properties.
protected bool DebugMode { get; } = SacsSystem.DebugMode;
protected ElapsedTimeLogger ElapsedLogger { get; }
// Numeric control values.
protected int WeightDecimals { get; set; } = 0;
protected int LengthDecimals { get; set; } = 0;
protected int VolumeDecimals { get; set; } = 0;
protected int DensityDecimals { get; set; } = 0;
protected int BoxQuantityDecimals { get; set; } = 0;
protected int OrderQuantityDecimals { get; set; } = 0;
// System codes.
protected List<TypeCodeDesc> ItemTypes { get { return GetCodesOfType(Sbm.SystemCode.ItemType); } }
protected List<TypeCodeDesc> InterfaceOptionCodes { get { return GetCodesOfType(Sbm.SystemCode.InterfaceOption); } }
// Status.
protected String StatusActive { get; } = SacsSystem.GetStatusCode(SaStatus.Active);
protected String StatusProvisional { get; } = SacsSystem.GetStatusCode(SaStatus.Provisional);
@@ -168,235 +51,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
protected String StatusCancelled { get; } = SacsSystem.GetStatusCode(SaStatus.Cancelled);
protected String StatusDisabled { get; } = SacsSystem.GetStatusCode(SaStatus.Disabled);
protected String StatusDeleted { get; } = SacsSystem.GetStatusCode(SaStatus.Deleted);
// Session.
protected ISbmUserContext UserContext { get; }
protected SbmSessionContext SessionContext { get { return UserContext.SessionContext; } }
protected SbmInternals Internals
{
get
{
if (internals == null) internals = new SbmInternals(UserContext);
return internals;
}
}
public SysId AffiliateId_Owner { get { return UserContext.Organisation.AffiliateId; } }
protected SbmAccountsDfn AccountsDfn { get { return Internals.AccountsDfn; } }
protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } }
// Managers.
protected SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } }
protected SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } }
protected SbmPriceMgr PriceMgr { get { return Internals.PriceMgr; } }
protected SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } }
protected SbmStockMgr StockMgr { get { return Internals.StockMgr; } }
protected SbmProcessMgr ProcessMgr { get { return Internals.ProcessMgr; } }
protected SbmDataItemMgr DataItemMgr { get { return Internals.DataItemMgr; } }
// Consoles.
protected SbmConfigConsole ConfigConsole { get { return Internals.ConfigConsole; } }
protected SaSecurityConsole SecurityConsole { get { return Internals.SecurityConsole; } }
protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } }
protected SaReferenceDataConsole ReferenceDataConsole { get { return Internals.ReferenceDataConsole; } }
protected SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } }
protected SaItemOptionConsole ItemOptionConsole { get { return Internals.ItemOptionConsole; } }
protected SaInterfaceConsole InterfaceConsole { get { return Internals.InterfaceConsole; } }
protected SaItemDocConsole ItemDocConsole { get { return Internals.ItemDocConsole; } }
// Configurations.
protected SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } }
protected SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } }
// Currencies.
protected List<TypeCodeDesc> CurrencyCodes { get { return new List<TypeCodeDesc>(currencyCodes); } }
protected List<SaCurrency> GetCurrencies()
{
return Internals.GetCurrencies();
}
protected SaCurrency GetCurrencyById(SysId currencyId)
{
return Internals.GetCurrencyById(currencyId);
}
protected SaCurrency GetCurrencyByCode(String currencyCode)
{
return Internals.GetCurrencyByCode(currencyCode);
}
protected static byte CurrencyDecimalsDefault { get { return SbmInternals.CurrencyDecimalsDefault; } }
protected byte GetCurrencyDecimalsForCurrencyById(SysId currencyId)
{
return Internals.GetCurrencyDecimalsForCurrencyById(currencyId);
}
//-------------------------------------------------------------------
// Utilities.
public List<TypeCodeDesc> GetCodesOfType(Sbm.SystemCode systemCode)
{
return systemCodeCache.GetCodesOfType(systemCode);
}
// Database utilities.
public bool TableExists(SbmDbDfn.TableIdx tableIdx)
{
SbmApplication application = SbmGlobals.Application;
if (application != null)
{
ISacsDatabase busMgrDb = application.GetBusMgrDatabase(SessionContext);
return application.DbTableExists(busMgrDb, tableIdx);
}
return false;
}
public bool ColumnExists(SbmDbDfn.ColumnIdx columnIdx)
{
SbmApplication application = SbmGlobals.Application;
if (application != null)
{
ISacsDatabase busMgrDb = application.GetBusMgrDatabase(SessionContext);
return application.DbColumnExists(busMgrDb, columnIdx);
}
return false;
}
//-------------------------------------------------------------------
// Configuration console utilities.
public bool AllowConfigOption(Sbm.ConfigOption configOption)
{
return ConfigConsole.AllowOption(UserContext, configOption);
}
public bool AllowAffiliateType(Sbm.AffiliateType affiliateType)
{
return ConfigConsole.AllowAffiliateType(UserContext, affiliateType);
}
public bool AllowAssociationType(Sbm.AssociationType associationType)
{
return ConfigConsole.AllowAssociationType(UserContext, associationType);
}
public bool AllowTransactionType(Sbm.TransactionType transactionType)
{
return ConfigConsole.AllowTransactionType(UserContext, transactionType);
}
public String GetAttributeCaption(SbmDbDfn.ColumnIdx columnIdx, String defaultValue)
{
return ConfigConsole.GetAttributeCaption(UserContext, columnIdx, defaultValue);
}
//-------------------------------------------------------------------
// C o d e T y p e s
//-------------------------------------------------------------------
public virtual List<Sbm.ApplCodeType> SupportedCodeTypes { get; } = new List<Sbm.ApplCodeType>();
private CodeTypeCache codeTypeCache;
public bool CodeTypeHasCodes(Sbm.ApplCodeType codeType)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
return codeTypeCache.CodeTypeHasCodes(codeType);
}
public String GetCodeTypeCodeDesc(Sbm.ApplCodeType codeType, String code, bool defaultToCode = true)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
List<SaCode> codes = codeTypeCache.GetCodesForCodeType(codeType, false);
if (codes != null)
return codes.GetDescForCode(code, defaultToCode ? code : "");
return "";
}
public List<SaCode> GetCodesForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
return codeTypeCache.GetCodesForCodeType(codeType, activeOnly);
}
public List<CodeDesc> GetCodeDescsForCodeType(Sbm.ApplCodeType codeType, bool activeOnly = true)
{
if (DebugMode && !SupportedCodeTypes.Contains(codeType)) throw new NotSupportedException($"{SysUtil.Fn} Unsupported code type: {codeType}");
PopulateCodeTypes();
return codeTypeCache.GetCodeDescsForCodeType(codeType, activeOnly);
}
private void PopulateCodeTypes()
{
if (codeTypeCache != null) return;
// Populate cache with codes for all supported code types.
// Intended to minimise db I/O to retrieve all required codes.
SaCode.Params prmCode = new SaCode.Params();
foreach (Sbm.ApplCodeType codeType in SupportedCodeTypes)
prmCode.CodeTypeCodes.Add(SbmSystem.GetCodeTypeCode(codeType));
prmCode.StatusCat = SaCode.StatusCat.Any;
Dictionary<String, List<SaCode>> codesByCodeType = CodeTypeConsole.GetCodesByCodeType(prmCode);
// Populate any supported code types without codes.
foreach (Sbm.ApplCodeType codeType in SupportedCodeTypes)
{
String codeTypeCode = SbmSystem.GetCodeTypeCode(codeType);
if (!codesByCodeType.ContainsKey(codeTypeCode))
codesByCodeType[codeTypeCode] = new List<SaCode>();
}
codeTypeCache = new CodeTypeCache(codesByCodeType);
}
//-------------------------------------------------------------------
// R e f e r e n c e D a t a
//-------------------------------------------------------------------
// Currencies.
private void PopulateCurrencies()
{
if (currencies != null) return;
SaCurrency.Params prmCurrency = new SaCurrency.Params();
prmCurrency.StatusCat = SaCurrency.StatusCat.Any;
currencies = ReferenceDataConsole.GetCurrencyList(prmCurrency);
}
public SaCurrency GetDefaultCurrency()
{
PopulateCurrencies();
String currencyCode = CurrencyCodes.GetCodeForType(SaCurrencyCode.Sterling);
return currencies.Find(item => item.Code.EqualsCI(currencyCode));
}
public SaCurrency GetCurrency(SysId currencyId)
{
PopulateCurrencies();
return currencies.Find(item => item.Id.Equals(currencyId));
}
//-------------------------------------------------------------------
// Regions.
private void PopulateRegions()
{
if (regions != null) return;
SaRegion.Params prmRegion = new SaRegion.Params();
regions = ReferenceDataConsole.GetRegionList(prmRegion);
}
public SaRegion FindRegionById(SysId regionId)
{
PopulateRegions();
return regions.FindById(regionId);
}
//-------------------------------------------------------------------
// Tax codes.
private void PopulateTaxCodes()
{
if (taxCodes != null) return;
SaTaxCode.Params prmTaxCode = new SaTaxCode.Params();
taxCodes = ReferenceDataConsole.GetTaxCodeList(prmTaxCode);
}
public SaTaxCode FindTaxCodeById(SysId taxCodeId)
{
PopulateTaxCodes();
return taxCodes.Find(item => item.Id.Equals(taxCodeId));
}
public SaTaxCode FindTaxCodeEffectiveOn(String taxCode, DateTime effectiveOn)
{
PopulateTaxCodes();
return taxCodes.FindByCodeEffectiveOn(taxCode, effectiveOn);
}
//-------------------------------------------------------------------
// Units of measure.
private void PopulateUnitsOfMeasure()
{
if (taxCodes != null) return;
SaUnitMeasure.Params prmUnitOfMeasure = new SaUnitMeasure.Params();
prmUnitOfMeasure.StatusCat = SaUnitMeasure.StatusCat.Any;
unitsOfMeasure = ReferenceDataConsole.GetUnitMeasureList(prmUnitOfMeasure);
}
public SaUnitMeasure FindUnitOfMeasureById(SysId uomId)
{
PopulateUnitsOfMeasure();
return unitsOfMeasure.FindById(uomId);
}
public List<SaUnitMeasure> FindUnitsOfMeasureByCategory(SaUomCategory uomCategory)
{
PopulateUnitsOfMeasure();
return unitsOfMeasure.FindAll(item => item.Category == uomCategory);
}
//-------------------------------------------------------------------
}
+3 -2
View File
@@ -1,5 +1,6 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Core;
using System;
@@ -8,7 +9,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmPriceMgr : SbmItemMgr
public abstract partial class SbmPriceMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -19,7 +20,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmPriceMgr(ISbmUserContext userContext) :
protected SbmPriceMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
@@ -6,7 +6,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmProcessMgr : SbmItemMgr
public abstract partial class SbmProcessMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -19,7 +19,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmProcessMgr(ISbmUserContext userContext) :
protected SbmProcessMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
+2 -2
View File
@@ -6,7 +6,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmStockMgr : SbmItemMgr
public abstract partial class SbmStockMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -26,7 +26,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmStockMgr(ISbmUserContext userContext) :
protected SbmStockMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
@@ -9,7 +9,7 @@ using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SbmTransactionMgr : SbmItemMgr
public abstract partial class SbmTransactionMgr : SbmCoreMgr
{
//-------------------------------------------------------------------
// Data members.
@@ -32,7 +32,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Construction.
protected SbmTransactionMgr(ISbmUserContext userContext) :
protected SbmTransactionMgr(ISbmUserContext_Core userContext) :
base(userContext)
{
}
@@ -1,5 +1,6 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -1,9 +1,21 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.CodeTypes;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Interfaces;
using Sarand.Net.Standard.Base.ItemDocs;
using Sarand.Net.Standard.Base.ItemOptions;
using Sarand.Net.Standard.Base.Procs;
using Sarand.Net.Standard.Base.ReferenceData;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.UpdateLog;
using System.Collections.Generic;
using System;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
namespace Sarand.BusinessMgr.Net.Standard.Base.Procs
{
@@ -14,11 +26,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Procs
// Configuration.
public new class Config : SaReport_Base.Config
{
protected Config(ISbmUserContext userContext)
protected Config(ISbmUserContext_Core userContext)
{
UserContext = userContext;
}
public ISbmUserContext UserContext { get; }
public ISbmUserContext_Core UserContext { get; }
}
//-------------------------------------------------------------------
@@ -44,11 +56,45 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Procs
//-------------------------------------------------------------------
// Properties.
protected SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(config.UserContext); return internals; } }
protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } }
protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } }
// Managers.
protected SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } }
protected SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } }
protected SbmPriceMgr PriceMgr { get { return Internals.PriceMgr; } }
protected SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } }
protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } }
protected SbmStockMgr StockMgr { get { return Internals.StockMgr; } }
protected SbmProcessMgr ProcessMgr { get { return Internals.ProcessMgr; } }
protected SbmDataItemMgr DataItemMgr { get { return Internals.DataItemMgr; } }
// Consoles.
protected SbmConfigConsole ConfigConsole { get { return Internals.ConfigConsole; } }
protected SaSecurityConsole SecurityConsole { get { return Internals.SecurityConsole; } }
protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } }
protected SaReferenceDataConsole ReferenceDataConsole { get { return Internals.ReferenceDataConsole; } }
protected SaItemOptionConsole ItemOptionConsole { get { return Internals.ItemOptionConsole; } }
protected SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } }
protected SaInterfaceConsole InterfaceConsole { get { return Internals.InterfaceConsole; } }
protected SaItemDocConsole ItemDocConsole { get { return Internals.ItemDocConsole; } }
// Configurations.
protected SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } }
protected SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } }
// Reference data.
protected List<SaCurrency> GetCurrencies()
{
return Internals.GetCurrencies();
}
protected SaCurrency GetCurrencyById(SysId currencyId)
{
return Internals.GetCurrencyById(currencyId);
}
protected SaCurrency GetCurrencyByCode(String currencyCode)
{
return Internals.GetCurrencyByCode(currencyCode);
}
protected static byte CurrencyDecimalsDefault { get { return SbmInternals.CurrencyDecimalsDefault; } }
protected byte GetCurrencyDecimalsForCurrencyById(SysId currencyId)
{
return Internals.GetCurrencyDecimalsForCurrencyById(currencyId);
}
//-------------------------------------------------------------------
}
@@ -1,4 +1,5 @@
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.UpdateLog;
@@ -36,7 +37,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.UpdateLog
//-------------------------------------------------------------------
// Properties.
public ISbmUserContext UserContext { get { return config.Internals.UserContext; } }
public ISbmUserContext_Core UserContext { get { return config.Internals.UserContext; } }
//-------------------------------------------------------------------
// Internal utilities.