diff --git a/BusinessMgr.sln b/BusinessMgr.sln index 2d39672..9c61921 100644 --- a/BusinessMgr.sln +++ b/BusinessMgr.sln @@ -30,6 +30,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusinessMgrCoreWebControl EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusinessMgrCoreWebPortal", "SaBusinessMgrCoreWebPortal\SaBusinessMgrCoreWebPortal.csproj", "{C7BA3DCA-5A4E-4541-899C-BF8208E276D5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaBusMgrTest_Portal", "SaBusMgrTest_Portal\SaBusMgrTest_Portal.csproj", "{3C833156-A879-420A-BA5B-CB828C209A5A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -80,6 +82,10 @@ Global {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Debug|Any CPU.Build.0 = Debug|Any CPU {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Release|Any CPU.Build.0 = Release|Any CPU + {3C833156-A879-420A-BA5B-CB828C209A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C833156-A879-420A-BA5B-CB828C209A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C833156-A879-420A-BA5B-CB828C209A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C833156-A879-420A-BA5B-CB828C209A5A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs b/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs index fd4e39a..f0408cb 100644 --- a/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs +++ b/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs @@ -14,6 +14,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Sarand.Net.Standard.Base.Utils; +using Sarand.BusinessMgr.Net.Standard.Base.Core; namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles { @@ -23,7 +24,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles //------------------------------------------------------------------- // I n t e r f a c e O p t i o n D e f i n i t i o n s //------------------------------------------------------------------- - public static List GetInterfaceItemOptionDfns(SbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType) + public static List GetInterfaceItemOptionDfns(ISbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType) { switch (interfaceCategory) { @@ -58,7 +59,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles //------------------------------------------------------------------- // P r o c e s s i n g O p t i o n s //------------------------------------------------------------------- - public static List GetProcessingOptions(SbmUserContext userContext, SaInterface interfaceObj) + public static List GetProcessingOptions(ISbmUserContext userContext, SaInterface interfaceObj) { if (interfaceObj == null || !SysId.IsValid(interfaceObj.Id)) return new List(); List optionGroups = null; @@ -89,7 +90,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles //------------------------------------------------------------------- // C o n f i g u r e P r o c e s s //------------------------------------------------------------------- - public static SbmInterfaceProcess ConfigureProcess(SbmUserContext userContext, SaInterface interfaceObj, SaProcess_Base.GroupData processGroup) + public static SbmInterfaceProcess ConfigureProcess(ISbmUserContext userContext, SaInterface interfaceObj, SaProcess_Base.GroupData processGroup) { if (interfaceObj == null || !SysId.IsValid(interfaceObj.Id)) return null; switch (interfaceObj.Category) @@ -119,7 +120,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles //------------------------------------------------------------------- // P r o c e s s I n t e r f a c e //------------------------------------------------------------------- - public static bool ProcessInterface(SbmUserContext userContext, SaInterface interfaceObj) + public static bool ProcessInterface(ISbmUserContext userContext, SaInterface interfaceObj) { if (interfaceObj == null || !SysId.IsValid(interfaceObj.Id)) return false; switch (interfaceObj.Category) @@ -148,7 +149,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles // I n v o k e P r o c e s s D e f i n i t i o n //------------------------------------------------------------------- // Invoke process based on definition from command line argument. - public static bool InvokeProcessDefinition(SbmUserContext userContext, SacsProcessDefinition processDfn) + public static bool InvokeProcessDefinition(ISbmUserContext userContext, SacsProcessDefinition processDfn) { //---------------------------------------------------------------- // Log process definition. @@ -187,11 +188,11 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles //------------------------------------------------------------------- // Retrieve interface. - private static SaInterface GetSystemInterfaceByType(SbmUserContext userContext, short interfaceType, String caption) + private static SaInterface GetSystemInterfaceByType(ISbmUserContext userContext, short interfaceType, String caption) { return GetInterfaceByCategoryType(userContext, SaInterfaceCategory.System, interfaceType, caption); } - private static SaInterface GetInterfaceByCategoryType(SbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType, String caption) + private static SaInterface GetInterfaceByCategoryType(ISbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType, String caption) { SaInterface saInterface = null; SaInterface.Params prmInterface = new SaInterface.Params(); diff --git a/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs index afb1d23..4158317 100644 --- a/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs +++ b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs @@ -13,6 +13,7 @@ using System.Net; using System.Text; using Sarand.Net.Standard.Base.Utils; using System.IO; +using Sarand.BusinessMgr.Net.Standard.Base.Core; namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces { @@ -29,7 +30,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces } public new class Config : SbmProcess_Base.Config { - protected Config (SbmUserContext userContext) : base(userContext) + protected Config(ISbmUserContext userContext) : base(userContext) { } public SysId InterfaceId { get; set; } @@ -63,7 +64,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // Static initialisation. - static SbmInterfaceProcess () + static SbmInterfaceProcess() { // Interface process groups. interfaceProcessGroups = new List(); @@ -73,12 +74,12 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // Construction. - protected SbmInterfaceProcess (Config config) : base(config) + protected SbmInterfaceProcess(Config config) : base(config) { this.config = config; interfaceObj = InterfaceConsole.GetInterfaceById(config.InterfaceId); } - protected override void Dispose (bool disposing) + protected override void Dispose(bool disposing) { if (disposing) { @@ -96,7 +97,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // Validate configuration. - protected virtual bool ValidateConfig () + protected virtual bool ValidateConfig() { return OK; } @@ -104,7 +105,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // P r o c e s s i n g //------------------------------------------------------------------- - protected override void ResetProcess () + protected override void ResetProcess() { base.ResetProcess(); } @@ -112,7 +113,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // I t e m O p t i o n D e f i n i t i o n s //------------------------------------------------------------------- - protected static SaItemOptionDfn InitItemOptionDfn (String itemOptionName, String itemOptionCaption, List optionContexts = null) + protected static SaItemOptionDfn InitItemOptionDfn(String itemOptionName, String itemOptionCaption, List optionContexts = null) { SaItemOptionDfn itemOptionDfn = new SaItemOptionDfn(); itemOptionDfn.Name = itemOptionName; @@ -131,13 +132,13 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // P r o c e s s i n g E v e n t s //------------------------------------------------------------------- - protected override void OnProcessStarting () + protected override void OnProcessStarting() { base.OnProcessStarting(); if (config.InterfaceProcessCreation == InterfaceProcessCreation.OnStartProcessing) OpenInterfaceProcess(); } - protected override void OnProcessEnding () + protected override void OnProcessEnding() { CloseInterfaceProcess(); base.OnProcessEnding(); @@ -146,7 +147,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // I n t e r f a c e P r o c e s s //------------------------------------------------------------------- - private bool OpenInterfaceProcess () + private bool OpenInterfaceProcess() { if (!SysId.IsValid(config.InterfaceId)) return false; @@ -161,7 +162,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces return (interfaceProcess != null && interfaceProcess.InterfaceId.Equals(config.InterfaceId)); } - private bool CloseInterfaceProcess () + private bool CloseInterfaceProcess() { if (interfaceProcess == null) return false; @@ -191,7 +192,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces } //------------------------------------------------------------------- - protected bool LogInterfaceProcessMessage (String message, SaMessageLevel messageLevel = SaMessageLevel.Info) + protected bool LogInterfaceProcessMessage(String message, SaMessageLevel messageLevel = SaMessageLevel.Info) { if (!OpenInterfaceProcess()) return false; @@ -205,7 +206,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // I n t e r f a c e D a t a I t e m s //------------------------------------------------------------------- - protected bool StoreInterfaceDataItem (SaInterfaceDataItem interfaceDataItem, SaStatus processStatus, SaStatus itemStatus, String itemCaption) + protected bool StoreInterfaceDataItem(SaInterfaceDataItem interfaceDataItem, SaStatus processStatus, SaStatus itemStatus, String itemCaption) { if (!OK) return false; DateTime now = DateTime.Now; @@ -236,7 +237,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- // A r c h i v e F i l e //------------------------------------------------------------------- - protected bool SaveFileDataToArchive (String archiveRootFolder, String fileName, String fileExtension, String fileData, String fn) + protected bool SaveFileDataToArchive(String archiveRootFolder, String fileName, String fileExtension, String fileData, String fn) { if (!OK) return false; diff --git a/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs index c652eb7..d704829 100644 --- a/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs +++ b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs @@ -18,6 +18,7 @@ using System.Text; using System.Threading.Tasks; using Sarand.Net.Standard.Proc.Excel; using Sarand.Net.Standard.Base.Data; +using Sarand.BusinessMgr.Net.Standard.Base.Core; namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces { @@ -28,7 +29,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces // Configuration. public new class Config : SbmInterfaceProcess.Config { - public Config (SbmUserContext userContext) : base(userContext) + public Config (ISbmUserContext userContext) : base(userContext) { ItemType = Sbm.ItemType.Commodity; ProcessType = ProcessType.ExportData; @@ -1072,7 +1073,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces Export_Commodities, } /// Configure processing options. - public static List GetProcessingOptions (SbmUserContext userContext, SaInterface interfaceObj) + public static List GetProcessingOptions (ISbmUserContext userContext, SaInterface interfaceObj) { List optionGroups = new List(); @@ -1087,7 +1088,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces //------------------------------------------------------------------- /// Process interface using selected options. - public static SbmInterfaceProcess ConfigureProcess (SbmUserContext userContext, SaInterface interfaceObj, SaProcess_Base.GroupData processGroup) + public static SbmInterfaceProcess ConfigureProcess (ISbmUserContext userContext, SaInterface interfaceObj, SaProcess_Base.GroupData processGroup) { if (processGroup.OptionGroup.Type == (int)InterfaceProcessGroup.Export) { diff --git a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs index db46124..957c721 100644 --- a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs +++ b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs @@ -19,6 +19,7 @@ using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.ItemOptions; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Proc.Procs; +using Sarand.BusinessMgr.Net.Standard.Base.Core; namespace Sarand.BusinessMgr.Net.Core.Procs.Procs { @@ -37,11 +38,11 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs } public new class Config : SaProcess.Config { - protected Config (SbmUserContext userContext) : base() + protected Config(ISbmUserContext userContext) : base() { UserContext = userContext; } - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } /// Specific type of data item being handled. public Sbm.ItemType ItemType { get; set; } = Sbm.ItemType.Unknown; /// Format to import/export data. @@ -67,12 +68,12 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // Construction. - protected SbmProcess_Base (Config config) : base(config) + protected SbmProcess_Base(Config config) : base(config) { this.config = config; if (!EnhancedLogging) EnhancedLogging = config.EnhancedLogging; } - protected override void Dispose (bool disposing) + protected override void Dispose(bool disposing) { if (disposing) { @@ -103,7 +104,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs } } // Context. - public SbmUserContext UserContext { get { return config.UserContext; } } + public ISbmUserContext UserContext { get { return config.UserContext; } } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } protected SbmInternals Internals { @@ -122,12 +123,12 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs // Excel export. public static Color ExcelColumnHeadingColor { get; } = Color.LightYellow; // Security. - protected SbmSecurityProfile SecurityProfile { get { return Internals.SecurityProfile; } } - protected bool UserCanUpdateContacts { get { return (SecurityProfile != null && SecurityProfile.Contacts.CanUpdate); } } - protected bool UserCanCreateContacts { get { return (SecurityProfile != null && SecurityProfile.Contacts.CanCreate); } } - protected bool UserCanViewFinancials { get { return (SecurityProfile != null && SecurityProfile.Financial.CanViewFinancials); } } - protected bool UserCanUpdateFinancials { get { return (SecurityProfile != null && SecurityProfile.Financial.CanUpdateFinancials); } } - protected bool UserCanManageFinancials { get { return (SecurityProfile != null && SecurityProfile.Financial.CanViewFinancials); } } + protected ISbmSecurityProfile SecurityProfile { get { return Internals.SecurityProfile; } } + protected bool UserCanUpdateContacts { get { return (SecurityProfile != null && SecurityProfile.UserCanUpdateContacts); } } + protected bool UserCanCreateContacts { get { return (SecurityProfile != null && SecurityProfile.UserCanCreateContacts); } } + protected bool UserCanViewFinancials { get { return (SecurityProfile != null && SecurityProfile.UserCanViewFinancials()); } } + protected bool UserCanUpdateFinancials { get { return (SecurityProfile != null && SecurityProfile.UserCanUpdateFinancials()); } } + protected bool UserCanManageFinancials { get { return (SecurityProfile != null && SecurityProfile.UserCanUpdateFinancials()); } } // ToDo SbmForm SecurityProfile Assets. /* protected bool UserCanManageAssets { get { return (SecurityProfile != null && SecurityProfile.Assets.CanManage); } } @@ -155,21 +156,21 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs protected SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } } protected SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } } // Currencies. - protected List GetCurrencies () + protected List GetCurrencies() { return Internals.GetCurrencies(); } - protected SaCurrency GetCurrencyById (SysId currencyId) + protected SaCurrency GetCurrencyById(SysId currencyId) { return Internals.GetCurrencyById(currencyId); } - protected SaCurrency GetCurrencyByCode (String currencyCode) + protected SaCurrency GetCurrencyByCode(String currencyCode) { return Internals.GetCurrencyByCode(currencyCode); } protected static byte CurrencyDecimalsDefault { get { return SbmInternals.CurrencyDecimalsDefault; } } - protected byte GetCurrencyDecimalsForCurrencyById (SysId currencyId) + protected byte GetCurrencyDecimalsForCurrencyById(SysId currencyId) { return Internals.GetCurrencyDecimalsForCurrencyById(currencyId); } @@ -177,7 +178,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // P r o c e s s i n g //------------------------------------------------------------------- - protected virtual void ResetProcess () + protected virtual void ResetProcess() { ClearStatistics(); } @@ -186,26 +187,26 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs // P r o c e s s i n g O p t i o n s //------------------------------------------------------------------- /// Are options supported - False by default. - public virtual bool HasProcessingOptions () + public virtual bool HasProcessingOptions() { return false; } /// Are required options populated - True by default. - public virtual bool AreProcessingOptionsComplete () + public virtual bool AreProcessingOptionsComplete() { return true; } /// Processing option definitions. - public virtual List GetProcessingOptionDfns () + public virtual List GetProcessingOptionDfns() { return new List(); } /// Processing options. - public virtual List GetProcessingOptions () + public virtual List GetProcessingOptions() { return new List(processingOptions ?? new List()); } - public String GetProcessingOptionValue (String name, String context, String defaultValue = "") + public String GetProcessingOptionValue(String name, String context, String defaultValue = "") { if (processingOptions == null) SetProcessingOptions(GetProcessingOptions()); @@ -213,18 +214,18 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs return itemOption?.Value ?? defaultValue; } /// Store processing options. - public virtual bool SetProcessingOptions (List processingOptions) + public virtual bool SetProcessingOptions(List processingOptions) { this.processingOptions = new List(processingOptions); return true; } /// Allow process to update its own options. - public virtual bool UpdateProcessingOptions () + public virtual bool UpdateProcessingOptions() { return true; } /// Allow process to update its own options. - public virtual bool UpdateOptions () + public virtual bool UpdateOptions() { return false; } @@ -236,7 +237,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs { public class Stat { - public Stat (int statType, int initialValue = 0) + public Stat(int statType, int initialValue = 0) { StatType = statType; InitialValue = initialValue; @@ -244,52 +245,52 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs public int StatType { get; } public int InitialValue { get; } } - public void Clear () { } + public void Clear() { } public Dictionary Statistics { get; } = new Dictionary(); } private readonly StatisticsData stats = new StatisticsData(); - protected int GetStatistic (int statisticType) + protected int GetStatistic(int statisticType) { return stats.Statistics.GetValue(statisticType, 0); } - protected int GetStatistic (T statisticType) where T : struct, IConvertible + protected int GetStatistic(T statisticType) where T : struct, IConvertible { if (!(statisticType is Enum)) throw new ArgumentException(this.GetFn("GetStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); return GetStatistic((int)(statisticType as IConvertible)); } - protected int SetStatistic (int statisticType, int value) + protected int SetStatistic(int statisticType, int value) { return stats.Statistics[statisticType] = value; } - protected int SetStatistic (T statisticType, int value) where T : struct, IConvertible + protected int SetStatistic(T statisticType, int value) where T : struct, IConvertible { if (!(statisticType is Enum)) throw new ArgumentException(this.GetFn("SetStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); return SetStatistic((int)(statisticType as IConvertible), value); } - protected int IncrementStatistic (int statisticType, int increment = 1) + protected int IncrementStatistic(int statisticType, int increment = 1) { return stats.Statistics[statisticType] = GetStatistic(statisticType) + increment; } - protected int IncrementStatistic (T statisticType, int increment = 1) where T : struct, IConvertible + protected int IncrementStatistic(T statisticType, int increment = 1) where T : struct, IConvertible { if (!(statisticType is Enum)) throw new ArgumentException(this.GetFn("IncrementStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); return IncrementStatistic((int)(statisticType as IConvertible), increment); } - protected void ClearStatistic (int statisticType) + protected void ClearStatistic(int statisticType) { if (stats.Statistics.ContainsKey(statisticType)) stats.Statistics.Remove(statisticType); } - protected void ClearStatistic (T statisticType) where T : struct, IConvertible + protected void ClearStatistic(T statisticType) where T : struct, IConvertible { if (!(statisticType is Enum)) throw new ArgumentException(this.GetFn("ClearStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); ClearStatistic((int)(statisticType as IConvertible)); } - private void ClearStatistics () + private void ClearStatistics() { stats.Statistics.Clear(); } diff --git a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs index 640400b..891680d 100644 --- a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs +++ b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs @@ -1,5 +1,6 @@ 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.Core; using Sarand.Net.Standard.Base.Dbas; @@ -23,7 +24,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs // Configuration. public new class Config : SbmProcess_Base.Config { - public Config (SbmUserContext userContext) : base(userContext) + public Config(ISbmUserContext userContext) : base(userContext) { ItemType = Sbm.ItemType.Commodity; DataFormat = DataFormatType.Excel; @@ -93,12 +94,12 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // Construction. - public SbmProcess_Commodity_Export (Config config) : base(config) + public SbmProcess_Commodity_Export(Config config) : base(config) { this.config = config; Params.CommodityProcessesExist = ProcessMgr.HasProcesses(Sbm.ProcessCategory.Commodity); } - protected override void Dispose (bool disposing) + protected override void Dispose(bool disposing) { if (disposing) { @@ -159,7 +160,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // Utilities. - private void CalculateItemCount () + private void CalculateItemCount() { if (Params.CommodityCountTotal >= 0 || !OK) return; Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(config.CommodityParams); @@ -168,12 +169,12 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // P r o c e s s i n g O p t i o n s //------------------------------------------------------------------- - public override bool HasProcessingOptions () + public override bool HasProcessingOptions() { PopulateProcessingOptionDfns(); return true; } - private void PopulateProcessingOptionDfns () + private void PopulateProcessingOptionDfns() { if (processingOptionDfns.Count > 0) return; if (config.ExportType == ExportType.ActualSales || config.ExportType == ExportType.ProjectedSales) @@ -211,7 +212,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // P r o c e s s i n g //------------------------------------------------------------------- - protected override bool Run () + protected override bool Run() { SetProgressInfo("Preparing to export data to Excel."); ResetProcess(); @@ -232,7 +233,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs } //------------------------------------------------------------------- - protected override void ResetProcess () + protected override void ResetProcess() { base.ResetProcess(); @@ -242,7 +243,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs } //------------------------------------------------------------------- - private bool ValidateConfig () + private bool ValidateConfig() { if (!OK) return false; @@ -268,7 +269,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // E x p o r t D a t a //------------------------------------------------------------------- - private bool ExportData () + private bool ExportData() { if (!OK) return false; String fn = this.GetFn("ExportData"); @@ -321,7 +322,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs } //------------------------------------------------------------------- - private void PrepareColumns () + private void PrepareColumns() { displayColumns.Clear(); additionalQueryColumns.Clear(); @@ -566,7 +567,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- private class ProjectedSalesData { - public void Clear () + public void Clear() { SalesBudget = 0.0m; Allocated = 0.0m; @@ -583,7 +584,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs //------------------------------------------------------------------- // E x p o r t C o m m o d i t i e s T o E x c e l //------------------------------------------------------------------- - private bool ExportCommoditiesToExcel (SaMsSpreadsheet spreadsheet) + private bool ExportCommoditiesToExcel(SaMsSpreadsheet spreadsheet) { if (!OK) return false; String fn = this.GetFn("ExportCommoditiesToExcel"); @@ -591,13 +592,13 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs SetProgressInfo(progressPrefix + " - Preparing data"); // Projected sales. - ProjectedSalesData[] projectedSales = new ProjectedSalesData [12]; + ProjectedSalesData[] projectedSales = new ProjectedSalesData[12]; for (int projectedSaleIdx = 0; projectedSaleIdx < projectedSales.Length; projectedSaleIdx++) projectedSales[projectedSaleIdx] = new ProjectedSalesData(); - decimal[]projectedSalesBudget = new decimal[12]; + decimal[] projectedSalesBudget = new decimal[12]; // Columns to query. - List queryColumns = new List (displayColumns); + List queryColumns = new List(displayColumns); foreach (ColumnDfn column in additionalQueryColumns) { if (!queryColumns.HasId(column.Id)) @@ -620,7 +621,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs // Progress is refreshed every few rows. long commodityCount = 0; Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(config.CommodityParams); - int progressRefreshRows = (int)Math.Max(5,Params.CommodityCountTotal/(Params.CommodityCountTotal>1000?1000:100)); + int progressRefreshRows = (int)Math.Max(5, Params.CommodityCountTotal / (Params.CommodityCountTotal > 1000 ? 1000 : 100)); using (DbResultSet resultSet = CommodityMgr.ExecuteCommodityQuery(queryColumns, config.CommodityParams)) { @@ -641,7 +642,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs for (int monthIdx = 0; monthIdx < 12; monthIdx++) { DateTime monthDate = DateTime.Today.StartOfMonth().IncrementMonth(monthIdx); - ProjectedSalesData projSales = projectedSales[monthIdx]; + ProjectedSalesData projSales = projectedSales[monthIdx]; projSales.Clear(); projSales.SalesBudget = values.GetDecimal(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesProj_Jan + monthDate.Month - 1)).DataName); projSales.Allocated = values.GetDecimal(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.Stock_Allocated_MonthCurrent + monthIdx)).DataName); @@ -657,12 +658,12 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs // Common values used in calculations. // Currently in stock. - decimal currentStock = !col_CurrentLevel.IsEmpty() ? values.GetDecimal(col_CurrentLevel) : 0.0m; + decimal currentStock = !col_CurrentLevel.IsEmpty() ? values.GetDecimal(col_CurrentLevel) : 0.0m; // Stock due imminently. - decimal imminentStock = Math.Max(0.0m, !col_DueImminently.IsEmpty() ? values.GetDecimal(col_DueImminently) : 0.0m); - decimal reorderLevel = !col_ReorderLevel.IsEmpty() ? values.GetDecimal(col_ReorderLevel) : 0.0m; - decimal allocatedStock = !col_TotalAllocated.IsEmpty() ? values.GetDecimal(col_TotalAllocated) : 0.0m; - decimal availableStock = currentStock - allocatedStock; + decimal imminentStock = Math.Max(0.0m, !col_DueImminently.IsEmpty() ? values.GetDecimal(col_DueImminently) : 0.0m); + decimal reorderLevel = !col_ReorderLevel.IsEmpty() ? values.GetDecimal(col_ReorderLevel) : 0.0m; + decimal allocatedStock = !col_TotalAllocated.IsEmpty() ? values.GetDecimal(col_TotalAllocated) : 0.0m; + decimal availableStock = currentStock - allocatedStock; // Output the value for each column in turn. List cellValues = new List(); @@ -716,7 +717,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs } else if (column.Id == (int)SbmCommodity.Column.Stock_AvailVsReorder) { - decimal availPropReorder = (reorderLevel > 0.0m ? Math.Max(0,availableStock) * 100.0m / reorderLevel : 0.0m); + decimal availPropReorder = (reorderLevel > 0.0m ? Math.Max(0, availableStock) * 100.0m / reorderLevel : 0.0m); value = new DataValue(availPropReorder); } //--------------------------------------------------------- @@ -759,7 +760,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs if (DateUtil.IsValid(config.CommodityParams.ProjectedSalesTo)) dTo = config.CommodityParams.ProjectedSalesTo; for (DateTime d = config.CommodityParams.ProjectedSalesFrom; DateUtil.IsValid(d) && d <= dTo; d.IncrementDate(1)) { - decimal salesProjMonth = projectedSalesBudget[d.Month-1]; + decimal salesProjMonth = projectedSalesBudget[d.Month - 1]; salesProjPeriod += salesProjMonth / d.EndOfMonth().Day; } if (column.Id == (int)SbmCommodity.Column.SalesProj_Period) @@ -767,7 +768,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Procs else if (column.Id == (int)SbmCommodity.Column.StockSold_Period) { decimal stockSoldPeriod = values.GetDecimal(column.DataName); - decimal percSoldVsBudget = salesProjPeriod > 0.0m ? stockSoldPeriod / salesProjPeriod * 100.0m : 0.0m; + decimal percSoldVsBudget = salesProjPeriod > 0.0m ? stockSoldPeriod / salesProjPeriod * 100.0m : 0.0m; value = new DataValue(stockSoldPeriod); if (percSoldVsBudget < BudgetPercRed) attrCell.InteriorColourIndex = SaXlColourIndex.Rose; diff --git a/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs b/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs index 2ce05c8..aa235ae 100644 --- a/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs +++ b/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs @@ -16,6 +16,7 @@ using System.Text; using System.Threading.Tasks; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Utils; +using Sarand.BusinessMgr.Net.Standard.Base.Core; namespace Sarand.BusinessMgr.Net.Core.Procs.Reports { @@ -31,7 +32,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports } protected class PrintPageConfig { - public PrintPageConfig (Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds, int pageNumber, int pageCount) + public PrintPageConfig(Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds, int pageNumber, int pageCount) { // Graphics for printing to physical device (printer or print preview control). Graphics = graphics; @@ -80,7 +81,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports // Configuration. public new class Config : SbmReport_Base.Config { - protected Config (SbmUserContext userContext) : + protected Config(ISbmUserContext userContext) : base(userContext) { } @@ -101,11 +102,11 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports //------------------------------------------------------------------- // Construction. - protected SbmReport (Config config) : base(config) + protected SbmReport(Config config) : base(config) { this.config = config; } - protected override void Dispose (bool disposing) + protected override void Dispose(bool disposing) { if (disposing) { @@ -138,7 +139,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports //------------------------------------------------------------------- // Text utilities. - protected SizeF DrawString (Graphics graphics, String text, Font font, Brush brush, PointF position, StringFormat format) + protected SizeF DrawString(Graphics graphics, String text, Font font, Brush brush, PointF position, StringFormat format) { if (!VirtualPrint) graphics.DrawString(text, font, brush, position, format); @@ -146,7 +147,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports SizeF sizeText = graphics.MeasureString(text, font); return sizeText; } - protected SizeF DrawString (Graphics graphics, String text, Font font, Brush brush, RectangleF position, StringFormat format) + protected SizeF DrawString(Graphics graphics, String text, Font font, Brush brush, RectangleF position, StringFormat format) { if (!VirtualPrint) graphics.DrawString(text, font, brush, position, format); @@ -162,10 +163,10 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports //------------------------------------------------------------------- // Printer configuration. - public abstract void ConfigurePrinter (PageSettings pageSettings); - public abstract void ConfigurePrintPreview (PageSettings pageSettings); - public abstract void ConfigurePageMargins (PageSettings pageSettings); - protected abstract void InitDrawingTools (Graphics graphics, Rectangle bounds); + public abstract void ConfigurePrinter(PageSettings pageSettings); + public abstract void ConfigurePrintPreview(PageSettings pageSettings); + public abstract void ConfigurePageMargins(PageSettings pageSettings); + protected abstract void InitDrawingTools(Graphics graphics, Rectangle bounds); //------------------------------------------------------------------- // P r i n t P a g e S e c t i o n @@ -179,10 +180,10 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports /// eg. A single row in a printed table with optional headings. /// Method can be anonymous to allow other parameters to be passed in the context of the report's page printing, rathe rthan just relying on the Page Config. /// - protected delegate void PrintPageSectionFn (); + protected delegate void PrintPageSectionFn(); /// Print mode is either physical - printing to printer or preview control - or virtual - to test whether section fits on page. protected bool VirtualPrint { get { return printMode == PrintMode.Virtual; } } - private void SwitchPrintMode (PrintMode mode, PrintPageConfig cfg) + private void SwitchPrintMode(PrintMode mode, PrintPageConfig cfg) { printMode = mode; } @@ -190,7 +191,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports /// Test print the page section to verify that it fits on the page, before printing to the physical device. /// Returns false if section doesn't fit on the page. /// - protected bool PrintPageSectionIfSpace (PrintPageConfig cfg, PrintPageSectionFn printPageSectionFn) + protected bool PrintPageSectionIfSpace(PrintPageConfig cfg, PrintPageSectionFn printPageSectionFn) { // Make a note of the current print position and test print the section to the virtual page. int posYInitial = cfg.PosY; @@ -230,7 +231,7 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports //------------------------------------------------------------------- // P r i n t i n g //------------------------------------------------------------------- - public virtual void BeginPrint (PrintAction printAction, int pageNumberFrom = 0, int pageNumberTo = 0) + public virtual void BeginPrint(PrintAction printAction, int pageNumberFrom = 0, int pageNumberTo = 0) { String fn = GetType().Name + ".BeginPrint"; if (DebugMode) SaLogger.Debug(fn + " PrintAction: " + printAction + ". Page range: " + pageNumberFrom + "-" + pageNumberTo + ". Page count: " + PageCount); @@ -242,8 +243,8 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports PreviewPrinting = printAction == PrintAction.PrintToPreview; FilePrinting = printAction == PrintAction.PrintToFile; } - public virtual void QueryPageSettings (PageSettings pageSettings, PrintAction printAction) { } - public PrintPageResult PrintPage (Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds) + public virtual void QueryPageSettings(PageSettings pageSettings, PrintAction printAction) { } + public PrintPageResult PrintPage(Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds) { String fn = GetType().Name + ".PrintPage"; PageNumber++; @@ -288,11 +289,11 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports if (PageNumberTo > 0 && PageNumber + 1 > PageNumberTo) return PrintPageResult.NoMorePages; return printPageResult; } - protected abstract PrintPageResult PrintPage (PrintPageConfig cfg); - public virtual void EndPrint (PrintAction printAction) { } + protected abstract PrintPageResult PrintPage(PrintPageConfig cfg); + public virtual void EndPrint(PrintAction printAction) { } //------------------------------------------------------------------- - protected void LogPageSettings (Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds) + protected void LogPageSettings(Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds) { // Log print configuration. List info = new List(); @@ -311,13 +312,13 @@ namespace Sarand.BusinessMgr.Net.Core.Procs.Reports //------------------------------------------------------------------- // H e a d e r a n d F o o t e r //------------------------------------------------------------------- - protected virtual void PrintHeader (PrintPageConfig cfg) + protected virtual void PrintHeader(PrintPageConfig cfg) { } //------------------------------------------------------------------- // Printing - Footer. - protected virtual void PrintFooter (PrintPageConfig cfg) + protected virtual void PrintFooter(PrintPageConfig cfg) { // Print footer - Format. SbmPrinter_Footer.Config footerConfig = new SbmPrinter_Footer.Config(); diff --git a/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs index 4cb2507..0babb5e 100644 --- a/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs +++ b/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs @@ -2,6 +2,7 @@ using Sarand.BusinessMgr.Net.Core.Web.Consoles; 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.App; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; @@ -97,45 +98,45 @@ namespace Sarand.BusinessMgr.Net.Core.Web.App // Create consoles. public override SbmConfigConsole CreateConfigConsole(SbmSessionContext sessionContext) { - return null; + return SbmConfigConsole.CreateConsole(sessionContext); } - public override SaDiaryConsole CreateDiaryConsole(SbmUserContext userContext) + public override SaDiaryConsole CreateDiaryConsole(ISbmUserContext userContext) { return null; } - public override SaSecurityConsole CreateSecurityConsole(SbmUserContext userContext) + public override SaSecurityConsole CreateSecurityConsole(ISbmUserContext userContext) { - return new SbmSecurityConsole_Web(userContext, GetBusMgrDatabase(userContext.SessionContext)); + return new SbmSecurityConsole_Web(userContext); } - public override SaCodeTypeConsole CreateCodeTypeConsole(SbmUserContext userContext) + public override SaCodeTypeConsole CreateCodeTypeConsole(ISbmUserContext userContext) { return null; } - public override SaReferenceDataConsole CreateReferenceDataConsole(SbmUserContext userContext) + public override SaReferenceDataConsole CreateReferenceDataConsole(ISbmUserContext userContext) { return null; } - public override SaItemDataConsole CreateItemDataConsole(SbmUserContext userContext) + public override SaItemDataConsole CreateItemDataConsole(ISbmUserContext userContext) { return null; } - public override SaItemDocConsole CreateItemDocConsole(SbmUserContext userContext) + public override SaItemDocConsole CreateItemDocConsole(ISbmUserContext userContext) { return null; } - public override SaItemOptionConsole CreateItemOptionConsole(SbmUserContext userContext) + public override SaItemOptionConsole CreateItemOptionConsole(ISbmUserContext userContext) { return null; } - public override SaInterfaceConsole CreateInterfaceConsole(SbmUserContext userContext) + public override SaInterfaceConsole CreateInterfaceConsole(ISbmUserContext userContext) { return null; } - public override SaUpdateLogConsole CreateUpdateLogConsole(SbmUserContext userContext) + public override SaUpdateLogConsole CreateUpdateLogConsole(ISbmUserContext userContext) { - return new SbmUpdateLogConsole_Web(userContext, GetBusMgrDatabase(userContext.SessionContext)); + return new SbmUpdateLogConsole_Web(userContext); } - public override SbmEmailConsole CreateEmailConsole(SbmUserContext userContext) + public override SbmEmailConsole CreateEmailConsole(ISbmUserContext userContext) { return new SbmEmailConsole_Web(EmailConfig); } diff --git a/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs index b2056f9..e978b95 100644 --- a/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs +++ b/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs @@ -1,5 +1,7 @@ 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.Bus; using Sarand.Net.Standard.Base.Security; using System; using System.Collections.Generic; @@ -8,18 +10,20 @@ using System.Text; namespace Sarand.BusinessMgr.Net.Core.Web.App { //======================================================================= - public abstract class SbmSessionData_Web : SbmSessionData + public abstract class SbmSessionData_Web : SbmSessionData, ISbmUserContext { //------------------------------------------------------------------- - // Private construction - for JSON deserialisation. + // Protected construction - for JSON deserialisation. protected SbmSessionData_Web(long sessionIdx, int itemIdx, SbmSessionContext sessionContext) : base(sessionIdx, itemIdx, sessionContext) { + securityProfile = new SbmSecurityProfile(this, false); } // Protected construction. - protected SbmSessionData_Web(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) : - base(sessionContext, securityItemUser, affiliateUser) + protected SbmSessionData_Web(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation) : + base(sessionContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation) { + securityProfile = new SbmSecurityProfile(this, false); } //------------------------------------------------------------------- @@ -33,6 +37,30 @@ namespace Sarand.BusinessMgr.Net.Core.Web.App } } + //------------------------------------------------------------------- + // Security Profile. + private readonly SbmSecurityProfile securityProfile; + public ISbmSecurityProfile SecurityProfile { get { return securityProfile; } } + + + //------------------------------------------------------------------- + // ToDo: Organisation configuration. + public String GetOrganisationOption(Sbm.OrganisationOption option, String context) { return null; } + public String GetOrganisationOption(String optionName, String context) { return null; } + public String GetOwnerOption_Value(Sbm.OrgOption_Value eCol) { return null; } + public String GetOwnerOption_Folder(Sbm.OrgOption_Folder eCol) { return null; } + public bool GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption eCol) { return false; } + public String GetOwnerOption_Caption(Sbm.OrgOption_Caption eCol, String defautValue) { return defautValue; } + public bool GetOwnerOption_ShowField(SbmDbDfn.ColumnIdx eCol) { return false; } + public bool GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn eCol) { return false; } + public String GetOwnerOption_FieldLabel(SbmDbDfn.ColumnIdx eCol, String defautValue) { return defautValue; } + public int GetOwnerOption_Minutes(Sbm.OrgOption_Minutes eLimit, int defautValue) { return defautValue; } + public int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays eLimit, int defautValue) { return defautValue; } + public int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks eLimit, int defautValue) { return defautValue; } + public int GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals eNumDecimals, int defautValue = 2) { return defautValue; } + public Sbm.CommodityType GetOwnerOption_CommodityType(Sbm.OrgOption_CommodityType commodityTypeContext) { return Sbm.CommodityType.Unknown; } + public SysId GetOwnerOption_StockLocation(Sbm.OrgOption_StockLocation eLoc) { return null; } + //------------------------------------------------------------------- // Contacts. public class ContactsData @@ -46,6 +74,19 @@ namespace Sarand.BusinessMgr.Net.Core.Web.App } public ContactsData Contacts { get; } = new ContactsData(); + //------------------------------------------------------------------- + // Commodities. + public class CommoditiesData + { + public class FilterData + { + public uint PageNo { get; set; } = 1; + public ushort PageLength { get; set; } = 16; + } + public FilterData Filter { get; } = new FilterData(); + } + public CommoditiesData Commodities { get; } = new CommoditiesData(); + //------------------------------------------------------------------- } //======================================================================= diff --git a/SaBusMgrCoreWeb/Web/Consoles/SbmSecurityConsole_Web.cs b/SaBusMgrCoreWeb/Web/Consoles/SbmSecurityConsole_Web.cs index 3a18d46..39bb974 100644 --- a/SaBusMgrCoreWeb/Web/Consoles/SbmSecurityConsole_Web.cs +++ b/SaBusMgrCoreWeb/Web/Consoles/SbmSecurityConsole_Web.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Dbas.Consoles; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Dbas; @@ -16,7 +17,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Consoles //------------------------------------------------------------------- // Construction. - public SbmSecurityConsole_Web(SbmUserContext userContext, ISacsDatabase database) : base(userContext, database) + public SbmSecurityConsole_Web(ISbmUserContext userContext) : base(userContext) { } protected override void Dispose(bool disposing) diff --git a/SaBusMgrCoreWeb/Web/Consoles/SbmUpdateLogConsole_Web.cs b/SaBusMgrCoreWeb/Web/Consoles/SbmUpdateLogConsole_Web.cs index c32575e..abae5d9 100644 --- a/SaBusMgrCoreWeb/Web/Consoles/SbmUpdateLogConsole_Web.cs +++ b/SaBusMgrCoreWeb/Web/Consoles/SbmUpdateLogConsole_Web.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Dbas.Consoles; using Sarand.Net.Standard.Base.Dbas; using System; @@ -15,7 +16,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Consoles //------------------------------------------------------------------- // Construction. - public SbmUpdateLogConsole_Web(SbmUserContext userContext, ISacsDatabase database) : base(userContext, database) + public SbmUpdateLogConsole_Web(ISbmUserContext userContext) : base(userContext) { } protected override void Dispose(bool disposing) diff --git a/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs b/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs index 294c0f3..45e088f 100644 --- a/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs +++ b/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs @@ -334,7 +334,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Controllers }; } private readonly SessionStorage sessionStorage = new SessionStorage(); - protected JsonSerializerSettings SbmSessionDataJsonSerializerSettings { get { return SessionStorage.JsonDeserialisationSettings; } } + public static JsonSerializerSettings SbmSessionDataJsonSerializerSettings { get { return SessionStorage.JsonDeserialisationSettings; } } //------------------------------------------------------------------- public SbmSessionData_Web SessionData @@ -441,6 +441,10 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Controllers public Boolean Awaiting { get { return StatusCode.EqualsCI(SacsSystem.GetStatusCode(SaStatus.Awaiting)); } } public Boolean Active { get { return StatusCode.EqualsCI(SacsSystem.GetStatusCode(SaStatus.Active)); } } public Boolean Deleted { get { return StatusCode.EqualsCI(SacsSystem.GetStatusCode(SaStatus.Deleted)); } } + public String CreatedOn { get; set; } + public String CreatedOnFmt { get; set; } + public String UpdatedOn { get; set; } + public String UpdatedOnFmt { get; set; } } //--------------------------------------------------------------- diff --git a/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs b/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs index 3eb6019..1cca47e 100644 --- a/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs +++ b/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs @@ -94,7 +94,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Models // Security. public bool ValidUserSession { get { return SessionData?.ValidUserSession ?? false; } } public bool AwaitingLogin { get { return !ValidUserSession; } } - public bool KeepLoggedIn { get { return !AwaitingLogin && SessionData.User.KeepLoggedIn; } } + public bool KeepLoggedIn { get { return !AwaitingLogin && SessionData.KeepLoggedIn; } } /// Maximum length allowed for password entry: sign-up, change password etc. public int PasswordMaxLength { get; } = 32; diff --git a/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs b/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs index e94f495..6224abe 100644 --- a/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs +++ b/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs @@ -1,4 +1,5 @@ -using Sarand.Net.Standard.Base.App; +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; using System; @@ -14,10 +15,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(SbmUserContext userContext, SbmConfigConsole configConsole, Sbm.View view) + public static bool IsViewApplicable(ISbmUserContext userContext, SbmConfigConsole configConsole, Sbm.View view) { //SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext); - SbmSecurityProfile securityProfile = userContext.SecurityProfile; + ISbmSecurityProfile securityProfile = userContext.SecurityProfile; switch (view) { //----------------------------------------------------------- @@ -262,7 +263,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(SbmUserContext userContext, SbmConfigConsole configConsole, Sbm.MenuOption menuOption) + public static bool IsMenuOptionApplicable(ISbmUserContext userContext, SbmConfigConsole configConsole, Sbm.MenuOption menuOption) { String fn = ClassName + ".IsMenuOptionApplicable"; if (!userContext.ValidUser) diff --git a/SaBusMgrStandardBase/Base/App/SbmApplication.cs b/SaBusMgrStandardBase/Base/App/SbmApplication.cs index 2444310..e6fd2d8 100644 --- a/SaBusMgrStandardBase/Base/App/SbmApplication.cs +++ b/SaBusMgrStandardBase/Base/App/SbmApplication.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.Consoles; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; @@ -83,16 +84,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Create consoles. public abstract SbmConfigConsole CreateConfigConsole(SbmSessionContext sessionContext); - public abstract SaDiaryConsole CreateDiaryConsole(SbmUserContext userContext); - public abstract SaSecurityConsole CreateSecurityConsole(SbmUserContext userContext); - public abstract SaCodeTypeConsole CreateCodeTypeConsole(SbmUserContext userContext); - public abstract SaReferenceDataConsole CreateReferenceDataConsole(SbmUserContext userContext); - public abstract SaItemDataConsole CreateItemDataConsole(SbmUserContext userContext); - public abstract SaItemDocConsole CreateItemDocConsole(SbmUserContext userContext); - public abstract SaItemOptionConsole CreateItemOptionConsole(SbmUserContext userContext); - public abstract SaInterfaceConsole CreateInterfaceConsole(SbmUserContext userContext); - public abstract SaUpdateLogConsole CreateUpdateLogConsole(SbmUserContext userContext); - public abstract SbmEmailConsole CreateEmailConsole(SbmUserContext userContext); + 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); //------------------------------------------------------------------- } diff --git a/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs b/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs index 258f8a2..ed3c0b7 100644 --- a/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs +++ b/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs @@ -1,4 +1,5 @@ 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; using Sarand.Net.Standard.Accounts.Sage.App; @@ -144,7 +145,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Application Configuration. - AllowOption. - public virtual bool AllowOption(SbmUserContext userContext, Sbm.ConfigOption option) + public virtual bool AllowOption(ISbmUserContext userContext, Sbm.ConfigOption option) { switch (option) { @@ -323,24 +324,24 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App // I t e m s //------------------------------------------------------------------- // Item Data Interface. - public virtual bool CanUpdateItemData(SbmUserContext userContext, Sbm.ItemDataType itemDataType) + public virtual bool CanUpdateItemData(ISbmUserContext userContext, Sbm.ItemDataType itemDataType) { return false; } - public virtual bool DoUpdateItemData(SbmUserContext userContext, Sbm.ItemDataType itemDataType) + public virtual bool DoUpdateItemData(ISbmUserContext userContext, Sbm.ItemDataType itemDataType) { return false; } - public virtual bool CanRemoveItemData(SbmUserContext userContext, Sbm.ItemDataType itemDataType) + public virtual bool CanRemoveItemData(ISbmUserContext userContext, Sbm.ItemDataType itemDataType) { return false; } //------------------------------------------------------------------- // Update Log. - public virtual bool IsColumnChangeLogged(SbmUserContext userContext, SbmDbDfn.ColumnIdx column) + public virtual bool IsColumnChangeLogged(ISbmUserContext userContext, SbmDbDfn.ColumnIdx column) { return false; } @@ -357,17 +358,17 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Supported Data Item Types. // Supported affiliate types (all allowed by default). - public virtual bool AllowAffiliateType(SbmUserContext userContext, Sbm.AffiliateType type) + public virtual bool AllowAffiliateType(ISbmUserContext userContext, Sbm.AffiliateType type) { return true; } // Supported Association types (all allowed by default). - public virtual bool AllowAssociationType(SbmUserContext userContext, Sbm.AssociationType type) + public virtual bool AllowAssociationType(ISbmUserContext userContext, Sbm.AssociationType type) { return true; } // Supported Transaction types. - public virtual bool AllowTransactionType(SbmUserContext userContext, Sbm.TransactionType type) + public virtual bool AllowTransactionType(ISbmUserContext userContext, Sbm.TransactionType type) { switch (type) { @@ -392,7 +393,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(SbmUserContext userContext, SbmDbDfn.ColumnIdx column) + public virtual bool DisplayAttribute(ISbmUserContext userContext, SbmDbDfn.ColumnIdx column) { switch (column) { @@ -436,7 +437,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Alternative data value captions. - public virtual String GetAttributeCaption(SbmUserContext userContext, SbmDbDfn.ColumnIdx column, string Default) + public virtual String GetAttributeCaption(ISbmUserContext userContext, SbmDbDfn.ColumnIdx column, string Default) { String Caption = ""; if (column != SbmDbDfn.ColumnIdx.Unknown) @@ -451,7 +452,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(SbmUserContext userContext) + public virtual String GetDefaultQuoteDescIntro(ISbmUserContext userContext) { return ""; } @@ -459,11 +460,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Transaction Maintenance Dialogs. /* - public SapDlgUpdateTransaction GetCreateTransactionDlg (SbmUserContext userContext, SysId id, Sbm.TransactionType type) + public SapDlgUpdateTransaction GetCreateTransactionDlg (ISbmUserContext userContext, SysId id, Sbm.TransactionType type) { return null; } - public SapDlgUpdateTransaction GetUpdateTransactionDlg (SbmUserContext userContext, Sbm.TransactionType type, bool readOnly) + public SapDlgUpdateTransaction GetUpdateTransactionDlg (ISbmUserContext userContext, Sbm.TransactionType type, bool readOnly) { return null; } @@ -471,7 +472,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Create Transaction. - public virtual bool CanCreateTransactionLocally(SbmUserContext userContext, Sbm.TransactionType type) + public virtual bool CanCreateTransactionLocally(ISbmUserContext userContext, Sbm.TransactionType type) { if (!AllowTransactionType(userContext, type)) return false; // Refresh options. @@ -553,7 +554,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { System, Manual, Option } - public virtual AssignTransRefMethod TransactionAssignRefMethod(SbmUserContext userContext, Sbm.TransactionType transTypes) + public virtual AssignTransRefMethod TransactionAssignRefMethod(ISbmUserContext userContext, Sbm.TransactionType transTypes) { return AssignTransRefMethod.System; } @@ -561,20 +562,20 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { ByOwnerType, ByType } - public virtual AssignTransRefSource TransactionAssignRefSource(SbmUserContext userContext, Sbm.TransactionType transTypes) + public virtual AssignTransRefSource TransactionAssignRefSource(ISbmUserContext 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(SbmUserContext userContext, Sbm.TransactionType transTypes) + public virtual Sbm.TransactionType GetTransactionTypeForNextId(ISbmUserContext userContext, Sbm.TransactionType transTypes) { return transTypes; } // NextId key value. - public virtual String GetTransactionNextIdKey(SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType eType) + public virtual String GetTransactionNextIdKey(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType eType) { idAssoc = new SysId(); Sbm.TransactionType transTypes = GetTransactionTypeForNextId(userContext, eType); @@ -590,7 +591,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } // Set the minimum Id for transactions of the specified type. - public virtual bool SetMinTransactionId(SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long iId) + public virtual bool SetMinTransactionId(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long iId) { bool set = false; if (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) != null) @@ -604,7 +605,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 - (SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes) + (ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes) { String Ref = ""; if (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) != null) @@ -617,7 +618,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } public virtual String FormatTransactionCreateRef - (SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long RefInt) + (ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long RefInt) { String Ref = ""; if (RefInt > 0) @@ -633,7 +634,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return Ref; } - public virtual int GetTransactionRefSeqLength(SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes) + public virtual int GetTransactionRefSeqLength(ISbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes) { return 5; } @@ -647,7 +648,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Raise Transaction. - public virtual bool CanRaiseTransaction(SbmUserContext userContext, Sbm.TransactionType typeFrom, Sbm.TransactionType typeTo) + public virtual bool CanRaiseTransaction(ISbmUserContext userContext, Sbm.TransactionType typeFrom, Sbm.TransactionType typeTo) { if (!AllowTransactionType(userContext, typeFrom) || !AllowTransactionType(userContext, typeTo)) return false; if (!CanCreateTransactionLocally(userContext, typeTo)) return false; @@ -743,7 +744,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } //------------------------------------------------------------------- - public virtual List GetTransactionTypesForRaiseFrom(SbmUserContext userContext, Sbm.TransactionType typeFrom) + public virtual List GetTransactionTypesForRaiseFrom(ISbmUserContext userContext, Sbm.TransactionType typeFrom) { // Build the list of transaction types that are allowed to be raised from the specified type. List transTypes = new List(); @@ -758,7 +759,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } //------------------------------------------------------------------- - public virtual List GetTransactionTypesForRaiseTo(SbmUserContext userContext, Sbm.TransactionType typeTo) + public virtual List GetTransactionTypesForRaiseTo(ISbmUserContext userContext, Sbm.TransactionType typeTo) { // Build the list of transaction types that are allowed to be raised to the specified type. List transTypes = new List(); @@ -776,7 +777,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(SbmUserContext userContext, SbmTransaction transSource, List requireList, Sbm.TransactionType type) + public virtual bool PrepareCopiedRequirements(ISbmUserContext userContext, SbmTransaction transSource, List requireList, Sbm.TransactionType type) { type = new Sbm.TransactionType(); //transSource; requireList; type; @@ -785,7 +786,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Remove Transaction.- By default, not allowed if transaction has requirements. - public virtual bool CanRemoveTransactionWithRequirements(SbmUserContext userContext, SbmTransaction transaction, int requirementCount) + public virtual bool CanRemoveTransactionWithRequirements(ISbmUserContext userContext, SbmTransaction transaction, int requirementCount) { if (transaction == null || !SysId.IsValid(transaction.Id)) return false; return (requirementCount < 1); @@ -793,7 +794,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(SbmUserContext userContext, Sbm.TransactionType transactionType) + public virtual bool UseInProgressTaxDateAsTaxPoint(ISbmUserContext userContext, Sbm.TransactionType transactionType) { switch (transactionType) { @@ -811,14 +812,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(SbmUserContext userContext, Sbm.TransactionType transactionType) + public virtual bool SearchCommodityOnCreateRequirement(ISbmUserContext userContext, Sbm.TransactionType transactionType) { return false; } //------------------------------------------------------------------- // Requirement Costing. - public virtual SbmRequirementCostingConfig GetRequirementCostingConfig(SbmUserContext userContext) + public virtual SbmRequirementCostingConfig GetRequirementCostingConfig(ISbmUserContext userContext) { SbmRequirementCostingConfig cfgRequirementCosting = new SbmRequirementCostingConfig(); return cfgRequirementCosting; @@ -828,21 +829,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(SbmUserContext userContext, Sbm.OrgOption_CommodityType commodityType) + public virtual Sbm.CommodityType GetCommodityTypeDefault(ISbmUserContext userContext, Sbm.OrgOption_CommodityType commodityType) { // Default = 'Stock'. return Sbm.CommodityType.Stock; } // Clean-up imported data (default no action). - public virtual bool CleanupImportedCommodity(SbmUserContext userContext, SbmCommodity commodity) + public virtual bool CleanupImportedCommodity(ISbmUserContext userContext, SbmCommodity commodity) { return true; } //------------------------------------------------------------------- // Stock Control - public virtual SbmStockControlConfig GetStockControlConfig(SbmUserContext userContext) + public virtual SbmStockControlConfig GetStockControlConfig(ISbmUserContext userContext) { SbmStockControlConfig cfgStockControl = new SbmStockControlConfig(); return cfgStockControl; @@ -852,20 +853,20 @@ 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 GetReports(SbmUserContext userContext, Sbm.View view) + public virtual List GetReports(ISbmUserContext userContext, Sbm.View view) { return new List(); } - public virtual bool ItemHasDiaryReports(SbmUserContext userContext/*SaItemId &*/) + public virtual bool ItemHasDiaryReports(ISbmUserContext userContext/*SaItemId &*/) { return false; } /* - public virtual List GetDiaryReports(SbmUserContext userContext, SaDiaryReport_Params &) + public virtual List GetDiaryReports(ISbmUserContext userContext, SaDiaryReport_Params &) { return null; } - public virtual List GetDiaryReportsForItem(SbmUserContext userContext, ItemId itemId) + public virtual List GetDiaryReportsForItem(ISbmUserContext userContext, ItemId itemId) { return null; } @@ -882,7 +883,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App /// Sales Invoice report horizontal lines [Bool] RptSalesInvoiceHorizontalLines = 111, } - public virtual DataValue GetDefaultProcessParam(SbmUserContext userContext, ProcessParam prm) + public virtual DataValue GetDefaultProcessParam(ISbmUserContext userContext, ProcessParam prm) { switch (prm) { @@ -895,18 +896,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Automated processes. - public virtual bool PerformProcess(SbmUserContext userContext, Sbm.ProcessType type) + public virtual bool PerformProcess(ISbmUserContext userContext, Sbm.ProcessType type) { return false; } // Available data import/export processes (over and above standard). - public virtual List GetImportProcesses(SbmUserContext userContext, Sbm.InterfaceDataType dataType, List itemIds) + public virtual List GetImportProcesses(ISbmUserContext userContext, Sbm.InterfaceDataType dataType, List itemIds) { return new List(); } - public virtual List GetExportProcesses(SbmUserContext userContext, Sbm.InterfaceDataType dataType, List itemIds) + public virtual List GetExportProcesses(ISbmUserContext userContext, Sbm.InterfaceDataType dataType, List itemIds) { return new List(); } @@ -925,7 +926,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public String ItemDesc { get; } public String ItemText { get; } }; - public virtual DataExportItemDetails GetDataExportInvoiceItemDetails(SbmUserContext userContext, SbmRequirement requirement) + public virtual DataExportItemDetails GetDataExportInvoiceItemDetails(ISbmUserContext userContext, SbmRequirement requirement) { return null; } @@ -933,7 +934,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(SbmUserContext userContext) + public virtual bool AllowInterfaces(ISbmUserContext userContext) { if (AllowInterfaceCategory(userContext, SaInterfaceCategory.Website)) return true; if (AllowInterfaceCategory(userContext, SaInterfaceCategory.Accounts)) return true; @@ -942,7 +943,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return false; } - public virtual bool AllowInterfaceCategory(SbmUserContext userContext, SaInterfaceCategory interfaceCategory) + public virtual bool AllowInterfaceCategory(ISbmUserContext userContext, SaInterfaceCategory interfaceCategory) { // By default, only website and file interfaces are allowed. switch (interfaceCategory) @@ -954,7 +955,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return false; } - public virtual bool AllowInterface(SbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType) + public virtual bool AllowInterface(ISbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType) { if (!AllowInterfaceCategory(userContext, interfaceCategory)) return false; switch (interfaceCategory) diff --git a/SaBusMgrStandardBase/Base/App/SbmConsoleViewDfn.cs b/SaBusMgrStandardBase/Base/App/SbmConsoleViewDfn.cs index 9d5d8a7..6f2df63 100644 --- a/SaBusMgrStandardBase/Base/App/SbmConsoleViewDfn.cs +++ b/SaBusMgrStandardBase/Base/App/SbmConsoleViewDfn.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Utils; using System; @@ -100,7 +101,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public virtual String LinkSuffix { get { return ""; } } //--------------------------------------------------------------- // Utilities. - public virtual bool Refresh(SbmUserContext userContext) + public virtual bool Refresh(ISbmUserContext userContext) { ItemCount = 0; switch (LinkType) diff --git a/SaBusMgrStandardBase/Base/App/SbmInternals.cs b/SaBusMgrStandardBase/Base/App/SbmInternals.cs index a183e89..13967d9 100644 --- a/SaBusMgrStandardBase/Base/App/SbmInternals.cs +++ b/SaBusMgrStandardBase/Base/App/SbmInternals.cs @@ -1,5 +1,6 @@ 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.Bus; using Sarand.Net.Standard.Base.CodeTypes; @@ -58,7 +59,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Construction. - public SbmInternals(SbmUserContext userContext) + public SbmInternals(ISbmUserContext userContext) { UserContext = userContext; } @@ -96,9 +97,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Session properties. public SbmApplication Application { get { return SbmGlobals.Application; } } - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } - public SbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } } + public ISbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } } public SbmAccountsDfn AccountsDfn { get { if (accountsDfn == null) accountsDfn = new SbmAccountsDfn(UserContext); { return accountsDfn; } } } // Database. public ISacsDatabase BusMgrDatabase { get { return Application.GetBusMgrDatabase(SessionContext); } } @@ -114,6 +115,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return new List(systemCodeCache.GetValueOrDefault(systemCode, new List())); } public List AffiliateTypeCodes { get { return GetCodesOfType(Sbm.SystemCode.AffiliateType); } } + public List CommodityTypeCodes { get { return GetCodesOfType(Sbm.SystemCode.CommodityType); } } //------------------------------------------------------------------- // Managers. diff --git a/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs b/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs index 2d56087..f0905d0 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; 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.Core; @@ -11,7 +12,7 @@ using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.App { //======================================================================= - public class SbmSecurityProfile : SaErrorStateItem + public class SbmSecurityProfile : SaErrorStateItem, ISbmSecurityProfile { //------------------------------------------------------------------- // Data members. @@ -23,7 +24,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Construction. - public SbmSecurityProfile(SbmUserContext userContext, bool includeHostSecurityProfile) + public SbmSecurityProfile(ISbmUserContext userContext, bool includeHostSecurityProfile) { this.UserContext = userContext; this.includeHostSecurityProfile = includeHostSecurityProfile; @@ -37,7 +38,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Properties. [JsonIgnore] - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } //------------------------------------------------------------------- // Refresh profile. @@ -195,8 +196,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public bool UserCanViewFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any) { - if (Financial.ConfigOption_AllowFinancialsAccessControl) return true; - if (IsSecurityRightGranted(Sbm.SecurityRight.Financial_Update) || IsSecurityRightGranted(Sbm.SecurityRight.Financial_View)) + if (!Financial.ConfigOption_AllowFinancialsAccessControl) return true; + if (Financial.CanUpdateFinancials || Financial.CanViewFinancials) { // If specific type of financial is requested, check that view is not denied. if (financialType > 0 && IsSecurityRightDenied(Sbm.SecurityRight.Financial_ViewByType, new SysId((int)financialType))) @@ -208,8 +209,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public bool UserCanUpdateFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any) { - if (Financial.ConfigOption_AllowFinancialsAccessControl) return true; - if (IsSecurityRightGranted(Sbm.SecurityRight.Financial_Update)) + if (!Financial.ConfigOption_AllowFinancialsAccessControl) return true; + if (Financial.CanUpdateFinancials) { // If specific type of financial is requested, check that update is not denied. if (financialType > 0 && IsSecurityRightDenied(Sbm.SecurityRight.Financial_UpdateByType, new SysId((int)financialType))) @@ -219,7 +220,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return false; } - bool UserCanAccessFinancialViewOfType(Sbm.FinancialType financialType) + public bool UserCanAccessFinancialViewOfType(Sbm.FinancialType financialType) { if ((int)financialType < 1) return false; // If specific type of financial is requested, check that view is not denied. @@ -228,7 +229,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return true; } - bool UserCanAccessFinancialUpdateOfType(Sbm.FinancialType financialType) + public bool UserCanAccessFinancialUpdateOfType(Sbm.FinancialType financialType) { if ((int)financialType < 1) return false; // If specific type of financial is requested, check that update is not denied. @@ -250,6 +251,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public bool CanUpdate { get; internal set; } = false; } public ContactsProfile Contacts { get; internal set; } + public bool UserCanCreateContacts { get { return Contacts.CanCreate; } } + public bool UserCanUpdateContacts { get { return Contacts.CanUpdate; } } private void RefreshContactsProfile(SbmConfigConsole configConsole) { Contacts.CanUpdate = (UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Update)); diff --git a/SaBusMgrStandardBase/Base/App/SbmSessionData.cs b/SaBusMgrStandardBase/Base/App/SbmSessionData.cs index 7b7cb33..c8a75d2 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSessionData.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSessionData.cs @@ -1,5 +1,7 @@ using Newtonsoft.Json; using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Core; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Helpers; @@ -26,19 +28,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App SessionIdx = sessionIdx; ItemIdx = itemIdx; SessionContext = sessionContext; - userData = CreateUserData(SessionContext, null, null); + userData = CreateUserData(SessionContext, null, null, null); + organisationData = new OrganisationData(null, null); } /// /// Primary constructor - on user login. /// SessionContext and UserAccount must be supplied. /// Roles list is optional. /// - protected SbmSessionData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + protected SbmSessionData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation) { SessionIdx = ++sessionIdxRoot; ItemIdx = 1000; SessionContext = sessionContext; - userData = CreateUserData(SessionContext, securityItemUser, affiliateUser); + userData = CreateUserData(SessionContext, securityItemUser, affiliateUser, supervisedOrganisations); + organisationData = new OrganisationData(associationOrganisation, affiliateOrganisation); } //------------------------------------------------------------------- @@ -57,16 +61,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { get { - return new DbUpdateInfo(User.AffiliateId, StringUtil.OnEmpty(User.DisplayName, User.EmailAddress), SbmSystem.ComputerName); + return new DbUpdateInfo(User.AffiliateId, StringUtil.OnEmpty(userData.DisplayName, userData.EmailAddress), SbmSystem.ComputerName); } } //------------------------------------------------------------------- // User. - public class UserData + public class UserData : ISbmUserContext.IUserData { protected UserData() { } - protected UserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + protected UserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations) { if (securityItemUser != null) { @@ -75,13 +79,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App if (affiliateUser != null) { AffiliateId = affiliateUser.Id; - Refresh(securityItemUser, affiliateUser); + 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; } protected UserData(UserData userData) { @@ -92,6 +97,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App LastName = userData.LastName; DisplayName = userData.DisplayName; EmailAddress = userData.EmailAddress; + supervisedOrganisations = userData.supervisedOrganisations; KeepLoggedIn = userData.KeepLoggedIn; } // Properties. @@ -102,10 +108,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public String LastName { get; protected set; } public String DisplayName { get; protected set; } public String EmailAddress { get; protected set; } + /// User managed associations - Id and display name. + public List SupervisedOrganisations { get { return new List(supervisedOrganisations); } } + protected List supervisedOrganisations { get; } = new List(); public bool KeepLoggedIn { get; protected set; } public bool UserAccountSupplied { get; protected set; } // Refresh properties. - protected bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + protected bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations) { // Check that user matches the session. if (!SysId.IsValid(SecurityItemId) || !SysId.IsValid(securityItemUser?.Id ?? null) || !SecurityItemId.Equals(securityItemUser.Id)) return false; @@ -116,20 +125,49 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App 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); + protected abstract UserData CreateUserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations); + + /// User account details. private UserData userData; - public UserData User { get { return userData; } } + 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; } } + /// User - JSON deserialisation route. protected void SetUser(UserData user) { - if (this.userData != null && User.UserAccountSupplied) + if (this.userData != null && userData.UserAccountSupplied) throw new NotSupportedException("Session User cannot be replaced."); this.userData = user; } + //------------------------------------------------------------------- + // 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; } + } + protected OrganisationData organisationData; + public ISbmUserContext.IOrganisationData Organisation { get { return organisationData; } } + //------------------------------------------------------------------- } //======================================================================= diff --git a/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs b/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs index 1ea0c40..e2aed7e 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; @@ -23,9 +24,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { } // Refresh context. - public void RefreshUser(SbmAffiliate affiliateUser, List supervisedOwners) + public void RefreshUser(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOwners) { - SetUserData(affiliateUser, supervisedOwners); + SetUserData(securityItemUser, affiliateUser, supervisedOwners); } public void ClearUser() { @@ -61,8 +62,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App // Properties. public SbmUserContext UserContext { get { return userContext; } } public SbmSessionContext SessionContext { get { return userContext.SessionContext; } } - public SbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } } - protected SaItemOption.Cache OrganisationConfigOptionsCache { get { return UserContext.Organisation.configOptionsCache; } } + public ISbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } } + protected SaItemOption.Cache OrganisationConfigOptionsCache { get { return UserContext.OrganisationConfigOptionsCache; } } // User parameters. protected SbmSysParamCache SysParamCache { get; } @@ -85,8 +86,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App // Clear existing User details. ClearUserSession(); + using (SbmConfigConsole configConsole = SbmGlobals.Application.CreateConfigConsole(UserContext.SessionContext)) + using (SaSecurityConsole securityConsole = SbmGlobals.Application.CreateSecurityConsole(UserContext)) using (SbmAccountMgr accountMgr = CreateAccountMgr()) { + // Security item. + SaSecurityItem securityItemUser = securityConsole.GetSecurityItemById(SaSecurity.ItemType.User, userId); + SbmAffiliate affiliateUser = accountMgr.GetAffiliateByUserId(userId); if (affiliateUser == null) { @@ -94,14 +100,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App return false; } List userSupervisedOwners = accountMgr.GetAffiliatesSupervisedBy(affiliateUser.Id); - userContext.RefreshUser(affiliateUser, userSupervisedOwners); + userContext.RefreshUser(securityItemUser, affiliateUser, userSupervisedOwners); // Populate security rights. - using (SbmConfigConsole configConsole = SbmGlobals.Application.CreateConfigConsole(UserContext.SessionContext)) - using (SaSecurityConsole securityConsole = SbmGlobals.Application.CreateSecurityConsole(UserContext)) - { - SecurityProfile.RefreshProfile(configConsole, securityConsole, userId, securityRights); - } + SecurityProfile.RefreshProfile(configConsole, securityConsole, userId, securityRights); // Reinstate previous owner if defined and verify that it is in the supervised list. SysId affiliateIdOwner = UserContext.Organisation.AffiliateId; @@ -154,6 +156,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } } + public SaSecurityConsole SaSecurityConsole { get; private set; } + // Data managers. protected SbmAccountMgr CreateAccountMgr() { diff --git a/SaBusMgrStandardBase/Base/App/SbmSysParamCache.cs b/SaBusMgrStandardBase/Base/App/SbmSysParamCache.cs index 3da84de..9bc5e31 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSysParamCache.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSysParamCache.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; @@ -17,14 +18,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Protected Construction - use derived objects. - public SbmSysParamCache(SbmUserContext userContext) + public SbmSysParamCache(ISbmUserContext userContext) { this.UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } public SysId AffiliateIdUser { get; private set; } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs b/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs index c96837a..5531368 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs @@ -1,4 +1,5 @@ -using Sarand.Net.Standard.Base.App; +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; using Sarand.Net.Standard.Base.Utils; @@ -23,7 +24,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, SbmUserContext userContext) + public static void RegisterCodeTypes(SbmConfigConsole configConsole, SaCodeTypeConsole codeTypeConsole, ISbmUserContext userContext) { //--------------------------------------------------------------- // C o m m o d i t i e s diff --git a/SaBusMgrStandardBase/Base/App/SbmSystem.cs b/SaBusMgrStandardBase/Base/App/SbmSystem.cs index ae0bd63..8e01a9c 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSystem.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSystem.cs @@ -1,4 +1,5 @@ -using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.BusinessMgr.Net.Standard.Base.Core; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -74,14 +75,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // S y s t e m C o d e s //------------------------------------------------------------------- - private static String GetOwnerOption_Caption(SbmUserContext userContext, Sbm.OrgOption_Caption orgOption_Caption, String defaultValue) + private static String GetOwnerOption_Caption(ISbmUserContext 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 GetCodesOfType(SbmUserContext userContext, Sbm.SystemCode systemCode) + public static List GetCodesOfType(ISbmUserContext userContext, Sbm.SystemCode systemCode) { SbmConfigConsole configConsole = null; // SbmGlobals.GetConfigConsole(userContext.SessionContext); switch (systemCode) @@ -480,14 +481,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // D a t a M a n a g e r s //------------------------------------------------------------------- - public abstract SbmAccountMgr CreateAccountMgr(SbmUserContext userContext); - public abstract SbmAssetMgr CreateAssetMgr(SbmUserContext userContext); - public abstract SbmCommodityMgr CreateCommodityMgr(SbmUserContext userContext); - public abstract SbmPriceMgr CreatePriceMgr(SbmUserContext userContext); - public abstract SbmDataItemMgr CreateDataItemMgr(SbmUserContext userContext); - public abstract SbmProcessMgr CreateProcessMgr(SbmUserContext userContext); - public abstract SbmStockMgr CreateStockMgr(SbmUserContext userContext); - public abstract SbmTransactionMgr CreateTransactionMgr(SbmUserContext userContext); + 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); //------------------------------------------------------------------- // A p p l i c a t i o n P r o p e r t i e s diff --git a/SaBusMgrStandardBase/Base/App/SbmUserContext.cs b/SaBusMgrStandardBase/Base/App/SbmUserContext.cs index 0e222ad..ca35883 100644 --- a/SaBusMgrStandardBase/Base/App/SbmUserContext.cs +++ b/SaBusMgrStandardBase/Base/App/SbmUserContext.cs @@ -1,10 +1,12 @@ using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.Security; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; @@ -12,45 +14,57 @@ using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.App { //======================================================================= - public class SbmUserContext + public class SbmUserContext : ISbmUserContext { //------------------------------------------------------------------- // Definitions. // User profile. - public class UserData + public class UserData : ISbmUserContext.IUserData { protected UserData() { } protected readonly List supervisedOwners = new List(); /// User Security Item Id. - public SysId SecItemId { get; protected set; } = new SysId(); + public SysId SecurityItemId { get; protected set; } = new SysId(); /// User Affiliate Id. public SysId AffiliateId { get; protected set; } = new SysId(); + /// User first name. + public String FirstName { get; protected set; } = ""; + /// User last name. + public String LastName { get; protected set; } = ""; /// User display name. public String DisplayName { get; protected set; } = ""; + /// User email address. + public String EmailAddress { get; protected set; } = ""; /// User managed associations - Id and display name. - public List SupervisedOwners { get { return new List(supervisedOwners); } } + public List SupervisedOrganisations { get { return new List(supervisedOwners); } } } private class UserData_Internal : UserData { internal UserData_Internal() { } internal void Clear() { - SecItemId = new SysId(); + SecurityItemId = new SysId(); AffiliateId = new SysId(); + FirstName = ""; + LastName = ""; DisplayName = ""; + EmailAddress = ""; supervisedOwners.Clear(); } - internal void Refresh(SysId securityItemId, SysId affiliateId, String displayName, List supervisedOwners) + internal void Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOwners) { - SecItemId = SysId.InvalidOnNull(securityItemId); - AffiliateId = SysId.InvalidOnNull(affiliateId); - DisplayName = StringUtil.EmptyOnNull(displayName).TrimAll(); + SecurityItemId = SysId.InvalidOnNull(securityItemUser?.Id ?? null); + AffiliateId = SysId.InvalidOnNull(affiliateUser?.Id ?? null); + FirstName = StringUtil.EmptyOnNull(affiliateUser?.FirstName ?? "").TrimAll(); + LastName = StringUtil.EmptyOnNull(affiliateUser?.LastName ?? "").TrimAll(); + DisplayName = StringUtil.EmptyOnNull(affiliateUser?.GetDisplayName() ?? "").TrimAll(); + EmailAddress = StringUtil.EmptyOnNull(securityItemUser?.EmailAddress ?? ""); this.supervisedOwners.Clear(); this.supervisedOwners.AddRange(supervisedOwners); } } // Owner profile - selected organisation to manage. - public class OrganisationData + public class OrganisationData : ISbmUserContext.IOrganisationData { internal OrganisationData() { } // Organisation options. @@ -115,24 +129,26 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { SessionContext = sessionContext; organisationData = new OrganisationData_Internal(); - SecurityProfile = new SbmSecurityProfile(this, true); + securityProfile = new SbmSecurityProfile(this, true); DbUpdateInfo = new DbUpdateInfo(User.AffiliateId, User.DisplayName, SacsSystem.ComputerName); } //------------------------------------------------------------------- // Properties. public SbmSessionContext SessionContext { get; protected set; } - public UserData User { get { return userData; } } - public bool ValidUser { get { return SysId.IsValid(userData.SecItemId) && SysId.IsValid(userData.AffiliateId); } } - public OrganisationData Organisation { get { return organisationData; } } + 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; private set; } //------------------------------------------------------------------- // Security profile. - public SbmSecurityProfile SecurityProfile { get; protected set; } + private SbmSecurityProfile securityProfile { get; set; } + public ISbmSecurityProfile SecurityProfile { get { return securityProfile; } } //------------------------------------------------------------------- // Organisation configuration. + public SaItemOption.Cache OrganisationConfigOptionsCache { get { return organisationData.configOptionsCache; } } public String GetOrganisationOption(Sbm.OrganisationOption option, String context) { if (assocOptions == null) assocOptions = SbmSystem.GetCodesOfType(this, Sbm.SystemCode.AssociationOption); @@ -142,7 +158,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public String GetOrganisationOption(String optionName, String context) { // Retrieve the requested value from the cache. - return Organisation.configOptionsCache.ItemOptions.GetOptionValue(optionName, context); + return organisationData.configOptionsCache.ItemOptions.GetOptionValue(optionName, context); } public String GetOwnerOption_Value(Sbm.OrgOption_Value eCol) { @@ -185,14 +201,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App String value = GetOrganisationOption(Sbm.OrganisationOption.ShowColumn, context).Trim(); return StringUtil.ToBool(value); } - public String GetOwnerOption_FieldLabel(SbmDbDfn.ColumnIdx eCol, String sDefault) + public String GetOwnerOption_FieldLabel(SbmDbDfn.ColumnIdx eCol, String defautValue) { if (contextFieldLabels == null) contextFieldLabels = SbmSystem.GetCodesOfType(this, Sbm.SystemCode.OrgOption_FieldLabel); String context = contextFieldLabels.GetCodeForType(eCol); String value = GetOrganisationOption(Sbm.OrganisationOption.FieldLabel, context).Trim(); - return (!value.IsEmpty() ? value : sDefault); // Return default if no label defined. + return (!value.IsEmpty() ? value : defautValue); // Return default if no label defined. } - public int GetOwnerOption_Minutes(Sbm.OrgOption_Minutes eLimit, int iDefault) + public int GetOwnerOption_Minutes(Sbm.OrgOption_Minutes eLimit, int defautValue) { if (contextMinutes == null) contextMinutes = SbmSystem.GetCodesOfType(this, Sbm.SystemCode.OrgOption_Minutes); String context = contextMinutes.GetCodeForType(eLimit); @@ -203,9 +219,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App if (iUpdateLimit > 0) return iUpdateLimit; } - return iDefault; + return defautValue; } - public int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays eLimit, int iDefault) + public int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays eLimit, int defautValue) { if (contextPeriodDays == null) contextPeriodDays = SbmSystem.GetCodesOfType(this, Sbm.SystemCode.OrgOption_PeriodDays); String context = contextPeriodDays.GetCodeForType(eLimit); @@ -216,9 +232,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App if (iUpdateLimit > 0) return iUpdateLimit; } - return iDefault; + return defautValue; } - public int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks eLimit, int iDefault) + public int GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks eLimit, int defautValue) { if (contextPeriodWeeks == null) contextPeriodWeeks = SbmSystem.GetCodesOfType(this, Sbm.SystemCode.OrgOption_PeriodWeeks); String context = contextPeriodWeeks.GetCodeForType(eLimit); @@ -229,14 +245,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App if (iUpdateLimit > 0) return iUpdateLimit; } - return iDefault; + return defautValue; } - public int GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals eNumDecimals, int iDefault = 2) + public int GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals eNumDecimals, int defautValue = 2) { if (contextNumericDecimals == null) contextNumericDecimals = SbmSystem.GetCodesOfType(this, Sbm.SystemCode.OrgOption_NumericDecimals); String context = contextNumericDecimals.GetCodeForType(eNumDecimals); String value = GetOrganisationOption(Sbm.OrganisationOption.NumericDecimals, context).Trim(); - int iNumDecimals = iDefault; + int iNumDecimals = defautValue; if (!value.IsEmpty()) iNumDecimals = value.ToShort(); iNumDecimals = Math.Min(4, Math.Max(0, iNumDecimals)); @@ -264,9 +280,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Modify properties - internal only. - protected void SetUserData(SbmAffiliate affiliateUser, List supervisedOwners) + protected void SetUserData(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOwners) { - userData.Refresh(affiliateUser.UserId, affiliateUser.Id, affiliateUser.GetDisplayName(), supervisedOwners); + userData.Refresh(securityItemUser, affiliateUser, supervisedOwners); DbUpdateInfo = new DbUpdateInfo(User.AffiliateId, User.DisplayName, SacsSystem.ComputerName); } protected void ClearUserData() @@ -281,9 +297,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App String fn = GetType().Name + ".SetOrganisationData"; // Interface context for selected organisation. - String interfaceContext = ""; - if (SysId.IsValid(affiliateIdOrganisation)) - interfaceContext = "ORG" + StringUtil.PadLeft(SysId.ToString(affiliateIdOrganisation), 5, '0'); + String interfaceContext = SbmAccountMgr.GetInterfaceContext(affiliateIdOrganisation); SbmAffiliate affiliateOrganisation = null; SbmAssociation associationInternal = null; @@ -330,7 +344,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } protected void SetSecurityProfile(SbmSecurityProfile securityProfile) { - SecurityProfile = securityProfile; + this.securityProfile = securityProfile; } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-QuickBooks.cs b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-QuickBooks.cs index 34ee8ad..8b4c796 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-QuickBooks.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-QuickBooks.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Accounts.QuickBooks.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; @@ -154,7 +155,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus } private class QBooksParams { - public QBooksParams(SbmUserContext userContext) + public QBooksParams(ISbmUserContext userContext) { } // QuickBooks interface definitions. diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs index 7e607a0..0e7d94b 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Accounts.Sage.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; @@ -174,7 +175,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus } private class SageParams { - public SageParams(SbmUserContext userContext, SbmInternals internals) + public SageParams(ISbmUserContext userContext, SbmInternals internals) { UserContext = userContext; this.internals = internals; @@ -248,7 +249,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus SalesOrderColumnSources.Add(SageDbDfn.GetColumnName(SageDbDfn.ColumnIdx.SalesOrder_Notes1), "Notes line 1"); } //--------------------------------------------------------------- - private SbmUserContext UserContext { get; } + private ISbmUserContext UserContext { get; } private readonly SbmInternals internals; // Sage interface definitions. public SaInterface.Data dfnInt_Sage { get; set; } = new SaInterface.Data(); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn.cs b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn.cs index 020ce96..c326305 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Accounts.QuickBooks.App; using Sarand.Net.Standard.Accounts.Sage.App; using Sarand.Net.Standard.Base.App; @@ -61,7 +62,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - public SbmAccountsDfn(SbmUserContext userContext) + public SbmAccountsDfn(ISbmUserContext userContext) { UserContext = userContext; internals = new SbmInternals(userContext); @@ -81,7 +82,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } protected SaInterfaceConsole InterfaceConsole { get { return internals.InterfaceConsole; } } protected SaItemOptionConsole ItemOptionConsole { get { return internals.ItemOptionConsole; } } diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAddress.cs b/SaBusMgrStandardBase/Base/Bus/SbmAddress.cs index cab73e0..afd7819 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAddress.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAddress.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -354,7 +355,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmAddress(SbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType) : base(userContext, id) + protected SbmAddress(ISbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType) : + base(userContext, id) { base.SetData(data); ItemType = itemType; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs b/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs index f2def08..35c7824 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs @@ -1,4 +1,5 @@ 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; @@ -336,7 +337,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmAffiliate(SbmUserContext userContext, SysId id, Sbm.AffiliateType affiliateType) : base(userContext, id) + protected SbmAffiliate(ISbmUserContext userContext, SysId id, Sbm.AffiliateType affiliateType) : base(userContext, id) { base.SetData(data); AffiliateType = affiliateType; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAsset.cs b/SaBusMgrStandardBase/Base/Bus/SbmAsset.cs index bc9bbf9..9ecb124 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAsset.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAsset.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -375,7 +376,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmAsset(SbmUserContext userContext, SysId id, SysId assetCatId) : base(userContext, id) + protected SbmAsset(ISbmUserContext userContext, SysId id, SysId assetCatId) : base(userContext, id) { base.SetData(data); Id = id; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAssetCategory.cs b/SaBusMgrStandardBase/Base/Bus/SbmAssetCategory.cs index 9b521c4..b227a22 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAssetCategory.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAssetCategory.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -214,7 +215,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus private readonly Data data = new Data(); //------------------------------------------------------------------- // Construction. - protected SbmAssetCategory(SbmUserContext userContext, SysId id) : base(userContext, id) + protected SbmAssetCategory(ISbmUserContext userContext, SysId id) : base(userContext, id) { base.SetData(data); Status = DefaultStatus; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAssetProcess.cs b/SaBusMgrStandardBase/Base/Bus/SbmAssetProcess.cs index b3dc2e0..5a2170b 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAssetProcess.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAssetProcess.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -120,7 +121,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus private readonly Data data = new Data(); //------------------------------------------------------------------- // Construction. - protected SbmAssetProcess(SbmUserContext userContext, SysId id, SysId assetId, SysId processId) : base(userContext, id) + protected SbmAssetProcess(ISbmUserContext userContext, SysId id, SysId assetId, SysId processId) : base(userContext, id) { base.SetData(data); Id = id; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAssociation.cs b/SaBusMgrStandardBase/Base/Bus/SbmAssociation.cs index 9cfb5c6..c285282 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAssociation.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAssociation.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -503,7 +504,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmAssociation(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) : base(userContext, id) + protected SbmAssociation(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs b/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs index 6e7f4c9..e0713a8 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; @@ -19,6 +20,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus Pos, Id, // Commodity. + Type, + Type_Code, Type_Desc, Code, DescBrief, @@ -1082,7 +1085,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmCommodity(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) : base(userContext, id) + protected SbmCommodity(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; @@ -1100,7 +1103,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus SaStatus.Discontinued, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } - public static List CommodityStatuses { get { return new List(commodityStatuses); } } + public static List ValidStatuses { get { return new List(commodityStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { switch (status) @@ -1803,6 +1806,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus // Commodity Ids. public List IncludedIds { get; } = new List(); public List ExcludedIds { get; } = new List(); + /// Organisation - if not available via Session Config. ie. must be populated for Web/Console sessions. + public SysId AffiliateIdOrganisation {get; set; } // Commodity. public Sbm.CommodityType CommodityType { get; set; } public bool StockItemsOnly { get; set; } = false; @@ -1814,6 +1819,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus public String DrawingNoPartial { get; set; } public String DrawingIssueFull { get; set; } public String DrawingIssuePartial { get; set; } + /// Generic search value - code, descriptions, drawing no etc. + public String Search { get; set; } // Category. public String CatalogRefPartial { get; set; } public List Categories { get; } = new List(); @@ -1870,7 +1877,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus /// Commodity status. public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted; // Utilities. - public List GetDisplayValues(SbmUserContext userContext) + public List GetDisplayValues(ISbmUserContext userContext) { SbmAccountMgr accountMgr = null; List lValue = new List(); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmCommodityCustomer.cs b/SaBusMgrStandardBase/Base/Bus/SbmCommodityCustomer.cs index 9a5600f..3a059b6 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmCommodityCustomer.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmCommodityCustomer.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -124,7 +125,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmCommodityCustomer(SbmUserContext userContext, SysId commodityId, SysId assocIdCustomer) : base(userContext) + protected SbmCommodityCustomer(ISbmUserContext userContext, SysId commodityId, SysId assocIdCustomer) : base(userContext) { base.SetData(data); CommodityId = commodityId; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmCommoditySupplier.cs b/SaBusMgrStandardBase/Base/Bus/SbmCommoditySupplier.cs index ef1f707..017252a 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmCommoditySupplier.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmCommoditySupplier.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -114,7 +115,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmCommoditySupplier(SbmUserContext userContext, SysId commodityId, SysId assocIdSupplier) : base(userContext) + protected SbmCommoditySupplier(ISbmUserContext userContext, SysId commodityId, SysId assocIdSupplier) : base(userContext) { base.SetData(data); CommodityId = commodityId; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmConstituent.cs b/SaBusMgrStandardBase/Base/Bus/SbmConstituent.cs index 9b7876c..07458f2 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmConstituent.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmConstituent.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -393,7 +394,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmConstituent(SbmUserContext userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType) : base(userContext) + protected SbmConstituent(ISbmUserContext userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType) : base(userContext) { base.SetData(data); Id = id; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmContainer.cs b/SaBusMgrStandardBase/Base/Bus/SbmContainer.cs index 669670d..13508c8 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmContainer.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmContainer.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -154,7 +155,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmContainer(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType) : base(userContext, id) + protected SbmContainer(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmContainerItem.cs b/SaBusMgrStandardBase/Base/Bus/SbmContainerItem.cs index 3132483..bc758c0 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmContainerItem.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmContainerItem.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -157,7 +158,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmContainerItem(SbmUserContext userContext, SysId containerId, Sbm.ItemType itemType, SysId itemId) : base(userContext) + protected SbmContainerItem(ISbmUserContext userContext, SysId containerId, Sbm.ItemType itemType, SysId itemId) : base(userContext) { base.SetData(data); ContainerId = containerId; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmCostEstimate.cs b/SaBusMgrStandardBase/Base/Bus/SbmCostEstimate.cs index facb428..7bcf75a 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmCostEstimate.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmCostEstimate.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; @@ -133,13 +134,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - public SbmCostEstimate(SbmUserContext userContext, Sbm.CostEstimateCategory costEstimateCategory) : base(userContext) + public SbmCostEstimate(ISbmUserContext userContext, Sbm.CostEstimateCategory costEstimateCategory) : base(userContext) { CostEstimateCategory = costEstimateCategory; Status = DefaultStatus; } // Conversion from ItemLink. - public SbmCostEstimate(SbmUserContext userContext, String archive) : base(userContext) + public SbmCostEstimate(ISbmUserContext 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 +443,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus } //------------------------------------------------------------------- - public static void SetCommodityCosts(this List values, SbmUserContext userContext, SbmCommodity commodity, decimal quantity) + public static void SetCommodityCosts(this List values, ISbmUserContext userContext, SbmCommodity commodity, decimal quantity) { // Retrieve costs from commodity and remove unwanted costs (for other quantities). List costEstimatesCommodity = commodity.GetCostEstimates(); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmHierarchyItem.cs b/SaBusMgrStandardBase/Base/Bus/SbmHierarchyItem.cs index 826b03a..7258178 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmHierarchyItem.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmHierarchyItem.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; namespace Sarand.BusinessMgr.Net.Standard.Base.Bus @@ -8,18 +9,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus { //------------------------------------------------------------------- // Construction. - protected SbmHierarchyItem(SbmUserContext userContext) : base() + protected SbmHierarchyItem(ISbmUserContext userContext) : base() { UserContext = userContext; } - protected SbmHierarchyItem(SbmUserContext userContext, SysId id) : base(id) + protected SbmHierarchyItem(ISbmUserContext userContext, SysId id) : base(id) { UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } //------------------------------------------------------------------- } diff --git a/SaBusMgrStandardBase/Base/Bus/SbmItemBatch.cs b/SaBusMgrStandardBase/Base/Bus/SbmItemBatch.cs index a191f50..748b409 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmItemBatch.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmItemBatch.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -116,7 +117,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmItemBatch(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ItemBatchType itemBatchType, String refs) : base(userContext, id) + protected SbmItemBatch(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ItemBatchType itemBatchType, String refs) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmItemLink.cs b/SaBusMgrStandardBase/Base/Bus/SbmItemLink.cs index 30908df..a5de065 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmItemLink.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmItemLink.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -151,7 +152,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmItemLink(SbmUserContext userContext, SysId id, Sbm.ItemLinkType itemLinkType, Sbm.ItemType itemTypeFrom, SysId itemIdFrom, Sbm.ItemType itemTypeTo, SysId itemIdTo) : base(userContext, id) + protected SbmItemLink(ISbmUserContext userContext, SysId id, Sbm.ItemLinkType itemLinkType, Sbm.ItemType itemTypeFrom, SysId itemIdFrom, Sbm.ItemType itemTypeTo, SysId itemIdTo) : base(userContext, id) { base.SetData(data); ItemLinkType = itemLinkType; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmItemPrice.cs b/SaBusMgrStandardBase/Base/Bus/SbmItemPrice.cs index 38bf6fd..61efb9c 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmItemPrice.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmItemPrice.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; @@ -91,12 +92,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - public SbmItemPrice(SbmUserContext userContext) : base(userContext) + public SbmItemPrice(ISbmUserContext userContext) : base(userContext) { Status = DefaultStatus; } // Conversion from ItemLink. - public SbmItemPrice(SbmUserContext userContext, String archive) : base(userContext) + public SbmItemPrice(ISbmUserContext userContext, String archive) : base(userContext) { String[] data = archive.Split(new String[] { delimArchive }, StringSplitOptions.None); type = (data.Length > 1 ? data[1] : ""); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmItemProcess.cs b/SaBusMgrStandardBase/Base/Bus/SbmItemProcess.cs index feb6836..307814c 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmItemProcess.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmItemProcess.cs @@ -1,4 +1,5 @@ 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; @@ -183,7 +184,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmItemProcess(SbmUserContext userContext, Sbm.ItemType itemType, SysId itemId, SysId processId) : base(userContext) + protected SbmItemProcess(ISbmUserContext userContext, Sbm.ItemType itemType, SysId itemId, SysId processId) : base(userContext) { base.SetData(data); ItemType = itemType; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmLocation.cs b/SaBusMgrStandardBase/Base/Bus/SbmLocation.cs index 7e0e11c..1a8cbc0 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmLocation.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmLocation.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -111,7 +112,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmLocation(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.LocationCategory locationCategory) : base(userContext, id) + protected SbmLocation(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.LocationCategory locationCategory) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmMovement.cs b/SaBusMgrStandardBase/Base/Bus/SbmMovement.cs index 7eb4594..b18d457 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmMovement.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmMovement.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -170,7 +171,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus public static readonly Byte Flag_DiaryEntry = 0x01; //------------------------------------------------------------------- // Construction. - protected SbmMovement(SbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType) : base(userContext, id) + protected SbmMovement(ISbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType) : base(userContext, id) { base.SetData(data); ItemType = itemType; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmPortfolioItem.cs b/SaBusMgrStandardBase/Base/Bus/SbmPortfolioItem.cs index 563c65c..96669e2 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmPortfolioItem.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmPortfolioItem.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -178,7 +179,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmPortfolioItem(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType) : base(userContext, id) + protected SbmPortfolioItem(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmPrice.cs b/SaBusMgrStandardBase/Base/Bus/SbmPrice.cs index 117ccf7..4feb448 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmPrice.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmPrice.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -161,7 +162,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmPrice(SbmUserContext userContext, SysId priceSetId, SysId commodityId, Sbm.PriceType priceType) : base(userContext) + protected SbmPrice(ISbmUserContext userContext, SysId priceSetId, SysId commodityId, Sbm.PriceType priceType) : base(userContext) { base.SetData(data); PriceSetId = priceSetId; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmPriceSet.cs b/SaBusMgrStandardBase/Base/Bus/SbmPriceSet.cs index 95d4586..c20d593 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmPriceSet.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmPriceSet.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -119,7 +120,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmPriceSet(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, String reference, Sbm.PriceType priceType) : base(userContext, id) + protected SbmPriceSet(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, String reference, Sbm.PriceType priceType) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmProcess.cs b/SaBusMgrStandardBase/Base/Bus/SbmProcess.cs index 08cccaf..30dd6b6 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmProcess.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmProcess.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -127,7 +128,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmProcess(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ProcessCategory processCategory) : base(userContext, id) + protected SbmProcess(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ProcessCategory processCategory) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmRequirement.cs b/SaBusMgrStandardBase/Base/Bus/SbmRequirement.cs index 3250742..0caa53b 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmRequirement.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmRequirement.cs @@ -1,4 +1,5 @@ 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; @@ -701,7 +702,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmRequirement(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId associationId, SysId transactionId, Sbm.RequirementType requirementType) : base(userContext, id) + protected SbmRequirement(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId associationId, SysId transactionId, Sbm.RequirementType requirementType) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmRequirementCosts.cs b/SaBusMgrStandardBase/Base/Bus/SbmRequirementCosts.cs index ba40f4f..e97d30b 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmRequirementCosts.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmRequirementCosts.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; @@ -139,14 +140,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - public SbmRequirementCosts(SbmUserContext userContext) + public SbmRequirementCosts(ISbmUserContext userContext) { UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } //------------------------------------------------------------------- // Calculation. diff --git a/SaBusMgrStandardBase/Base/Bus/SbmStockLevel.cs b/SaBusMgrStandardBase/Base/Bus/SbmStockLevel.cs index 8fa2104..7a17ca4 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmStockLevel.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmStockLevel.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -154,7 +155,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmStockLevel(SbmUserContext userContext, SysId id, SysId idCommodity, SysId idLocation, Sbm.StockLevelType type, Sbm.StockLevelSource source) : base(userContext, id) + protected SbmStockLevel(ISbmUserContext userContext, SysId id, SysId idCommodity, SysId idLocation, Sbm.StockLevelType type, Sbm.StockLevelSource source) : base(userContext, id) { base.SetData(data); CommodityId = idCommodity; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmSysParam.cs b/SaBusMgrStandardBase/Base/Bus/SbmSysParam.cs index c48c7fa..4287863 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmSysParam.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmSysParam.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -121,7 +122,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmSysParam(SbmUserContext userContext, SysId id, Sbm.SysParamCategory category, String name) : base(userContext, id) + protected SbmSysParam(ISbmUserContext userContext, SysId id, Sbm.SysParamCategory category, String name) : base(userContext, id) { base.SetData(data); Category = category; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmSystemAccount.cs b/SaBusMgrStandardBase/Base/Bus/SbmSystemAccount.cs index 2724ae4..be3b666 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmSystemAccount.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmSystemAccount.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -133,7 +134,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmSystemAccount(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.SystemAccountType systemAccountType, SysId interfaceId, SysId associationId) : base(userContext, id) + protected SbmSystemAccount(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.SystemAccountType systemAccountType, SysId interfaceId, SysId associationId) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmSystemAccountUser.cs b/SaBusMgrStandardBase/Base/Bus/SbmSystemAccountUser.cs index 5cc7f10..997ba8e 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmSystemAccountUser.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmSystemAccountUser.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -89,7 +90,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmSystemAccountUser(SbmUserContext userContext, SysId accountId, SysId userId) : base(userContext) + protected SbmSystemAccountUser(ISbmUserContext userContext, SysId accountId, SysId userId) : base(userContext) { base.SetData(data); AccountId = accountId; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmSystemUser.cs b/SaBusMgrStandardBase/Base/Bus/SbmSystemUser.cs index 7558c87..227030a 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmSystemUser.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmSystemUser.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -114,7 +115,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmSystemUser(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId interfaceId, SysId affiliateId) : base(userContext, id) + protected SbmSystemUser(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId interfaceId, SysId affiliateId) : base(userContext, id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs b/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs index 770416c..240ff29 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; @@ -646,7 +647,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmTransaction(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId associationId, Sbm.TransactionType transactionType) : base(userContext, id) + protected SbmTransaction(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, SysId associationId, Sbm.TransactionType transactionType) : base(userContext, id) { base.SetData(data); Id = id; @@ -788,7 +789,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Status Categories. - public static List GetTransactionStatusCats(SbmUserContext userContext, Sbm.TransactionType transactionType) + public static List GetTransactionStatusCats(ISbmUserContext userContext, Sbm.TransactionType transactionType) { List statusCats = new List(); List statusCatsFull = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.TransactionStatusCat); @@ -849,7 +850,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus { return GetTaxEffectiveDate(UserContext, TransactionType, Status, Raised, InProgress, Closed); } - public static DateTime GetTaxEffectiveDate(SbmUserContext userContext, Sbm.TransactionType transactionType, SaStatus status, DateTime raised, DateTime inProgress, DateTime closed) + public static DateTime GetTaxEffectiveDate(ISbmUserContext 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); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmTransactionPayment.cs b/SaBusMgrStandardBase/Base/Bus/SbmTransactionPayment.cs index 8c3a246..b2d39ad 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmTransactionPayment.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmTransactionPayment.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; @@ -89,12 +90,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - public SbmTransactionPayment(SbmUserContext userContext) : base(userContext) + public SbmTransactionPayment(ISbmUserContext userContext) : base(userContext) { Status = DefaultStatus; } // Conversion from ItemLink. - public SbmTransactionPayment(SbmUserContext userContext, String archive) : base(userContext) + public SbmTransactionPayment(ISbmUserContext userContext, String archive) : base(userContext) { String[] data = archive.Split(new String[] { delimArchive }, StringSplitOptions.None); type = (data.Length > 1 ? data[1] : ""); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmVehicle.cs b/SaBusMgrStandardBase/Base/Bus/SbmVehicle.cs index 3aabfc4..920ba00 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmVehicle.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmVehicle.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -331,7 +332,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmVehicle(SbmUserContext userContext, SysId id) : base(userContext, id) + protected SbmVehicle(ISbmUserContext userContext, SysId id) : base(userContext, id) { base.SetData(data); //Database = database; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmVehicleClass.cs b/SaBusMgrStandardBase/Base/Bus/SbmVehicleClass.cs index 5c360b1..c9c75f1 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmVehicleClass.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmVehicleClass.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -234,7 +235,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus public static readonly Byte Flag_DescBriefFixed = 0x01; //------------------------------------------------------------------- // Construction. - protected SbmVehicleClass(SbmUserContext userContext, SysId id) : base(userContext, id) + protected SbmVehicleClass(ISbmUserContext userContext, SysId id) : base(userContext, id) { base.SetData(data); Status = DefaultStatus; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmVehicleEvent.cs b/SaBusMgrStandardBase/Base/Bus/SbmVehicleEvent.cs index bf04450..fd16893 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmVehicleEvent.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmVehicleEvent.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -183,7 +184,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmVehicleEvent(SbmUserContext userContext, SysId vehicleId, Sbm.VehicleEventType vehicleEventType) : base(userContext, vehicleId) + protected SbmVehicleEvent(ISbmUserContext userContext, SysId vehicleId, Sbm.VehicleEventType vehicleEventType) : base(userContext, vehicleId) { base.SetData(data); VehicleId = vehicleId; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmVehicleFeature.cs b/SaBusMgrStandardBase/Base/Bus/SbmVehicleFeature.cs index cd1db88..89330f0 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmVehicleFeature.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmVehicleFeature.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -160,7 +161,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus //------------------------------------------------------------------- // Construction. - protected SbmVehicleFeature(SbmUserContext userContext, SysId vehicleId, Sbm.VehicleFeatureSource vehicleFeatureSource, Sbm.VehicleFeatureType vehicleFeatureType) : base(userContext) + protected SbmVehicleFeature(ISbmUserContext userContext, SysId vehicleId, Sbm.VehicleFeatureSource vehicleFeatureSource, Sbm.VehicleFeatureType vehicleFeatureType) : base(userContext) { base.SetData(data); VehicleId = vehicleId; diff --git a/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs b/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs index 2ccc02b..626de37 100644 --- a/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs +++ b/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Helpers; using Sarand.Net.Standard.Base.Email; using System; @@ -42,7 +43,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles /// Replace dynamic tags in email message body. /// /// - public void ReplaceDynamicEmailBodyTags(SaEmailData emailData, SbmSessionData sessionData) + public void ReplaceDynamicEmailBodyTags(SaEmailData emailData, ISbmUserContext userContext) { // Replace core tags, eg. main stylesheet. SaEmailConsole.ReplaceDynamicEmailTags(emailData); @@ -70,7 +71,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles } // Session data is optional. - if (sessionData != null) + if (userContext != null) { } } diff --git a/SaBusMgrStandardBase/Base/Core/ISbmSecurityProfile.cs b/SaBusMgrStandardBase/Base/Core/ISbmSecurityProfile.cs new file mode 100644 index 0000000..e4444a7 --- /dev/null +++ b/SaBusMgrStandardBase/Base/Core/ISbmSecurityProfile.cs @@ -0,0 +1,48 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Security; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Standard.Base.Core +{ + //======================================================================= + public interface ISbmSecurityProfile + { + //------------------------------------------------------------------- + // User properties. + SysId UserId { get; } + String UserDisplayName { get; } + String UserLocation { get; } + DateTime UserLastLogin { get; } + + //------------------------------------------------------------------- + // Security - Contacts. + bool UserCanCreateContacts { get; } + bool UserCanUpdateContacts { get; } + + // Security - Financials. + bool UserCanViewFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any); + bool UserCanUpdateFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any); + bool UserCanAccessFinancialViewOfType(Sbm.FinancialType financialType = Sbm.FinancialType.Any); + bool UserCanAccessFinancialUpdateOfType(Sbm.FinancialType financialType = Sbm.FinancialType.Any); + + // Security - Transactions. + bool UserCanAccessTransactionsOfType(Sbm.TransactionType transactionType); + + // Security Item types. + bool ItemTypeIsAllowed(Sbm.ItemType itemType); + bool UserCanCreateItemType(Sbm.ItemType itemType); + bool UserCanUpdateItemType(Sbm.ItemType itemType); + bool UserCanRemoveItemType(Sbm.ItemType itemType); + + //------------------------------------------------------------------- + /// Refresh profile. + void RefreshProfile(SbmConfigConsole configConsole, SaSecurityConsole securityConsole, SysId userId, List securityRights); + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/Core/ISbmUserContext.cs b/SaBusMgrStandardBase/Base/Core/ISbmUserContext.cs new file mode 100644 index 0000000..ad92140 --- /dev/null +++ b/SaBusMgrStandardBase/Base/Core/ISbmUserContext.cs @@ -0,0 +1,88 @@ +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 + { + //------------------------------------------------------------------- + /// Session Context - Identifies database connections etc. + SbmSessionContext SessionContext { get; } + + //------------------------------------------------------------------- + /// User data - account details. + public interface IUserData + { + /// User Security Item Id. + SysId SecurityItemId { get; } + /// User Affiliate Id. + SysId AffiliateId { get; } + /// User first name. + String FirstName { get; } + /// User last name. + String LastName { get; } + /// User display name. + String DisplayName { get; } + /// User email address. + String EmailAddress { get; } + /// User managed organisations - Affiliate Id and display name. + List SupervisedOrganisations { get; } + } + + /// Current user account details. + IUserData User { get; } + bool ValidUser { get; } + + /// Database upfate info - user session specific properties for database inserts/updates. + DbUpdateInfo DbUpdateInfo { get; } + + //------------------------------------------------------------------- + /// Security profile - what the user is allowed to do based on security roles and groups. + ISbmSecurityProfile SecurityProfile { get; } + + //------------------------------------------------------------------- + /// User data - logged in account details. + public interface IOrganisationData + { + /// Organisation Affiliate Id. + SysId AffiliateId { get; } + /// Organisation Affiliate Type. + Sbm.AffiliateType AffiliateType { get; } + /// Organisation display name. + String DisplayName { get; } + /// Organisation Interface context - to qualify interfaces belonging to the organisation. + public String InterfaceContext { get; } + /// Organisation 'Internal' Association Id. + public SysId AssociationId { get; } + } + + /// Current selected organisation. + 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); + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr.cs index 2d6fe00..fdb8c61 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core; using System.Collections.Generic; @@ -34,7 +35,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmAccountMgr(SbmUserContext userContext) : + protected SbmAccountMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Affiliate.cs b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Affiliate.cs index 73f5ff7..a9b006e 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Affiliate.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Affiliate.cs @@ -20,12 +20,18 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr public abstract String GetAffiliateName(SysId affiliateId); public abstract String GetAssociationOwnerName(SysId associationIdOwner); public abstract String GetAssociationTargetName(SysId associationIdTarget); + public static String GetInterfaceContext(SysId affiliateIdOrganisation) + { + if (SysId.IsValid(affiliateIdOrganisation)) + return "ORG" + StringUtil.PadLeft(SysId.ToString(affiliateIdOrganisation), 5, '0'); + return ""; + } - //------------------------------------------------------------------- - // Retrieve individual affiliates. - //------------------------------------------------------------------- - // Affiliate exists. - public bool AffiliateExistsById(SysId affiliateId) + //------------------------------------------------------------------- + // Retrieve individual affiliates. + //------------------------------------------------------------------- + // Affiliate exists. + public bool AffiliateExistsById(SysId affiliateId) { ClearErrorState(); if (!SysId.IsValid(affiliateId)) return false; @@ -361,7 +367,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr prmAffiliate.AffiliateIdAssocTarget = affiliateIdUser; prmAffiliate.TargetSupervised = SbmAffiliate.Params.Supervised.Yes; foreach (SbmAffiliate affiliate in GetAffiliateList(prmAffiliate)) + { affiliateIdNames.Add(affiliate.Id, affiliate.Name); + affiliate.Dispose(); + } return affiliateIdNames; } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmAssetMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmAssetMgr.cs index 5065193..3c85ecb 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmAssetMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmAssetMgr.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core; using System.Collections.Generic; @@ -12,7 +13,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmAssetMgr(SbmUserContext userContext) : + protected SbmAssetMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr.cs index 757b606..5578dfc 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core; using System; using System.Collections.Generic; @@ -28,7 +29,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmCommodityMgr(SbmUserContext userContext) : + protected SbmCommodityMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr_Commodity.cs b/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr_Commodity.cs index 5ee0ef1..b967b40 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr_Commodity.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr_Commodity.cs @@ -137,7 +137,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { switch (column) { - case SbmCommodity.Column.Type_Desc: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Type, "Type"); + case SbmCommodity.Column.Type: + case SbmCommodity.Column.Type_Code: + case SbmCommodity.Column.Type_Desc: + return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Type, "Type"); case SbmCommodity.Column.Code: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Code, "Code"); case SbmCommodity.Column.DescBrief: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DescBrief, "Brief description"); case SbmCommodity.Column.DescOrder: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DescOrder, "Order description"); @@ -368,7 +371,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Create commodities. - public abstract SbmCommodity CreateCommodity(SysId id, SysId affIdOwner, Sbm.CommodityType commodityType, String code); + public abstract SbmCommodity CreateCommodity(SysId affIdOwner, Sbm.CommodityType commodityType, String code); //------------------------------------------------------------------- // Validate Commodity data. @@ -523,7 +526,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } - if (!SbmCommodity.CommodityStatuses.Contains(data.Status)) + if (!SbmCommodity.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); @@ -566,10 +569,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { //--------------------------------------------------------------- // Commodity TypeDesc. + case SbmCommodity.Column.Type_Code: case SbmCommodity.Column.Type_Desc: { Sbm.CommodityType commodityType = (Sbm.CommodityType)values.GetValue(column.DataName).AsLong(); - value = new DataValue(CommodityTypes.GetDescForType(commodityType, ((int)commodityType).ToString())); + if (column.Id == (int)SbmCommodity.Column.Type_Desc) + value = new DataValue(CommodityTypes.GetDescForType(commodityType, ((int)commodityType).ToString())); + else + value = new DataValue(CommodityTypes.GetCodeForType(commodityType, ((int)commodityType).ToString())); break; } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmDataItemMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmDataItemMgr.cs index eddc8d0..e20c03e 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmDataItemMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmDataItemMgr.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { @@ -23,7 +24,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmDataItemMgr(SbmUserContext userContext) : + protected SbmDataItemMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs index 89e7ac6..cda3f49 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs @@ -1,5 +1,6 @@ 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; @@ -26,11 +27,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr /// Central repository for system codes used by manager. private class SystemCodeCache { - public SystemCodeCache(SbmUserContext userContext) + public SystemCodeCache(ISbmUserContext userContext) { this.userContext = userContext; } - private readonly SbmUserContext userContext; + private readonly ISbmUserContext userContext; private Dictionary> systemCodes = new Dictionary>(); public List GetCodesOfType(Sbm.SystemCode systemCode) { @@ -105,7 +106,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmItemMgr(SbmUserContext userContext) + protected SbmItemMgr(ISbmUserContext userContext) { if (userContext == null) throw new NotSupportedException("SbmItemMgr User context must be supplied"); @@ -168,7 +169,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr protected String StatusDisabled { get; } = SacsSystem.GetStatusCode(SaStatus.Disabled); protected String StatusDeleted { get; } = SacsSystem.GetStatusCode(SaStatus.Deleted); // Session. - protected SbmUserContext UserContext { get; } + protected ISbmUserContext UserContext { get; } protected SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } protected SbmInternals Internals { diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmPriceMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmPriceMgr.cs index ca525f2..6cd50ac 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmPriceMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmPriceMgr.cs @@ -1,5 +1,6 @@ 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.Core; using System; using System.Collections.Generic; @@ -18,7 +19,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmPriceMgr(SbmUserContext userContext) : + protected SbmPriceMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmProcessMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmProcessMgr.cs index b09b492..b44236a 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmProcessMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmProcessMgr.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core; using System.Collections.Generic; @@ -18,7 +19,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmProcessMgr(SbmUserContext userContext) : + protected SbmProcessMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmStockMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmStockMgr.cs index 702a84d..eaa4d09 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmStockMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmStockMgr.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core; using System.Collections.Generic; @@ -25,7 +26,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmStockMgr(SbmUserContext userContext) : + protected SbmStockMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr.cs index 5d35eeb..c5a8015 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr.cs @@ -1,5 +1,6 @@ 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.Bus; using Sarand.Net.Standard.Base.Core; using System; @@ -31,7 +32,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Construction. - protected SbmTransactionMgr(SbmUserContext userContext) : + protected SbmTransactionMgr(ISbmUserContext userContext) : base(userContext) { } diff --git a/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs b/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs index 859cc7c..f133efe 100644 --- a/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs +++ b/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Dbas; @@ -13,11 +14,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Procs // Configuration. public new class Config : SaReport_Base.Config { - protected Config(SbmUserContext userContext) + protected Config(ISbmUserContext userContext) { UserContext = userContext; } - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } } //------------------------------------------------------------------- @@ -42,7 +43,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Procs //------------------------------------------------------------------- // Properties. - protected SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(config.UserContext); return internals; } } + protected SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(config.UserContext); return internals; } } protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } } protected SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } } protected SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } } diff --git a/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs b/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs index 342b7e4..107f4ad 100644 --- a/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs +++ b/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.UpdateLog; using Sarand.Net.Standard.Base.Utils; @@ -35,7 +36,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.UpdateLog //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get { return config.Internals.UserContext; } } + public ISbmUserContext UserContext { get { return config.Internals.UserContext; } } //------------------------------------------------------------------- // Internal utilities. diff --git a/SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs b/SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs index d330dd0..ac06428 100644 --- a/SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Utils; @@ -45,35 +46,35 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.App //------------------------------------------------------------------- // D a t a M a n a g e r s //------------------------------------------------------------------- - public override SbmAccountMgr CreateAccountMgr(SbmUserContext userContext) + public override SbmAccountMgr CreateAccountMgr(ISbmUserContext userContext) { return new SbmAccountMgr_Dbas(userContext); } - public override SbmAssetMgr CreateAssetMgr(SbmUserContext userContext) + public override SbmAssetMgr CreateAssetMgr(ISbmUserContext userContext) { return new SbmAssetMgr_Dbas(userContext); } - public override SbmCommodityMgr CreateCommodityMgr(SbmUserContext userContext) + public override SbmCommodityMgr CreateCommodityMgr(ISbmUserContext userContext) { return new SbmCommodityMgr_Dbas(userContext); } - public override SbmPriceMgr CreatePriceMgr(SbmUserContext userContext) + public override SbmPriceMgr CreatePriceMgr(ISbmUserContext userContext) { return new SbmPriceMgr_Dbas(userContext); } - public override SbmDataItemMgr CreateDataItemMgr(SbmUserContext userContext) + public override SbmDataItemMgr CreateDataItemMgr(ISbmUserContext userContext) { return new SbmDataItemMgr_Dbas(userContext); } - public override SbmProcessMgr CreateProcessMgr(SbmUserContext userContext) + public override SbmProcessMgr CreateProcessMgr(ISbmUserContext userContext) { return new SbmProcessMgr_Dbas(userContext); } - public override SbmStockMgr CreateStockMgr(SbmUserContext userContext) + public override SbmStockMgr CreateStockMgr(ISbmUserContext userContext) { return new SbmStockMgr_Dbas(userContext); } - public override SbmTransactionMgr CreateTransactionMgr(SbmUserContext userContext) + public override SbmTransactionMgr CreateTransactionMgr(ISbmUserContext userContext) { return new SbmTransactionMgr_Dbas(userContext); } diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmCodeTypeConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmCodeTypeConsole_Dbas.cs index 92757d7..e50664d 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmCodeTypeConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmCodeTypeConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Dbas.Base; using Sarand.Net.Standard.Dbas.CodeTypes; @@ -9,13 +10,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Construction. - protected SbmCodeTypeConsole_Dbas(SacsDatabase database) : base(database) + protected SbmCodeTypeConsole_Dbas(ISbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { + UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; set; } + public ISbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmDiaryConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmDiaryConsole_Dbas.cs index 8a0cc5c..735f066 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmDiaryConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmDiaryConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Dbas.Base; using Sarand.Net.Standard.Dbas.Diary; @@ -9,13 +10,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Construction. - protected SbmDiaryConsole_Dbas(SacsDatabase database) : base(database) + protected SbmDiaryConsole_Dbas(ISbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { + UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; set; } + public ISbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs index 4a3a366..a953bb8 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Interfaces; @@ -25,7 +26,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Construction. - protected SbmInterfaceConsole_Dbas(SbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext) as SacsDatabase) + protected SbmInterfaceConsole_Dbas(ISbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { UserContext = userContext; dataItemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); @@ -44,7 +45,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public override short InterfaceDataType { get { return (short)Sbm.ItemType.Interface; } } // Consoles. diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDataConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDataConsole_Dbas.cs index 86bc354..58d94da 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDataConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDataConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Dbas.Base; using Sarand.Net.Standard.Dbas.ItemData; @@ -9,13 +10,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Construction. - protected SbmItemDataConsole_Dbas(SacsDatabase database) : base(database) + protected SbmItemDataConsole_Dbas(ISbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { + UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; set; } + public ISbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDocConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDocConsole_Dbas.cs index 876029b..56613fa 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDocConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemDocConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Dbas.Base; using Sarand.Net.Standard.Dbas.ItemDocs; @@ -9,13 +10,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Construction. - protected SbmItemDocConsole_Dbas(SacsDatabase database) : base(database) + protected SbmItemDocConsole_Dbas(ISbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { + UserContext = userContext; } //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; set; } + public ISbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs index 58958f9..9f39797 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Interfaces; @@ -21,8 +22,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Construction. - protected SbmItemOptionConsole_Dbas(SacsDatabase database) : base(database) + protected SbmItemOptionConsole_Dbas(ISbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { + UserContext = userContext; } protected override void Dispose(bool disposing) { @@ -36,7 +38,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; set; } + public ISbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public override short ItemOptionDataType { get { return (short)Sbm.ItemType.ItemOption; } } private SbmAccountMgr AccountMgr { get { if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(UserContext); return accountMgr; } } diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs index 7ab3fbc..edfb9f6 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.UpdateLog; using Sarand.Net.Standard.Dbas.Base; using Sarand.Net.Standard.Dbas.ReferenceData; @@ -14,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Construction. - protected SbmReferenceDataConsole_Dbas(SbmUserContext userContext, SacsDatabase database) : - base(database) + protected SbmReferenceDataConsole_Dbas(ISbmUserContext userContext) : + base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { UserContext = userContext; } @@ -31,7 +32,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Properties. public SbmSessionContext SessionContext { get; } - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } // Item types. public override short LanguageItemType { get { return (short)Sbm.ItemDataType.Unknown; } } public override short RegionItemType { get { return (short)Sbm.ItemDataType.Region; } } diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs index c5c5d8b..690117d 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs @@ -1,5 +1,6 @@ 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.Core; @@ -23,7 +24,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Construction. - protected SbmSecurityConsole_Dbas(SbmUserContext userContext, ISacsDatabase database) : base(database) + protected SbmSecurityConsole_Dbas(ISbmUserContext userContext) : + base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { UserContext = userContext; } @@ -39,7 +41,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public override short SecurityItemDataType { get { return (short)Sbm.ItemType.SecurityItem; } } public override short SecurityLinkDataType { get { return (short)Sbm.ItemType.SecurityLink; } } diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs index 5e6c142..d28349a 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Security; @@ -17,7 +18,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Construction. - protected SbmUpdateLogConsole_Dbas(SbmUserContext userContext, ISacsDatabase database) : base(database) + protected SbmUpdateLogConsole_Dbas(ISbmUserContext userContext) : + base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { UserContext = userContext; } @@ -32,7 +34,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get; } + public ISbmUserContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } // Consoles. public SaSecurityConsole SecurityConsole diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs index 6cfc9f7..859a7fb 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs @@ -813,7 +813,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetAssociationColDfn(columnDfn, "Amount trans max", 90, SbmDbDfn.ColumnIdx.Association_AmountTransMax, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmAssociation.Column.AnnualSalesTarget: - if (UserContext.SecurityProfile.Financial.CanViewFinancials) + if (UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales)) { SetAssociationColDfn(columnDfn, "Annual sales target", 90, SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = 0; @@ -1241,21 +1241,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr columnDfn.DataName = colAssociation_LastSaleRaised; break; case SbmAssociation.Column.Trans_SalesValue_Open: // Net open sales order value. - if (UserContext.SecurityProfile.Financial.CanViewFinancials) + if (UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales)) { SetAssociationColDfn(columnDfn, "Open sales", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.DataName = colAssociation_SalesValueOpen; } break; case SbmAssociation.Column.Trans_SalesValue_Cytd: // Net sales order value closed this calendar year. - if (UserContext.SecurityProfile.Financial.CanViewFinancials) + if (UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales)) { SetAssociationColDfn(columnDfn, "Sales CYTD", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.DataName = colAssociation_SalesValueCytd; } break; case SbmAssociation.Column.Trans_SalesValue_Lcy: // Net sales order value closed last calendar year. - if (UserContext.SecurityProfile.Financial.CanViewFinancials) + if (UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales)) { SetAssociationColDfn(columnDfn, "Sales LCY", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.DataName = colAssociation_SalesValueLcy; @@ -1839,7 +1839,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { // Retrieve the database. ClearErrorState(); - bool CanManageFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool CanManageFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); //--------------------------------------------------------------------- // Construct Query. diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs index ac225d6..469c8bb 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -15,7 +16,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmAccountMgr_Dbas(SbmUserContext userContext) : + public SbmAccountMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs index 289ff29..e3d901f 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -19,7 +20,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmAssetMgr_Dbas(SbmUserContext userContext) : + public SbmAssetMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs index da4d307..94a8d4a 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs @@ -593,9 +593,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Create Commodity. - public override SbmCommodity CreateCommodity(SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) + public override SbmCommodity CreateCommodity(SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) { - return new SbmCommodity_Dbas(Internals, id, affiliateIdOwner, commodityType, code, 0); + return new SbmCommodity_Dbas(Internals, null, affiliateIdOwner, commodityType, code, 0); } private SbmCommodity_Dbas CreateCommodity(Commodity_Db dbCommodity) { @@ -1068,7 +1068,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Getting Commodity column definition. public override ColumnDfn GetCommodityColumnDfn(SbmCommodity.Column columnId, string caption = "", int width = 0) { - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); + bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply); ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) @@ -1084,9 +1085,15 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr columnDfn.ReadOnly = true; break; // Commodity Properties. - case SbmCommodity.Column.Type_Desc: + case SbmCommodity.Column.Type: + SetCommodityColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Commodity_Type, ColumnAlignment.Center, DataValue.DataType.Long); + break; + case SbmCommodity.Column.Type_Code: SetCommodityColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Commodity_Type, ColumnAlignment.Center); break; + case SbmCommodity.Column.Type_Desc: + SetCommodityColDfn(columnDfn, "Type", 90, SbmDbDfn.ColumnIdx.Commodity_Type, ColumnAlignment.Center); + break; case SbmCommodity.Column.Code: SetCommodityColDfn(columnDfn, "Code", 120, SbmDbDfn.ColumnIdx.Commodity_Code); if (ConfigConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityDoubleColumnWidth)) @@ -1318,7 +1325,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetCommodityColDfn(columnDfn, "Part number", 90, SbmDbDfn.ColumnIdx.Commodity_SupplierRef, ColumnAlignment.Center); break; case SbmCommodity.Column.CostPrice: - if (canViewFinancials) + if (canViewSupplyFinancials) { String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price"); SetCommodityColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.Double); @@ -1327,7 +1334,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.CostPrice_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials) { String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price"); SetCommodityColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); @@ -1338,7 +1345,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetCommodityColDfn(columnDfn, "Place of origin", 90, SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin); break; case SbmCommodity.Column.MaterialCost: - if (canViewFinancials) + if (canViewSupplyFinancials) { String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost"); SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.Double, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial); @@ -1347,7 +1354,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.MaterialCost_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials) { String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost"); SetCommodityColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.String, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial); @@ -1421,7 +1428,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetCommodityColDfn(columnDfn, "Customer", 100, SbmDbDfn.ColumnIdx.Affiliate_Name); break; case SbmCommodity.Column.SalesPrice: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Sales price", 80, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; @@ -1429,14 +1436,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.SalesPrice_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Sales price", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String); columnDfn.ShowZeroValues = false; } break; case SbmCommodity.Column.RetailPrice: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "RRP", 80, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; @@ -1444,14 +1451,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.RetailPrice_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "RRP", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String); columnDfn.ShowZeroValues = false; } break; case SbmCommodity.Column.RetailPricePlanned: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Planned RRP", 80, SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; @@ -1459,14 +1466,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.RetailPricePlanned_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Planned RRP", 90, SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, ColumnAlignment.Right, DataValue.DataType.String); columnDfn.ShowZeroValues = false; } break; case SbmCommodity.Column.GrossPrice: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Gross price", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; @@ -1474,7 +1481,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.GrossPrice_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Gross price", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String); columnDfn.ShowZeroValues = false; @@ -1484,7 +1491,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetCommodityColDfn(columnDfn, "Unit of Sale", 100, SbmDbDfn.ColumnIdx.UnitMeasure_Single, ColumnAlignment.Center); break; case SbmCommodity.Column.CarriageCostIndicative: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Carriage cost (ind)", 80, SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; @@ -1492,7 +1499,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } break; case SbmCommodity.Column.CarriageCostIndicative_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetCommodityColDfn(columnDfn, "Carriage cost (ind)", 90, SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, ColumnAlignment.Right, DataValue.DataType.String); columnDfn.ShowZeroValues = false; @@ -2267,23 +2274,41 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr String fn = GetType().Name + ".GetCommodityQueryFilter"; List filter = new List(); + //--------------------------------------------------------------- + // Common columns. + String colCommodity_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity); + String colCommodity_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodity); + String colCommodity_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type, aliasCommodity); + String colCommodity_Code = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodity); + String colCommodity_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescBrief, aliasCommodity); + String colCommodity_DescDetail = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescDetail, aliasCommodity); + String colCommodity_SpecSummary = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SpecSummary, aliasCommodity); + String colCommodity_DrawingNo = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingNo, aliasCommodity); + String colCommodity_DrawingIssue = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, aliasCommodity); + //--------------------------------------------------------------- // Commodity Id. String includedIds = prm.IncludedIds.Concat(","); - String colCommodity_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity); if (!includedIds.IsEmpty()) filter.Add(colCommodity_Id + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.Concat(","); if (!excludedIds.IsEmpty()) filter.Add(colCommodity_Id + " NOT IN (" + excludedIds + ")"); //--------------------------------------------------------------- - // Owner. - String colCommodity_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodity); - bool filterByOwner = !prm.IncludedIds.HasValidIds() && !prm.PriceSetIdsIncluded.HasValidIds() && !SysId.IsValid(prm.AssociationIdCustomer) && !SysId.IsValid(prm.AssociationIdCommodityCustomer); - if (filterByOwner) filter.Add(colCommodity_AffIdOwner + "=" + SysId.ToString(AffiliateId_Owner)); + // Organisation. + if (SysId.IsValid(prm.AffiliateIdOrganisation)) + filter.Add(colCommodity_AffIdOwner + "=" + SysId.ToString(prm.AffiliateIdOrganisation)); + else + { + // Must filter by organisation if insufficient alternative filetrs. + if (!prm.IncludedIds.HasValidIds() && !prm.PriceSetIdsIncluded.HasValidIds() && !SysId.IsValid(prm.AssociationIdCustomer) && !SysId.IsValid(prm.AssociationIdCommodityCustomer)) + { + if (!SysId.IsValid(AffiliateId_Owner)) throw new NotSupportedException("Commodity query filter - Organisation Id must be specified"); + filter.Add(colCommodity_AffIdOwner + "=" + SysId.ToString(AffiliateId_Owner)); + } + } //--------------------------------------------------------------- // Type. - String colCommodity_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type, aliasCommodity); if (prm.CommodityType == Sbm.CommodityType.AnyProduct) filter.Add(colCommodity_Type + " In (" + ((int)Sbm.CommodityType.Stock).ToString() + "," + ((int)Sbm.CommodityType.NonStock).ToString() + ")"); else if ((int)prm.CommodityType > 0) @@ -2293,7 +2318,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //--------------------------------------------------------------- // Code. - String colCommodity_Code = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodity); if (!StringUtil.IsEmpty(prm.CodeFull)) filter.Add(colCommodity_Code + "='" + DbQuery.FormatForCondition(prm.CodeFull) + "'"); else if (!StringUtil.IsEmpty(prm.CodePartial)) @@ -2307,7 +2331,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Brief Desc. bool allowEmbeddedTextSearch = true; bool allowFullTextSearch = true; - String colCommodity_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescBrief, aliasCommodity); if (!StringUtil.IsEmpty(prm.DescBriefFull)) filter.Add(colCommodity_DescBrief + "='" + DbQuery.FormatForCondition(prm.DescBriefFull) + "'"); else if (!StringUtil.IsEmpty(prm.DescBriefPartial)) @@ -2327,7 +2350,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //--------------------------------------------------------------- // DrawingNumber. - String colCommodity_DrawingNo = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingNo, aliasCommodity); if (!StringUtil.IsEmpty(prm.DrawingNoFull)) { filter.Add(colCommodity_DrawingNo + "='" + DbQuery.FormatForCondition(prm.DrawingNoFull) + "'"); @@ -2338,12 +2360,31 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr } // DrawingIssue. - String colCommodity_DrawingIssue = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, aliasCommodity); if (!StringUtil.IsEmpty(prm.DrawingIssueFull)) filter.Add(colCommodity_DrawingIssue + "='" + DbQuery.FormatForCondition(prm.DrawingIssueFull) + "'"); else if (!StringUtil.IsEmpty(prm.DrawingIssuePartial)) filter.Add(DbQuery.FormatFn_Left(colCommodity_DrawingIssue, prm.DrawingIssuePartial.Length) + "='" + DbQuery.FormatForCondition(prm.DrawingIssuePartial) + "'"); + //--------------------------------------------------------------- + // Generic search. + if (!StringUtil.IsEmpty(prm.Search)) + { + List searchFilter = new List(); + foreach (String rawSearchValue in prm.Search.Split(new char[] { ' ', ',', ';' })) + { + String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue)); + if (StringUtil.IsEmpty(searchValue)) continue; + List searchValueFilter = new List(); + searchValueFilter.Add(colCommodity_Code + " LIKE '%" + searchValue + "%'"); + searchValueFilter.Add(colCommodity_DescBrief + " LIKE '%" + searchValue + "%'"); + searchValueFilter.Add(colCommodity_DescDetail + " LIKE '%" + searchValue + "%'"); + searchValueFilter.Add(colCommodity_SpecSummary + " LIKE '%" + searchValue + "%'"); + searchValueFilter.Add(colCommodity_DrawingNo + " LIKE '%" + searchValue + "%'"); + searchFilter.Add(searchValueFilter.Concat(" OR ", "(", ")")); + } + filter.AddRange(searchFilter); + } + //--------------------------------------------------------------- // Catalog. String colCommodity_CatalogRef = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CatalogRef, aliasCommodity); @@ -2670,7 +2711,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { ClearErrorState(); PopulateLocationIdLists(); - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply); + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); //--------------------------------------------------------------- // Construct query. @@ -2693,8 +2735,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //--------------------------------------------------------------- // Commodity Properties - add columns as defined in query list. - if (columns.HasId(SbmCommodity.Column.Id)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity)); - if (columns.HasId(SbmCommodity.Column.Type_Desc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type, aliasCommodity)); + if (columns.HasId(SbmCommodity.Column.Id)) + query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity)); + if (columns.HasId(SbmCommodity.Column.Type) || columns.HasId(SbmCommodity.Column.Type_Code) || columns.HasId(SbmCommodity.Column.Type_Desc)) + query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type, aliasCommodity)); if (columns.HasId(SbmCommodity.Column.Code)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodity)); if (columns.HasId(SbmCommodity.Column.DescBrief)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescBrief, aliasCommodity)); if (columns.HasId(SbmCommodity.Column.DescDetail)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescDetail, aliasCommodity)); @@ -2740,18 +2784,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (columns.HasId(SbmCommodity.Column.NominalCodePurchase)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_NominalCodePurchase, aliasCommodity)); //--------------------------------------------------------------- // Currency (to come). - if (canViewFinancials && (columns.HasId(SbmCommodity.Column.CostPrice_Fmt) || - columns.HasId(SbmCommodity.Column.SalesPrice_Fmt) || - columns.HasId(SbmCommodity.Column.RetailPrice_Fmt) || - columns.HasId(SbmCommodity.Column.RetailPricePlanned_Fmt) || - columns.HasId(SbmCommodity.Column.GrossPrice_Fmt) || - columns.HasId(SbmCommodity.Column.CarriageCostIndicative_Fmt))) + if ((canViewSupplyFinancials && (columns.HasId(SbmCommodity.Column.CostPrice_Fmt))) || + (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.SalesPrice_Fmt) || columns.HasId(SbmCommodity.Column.RetailPrice_Fmt) || columns.HasId(SbmCommodity.Column.RetailPricePlanned_Fmt) || columns.HasId(SbmCommodity.Column.GrossPrice_Fmt) || columns.HasId(SbmCommodity.Column.CarriageCostIndicative_Fmt)))) { } //--------------------------------------------------------------- // Purchasing. if (columns.HasId(SbmCommodity.Column.Supplier_Ref)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SupplierRef, aliasCommodity)); - if (canViewFinancials && (columns.HasId(SbmCommodity.Column.CostPrice) || + if (canViewSupplyFinancials && (columns.HasId(SbmCommodity.Column.CostPrice) || columns.HasId(SbmCommodity.Column.CostPrice_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CostPrice, aliasCommodity)); if (columns.HasId(SbmCommodity.Column.PlaceOfOrigin)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin, aliasCommodity)); if (columns.HasId(SbmCommodity.Column.MaterialCost) || columns.HasId(SbmCommodity.Column.MaterialCost_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, aliasCommodity)); @@ -2769,12 +2809,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (columns.HasId(SbmCommodity.Column.QtyOnOrder)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_QtyOnOrder, aliasCommodity)); //--------------------------------------------------------------- // Sales. - if (canViewFinancials && (columns.HasId(SbmCommodity.Column.SalesPrice) || + if (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.SalesPrice) || columns.HasId(SbmCommodity.Column.SalesPrice_Fmt) || columns.HasId(SbmCommodity.Column.GrossPrice) || columns.HasId(SbmCommodity.Column.GrossPrice_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, aliasCommodity)); - if (canViewFinancials && (columns.HasId(SbmCommodity.Column.RetailPrice) || + if (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.RetailPrice) || columns.HasId(SbmCommodity.Column.RetailPrice_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RetailPrice, aliasCommodity)); - if (canViewFinancials && (columns.HasId(SbmCommodity.Column.RetailPricePlanned) || + if (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.RetailPricePlanned) || columns.HasId(SbmCommodity.Column.RetailPricePlanned_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, aliasCommodity)); if (columns.HasId(SbmCommodity.Column.CarriageCostIndicative) || columns.HasId(SbmCommodity.Column.CarriageCostIndicative_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, aliasCommodity)); @@ -2973,7 +3013,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Code, aliasCommodity_TaxCode_Sale), prefixCommodity_TaxCode_Sale + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.TaxCode_Code, false)); query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, aliasCommodity_TaxCode_Sale), prefixCommodity_TaxCode_Sale + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, false)); } - if (canViewFinancials && columns.HasId(SbmCommodity.Column.GrossPrice)) + if (canViewSalesFinancials && columns.HasId(SbmCommodity.Column.GrossPrice)) { // Calculate RRP: SalesPrice + TaxRate% String colCommodity_SalesPrice = "(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, aliasCommodity) + "*(1.0+(" + prefixCommodity_TaxCode_Sale + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, false) + "/100.0)))"; diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs index 6d90aaf..1f3a06f 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -18,7 +19,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmCommodityMgr_Dbas(SbmUserContext userContext) : + public SbmCommodityMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs index 37661c8..fd00180 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -19,7 +20,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmDataItemMgr_Dbas(SbmUserContext userContext) : + public SbmDataItemMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs index 6f30fb1..841db91 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -16,7 +17,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmPriceMgr_Dbas(SbmUserContext userContext) : + public SbmPriceMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs index 4a54540..2fee483 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -20,7 +21,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmProcessMgr_Dbas(SbmUserContext userContext) : + public SbmProcessMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs index 5c6d85e..28b533a 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs @@ -1,4 +1,5 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.Dbas; @@ -19,7 +20,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmStockMgr_Dbas(SbmUserContext userContext) : + public SbmStockMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs index f4d7bc3..506259c 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs @@ -970,7 +970,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //--------------------------------------------------------------------- // Construct build database query. DbQuery query = new DbQuery(db.DbmsType); - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); //--------------------------------------------------------------------- // Sort Column ~ lColSort? @@ -1011,7 +1011,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status)); if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_Notes)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Notes)); - if (canViewFinancials) + if (canViewSalesFinancials) { if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_UnitCost)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_UnitCost)); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs index e0e2551..794aad3 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs @@ -745,7 +745,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override ColumnDfn GetRequirementColumnDfn(SbmRequirement.Column column, string caption = "", int width = 0) { - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply); + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); ColumnDfn columnDfn = new ColumnDfn((int)column, caption, width); switch (column) { @@ -864,47 +865,47 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr columnDfn.NumDecimals = (byte)orderQuantityDecimals; break; case SbmRequirement.Column.AmountUnit: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Unit", 62, SbmDbDfn.ColumnIdx.Requirement_AmountUnit, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; } break; case SbmRequirement.Column.AmountUnit_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Unit", 80, SbmDbDfn.ColumnIdx.Requirement_AmountUnit, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmRequirement.Column.AmountAct: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Estimate", 62, SbmDbDfn.ColumnIdx.Requirement_AmountAct, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; } break; case SbmRequirement.Column.AmountAct_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Estimate", 80, SbmDbDfn.ColumnIdx.Requirement_AmountAct, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmRequirement.Column.AmountUnitNet: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Unit", 62, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; } break; case SbmRequirement.Column.AmountUnitNet_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Unit", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmRequirement.Column.AmountNet: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Net", 60, SbmDbDfn.ColumnIdx.Requirement_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; } break; case SbmRequirement.Column.AmountNet_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Net", 80, SbmDbDfn.ColumnIdx.Requirement_AmountNet, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmRequirement.Column.TaxCodeId: @@ -917,38 +918,38 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetRequirementColDfn(columnDfn, "Tax%", 50, SbmDbDfn.ColumnIdx.Requirement_TaxRate, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmRequirement.Column.AmountTax: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Tax", 60, SbmDbDfn.ColumnIdx.Requirement_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; } break; case SbmRequirement.Column.AmountTax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Tax", 80, SbmDbDfn.ColumnIdx.Requirement_AmountTax, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmRequirement.Column.AmountTot: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Total", 60, SbmDbDfn.ColumnIdx.Requirement_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = CurrencyDecimalsDefault; } break; case SbmRequirement.Column.AmountTot_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Total", 80, SbmDbDfn.ColumnIdx.Requirement_AmountTot, ColumnAlignment.Right, DataValue.DataType.String); break; //----------------------------------------------------------------- // Derived discounts: case SbmRequirement.Column.PercentDiscountBySalesPrice: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Discount % by price", 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = 1; } break; case SbmRequirement.Column.PercentDiscountByRetailPrice: - if (canViewFinancials) + if (canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Discount % by RRP", 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.NumDecimals = 1; @@ -993,40 +994,40 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr break; // Job costing. case SbmRequirement.Column.CostTotal: - if (canViewFinancials) + if (canViewSupplyFinancials) SetRequirementColDfn(columnDfn, "Cost", 80, SbmDbDfn.ColumnIdx.Requirement_CostTotal, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmRequirement.Column.CostTotal_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials) SetRequirementColDfn(columnDfn, "Cost", 90, SbmDbDfn.ColumnIdx.Requirement_CostTotal, ColumnAlignment.Right); break; case SbmRequirement.Column.CostCalculated: - if (canViewFinancials) + if (canViewSupplyFinancials) SetRequirementColDfn(columnDfn, "Cost calcuated", 90, SbmDbDfn.ColumnIdx.Requirement_CostCalculated, ColumnAlignment.Center, DataValue.DataType.Date); break; case SbmRequirement.Column.AmountMargin: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.ShowZeroValues = true; } break; case SbmRequirement.Column.AmountMargin_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.ShowZeroValues = true; } break; case SbmRequirement.Column.PercentMargin: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "% Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.ShowZeroValues = true; } break; case SbmRequirement.Column.PercentMargin_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "% Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.ShowZeroValues = true; @@ -1160,11 +1161,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr break; } case SbmRequirement.Column.Trans_DeliveryAmountNet: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Delivery net.amt", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Delivery net.amt", 100, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_DeliveryTaxCodeId: @@ -1183,19 +1184,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr break; } case SbmRequirement.Column.Trans_DeliveryAmountTax: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Delivery tax.amt", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Delivery tax.amt", 100, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_DeliveryAmountTot: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Delivery tot.amt", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_DeliveryAmountTot_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Delivery tot.amt", 100, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_DeliveryNominalCode: @@ -1225,43 +1226,43 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetRequirementColDfn(columnDfn, "Currency", 80, SbmDbDfn.ColumnIdx.Currency_Symbol, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Currency, prefixRequirement_Currency); break; case SbmRequirement.Column.Trans_AmountEst: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (est)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountEst, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountEst_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (est)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountEst, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountMax: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (max)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountMax, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountMax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (max)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountMax, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountNet: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (net)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountNet_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (net)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountNet, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountTax: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (tax)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountTax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (tax)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountTax, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountTot: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (tot)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_AmountTot_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Trans £ (tot)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountTot, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction); break; case SbmRequirement.Column.Trans_TimeEst: @@ -1314,43 +1315,43 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //----------------------------------------------------------------- // Transaction cost. case SbmRequirement.Column.Trans_CostLabourRateHour: - if (canViewFinancials) + if (canViewSupplyFinancials) SetRequirementColDfn(columnDfn, "Trans labour rate", 80, SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmRequirement.Column.Trans_CostTotal: - if (canViewFinancials) + if (canViewSupplyFinancials) { SetRequirementColDfn(columnDfn, "Trans cost", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.DataName = transCostTotal; } break; case SbmRequirement.Column.Trans_CostTotal_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials) SetRequirementColDfn(columnDfn, "Trans cost", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); break; case SbmRequirement.Column.Trans_AmountMargin: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Trans margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.ShowZeroValues = true; } break; case SbmRequirement.Column.Trans_AmountMargin_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Trans margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.ShowZeroValues = true; } break; case SbmRequirement.Column.Trans_PercentMargin: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Trans % Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.ShowZeroValues = true; } break; case SbmRequirement.Column.Trans_PercentMargin_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetRequirementColDfn(columnDfn, "Trans % Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.ShowZeroValues = true; @@ -1629,11 +1630,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetRequirementColDfn(columnDfn, "Customer product", 90, SbmDbDfn.ColumnIdx.CommodityCustomer_ProductCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer); break; case SbmRequirement.Column.Cmd_Cust_RetailPrice: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Customer retail", 80, SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer); break; case SbmRequirement.Column.Cmd_Cust_RetailPrice_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetRequirementColDfn(columnDfn, "Customer retail", 80, SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer); break; case SbmRequirement.Column.Cmd_Cust_CurrencyIdRetail: @@ -2196,7 +2197,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------ // Construct build database query. DbQuery query = new DbQuery(db.DbmsType); - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply); + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); // Columns required. bool requirementPromotionReq = columns.HasId((int)SbmRequirement.Column.PromotionCode) || columns.HasId((int)SbmRequirement.Column.PromotionDesc) || columns.HasId((int)SbmRequirement.Column.Promotion_AltText); @@ -2228,7 +2230,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (columns.HasId((int)SbmRequirement.Column.Quantity) || columns.HasId((int)SbmRequirement.Column.AmountUnitNet)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity, aliasRequirement)); if (columns.HasId((int)SbmRequirement.Column.QuantityProd)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_QuantityProd, aliasRequirement)); - if (canViewFinancials) + if (canViewSalesFinancials) { query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountUnit, aliasRequirement)); if (columns.HasId((int)SbmRequirement.Column.AmountAct) || columns.HasId((int)SbmRequirement.Column.AmountAct_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountAct, aliasRequirement)); @@ -2274,7 +2276,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (requiresReqColTimeAct) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TimeAct, aliasRequirement)); if (requiresReqColTimeTot) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TimeTot, aliasRequirement)); // Job costing. - if (CostColumnsAreAvailable() && canViewFinancials) + if (CostColumnsAreAvailable() && canViewSupplyFinancials) { if (columns.HasId((int)SbmRequirement.Column.CostTotal) || columns.HasId((int)SbmRequirement.Column.CostTotal_Fmt) || columns.HasId((int)SbmRequirement.Column.AmountMargin) || columns.HasId((int)SbmRequirement.Column.AmountMargin_Fmt) || columns.HasId((int)SbmRequirement.Column.PercentMargin) || columns.HasId((int)SbmRequirement.Column.PercentMargin_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CostTotal, aliasRequirement)); @@ -2471,7 +2473,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (columns.HasId((int)SbmRequirement.Column.Trans_DeliveryDepartment)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryDepartment); if (columns.HasId((int)SbmRequirement.Column.Trans_DeliveryTaxCodeId)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TaxCodeIdDelivery); transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_CurrencyId); // May be required for formatted requirement columns (or transaction currency columns). - if (canViewFinancials) + if (canViewSalesFinancials) { if (columns.HasId((int)SbmRequirement.Column.Trans_DeliveryAmountNet) || columns.HasId((int)SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet); if (columns.HasId((int)SbmRequirement.Column.Trans_DeliveryAmountTax) || columns.HasId((int)SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax); @@ -2486,7 +2488,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (columns.HasId((int)SbmRequirement.Column.Trans_TimeEst)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TimeEst); if (columns.HasId((int)SbmRequirement.Column.Trans_TimeAct)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TimeAct); if (columns.HasId((int)SbmRequirement.Column.Trans_TimeTot)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TimeTot); - if (canViewFinancials && columns.HasId((int)SbmRequirement.Column.Trans_CostLabourRateHour)) + if (canViewSupplyFinancials && columns.HasId((int)SbmRequirement.Column.Trans_CostLabourRateHour)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour); if (columns.HasId((int)SbmRequirement.Column.Trans_Notes)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Notes); if (columns.HasId((int)SbmRequirement.Column.Trans_Flags) || columns.HasId((int)SbmRequirement.Column.Trans_AllocationInd) || columns.HasId((int)SbmRequirement.Column.Trans_AllocationInd_YP) || columns.HasId((int)SbmRequirement.Column.Trans_ReplacementOrder_Tick) || columns.HasId((int)SbmRequirement.Column.Trans_ReplacementOrder_Y)) @@ -2547,7 +2549,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------ // Transaction cost. - if (hasTransCostCols && canViewFinancials) + if (hasTransCostCols && canViewSupplyFinancials) { // Build sub query to calculate the total cost total across all items. String aliasRequirement_RequirementCost = "ReqCst"; @@ -2790,7 +2792,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Add the columns. List commodityCustomerCols = new List(); commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_ProductCode); - if (canViewFinancials) + if (canViewSalesFinancials) commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail); commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail); commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs index a290968..42d756a 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs @@ -810,7 +810,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override ColumnDfn GetTransactionColumnDfn(SbmTransaction.Column column, string caption = "", int width = 0) { - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply); + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); ColumnDfn columnDfn = new ColumnDfn((int)column, caption, width); switch (column) { @@ -909,11 +910,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetTransactionColDfn(columnDfn, "Stock picker", 120, SbmDbDfn.ColumnIdx.Transaction_StockPickerCode, ColumnAlignment.Center); break; case SbmTransaction.Column.DeliveryAmountNet: - if (canViewFinancials) + if (canViewSalesFinancials) SetTransactionColDfn(columnDfn, "Delivery net amount", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, ColumnAlignment.Center, DataValue.DataType.Double); break; case SbmTransaction.Column.DeliveryAmountNet_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetTransactionColDfn(columnDfn, "Delivery net amount", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, ColumnAlignment.Center, DataValue.DataType.String); break; case SbmTransaction.Column.DeliveryTaxCodeId: @@ -926,19 +927,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetTransactionColDfn(columnDfn, "Delivery tax rate", 90, SbmDbDfn.ColumnIdx.TaxCode_TaxRate, ColumnAlignment.Center, DataValue.DataType.Double, aliasTransaction_DeliveryTaxcode, prefixTransaction_DeliveryTaxcode); break; case SbmTransaction.Column.DeliveryAmountTax: - if (canViewFinancials) + if (canViewSalesFinancials) SetTransactionColDfn(columnDfn, "Delivery tax amount", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmTransaction.Column.DeliveryAmountTax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetTransactionColDfn(columnDfn, "Delivery tax amount", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmTransaction.Column.DeliveryAmountTot: - if (canViewFinancials) + if (canViewSalesFinancials) SetTransactionColDfn(columnDfn, "Delivery total amount", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmTransaction.Column.DeliveryAmountTot_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) SetTransactionColDfn(columnDfn, "Delivery total amount", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmTransaction.Column.DeliveryNominalCode: @@ -957,61 +958,61 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetTransactionColDfn(columnDfn, "Currency", 79, SbmDbDfn.ColumnIdx.Currency_Symbol, ColumnAlignment.Center, DataValue.DataType.String, aliasTransaction_Currency, prefixTransaction_Currency); break; case SbmTransaction.Column.AmountEst: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Amount(est)", 75, SbmDbDfn.ColumnIdx.Transaction_AmountEst, ColumnAlignment.Right, DataValue.DataType.Double); } break; case SbmTransaction.Column.AmountEst_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Amount(est)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountEst, ColumnAlignment.Right, DataValue.DataType.String); } break; case SbmTransaction.Column.AmountMax: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Amount(max)", 75, SbmDbDfn.ColumnIdx.Transaction_AmountMax, ColumnAlignment.Right, DataValue.DataType.Double); } break; case SbmTransaction.Column.AmountMax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Amount(max)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountMax, ColumnAlignment.Right, DataValue.DataType.String); } break; case SbmTransaction.Column.AmountNet: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Net", 60, SbmDbDfn.ColumnIdx.Transaction_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double); } break; case SbmTransaction.Column.AmountNet_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Net", 80, SbmDbDfn.ColumnIdx.Transaction_AmountNet, ColumnAlignment.Right, DataValue.DataType.String); } break; case SbmTransaction.Column.AmountTax: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Tax", 60, SbmDbDfn.ColumnIdx.Transaction_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double); } break; case SbmTransaction.Column.AmountTax_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Tax", 80, SbmDbDfn.ColumnIdx.Transaction_AmountTax, ColumnAlignment.Right, DataValue.DataType.String); } break; case SbmTransaction.Column.AmountTot: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Total", 60, SbmDbDfn.ColumnIdx.Transaction_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double); } break; case SbmTransaction.Column.AmountTot_Fmt: - if (canViewFinancials) + if (canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Total", 80, SbmDbDfn.ColumnIdx.Transaction_AmountTot, ColumnAlignment.Right, DataValue.DataType.String); } @@ -1029,39 +1030,39 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetTransactionColDfn(columnDfn, "Labour rate", 90, SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmTransaction.Column.CostTotal: - if (canViewFinancials) + if (canViewSupplyFinancials) { SetTransactionColDfn(columnDfn, "Total cost", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.DataName = colNameCostTotal; } break; case SbmTransaction.Column.CostTotal_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials) SetTransactionColDfn(columnDfn, "Total cost", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); break; case SbmTransaction.Column.AmountMargin: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.ShowZeroValues = true; } break; case SbmTransaction.Column.AmountMargin_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.ShowZeroValues = true; } break; case SbmTransaction.Column.PercentMargin: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "% Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double); columnDfn.ShowZeroValues = true; } break; case SbmTransaction.Column.PercentMargin_Fmt: - if (canViewFinancials) + if (canViewSupplyFinancials && canViewSalesFinancials) { SetTransactionColDfn(columnDfn, "% Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.ShowZeroValues = true; @@ -1756,7 +1757,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { ClearErrorState(); - bool canViewFinancials = UserContext.SecurityProfile.Financial.CanViewFinancials; + bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply); + bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales); //--------------------------------------------------------------------- // Construct build database query. DbQuery query = new DbQuery(db.DbmsType); @@ -1790,23 +1792,26 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DeliveryBookInCode, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.StockPickerCode) || columns.HasId((int)SbmTransaction.Column.StockPicker)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_StockPickerCode, aliasTransaction)); - if (canViewFinancials && (columns.HasId((int)SbmTransaction.Column.DeliveryAmountNet) || columns.HasId((int)SbmTransaction.Column.DeliveryAmountNet_Fmt))) + if (canViewSalesFinancials && (columns.HasId((int)SbmTransaction.Column.DeliveryAmountNet) || columns.HasId((int)SbmTransaction.Column.DeliveryAmountNet_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.DeliveryTaxCodeId)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_TaxCodeIdDelivery)); - if (canViewFinancials && (columns.HasId((int)SbmTransaction.Column.DeliveryAmountTax) || columns.HasId((int)SbmTransaction.Column.DeliveryAmountTax_Fmt))) + if (canViewSalesFinancials && (columns.HasId((int)SbmTransaction.Column.DeliveryAmountTax) || columns.HasId((int)SbmTransaction.Column.DeliveryAmountTax_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, aliasTransaction)); - if (canViewFinancials && (columns.HasId((int)SbmTransaction.Column.DeliveryAmountTot) || columns.HasId((int)SbmTransaction.Column.DeliveryAmountTot_Fmt))) + if (canViewSalesFinancials && (columns.HasId((int)SbmTransaction.Column.DeliveryAmountTot) || columns.HasId((int)SbmTransaction.Column.DeliveryAmountTot_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.DeliveryNominalCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DeliveryNominalCode, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.DeliveryDepartment)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DeliveryDepartment, aliasTransaction)); query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_CurrencyId, aliasTransaction)); - if (canViewFinancials) + if (canViewSalesFinancials) { if (columns.HasId((int)SbmTransaction.Column.AmountEst) || columns.HasId((int)SbmTransaction.Column.AmountEst_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountEst, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.AmountMax) || columns.HasId((int)SbmTransaction.Column.AmountMax_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountMax, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.AmountNet) || columns.HasId((int)SbmTransaction.Column.AmountNet_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountNet, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.AmountTax) || columns.HasId((int)SbmTransaction.Column.AmountTax_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountTax, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.AmountTot) || columns.HasId((int)SbmTransaction.Column.AmountTot_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AmountTot, aliasTransaction)); + } + if (canViewSupplyFinancials) + { if (ColumnExists(SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour) && columns.HasId((int)SbmTransaction.Column.CostLabourRateHour)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour, aliasTransaction)); } @@ -1822,6 +1827,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Flags, aliasTransaction)); if (columns.HasId((int)SbmTransaction.Column.Status) || columns.HasId((int)SbmTransaction.Column.Status_Desc) || columns.HasId((int)SbmTransaction.Column.Status_Ind) || columns.HasId((int)SbmTransaction.Column.Status_OnHold_Tick) || columns.HasId((int)SbmTransaction.Column.Status_OnHold_Cross) || columns.HasId((int)SbmTransaction.Column.Status_OnHold_Y)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasTransaction)); + //--------------------------------------------------------------------- // Association - Owner Aff - Target Affiliate - Target Address bool hasAssocCols = false; diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs index 9ff10c5..d764568 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs @@ -1,5 +1,6 @@ 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.Dbas.Data; using Sarand.Net.Standard.Base.App; @@ -33,7 +34,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Construction. - public SbmTransactionMgr_Dbas(SbmUserContext userContext) : + public SbmTransactionMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); diff --git a/SaBusMgrTest_Portal/SaBusMgrTest_Portal.csproj b/SaBusMgrTest_Portal/SaBusMgrTest_Portal.csproj new file mode 100644 index 0000000..e69fbeb --- /dev/null +++ b/SaBusMgrTest_Portal/SaBusMgrTest_Portal.csproj @@ -0,0 +1,54 @@ + + + $(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB + + + $(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130 + + + 10.0 + + + netcoreapp3.1 + false + Sarand.BusinessMgr + + + + + + + + + + + $(SSDTPath)\Microsoft.Data.Tools.Schema.Sql.dll + True + + + $(SSDTUnitTestPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.dll + True + + + $(SSDTUnitTestPath)\Microsoft.Data.Tools.Schema.Sql.UnitTestingAdapter.dll + True + + + + + + + + + + + + + + + + 3.1 + + + + \ No newline at end of file diff --git a/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmApplication_Portal_Tester.cs b/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmApplication_Portal_Tester.cs new file mode 100644 index 0000000..b8aa808 --- /dev/null +++ b/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmApplication_Portal_Tester.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Portal.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Test.Net.Core.Web.Portal.App +{ + //======================================================================= + [TestClass] + class SbmApplication_Portal_Tester : SbmPortalApp_Tester_Base + { + //------------------------------------------------------------------- + [TestMethod] + public void Test_SbmApplication_Portal_CTR() + { + Assert.IsNotNull(App); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmPortalApp_Tester_Base.cs b/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmPortalApp_Tester_Base.cs new file mode 100644 index 0000000..2b8ee31 --- /dev/null +++ b/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmPortalApp_Tester_Base.cs @@ -0,0 +1,71 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Moq; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Portal.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Dbas; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Test.Net.Core.Web.Portal.App +{ + //======================================================================= + public class SbmPortalApp_Tester_Base + { + //------------------------------------------------------------------- + // Application. + private class SbmApplication_Portal_Test : SbmApplication_Portal + { + public SbmApplication_Portal_Test(IConfiguration configuration, IWebHostEnvironment env) : + base(configuration) + { + InitEnvironment(env); + } + } + + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + protected SbmPortalApp_Tester_Base() + { + // Application. + Mock mockConfiguration = new Mock(); + Mock mockEnvironment = new Mock(); + mockEnvironment.Setup(m => m.EnvironmentName).Returns(Environments.Development); + mockEnvironment.Setup(m => m.ContentRootPath).Returns(@"D:\Sarand\Projects\Users\AHoward\VS2019\BusinessMgr\Workspace\SaBusinessMgrCoreWebPortal"); + App = new SbmApplication_Portal_Test(mockConfiguration.Object, mockEnvironment.Object); + + // Session configuration. + SessionContextIdx = App.GetSessionContextIdxs()[0]; + SessionContext = App.GetSessionContext(SessionContextIdx); + Internals = new SbmInternals(GetUserContext(SessionContext)); + UserContext = SbmApplication_Portal_Tester.GetUserContext(SessionContext); + } + + //------------------------------------------------------------------- + // Properties. + protected ushort SessionContextIdx { get; } + protected SbmApplication_Portal App { get; } + protected SbmSessionContext SessionContext { get; } + protected ISacsDatabase BusMgrDatabase { get { return App.GetBusMgrDatabase(SessionContext); } } + protected SbmInternals Internals { get; } + protected SbmUserContext UserContext { get; } + + //------------------------------------------------------------------- + // User Context. + public static SbmUserContext GetUserContext(SbmSessionContext sessionContext) + { + SbmUserContext userContext = new SbmUserContext_Web(sessionContext); + + return userContext; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmSessionData_Portal_Test.cs b/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmSessionData_Portal_Test.cs new file mode 100644 index 0000000..50047b7 --- /dev/null +++ b/SaBusMgrTest_Portal/Test/Net/Core/Web/Portal/App/SbmSessionData_Portal_Test.cs @@ -0,0 +1,112 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Newtonsoft.Json; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Consoles; +using Sarand.BusinessMgr.Net.Core.Web.Controllers; +using Sarand.BusinessMgr.Net.Core.Web.Portal.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Security; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Test.Net.Core.Web.Portal.App +{ + //======================================================================= + [TestClass] + public class SbmSessionData_Portal_Test : SbmPortalApp_Tester_Base + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public SbmSessionData_Portal_Test() + { + } + + //------------------------------------------------------------------- + [TestMethod] + public void Test_SmmSessionData_Online_Serialization() + { + + // Internals. + SaSecurityConsole securityConsole = App.CreateSecurityConsole(UserContext); + Assert.IsNotNull(securityConsole); + SbmAccountMgr accountMgr = Internals.AccountMgr; + Assert.IsNotNull(accountMgr); + + // Security item. + SaSecurityItem securityItemUser = securityConsole.GetUserByEmail("andy@sarand.com"); + Assert.IsNotNull(securityItemUser); + + // User account. + SbmAffiliate affiliateUser = accountMgr.GetAffiliateByUserId(securityItemUser.Id); + Assert.IsNotNull(affiliateUser ); + + // Organisations. + List supervisedOrganisations = accountMgr.GetAffiliatesSupervisedBy(affiliateUser.Id); + Assert.IsNotNull(supervisedOrganisations); + Assert.IsTrue(supervisedOrganisations.Count > 0); + SysId affiliateIdOrganisation = supervisedOrganisations[0].Id; + SbmAssociation associationOrganisation = accountMgr.GetAssociationByOwnerTypeTarget(affiliateIdOrganisation, Sbm.AssociationType.Internal, affiliateIdOrganisation); + Assert.IsNotNull(associationOrganisation); + SbmAffiliate affiliateOrganisation = accountMgr.GetAffiliateById(affiliateIdOrganisation); + Assert.IsNotNull(affiliateOrganisation); + + + // Populate User Session. + SbmSessionData_Portal sessionData = new SbmSessionData_Portal(SessionContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation); + Assert.IsNotNull(sessionData); + + // Validate user session. + Assert.IsNotNull(sessionData.User); + + // Security item. + Assert.AreEqual(securityItemUser.Id, sessionData.User.SecurityItemId); + Assert.AreEqual(securityItemUser.EmailAddress, sessionData.User.EmailAddress); + + // User details. + Assert.AreEqual(affiliateUser.Id, sessionData.User.AffiliateId); + Assert.AreEqual(affiliateUser.FirstName, sessionData.User.FirstName); + Assert.AreEqual(affiliateUser.LastName, sessionData.User.LastName); + Assert.AreEqual(affiliateUser.GetDisplayName(), sessionData.User.DisplayName); + + // Organisation details. + Assert.AreEqual(affiliateOrganisation.Id, sessionData.Organisation.AffiliateId); + Assert.AreEqual(associationOrganisation.Id, sessionData.Organisation.AssociationId); + + // Serialise data. + String sessionDataJson = JsonConvert.SerializeObject(sessionData); + Assert.IsNotNull(sessionDataJson); + + // Deserialise data. + SbmSessionData_Web sessionDataDeserialized = JsonConvert.DeserializeObject(sessionDataJson, SbmController_Base.SbmSessionDataJsonSerializerSettings); + Assert.IsNotNull(sessionDataDeserialized); + + + // Validate deserialised data. + Assert.IsNotNull(sessionDataDeserialized.User); + + // Security item. + Assert.AreEqual(securityItemUser.Id, sessionDataDeserialized.User.SecurityItemId); + Assert.AreEqual(securityItemUser.EmailAddress, sessionDataDeserialized.User.EmailAddress); + + // User details. + Assert.AreEqual(affiliateUser.Id, sessionDataDeserialized.User.AffiliateId); + Assert.AreEqual(affiliateUser.FirstName, sessionDataDeserialized.User.FirstName); + Assert.AreEqual(affiliateUser.LastName, sessionDataDeserialized.User.LastName); + Assert.AreEqual(affiliateUser.GetDisplayName(), sessionDataDeserialized.User.DisplayName); + + // Organisation details. + Assert.AreEqual(affiliateOrganisation.Id, sessionDataDeserialized.Organisation.AffiliateId); + Assert.AreEqual(associationOrganisation.Id, sessionDataDeserialized.Organisation.AssociationId); + Assert.AreEqual(affiliateOrganisation.Name, sessionDataDeserialized.Organisation.DisplayName); + } + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebPortal/Localisation/SbmPortalProperties.resx b/SaBusinessMgrCoreWebPortal/Localisation/SbmPortalProperties.resx index 99031dd..61f3556 100644 --- a/SaBusinessMgrCoreWebPortal/Localisation/SbmPortalProperties.resx +++ b/SaBusinessMgrCoreWebPortal/Localisation/SbmPortalProperties.resx @@ -117,6 +117,18 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Commodities + + + Commodity + + + Create Commodity + + + UpdateCommodity + Contact @@ -180,6 +192,9 @@ Create + + Description + Email diff --git a/SaBusinessMgrCoreWebPortal/Portal/App/SbmApplication_Portal.cs b/SaBusinessMgrCoreWebPortal/Portal/App/SbmApplication_Portal.cs index 89e8cac..5e8f1d2 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/App/SbmApplication_Portal.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/App/SbmApplication_Portal.cs @@ -49,7 +49,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.App try { properties = new PropertySet(); - SbmGlobals.System = (System_Web = new SbmSystem_Web(properties)); + SbmGlobals.System = (SbmGlobals_Web.System = (System_Web = new SbmSystem_Web(properties))); Configuration = configuration; } catch (Exception exc) diff --git a/SaBusinessMgrCoreWebPortal/Portal/App/SbmSessionData_Portal.cs b/SaBusinessMgrCoreWebPortal/Portal/App/SbmSessionData_Portal.cs index 67535e7..c0a8601 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/App/SbmSessionData_Portal.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/App/SbmSessionData_Portal.cs @@ -28,8 +28,8 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.App /// SessionContext and UserAccount must be supplied. /// Organisation is optional. /// - public SbmSessionData_Portal(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) : - base(sessionContext, securityItemUser, affiliateUser) + public SbmSessionData_Portal(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation) : + base(sessionContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation) { } @@ -37,30 +37,34 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.App // Contact details. private class UserData_Online : UserData { - public UserData_Online(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) : - base(sessionContext, securityItemUser, affiliateUser) + public UserData_Online(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations) : + base(sessionContext, securityItemUser, affiliateUser, supervisedOrganisations) { } public UserData_Online(UserData userData) : base(userData) { } - public new bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + public new bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations) { - return base.Refresh(securityItemUser, affiliateUser); + return base.Refresh(securityItemUser, affiliateUser, supervisedOrganisations); } } - protected override UserData CreateUserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) { return new UserData_Online(sessionContext, securityItemUser, affiliateUser); } + protected override UserData CreateUserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations) + { + return new UserData_Online(sessionContext, securityItemUser, affiliateUser, supervisedOrganisations); + } /// User - JSON deserialisation route. - public new UserData User { get { return base.User; } set { SetUser(new UserData_Online(value)); } } + //public new UserData User { get { return base.User; } set { SetUser(new UserData_Online(value)); } } /// - /// Update the user's contect details against the session. + /// Update the user's contact details against the session. /// - User identity must match that already against the session. /// - public bool RefreshUser(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + public bool RefreshUser(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation) { UserData_Online user = User as UserData_Online; if (user != null) - return user.Refresh(securityItemUser, affiliateUser); + return user.Refresh(securityItemUser, affiliateUser, supervisedOrganisations); + organisationData = new OrganisationData(associationOrganisation, affiliateOrganisation); return false; } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/CommodityController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/CommodityController-Ajax.cs new file mode 100644 index 0000000..850a452 --- /dev/null +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/CommodityController-Ajax.cs @@ -0,0 +1,285 @@ +using Microsoft.AspNetCore.Mvc; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Helpers; +using Sarand.BusinessMgr.Net.Core.Web.Portal.Models; +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.Helpers; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Email; +using Sarand.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Linq; +using System.Threading.Tasks; +using System.Web; + +namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers +{ + //======================================================================= + // Portal Commodity Controller - Ajax actions. + //======================================================================= + partial class CommodityController + { + //------------------------------------------------------------------- + // Commodity data. + private class CommodityData_List : AjaxResponse_Data.ItemData + { + public String TypeCode { get; set; } + public String TypeDesc { get; set; } + public String Code { get; set; } = ""; + public String Desc { get; set; } = ""; + // Address. + public String AddressSummary { get; set; } + } + private class CommodityData_Full : CommodityData_List + { + // Commodity properties. + } + private void PopulateCommodityResponseData(SbmCommodity commodity, CommodityData_List data) + { + data.Id = SysId.ToString(commodity.Id); + data.TypeCode = Internals.CommodityTypeCodes.GetCodeForType(commodity.CommodityType); + data.TypeDesc = Internals.CommodityTypeCodes.GetDescForType(commodity.CommodityType); + data.Code = commodity.Code; + data.Desc = commodity.DescBrief; + // Common properties. + data.Notes = commodity.Notes; + data.StatusCode = commodity.StatusCode; + data.StatusDesc = commodity.StatusDesc; + } + private void PopulateCommodityResponseData(SbmCommodity commodity, CommodityData_Full data) + { + PopulateCommodityResponseData(commodity, data as CommodityData_List); + // Commodity properties. + } + + //------------------------------------------------------------------- + // Commodity list. + //------------------------------------------------------------------- + private class AjaxResponse_CommodityList : AjaxResponse_Data + { + // Construction. + public AjaxResponse_CommodityList(SbmModel_Portal model) : base(model) { } + // Commodity list. + public List Commodities { get; } = new List(); + // Reference data. + public List Statuses { get; } = new List(); + public String DefaultStatusCode { get; set; } + } + // Ajax request. + [HttpPost] + [Route("Commodity/Ajax/List")] + [Route("Commodity/Ajax/GetList")] + public IActionResult Ajax_CommodityList(Model_Commodity model) + { + String fn = GetType().Name + ".Ajax_CommodityList"; + AjaxResponse_CommodityList responseData = new AjaxResponse_CommodityList(model); + String messageTitle = Localiser["commodity.caption.commodities"]; + + // Validate session and referrer. + if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); + if (!ValidReferer) return Forbid(); + RefreshModel(model); + + // Reference data - statuses. + foreach (SaStatus status in SbmCommodity.ValidStatuses.FindAll(item => item != SaStatus.Deleted)) + responseData.Statuses.Add(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status)); + responseData.DefaultStatusCode = SacsSystem.GetStatusCode(SbmCommodity.DefaultStatus); + + // Item filter. + SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); + prmCommodity.AffiliateIdOrganisation = SessionData.Organisation.AffiliateId; + prmCommodity.Search = model.Filter.CommoditySearch; + prmCommodity.CommodityType = model.GetFilterCommodityType(); + prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted; + prmCommodity.SortColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Code)); + prmCommodity.SortColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DescBrief)); + model.Paging.ItemTotal = (ulong)CommodityMgr.GetCommodityCount(prmCommodity); + model.PopulatePagingTo(prmCommodity.ResultsPaging); + + // Item columns. + ColumnDfn colId = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Id); + ColumnDfn colCommodityType = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Type_Desc); + ColumnDfn colCode = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Code); + ColumnDfn colDescBrief = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DescBrief); + ColumnDfn colNotes = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Notes); + ColumnDfn colStatus = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Status); + ColumnDfn colCreatedOn = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.CreateOn_Date); + ColumnDfn colUpdatedOn = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.UpdateOn_Date); + List columns = new List() + { + colId, colCommodityType, colCode, colDescBrief, + colNotes, colStatus, colCreatedOn, colUpdatedOn + }; + + // Query items. + using (DbResultSet resultSet = CommodityMgr.ExecuteCommodityQuery(columns, prmCommodity)) + { + while (resultSet != null && resultSet.HasRows && resultSet.NextRecord()) + { + NamedValue.Map values = resultSet.GetRecordValues(); + Sbm.CommodityType commodityType = (Sbm.CommodityType)values.GetLong(colCommodityType.DataName); + CommodityData_List commodityData = new CommodityData_List() + { + Id = values.GetString(colId.DataName), + TypeCode = Internals.CommodityTypeCodes.GetCodeForType(commodityType), + TypeDesc = Internals.CommodityTypeCodes.GetDescForType(commodityType), + Code = values.GetString(colCode.DataName), + Desc= values.GetString(colDescBrief.DataName), + Notes = values.GetString(colNotes.DataName), + StatusCode = values.GetString(colStatus.DataName), + StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName)), + CreatedOn = DateUtil.Format(values.GetDate(colCreatedOn.DataName), "yyyyMMdd"), + CreatedOnFmt = Localiser.FormatDate(values.GetDate(colCreatedOn.DataName)), + UpdatedOn = DateUtil.Format(values.GetDate(colUpdatedOn.DataName), "yyyyMMdd"), + UpdatedOnFmt = Localiser.FormatDate(values.GetDate(colUpdatedOn.DataName)) + }; + responseData.Commodities.Add(commodityData); + } + } + + // Refresh paging info. + if (model.Paging.IsPaged) + model.Paging.ItemCount = (ushort)responseData.Commodities.Count; + SessionData.Commodities.Filter.PageNo = model.Paging.PageNo; + SessionData.Commodities.Filter.PageLength = model.Paging.PageLength; + responseData.SetPaging(model); + + // Complete response. + responseData.Success = true; + return Json(responseData); + } + + //------------------------------------------------------------------- + // Get Commodity ajax request. + //------------------------------------------------------------------- + private class AjaxResponse_Commodity : AjaxResponse_Data + { + // Construction. + public AjaxResponse_Commodity(SbmModel_Portal model) : base(model) { } + // Commodity details. + public CommodityData_Full commodity { get; } = new CommodityData_Full(); + } + //------------------------------------------------------------------- + [HttpPost] + [Route("Commodity/Ajax/Item")] + [Route("Commodity/Ajax/GetItem")] + public IActionResult Ajax_GetItem(Model_Commodity model) + { + String fn = GetType().Name + ".Ajax_GetItem"; + String messageTitle = Localiser["commodity.caption.commodity"]; + AjaxResponse_Commodity responseData = new AjaxResponse_Commodity(model); + + // Validate session. + if (!ValidUserSession) + return GetAjaxResult_InvalidSession(responseData); + + // Identify item. + SysId commodityId = model.CommodityId.ToSysId(); + if (!SysId.IsValid(commodityId)) + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); + + // Retrieve item. + SbmCommodity commodity = CommodityMgr.GetCommodityById(commodityId); + if (commodity == null) + { + SaLogger.Warn(fn + " Failed to retrieve commodity for Id: '" + model.CommodityId + "'"); + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); + } + + // Construct response. + PopulateCommodityResponseData(commodity, responseData.commodity); + + // Complete response. + responseData.Success = true; + + return Json(responseData); + } + + //------------------------------------------------------------------- + // Store Commodity ajax request. + //------------------------------------------------------------------- + [HttpPost] + [Route("Commodity/Ajax/Store")] + [Route("Commodity/Ajax/StoreItem")] + public IActionResult Ajax_StoreItem(Model_Commodity model) + { + String fn = GetType().Name + ".Ajax_StoreItem"; + String messageTitle = Localiser["commodity.caption.commodity"]; + AjaxResponse_Commodity responseData = new AjaxResponse_Commodity(model); + + // Validate session. + if (!ValidUserSession) + return GetAjaxResult_InvalidSession(responseData); + + // Validate item properties. + model.ValidateCommodityData(responseData); + if (responseData.HasControlErrors()) + return Json(responseData); + + // Retrieve existing item. + SysId commodityId = model.CommodityId.ToSysId(); + SbmCommodity commodity = CommodityMgr.GetCommodityById(commodityId); + if (commodity == null && SysId.IsValid(commodityId)) + { + SaLogger.Warn(fn + " Failed to retrieve commodity for Id: '" + model.CommodityId + "'"); + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); + } + + // Create new item if required. + if (commodity == null) + { + commodity = CommodityMgr.CreateCommodity(SessionData.Organisation.AffiliateId, model.GetCommodityType(), model.CommodityCode); + if (model.CommodityCode != null) + commodity.Code = model.CommodityCode; + } + + // Populate item properties. + if (model.CommodityCode != null) + commodity.Code = model.CommodityCode; + // Common properties. + if (model.CommodityNotes != null) + commodity.Notes = model.CommodityNotes; + if (model.CommodityStatus != null) + commodity.Status = model.GetCommodityStatus(); + + // Store item. + if (!SysId.IsValid(commodity.Id)) + { + if (!CommodityMgr.InsertCommodity(commodity, DbUpdateInfo)) + { + SaLogger.Warn(fn + " Failed to insert commodity: " + CommodityMgr.ErrorStateMessage); + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + CommodityMgr.ErrorStateMessage)); + } + } + else + { + if (!CommodityMgr.UpdateCommodity(commodity, DbUpdateInfo)) + { + SaLogger.Warn(fn + " Failed to update commodity [Id:" + SysId.ToString(commodity.Id) + "]: " + CommodityMgr.ErrorStateMessage); + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + CommodityMgr.ErrorStateMessage)); + } + } + + // Construct response. + PopulateCommodityResponseData(commodity, responseData.commodity); + + // Complete response. + responseData.Success = true; + + return Json(responseData); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/CommodityController.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/CommodityController.cs new file mode 100644 index 0000000..119273f --- /dev/null +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/CommodityController.cs @@ -0,0 +1,53 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Helpers; +using Sarand.BusinessMgr.Net.Core.Web.Portal.Models; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers +{ + //======================================================================= + public partial class CommodityController : SbmController_Portal + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public CommodityController(SbmLocaliser localiser, ILogger logger) : + base(localiser, logger) + { + } + + //------------------------------------------------------------------- + [HttpGet] + public IActionResult Index() + { + String fn = GetType().Name + ".Index"; + + if (!ValidUserSession) + return RedirectToAction("", ""); + + // Commodity page. + Model_Commodity model = new Model_Commodity(Localiser); + model.Paging.PageNo = SessionData.Commodities.Filter.PageNo; + model.Paging.PageLength = SessionData.Commodities.Filter.PageLength; + return View(model); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController-Ajax.cs index 4c6706d..7cb9a41 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController-Ajax.cs @@ -167,17 +167,16 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers ColumnDfn colAffiliateType = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Type); ColumnDfn colPhoneMain = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.PhoneMain); ColumnDfn colPhoneAlt = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.PhoneAlt); + ColumnDfn colAddress = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Summary); ColumnDfn colNotes = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Notes); ColumnDfn colStatus = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Status); ColumnDfn colCreatedOn = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.CreateOn_Date); ColumnDfn colUpdatedOn = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.UpdateOn_Date); List columns = new List() { - colId, - colName, - colAffiliateType, - colPhoneMain, - colPhoneAlt, + colId, colName, colAffiliateType, + colPhoneMain, colPhoneAlt, + colAddress, colNotes, colStatus, colCreatedOn, colUpdatedOn }; @@ -194,18 +193,27 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers DisplayName = values.GetString(colName.DataName), TypeCode = Internals.AffiliateTypeCodes.GetCodeForType(affiliateType), TypeDesc = Internals.AffiliateTypeCodes.GetDescForType(affiliateType), + AddressSummary = AccountMgr.GetAffiliateDataValue(colAddress, values).AsString(), Notes = values.GetString(colNotes.DataName), StatusCode = values.GetString(colStatus.DataName), - StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName)) + StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName)), + CreatedOn = DateUtil.Format(values.GetDate(colCreatedOn.DataName), "yyyyMMdd"), + CreatedOnFmt = Localiser.FormatDate(values.GetDate(colCreatedOn.DataName)), + UpdatedOn = DateUtil.Format(values.GetDate(colUpdatedOn.DataName), "yyyyMMdd"), + UpdatedOnFmt = Localiser.FormatDate(values.GetDate(colUpdatedOn.DataName)) }; responseData.Affiliates.Add(affiliateData); } } + + // Refresh paging info. if (model.Paging.IsPaged) model.Paging.ItemCount = (ushort)responseData.Affiliates.Count; + SessionData.Contacts.Filter.PageNo = model.Paging.PageNo; + SessionData.Contacts.Filter.PageLength = model.Paging.PageLength; + responseData.SetPaging(model); // Complete response. - responseData.SetPaging(model); responseData.Success = true; return Json(responseData); } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController.cs index f0e42b0..a47c67f 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/ContactController.cs @@ -47,13 +47,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers return View(model); } - //------------------------------------------------------------------- - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public IActionResult Error() - { - return View(new ErrorViewModel(Localiser) { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); - } - //------------------------------------------------------------------- } //======================================================================= diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/HomeController.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/HomeController.cs index f68c4f4..1534673 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/HomeController.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/HomeController.cs @@ -60,16 +60,19 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers using (SbmAccountMgr accountMgrForUser = App.System.CreateAccountMgr(userContext)) { using (SaSecurityItem securityItemUser = securityConsoleForUser.GetUserByEmail(keepLoggedInParams.EmailAddress)) - using (SbmAffiliate affiliateUser = accountMgrForUser.GetAffiliateById(keepLoggedInParams.AffiliateId)) + using (SbmAffiliate affiliateUser = accountMgrForUser.GetAffiliateById(keepLoggedInParams.AffiliateIdUser)) + using (SbmAssociation associationOrganisation = accountMgrForUser.GetAssociationById(keepLoggedInParams.AssociationIdOrganisation)) + using (SbmAffiliate affiliateOrganisation = accountMgrForUser.GetAffiliateById(associationOrganisation?.AffiliateIdOwner ?? null)) { - if (securityItemUser != null && affiliateUser != null) + if (securityItemUser != null && affiliateUser != null && associationOrganisation != null && affiliateOrganisation != null) { if (securityItemUser.Id.Equals(keepLoggedInParams.SecurityItemId) && affiliateUser.UserId.Equals(securityItemUser.Id)) { if (affiliateUser.IsStatusCurrent) { + List supervisedOrganisations = accountMgrForUser.GetAffiliatesSupervisedBy(affiliateUser.Id); String errorMessage = ""; - if (SignUserIn(userContext, securityItemUser, affiliateUser, true, ref errorMessage)) + if (SignUserIn(userContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation, true, ref errorMessage)) { SaLogger.Info(logPrefix + " 'Keep Logged In' cookie found." + logSuffix); break; diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/SbmController_Portal.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/SbmController_Portal.cs index 8220b57..aa13310 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/SbmController_Portal.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/SbmController_Portal.cs @@ -4,6 +4,7 @@ using Sarand.BusinessMgr.Net.Core.Web.Controllers; using Sarand.BusinessMgr.Net.Core.Web.Portal.App; 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.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; @@ -51,7 +52,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers /// - Open user session - store details against Sesion Data. /// - Set 'Keep logged in' cookie if required. /// - protected bool SignUserIn(SbmUserContext userContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, bool keepLoggedIn, ref String errorMessage) + protected bool SignUserIn(ISbmUserContext userContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation, bool keepLoggedIn, ref String errorMessage) { String fn = GetType().Name + ".SignUserIn"; @@ -75,6 +76,26 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers return false; } + // Organisation. + if (associationOrganisation == null) + { + SaLogger.Error(fn + " Unable to sign account in - null organisation association."); + errorMessage = Localiser["security.msg.signin.invalid"]; + return false; + } + if (associationOrganisation.AssociationType != Sbm.AssociationType.Internal) + { + SaLogger.Error(fn + " Unable to sign account in - organisation association is not type 'Internal'."); + errorMessage = Localiser["security.msg.signin.invalid"]; + return false; + } + if (affiliateOrganisation == null) + { + SaLogger.Error(fn + " Unable to sign account in - null organisation affiliate."); + errorMessage = Localiser["security.msg.signin.invalid"]; + return false; + } + // 'Keep logged in' can be switched off by the application configuration. keepLoggedIn = App.AppConfig.Security.SignIn.KeepLoggedIn.Allowed && keepLoggedIn; @@ -104,7 +125,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers } // Create session. - OpenUserSession(userContext.SessionContext, securityItemUser, affiliateUser); + OpenUserSession(userContext.SessionContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation); // Send the 'Keep Logged In' cookie if requested. if (affiliateUser.KeepLoggedIn_Portal) @@ -115,7 +136,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers //------------------------------------------------------------------- /// Populate the user's profile contact details to the session. - protected bool RefreshSessionProfileContact(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + protected bool RefreshSessionProfileContact(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation) { String fn = GetType().Name + ".RefreshSessionProfileContact"; SbmSessionData_Portal sessionData = SessionData_Portal; @@ -123,15 +144,16 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers if (!SysId.IsValid(affiliateIdUser)) return false; if (!SysId.IsValid(affiliateUser?.Id ?? null)) return false; if (!affiliateIdUser.Equals(affiliateUser.Id)) return false; + if (!SysId.IsValid(affiliateOrganisation?.Id ?? null)) return false; - sessionData.RefreshUser(securityItemUser, affiliateUser); + sessionData.RefreshUser(securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation); return true; } //------------------------------------------------------------------- /// Start a new user session on sign-in. - protected bool OpenUserSession(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + protected bool OpenUserSession(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation) { // Validate user properties. if (!SysId.IsValid(affiliateUser.Id)) return false; @@ -141,7 +163,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers CloseUserSession(); // Open session. - return SetSessionData(new SbmSessionData_Portal(sessionContext, securityItemUser, affiliateUser)); + return SetSessionData(new SbmSessionData_Portal(sessionContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation)); } protected void CloseUserSession() { @@ -185,13 +207,15 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers // Keep-logged-in cookie value. private static readonly String ParamName_KeepLoggedIn_EmailAddress = "ema"; private static readonly String ParamName_KeepLoggedIn_SecurityItemId = "sii"; - private static readonly String ParamName_KeepLoggedIn_AffiliateId = "afi"; + private static readonly String ParamName_KeepLoggedIn_AffiliateIdUser = "afiu"; + private static readonly String ParamName_KeepLoggedIn_AssociationIdOrganisation = "asio"; private String GenerateKeepLoggedInCookieValue() { NameValueCollection keepLoggedInParams = new NameValueCollection(); keepLoggedInParams.Add(ParamName_KeepLoggedIn_EmailAddress, SessionData_Portal.User.EmailAddress); keepLoggedInParams.Add(ParamName_KeepLoggedIn_SecurityItemId, SysId.ToString(SessionData_Portal.User.SecurityItemId)); - keepLoggedInParams.Add(ParamName_KeepLoggedIn_AffiliateId, SysId.ToString(SessionData_Portal.User.AffiliateId)); + keepLoggedInParams.Add(ParamName_KeepLoggedIn_AffiliateIdUser, SysId.ToString(SessionData_Portal.User.AffiliateId)); + keepLoggedInParams.Add(ParamName_KeepLoggedIn_AssociationIdOrganisation, SysId.ToString(SessionData_Portal.Organisation.AssociationId)); return EncryptParameters(keepLoggedInParams, Base64IV_KeepLoggedIn, Base64Key_KeepLoggedIn); } @@ -200,7 +224,8 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers { public String EmailAddress { get; set; } public SysId SecurityItemId { get; set; } - public SysId AffiliateId { get; set; } + public SysId AffiliateIdUser { get; set; } + public SysId AssociationIdOrganisation { get; set; } /// Retrieve the list of valid parameters in printable format [Name: Value]. public List GetValidParams() { @@ -209,8 +234,10 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers values.Add("EmailAddress: " + EmailAddress); if (SysId.IsValid(SecurityItemId)) values.Add("SecurityItemId: " + SysId.ToString(SecurityItemId)); - if (SysId.IsValid(AffiliateId)) - values.Add("UserAccountId: " + SysId.ToString(AffiliateId)); + if (SysId.IsValid(AffiliateIdUser)) + values.Add("AffiliateIdUser: " + SysId.ToString(AffiliateIdUser)); + if (SysId.IsValid(AssociationIdOrganisation)) + values.Add("AssociationIdOrganisation: " + SysId.ToString(AssociationIdOrganisation)); return values; } /// Verifiy that the email and account Ids are populated and the data hasn't expired. @@ -219,7 +246,8 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers return !StringUtil.IsEmpty(EmailAddress) && SysId.IsValid(SecurityItemId) && - SysId.IsValid(AffiliateId); + SysId.IsValid(AffiliateIdUser) && + SysId.IsValid(AssociationIdOrganisation); } } public KeepLoggedInParams ExtractKeepLoggedInParams(String encryptedParams) @@ -230,9 +258,10 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers NameValueCollection linkParams = DecryptParameters(encryptedParams, Base64IV_KeepLoggedIn, Base64Key_KeepLoggedIn); keepLoggedInParams.EmailAddress = linkParams.Get(ParamName_KeepLoggedIn_EmailAddress); keepLoggedInParams.SecurityItemId = linkParams.Get(ParamName_KeepLoggedIn_SecurityItemId).ToSysId(); - keepLoggedInParams.AffiliateId = linkParams.Get(ParamName_KeepLoggedIn_AffiliateId).ToSysId(); + keepLoggedInParams.AffiliateIdUser = linkParams.Get(ParamName_KeepLoggedIn_AffiliateIdUser).ToSysId(); + keepLoggedInParams.AssociationIdOrganisation = linkParams.Get(ParamName_KeepLoggedIn_AssociationIdOrganisation).ToSysId(); } - if (DebugMode) SaLogger.Info(GetType().Name + ".ExtractKeepLoggedInParams UserAccountId: " + SysId.ToString(keepLoggedInParams.AffiliateId)); + if (DebugMode) SaLogger.Info(GetType().Name + ".ExtractKeepLoggedInParams UserAccountId: " + SysId.ToString(keepLoggedInParams.AffiliateIdUser)); return keepLoggedInParams; } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/SecurityController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/SecurityController-Ajax.cs index ac863f4..de18668 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/SecurityController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/SecurityController-Ajax.cs @@ -5,6 +5,7 @@ using Sarand.BusinessMgr.Net.Core.Web.Portal.Models; 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.BusinessMgr.Net.Standard.Base.Helpers; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.App; @@ -44,7 +45,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers { String fn = GetType().Name + ".Ajax_Signin"; AjaxResponse_Signin responseData = new AjaxResponse_Signin(model); - String messageTitle = Localiser["signin.caption"]; + String messageTitle = Localiser["label.signin"]; // Validate referrer. if (!ValidReferer) return Forbid(); @@ -61,20 +62,52 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers SbmSessionContext sessionContext = SbmSessionContextHelper_Web.GetSessionContext(sessionContextIdx); SbmUserContext_Web userContext = new SbmUserContext_Web(sessionContext); - // Get user security item and affiliate. - using (SaSecurityItem securityItemUser = GetSecurityItemForSignin(userContext, model, responseData)) + using (DisposableCollection disposableItems = new DisposableCollection()) { - if (responseData.HasControlErrors()) - return Json(responseData); - using (SbmAffiliate affiliateUser = GetAffiliateForSignin(userContext, model, securityItemUser, responseData)) - { - if (responseData.HasControlErrors()) - return Json(responseData); + // Account manager. + SaSecurityConsole securityConsoleForUser = App.CreateSecurityConsole(userContext); + disposableItems.Add(securityConsoleForUser); + SbmAccountMgr accountMgrForUser = SbmGlobals_Web.System.CreateAccountMgr(userContext); + disposableItems.Add(accountMgrForUser); - String errorMessage = ""; - if (!SignUserIn(userContext, securityItemUser, affiliateUser, model.KeepMeSignedIn, ref errorMessage)) - return Json(responseData.SetControlError(nameof(model.EmailAddress), errorMessage)); + // User's security item. + SaSecurityItem securityItemUser = GetSecurityItemForSignin(securityConsoleForUser, model); + if (securityItemUser == null) + return Json(responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"])); + disposableItems.Add(securityItemUser); + + // User's affiliate. + SbmAffiliate affiliateUser = GetAffiliateForSignin(accountMgrForUser, model, securityItemUser); + if (affiliateUser == null) + return Json(responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"])); + disposableItems.Add(affiliateUser); + + // User's supervised organisations. + List supervisedOrganisations = accountMgrForUser.GetAffiliatesSupervisedBy(affiliateUser.Id); + if (supervisedOrganisations.IsEmpty()) + { + SaLogger.Warn(fn + " User has no supervised organisations. Email: " + model.EmailAddress); + return Json(responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"])); } + + // User's organisation association. + SbmAssociation associationOrganisation = GetOrganisationAssociationForSignIn(accountMgrForUser, model, affiliateUser, supervisedOrganisations); + if (associationOrganisation == null) + return Json(responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"])); + disposableItems.Add(associationOrganisation); + + // User's organisation affiliate. + SbmAffiliate affiliateOrganisation = accountMgrForUser.GetAffiliateById(associationOrganisation?.Id ?? null); + disposableItems.Add(affiliateOrganisation); + if (affiliateOrganisation == null) + { + SaLogger.Warn(fn + " Failed to retrieve Affiliate for organisation. Id: " + SysId.ToString(associationOrganisation?.Id ?? null)); + return Json(responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"])); + } + + String errorMessage = ""; + if (!SignUserIn(userContext, securityItemUser, affiliateUser, supervisedOrganisations, associationOrganisation, affiliateOrganisation, model.KeepMeSignedIn, ref errorMessage)) + return Json(responseData.SetControlError(nameof(model.EmailAddress), errorMessage)); } } @@ -84,6 +117,81 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers return Json(responseData); } + //------------------------------------------------------------------- + private SaSecurityItem GetSecurityItemForSignin(SaSecurityConsole securityConsoleForUser, Model_Security model) + { + String fn = GetType().Name + ".GetSecurityItemForSignin"; + + // Retrieve security item by email address. + SaSecurityItem securityItemUser = securityConsoleForUser.GetUserByEmail(model.EmailAddress); + if (securityItemUser == null) + { + SaLogger.Warn(fn + " Failed to retrieve Security Item for email: " + model.EmailAddress, true); + return null; + } + + // Validate password. + if (!SbmPasswordHelper.VerifyHashedPassword(securityItemUser, model.Password) && !(DebugMode && model.EmailAddress.EqualsCI("ahoward@sarand.com"))) + { + // Record invalid login attempt. + securityItemUser.InvalidLoginCount++; + securityItemUser.LastInvalidLoginAt = DateTime.Now; + if (!securityConsoleForUser.UpdateSecurityItem(securityItemUser, DbUpdateInfo)) + SaLogger.Warn(fn + " Failed to store invalid sign-in attempt against User: " + model.EmailAddress + ". " + AccountMgr.ErrorStateMessage, true); + SaLogger.Warn(fn + " Attempt to sign-in to User " + model.EmailAddress + " with invalid password. Attempt: " + securityItemUser.InvalidLoginCount, true); + securityItemUser.Dispose(); securityItemUser = null; + return null; + } + + return securityItemUser; + } + + //------------------------------------------------------------------- + private SbmAffiliate GetAffiliateForSignin(SbmAccountMgr accountMgrForUser, Model_Security model, SaSecurityItem securityItemUser) + { + String fn = GetType().Name + ".GetAffiliateForSignin"; + + // Identify the contact asociated with the security item. + SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params(); + prmAffiliate.UserId = securityItemUser.Id; + prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any; + SbmAffiliate affiliate = accountMgrForUser.GetAffiliate(prmAffiliate); + + if (affiliate == null) + { + SaLogger.Warn(fn + " Failed to retrieve Affiliate for User Id: " + SysId.ToString(securityItemUser.Id) + ". Email: " + model.EmailAddress, true); + return null; + } + + // Validate status. + if (affiliate.Status != SaStatus.Current) + { + SaLogger.Warn(fn + " Invalid Affiliate status for User Id: " + SysId.ToString(securityItemUser.Id) + ". Email: " + model.EmailAddress + ". Found: " + affiliate.Status.ToString() + ". Expected: Current.", true); + affiliate.Dispose(); affiliate = null; + return null; + } + + return affiliate; + } + + //------------------------------------------------------------------- + private SbmAssociation GetOrganisationAssociationForSignIn(SbmAccountMgr accountMgrForUser, Model_Security model, SbmAffiliate affiliateUser, List supervisedOrganisations) + { + String fn = GetType().Name + ".GetOrganisationAssociationForSignIn"; + foreach (SysIdString supervisedOrganisation in supervisedOrganisations) + { + SbmAssociation associationOrganisation = accountMgrForUser.GetAssociationByOwnerTypeTarget(supervisedOrganisation.Id, Sbm.AssociationType.Internal, supervisedOrganisation.Id); + if (associationOrganisation == null) + { + SaLogger.Warn(fn + " Failed to retrieve internal association for affiliate Id: " + SysId.ToString(supervisedOrganisation.Id)); + continue; + } + return associationOrganisation; + } + SaLogger.Warn(fn + " Failed to retrieve any internal associations for supervised organisations. Email: " + model.EmailAddress); + return null; + } + //------------------------------------------------------------------- // Keep Logged In. //------------------------------------------------------------------- @@ -117,59 +225,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers return Json(responseData); } - //------------------------------------------------------------------- - private SaSecurityItem GetSecurityItemForSignin(SbmUserContext_Web userContext, Model_Security model, AjaxResponse_Data responseData) - { - String fn = GetType().Name + ".GetSecurityItemForSignin"; - SaSecurityItem securityItemUser = null; - using (SaSecurityConsole securityConsoleForUser = App.CreateSecurityConsole(userContext)) - { - // Retrieve security item by email address. - using (securityItemUser = securityConsoleForUser.GetUserByEmail(model.EmailAddress)) - { - if (securityItemUser != null) - { - // Validate password. - if (!SbmPasswordHelper.VerifyHashedPassword(securityItemUser, model.Password) && !(DebugMode && model.EmailAddress.EqualsCI("ahoward@sarand.com"))) - { - // Record invalid login attempt. - securityItemUser.InvalidLoginCount++; - securityItemUser.LastInvalidLoginAt = DateTime.Now; - if (!securityConsoleForUser.UpdateSecurityItem(securityItemUser, DbUpdateInfo)) - SaLogger.Warn(fn + " Failed to store invalid sign-in attempt against User: " + model.EmailAddress + ". " + AccountMgr.ErrorStateMessage, true); - SaLogger.Warn(fn + " Attempt to sign-in to User " + model.EmailAddress + " with invalid password. Attempt: " + securityItemUser.InvalidLoginCount, true); - responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"]); - securityItemUser = null; - } - } - } - } - return securityItemUser; - } - - //------------------------------------------------------------------- - private SbmAffiliate GetAffiliateForSignin(SbmUserContext_Web userContext, Model_Security model, SaSecurityItem securityItemUser, AjaxResponse_Data responseData) - { - String fn = GetType().Name + ".GetAffiliateForSignin"; - SbmAffiliate affiliate = null; - using (SbmAccountMgr accountMgrForUser = App.System.CreateAccountMgr(userContext)) - { - // Identify the contact asociated with the security item. - SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params(); - prmAffiliate.UserId = securityItemUser.Id; - prmAffiliate.StatusCat = SbmAffiliate.StatusCat.CurrentOnly; - using (affiliate = accountMgrForUser.GetAffiliate(prmAffiliate)) - { - if (affiliate != null) - { - } - if (affiliate == null && !responseData.HasControlErrors()) - responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"]); - } - } - return affiliate; - } - //------------------------------------------------------------------- // Sign-out request. //------------------------------------------------------------------- @@ -185,7 +240,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers { String fn = GetType().Name + ".Ajax_SignOut"; AjaxResponse_SignOut responseData = new AjaxResponse_SignOut(model); - String messageTitle = Localiser["signin.caption.signout"]; + String messageTitle = Localiser["label.signout"]; // Validate session and referrer. if (!ValidReferer) @@ -454,7 +509,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers responseData.SuccessMsg = Localiser["security.msg.request.password.email.sent"]; return Json(responseData); } - private void PopulateRequestPasswordEmailBody(SbmEmailConsole emailConsole, SbmUserContext userContext, SaEmailData emailData, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + private void PopulateRequestPasswordEmailBody(SbmEmailConsole emailConsole, ISbmUserContext userContext, SaEmailData emailData, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) { // Will need to handle culture (language/country) as and when introduced. emailData.MessageBody = SbmResourceHelper.GetTextResource(SbmResourceHelper.TextResource.Email_RequestPassword_Html); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Model_Commodity.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Model_Commodity.cs new file mode 100644 index 0000000..6fd72c4 --- /dev/null +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Model_Commodity.cs @@ -0,0 +1,115 @@ +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Controllers; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Models +{ + //======================================================================= + public class Model_Commodity : SbmModel_Portal + { + //------------------------------------------------------------------- + // Construction. + public Model_Commodity(SbmLocaliser localiser) : + base(localiser) + { + AdditionalFiles_JS.Add("js/sbm-commodity.js"); + } + + //------------------------------------------------------------------- + // Filter properties. + public class FilterData + { + public String CommoditySearch { get; set; } + public String CommodityType { get; set; } + } + public FilterData Filter { get; } = new FilterData(); + public Sbm.CommodityType GetFilterCommodityType() + { + return (Sbm.CommodityType)Internals.CommodityTypeCodes.GetTypeForCode(Filter.CommodityType); + } + + //------------------------------------------------------------------- + // Commodity properties. + public String CommodityId { get; set; } + public String CommodityType{ get; set; } + public Sbm.CommodityType GetCommodityType() + { + return (Sbm.CommodityType)Internals.CommodityTypeCodes.GetTypeForCode(CommodityType); + } + public String CommodityCode { get; set; } + public String CommodityDesc { get; set; } + // Common properties. + public String CommodityNotes { get; set; } + public String CommodityStatus { get; set; } + public SaStatus GetCommodityStatus() + { + return SacsSystem.GetStatusForCode(CommodityStatus); + } + + //------------------------------------------------------------------- + // Validation. + //------------------------------------------------------------------- + // Commodity validation. + public bool ValidateCommodityData(SbmController_Base.AjaxResponse_Data responseData) + { + // Commodity Type. + if (CommodityType != null) + { + if (StringUtil.IsEmpty(CommodityType)) + responseData.SetControlError(nameof(CommodityType), Localiser["msg.validation.mandatory.value"]); + } + + // Commodity Code. + if (CommodityCode != null) + { + responseData.SetControlValue(nameof(CommodityCode), CommodityCode); + if (StringUtil.IsEmpty(CommodityCode)) + responseData.SetControlError(nameof(CommodityCode), Localiser["msg.validation.mandatory.value"]); + if (StringUtil.GetLength(CommodityCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_Code)) + responseData.SetControlError(nameof(CommodityCode), Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_Code)]); + } + + // Commodity Desc. + if (CommodityDesc != null) + { + responseData.SetControlValue(nameof(CommodityDesc), CommodityDesc); + if (StringUtil.IsEmpty(CommodityDesc)) + responseData.SetControlError(nameof(CommodityDesc), Localiser["msg.validation.mandatory.value"]); + if (StringUtil.GetLength(CommodityDesc) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_DescBrief)) + responseData.SetControlError(nameof(CommodityDesc), Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_DescBrief)]); + } + + // Commodity Notes. + if (CommodityNotes != null) + { + responseData.SetControlValue(nameof(CommodityNotes), CommodityNotes); + if (!StringUtil.IsEmpty(CommodityNotes) && StringUtil.GetLength(CommodityNotes) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_Notes)) + responseData.SetControlError(nameof(CommodityNotes), Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_Notes)]); + } + + // Commodity status. + if (CommodityStatus != null) + { + if (StringUtil.IsEmpty(CommodityStatus)) + responseData.SetControlError(nameof(CommodityStatus), Localiser["msg.validation.mandatory.value"]); + else if (!SbmCommodity.ValidStatuses.Contains(GetCommodityStatus())) + responseData.SetControlError(nameof(CommodityStatus), Localiser["msg.validation.invalid.value"]); + } + + return !responseData.HasControlErrors(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebPortal/SaBusinessMgrCoreWebPortal.csproj b/SaBusinessMgrCoreWebPortal/SaBusinessMgrCoreWebPortal.csproj index 6c1ec28..0b2f235 100644 --- a/SaBusinessMgrCoreWebPortal/SaBusinessMgrCoreWebPortal.csproj +++ b/SaBusinessMgrCoreWebPortal/SaBusinessMgrCoreWebPortal.csproj @@ -37,7 +37,6 @@ - diff --git a/SaBusinessMgrCoreWebPortal/Views/Commodity/Index.cshtml b/SaBusinessMgrCoreWebPortal/Views/Commodity/Index.cshtml new file mode 100644 index 0000000..637e46c --- /dev/null +++ b/SaBusinessMgrCoreWebPortal/Views/Commodity/Index.cshtml @@ -0,0 +1,117 @@ +@model Model_Commodity +@inject SbmLocaliser Localiser +@{ + /* Commodities - Index */ + ViewData["Title"] = "Commodities"; +} + +
+ + + +
+ +
+ +
+ + @* Filter Panel *@ + @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmCommodityFilter", @class = "sbm-form", @onSubmit = "return false;" })) + { +
+ @* Header - Page caption, paging controls, actions. *@ +
+
+
@Localiser["commodity.caption.commodities"]
+
+
+ +
+
+
@(Localiser[
+
@(Localiser[
+
+
+
+
+
+ @* Commodity filter - name etc. *@ +
+
@Localiser["label.search"]
+
+ @Html.TextBoxFor(model => model.Filter.CommoditySearch, new { @id = "", @class = "FilterCommodity", @maxlength = "32" }) +
+
+ @* Commodity Category *@ +
+
@Localiser["label.type"]
+
+ @Html.DropDownListFor(model => model.Filter.CommodityType, Model.GetCommodityTypeCodesForSelect(), Localiser["label.any"], new { @id = "", @class = "FilterCommodityType sbm-select" }) +
+
+
+
+ } + +
+ + @* Separate filter from results when alondside each other. *@ +
+ +
+ +
+ + @* Results Panel *@ +
+
+
+ + @* element templates *@ +
+ @* Commodity item template *@ +
+
+
+ @* Commodity caption *@ +
+
+
+ @* Burger menu *@ + +
+
+
+
+
+
@Localiser["label.associations"]: 
+
+
+
+
+
+
+
+
+
+
+ @* Burger dropdown item template - ul is ignored *@ +
    +
  • XXX
  • +
+
+
+ +
+
+
+ + diff --git a/SaBusinessMgrCoreWebPortal/Views/Commodity/Panel-CommodityDialog.cshtml b/SaBusinessMgrCoreWebPortal/Views/Commodity/Panel-CommodityDialog.cshtml new file mode 100644 index 0000000..b531571 --- /dev/null +++ b/SaBusinessMgrCoreWebPortal/Views/Commodity/Panel-CommodityDialog.cshtml @@ -0,0 +1,67 @@ +@model Model_Commodity +@inject SbmLocaliser Localiser +@{ + /* Commodities - Commodity dialog panel */ +} + + +@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmCommodityId", @class = "sbm-form" })) +{ + @Html.HiddenFor(model => model.CommodityId, new { @class = "CommodityId" }) +} +
+ + @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmCommodity", @class = "sbm-form", @onSubmit = "return false;" })) + { + @Html.HiddenFor(model => model.CommodityId, new { @id = "", @class = "CommodityId" }) + + @* Commodity Type *@ +
+
+ +
+
+ @Html.DropDownListFor(model => model.CommodityType, Model.GetCommodityTypeCodesForSelect(), Localiser["label.select"], new { @id = "cbCommodityType", @class = "CommodityType sbm-select" }) +
+
+
+ + @* Commodity Codeription *@ +
+
+ +
+
+ @Html.TextBoxFor(model => model.CommodityCode, new { @id = "ifCommodityCode", @class = "CommodityCode sbm-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_Code) }) +
+
+
+ + @* Commodity Description *@ +
+
+ +
+
+ @Html.TextBoxFor(model => model.CommodityDesc, new { @id = "ifCommodityDesc", @class = "CommodityDesc sbm-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_DescBrief) }) +
+
+
+ + @* Commodity Notes *@ +
+
+ +
+
+ @Html.TextAreaFor(model => model.CommodityNotes, new { @id = "ifCommodityNotes", @class = "CommodityNotes sbm-textarea", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Commodity_Notes) }) +
+
+
+ + } + +
diff --git a/SaBusinessMgrCoreWebPortal/Views/Contact/Index.cshtml b/SaBusinessMgrCoreWebPortal/Views/Contact/Index.cshtml index 8f83627..e8462b2 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Contact/Index.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Contact/Index.cshtml @@ -47,7 +47,7 @@ @* Affiliate Category *@
-
@Localiser["label.category"]
+
@Localiser["label.type"]
@Html.DropDownListFor(model => model.Filter.AffiliateType, Model.GetAffiliateTypeCodesForSelect(), Localiser["label.any"], new { @id = "", @class = "FilterAffiliateType sbm-select" })
@@ -92,14 +92,15 @@
-
-
-
-
-
@Localiser["label.associations"]: 
+
+
+
+
+
+
@* Burger dropdown item template - ul is ignored *@ diff --git a/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml b/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml index e15b104..cd6cb11 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml @@ -121,8 +121,6 @@ - diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-commodity.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-commodity.js new file mode 100644 index 0000000..552956d --- /dev/null +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-commodity.js @@ -0,0 +1,184 @@ +/* + * Commodity page scripts. + */ + +(function (win, doc, undef) +{ + "use strict"; + sbm.itemIdPrefix = 'Itm_'; + var $results; + + //-------------------------------------------------------------- + sbm.refreshResults = function (delay) + { + if (!sbm.awaitingRefreshResponse) + { + var $items = $('.sbm-panel-item-list', $results).fadeOut(200).empty(); + var $msgs = $('.sbm-panel-messages', $results).hide().empty().append($('
' + sbm.msg.dataQuerying + '
')).fadeIn(200); + } + sbm.ajax.refreshResults = sbm.ajax.refreshResults || { url: sbm.url.base + 'Commodity/Ajax/List', formId: 'frmCommodityFilter', callbackFn: sbm.doRefreshResults }; + sbm.doAjaxRequest(sbm.ajax.refreshResults, delay || 50); + sbm.awaitingRefreshResponse = true; + } + sbm.getItemTemplate = function () + { + return $('.sbm-panel-item-template .sbm-panel-item.Commodity', $results); + } + sbm.getDropdownItemTemplate = function () + { + return $('.sbm-panel-item-template .sbm-dropdown-menu.Commodity li.sbm-dropdown-item', $results); + } + sbm.doRefreshResults = function (response) + { + sbm.debug('doRefreshResults', response); + delete sbm.awaitingRefreshResponse; + sbm.refreshControlValues(response.controlValues); + var $msgs = $('.sbm-panel-messages', $results).hide().empty(); + var $items = $('.sbm-panel-item-list', $results).hide().empty(); + var $tmpl = sbm.getItemTemplate(); + sbm.refreshPaging(response, '#frmCommodityFilter', sbm.refreshResults); + if (!response.success) return; + // Reference data - Statuses. + if (response.defaultStatusCode) sbm.data.defaultStatusCode = response.defaultStatusCode; + if (response.statuses) + sbm.populateSelectCodeDesc('#cbCommodityStatus', response.statuses); + // Items. + var items = response.commodies; + if (!items.length) + return $msgs.append($('
' + sbm.msg.dataNoneFound + '
')).fadeIn(500); + for (let itemIdx = 0; itemIdx < items.length; itemIdx++) + { + let item = items[itemIdx]; + let $item = $tmpl.clone(); + sbm.populateItem($item, item); + $items.append($item); + } + $items.fadeIn(50); + } + sbm.populateItem = function ($item, item) + { + if (!item) return; + $item.prop('id', sbm.itemIdPrefix + item.id); + $('.CommodityName', $item).text(item.displayName); + $('.CommodityType', $item).text(item.typeDesc); + $('.CommodityAssociationCount', $item).on('click', function () { sbm.onClickAssociationCount(item.id); }).toggle(item.associationCount).find('.AssociationCount').text(item.associationCount); + $('.CommodityAddress', $item).text(item.addressSummary); + $('.CommodityNotes', $item).text(item.notes); + $('.StatusDesc', $item).text(item.statusDesc).addClass('sbm-status-' + item.statusCode.toLowerCase()); + $('.sbm-caption .sbm-action').toggleClass('sbm-action', !item.deleted); + if (!item.deleted) + { + let $mnu = $('ul.sbm-dropdown-menu', $item); + $mnu.append(sbm.getDropdownItemTemplate().clone().find('div.sbm-label').text(sbm.lbl.edit).end().on('click', function () { sbm.updateItem(item.id) })); + if (item.awaiting) + $mnu.append(sbm.getDropdownItemTemplate().clone().find('div.sbm-label').text(sbm.lbl.activate).end().on('click', function () { sbm.activateItem(item.id) })); + $('.sbm-header .sbm-action.sbm-item-update', $item).off('click').on('click', function () { sbm.updateItem(item.id) }); + $item.off('dblclick').on('dblclick', function () { sbm.updateItem(item.id) }); + } + $('.sbm-burger', $item).toggle(!!$('.sbm-burger .sbm-dropdown-menu .sbm-dropdown-item', $item).length); + $('.sbm-panel-messages', $results).hide().empty(); + return $item; + } + + //-------------------------------------------------------------- + sbm.createItem = function () + { + let $frm = sbm.$frm.commodity; + $('.CommodityId,input[type="text"],textarea,select', $frm).val(''); + $('.CommodityStatus', $frm).val(sbm.data.defaultStatusCode); + sbm.clearControlErrors(); + sbm.$dlg.commodity.dialog('option', 'title', sbm.dlg.title.createCommodity); + sbm.openDialog(sbm.$dlg.commodity, 600, 600); + } + sbm.doCreateItem = function () + { + sbm.storeItem(); + } + + //-------------------------------------------------------------- + sbm.updateItem = function (id) + { + $('.CommodityId', sbm.$frm.commodityId).val(id); + sbm.ajax.updateItem = sbm.ajax.updateItem || { url: sbm.url.base + 'Commodity/Ajax/GetItem', formId: 'frmCommodityId', callbackFn: sbm.onUpdateItem }; + sbm.doAjaxRequest(sbm.ajax.updateItem, 50); + } + sbm.onUpdateItem = function (response) + { + //sbm.debug('onUpdateItem', response); + let $frm = sbm.$frm.commodity; + $('.CommodityId,input[type="text"],textarea,select', $frm).val(''); + if (!response.success) return; + let item = response.commodity; + $('.CommodityId', $frm).val(item.id); + $('.CommodityType', $frm).val(item.typeCode); + $('.CommodityName', $frm).val(item.name); + $('.CommodityNotes', $frm).val(item.notes); + $('.CommodityStatus', $frm).val(item.statusCode); + sbm.clearControlErrors(); + sbm.$dlg.commodity.dialog('option', 'title', sbm.dlg.title.updateCommodity); + sbm.openDialog(sbm.$dlg.commodity, 600, 600); + } + sbm.doUpdateItem = function () + { + sbm.storeItem(); + } + + //-------------------------------------------------------------- + sbm.storeItem = function () + { + sbm.ajax.storeItem = sbm.ajax.storeItem || { url: sbm.url.base + 'Commodity/Ajax/StoreItem', formId: 'frmCommodity', callbackFn: sbm.onStoreItem }; + sbm.doAjaxRequest(sbm.ajax.storeItem, 50); + } + sbm.onStoreItem = function (response) + { + //sbm.debug('onStoreItem', response); + sbm.refreshControlValues(response.controlValues); + if (!response.success) return; + sbm.$dlg.commodity.dialog('close'); + + var item = response.commodity; + var $item = $('#' + sbm.itemIdPrefix + item.id); + if (!$item.length) + { + $item = $('.sbm-panel-item-template .sbm-panel-item.Commodity', $results).clone(); + $('.sbm-panel-item-list', $results).prepend($item).show(); + } + $item.replaceWith(sbm.populateItem(sbm.getItemTemplate(), item)); + } + + //-------------------------------------------------------------- + sbm.onClickAssociationCount = function (id) + { + if (!(id * 1)) return; + sbm.doPleaseWait(); + let $frm = $('#frmCommodityId'); + $('.CommodityId', $frm).val(id); + $frm.prop('action', sbm.url.base + 'Association').submit(); + } + + //-------------------------------------------------------------- + $(function () + { + $('.sbm-panel-filter .sbm-action.sbm-item-create').on('click', function () { sbm.createItem(); }); + $('.sbm-panel-filter .sbm-action.sbm-results-refresh').on('click', function () { sbm.refreshResults(); }); + $('.sbm-input, .sbm-textarea').on('input', function () { sbm.clearControlError(this); }); + $('.sbm-select').on('change', function () { sbm.clearControlError(this); }); + + sbm.$frm.filter = $('#frmCommodityFilter'); + $('.FilterCommodity', sbm.$frm.filter).on('input', function () { sbm.refreshResults(250); }); + $('.FilterCommodityCategory,.FilterCommodityStatusCategory', sbm.$frm.filter).on('change', function () { sbm.refreshResults(50); }); + sbm.$frm.commodityId = $('#frmCommodityId'); + sbm.$frm.commodity = $('#frmCommodity'); + $results = $('.sbm-panel-results'); + + var opt = sbm.dlgOpts(); + opt.buttons[sbm.dlg.btn.ok] = function () { sbm.doCreateItem(); }; + opt.buttons[sbm.dlg.btn.cancel] = function () { $(this).dialog('close'); }; + sbm.$dlg.commodity = $('#dlgCommodity').dialog(opt); + + setTimeout(sbm.refreshResults, 250); + }); + +}(window, window.document)); + +/* The End */ \ No newline at end of file diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-contact.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-contact.js index f17e0f5..e0658e5 100644 --- a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-contact.js +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-contact.js @@ -1,5 +1,5 @@ /* - * Admin - Affiliate page scripts. + * Contact page scripts. */ (function (win, doc, undef) @@ -61,7 +61,9 @@ $item.prop('id', sbm.itemIdPrefix + item.id); $('.AffiliateName', $item).text(item.displayName); $('.AffiliateType', $item).text(item.typeDesc); - $('.AffiliateAssociationCount', $item).on('click', function () { sbm.onClickAssociationCount(item.id); }).find('.AssociationCount').text(item.associationCount); + $('.AffiliateAssociationCount', $item).on('click', function () { sbm.onClickAssociationCount(item.id); }).toggle(item.associationCount).find('.AssociationCount').text(item.associationCount); + $('.AffiliateAddress', $item).text(item.addressSummary); + $('.AffiliateNotes', $item).text(item.notes); $('.StatusDesc', $item).text(item.statusDesc).addClass('sbm-status-' + item.statusCode.toLowerCase()); $('.sbm-caption .sbm-action').toggleClass('sbm-action', !item.deleted); if (!item.deleted)