From 047f9db390a63d9a0b4f347f2dd6bf5f3469cdf9 Mon Sep 17 00:00:00 2001 From: Andy Howard Date: Mon, 3 Mar 2025 18:21:03 +0000 Subject: [PATCH] 3.0.1.5 Refresh Transaction. Assets tidy. --- SaBusMgrStandardBase/Base/App/Sbm-Version.cs | 3 +- .../Base/Helpers/SbmRequirementHelper.cs | 16 +++--- .../Base/Helpers/SbmTransactionHelper.cs | 21 +++++++- .../Assets/AssetCategoryController-Ajax.cs | 51 +++++++++++-------- .../Assets/AssetController-Ajax.cs | 40 +++++++++------ .../RequirementController-Ajax.cs | 2 +- .../TransactionController-Ajax.cs | 19 +++++-- .../Models/Assets/Model_Asset-Config.cs | 4 +- .../Assets/Model_AssetCategory-Config.cs | 4 +- .../Assets/Asset/Panel-AssetDialog.cshtml | 20 ++++---- .../Panel-AssetCategoryDialog.cshtml | 24 ++++----- .../Panel-AssetCategoryList.cshtml | 4 +- .../Panel-RequirementDialog.cshtml | 12 ++--- .../wwwroot/js/sbm-asset-cat.js | 32 ++++-------- .../wwwroot/js/sbm-asset.js | 25 ++++----- .../wwwroot/js/sbm-main.js | 12 ++--- .../wwwroot/js/sbm-req.js | 22 ++++++-- .../wwwroot/js/sbm-trn.js | 23 ++++++--- 18 files changed, 197 insertions(+), 137 deletions(-) diff --git a/SaBusMgrStandardBase/Base/App/Sbm-Version.cs b/SaBusMgrStandardBase/Base/App/Sbm-Version.cs index 326b16e..7aa3020 100644 --- a/SaBusMgrStandardBase/Base/App/Sbm-Version.cs +++ b/SaBusMgrStandardBase/Base/App/Sbm-Version.cs @@ -15,7 +15,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- public static class Version { - private static String version { get; } = "3.0.1.4"; + private static String version { get; } = "3.0.1.5"; // Retrieve version. public static String GetFullVersion() { return version; } public static String GetAppVersion() @@ -42,6 +42,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App // 3.0.1.2 26-Feb-25 Requirements & tidy. // 3.0.1.3 02-Mar-25 Requirements. // 3.0.1.4 02-Mar-25 Fix pre-login crash on GetCurrencyDecimals(). + // 3.0.1.5 03-Mar-25 Refresh Transaction. Assets tidy. //------------------------------------------------------------------- // 3.0.0 Jul-2021 Initial demo test version. // 02-Feb-25 Initial live deployment. diff --git a/SaBusMgrStandardBase/Base/Helpers/SbmRequirementHelper.cs b/SaBusMgrStandardBase/Base/Helpers/SbmRequirementHelper.cs index 8c44440..bb3f0cf 100644 --- a/SaBusMgrStandardBase/Base/Helpers/SbmRequirementHelper.cs +++ b/SaBusMgrStandardBase/Base/Helpers/SbmRequirementHelper.cs @@ -13,12 +13,14 @@ using System.Threading.Tasks; namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers { + //======================================================================= + // Requirement Helper. //======================================================================= public static class SbmRequirementHelper { //------------------------------------------------------------------- // Utilities. - public static decimal Round(decimal? value, ushort decimals) + public static decimal RoundMoney(decimal? value, ushort decimals) { return Decimal.Round((decimal)value, decimals, MidpointRounding.AwayFromZero); } @@ -94,28 +96,28 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers // Unit amount. // NB Use the supplied amount rather than reverting to the Commodity price as the Unit Amount may have been manually modified. - response.AmountUnit = Round(request.AmountUnit, currencyDecimals); + response.AmountUnit = RoundMoney(request.AmountUnit, currencyDecimals); // Actual amount. response.Quantity = request.Quantity; - response.AmountAct = Round(response.AmountUnit * response.Quantity, currencyDecimals); + response.AmountAct = RoundMoney(response.AmountUnit * response.Quantity, currencyDecimals); // Discount. response.AmountDisc = request.AmountDiscount; if (Math.Abs((decimal)response.AmountDisc) < 0.01m && Math.Abs(request.PercentDiscount) > 0.01m && Math.Abs(request.PercentDiscount) < 100.0m) response.AmountDisc = response.AmountAct * request.PercentDiscount / 100.0m; - response.AmountDisc = Round(response.AmountDisc * response.Quantity, currencyDecimals); + response.AmountDisc = RoundMoney(response.AmountDisc * response.Quantity, currencyDecimals); // Net amount. - response.AmountNet = Round(response.AmountAct - response.AmountDisc, currencyDecimals); + response.AmountNet = RoundMoney(response.AmountAct - response.AmountDisc, currencyDecimals); // Tax. SaTaxCode taxCode = request.Internals.GetTaxCodesEffectiveOn(request.TaxEffective).FirstOrDefault(tax => tax.Code.EqualsCI(request.TaxCode)); response.RateTax = taxCode?.TaxRate ?? 0.0m; - response.AmountTax = Round(response.AmountNet * response.RateTax / 100.0m, currencyDecimals); + response.AmountTax = RoundMoney(response.AmountNet * response.RateTax / 100.0m, currencyDecimals); // Total amount. - response.AmountTot = Round(response.AmountNet + response.AmountTax, currencyDecimals); + response.AmountTot = RoundMoney(response.AmountNet + response.AmountTax, currencyDecimals); response.Success = true; return response; diff --git a/SaBusMgrStandardBase/Base/Helpers/SbmTransactionHelper.cs b/SaBusMgrStandardBase/Base/Helpers/SbmTransactionHelper.cs index 9f43f15..1ca9c25 100644 --- a/SaBusMgrStandardBase/Base/Helpers/SbmTransactionHelper.cs +++ b/SaBusMgrStandardBase/Base/Helpers/SbmTransactionHelper.cs @@ -1,4 +1,8 @@ -using System; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.ReferenceData; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,10 +10,25 @@ using System.Threading.Tasks; namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers { + //======================================================================= + // Transaction Helper. //======================================================================= public static class SbmTransactionHelper { //------------------------------------------------------------------- + // Currency. + + /// Work out how many currency decimals should be used for the specified transaction. + public static ushort GetCurrencyDecimals(SbmInternals internals, SbmTransaction transaction) + { + if (SysId.IsValid(transaction?.CurrencyId)) + { + SaCurrency currency = internals.GetCurrencyById(transaction.CurrencyId); + if (currency != null) + return SbmInternals.GetCurrencyDecimals(currency.Decimals); + } + return internals.GetCurrentCurrencyDecimals(); + } //------------------------------------------------------------------- } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetCategoryController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetCategoryController-Ajax.cs index 1bb189e..4c04bee 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetCategoryController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetCategoryController-Ajax.cs @@ -10,6 +10,7 @@ using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; +using static Sarand.BusinessMgr.Web.Portal.Models.Requirements.Model_Requirement.RequirementData; namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets { @@ -34,8 +35,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets } private void PopulateAssetCategoryResponseListData(SbmModel_Portal model, AssetCategoryListData data, SbmAssetCategory assetCategory) { - data.Id = SysId.ToString(assetCategory.Id); // Prominent properties for selecting and editing. + data.Id = SysId.ToString(assetCategory.Id); + data.Field.Value.Add($"{Model_AssetCategory.ItemField.Id}", data.Id); + data.Field.Value.Add($"{Model_AssetCategory.ItemField.Exists}", "1"); data.Code = assetCategory.Code; data.Caption = assetCategory.DescBrief; // Asset count. @@ -48,14 +51,14 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets // Asset type - populate for list ('Type' property populated with desc) and form (Type Code & Desc). data.TypeCode = Internals.AssetTypeCodes.GetCodeForType(assetCategory.AssetType); data.TypeDesc = Internals.AssetTypeCodes.GetDescForType(assetCategory.AssetType); - data.Field.Value.Add($"{Model_AssetCategory.ItemField.Type}", Internals.AssetTypeCodes.GetDescForType(assetCategory.AssetType)); + data.Field.Value.Add($"{Model_AssetCategory.ItemField.Type}", Internals.AssetTypeCodes.GetCodeForType(assetCategory.AssetType)); + data.Field.Value.Add($"{Model_AssetCategory.ItemField.TypeDesc}", Internals.AssetTypeCodes.GetDescForType(assetCategory.AssetType)); // Asset Category properties. data.Field.Value.Add($"{Model_AssetCategory.ItemField.Code}", assetCategory.Code); data.Field.Value.Add($"{Model_AssetCategory.ItemField.Caption}", assetCategory.DescBrief); // Common properties. data.StatusCode = assetCategory.StatusCode; data.StatusDesc = assetCategory.StatusDesc; - data.Field.Value.Add($"{Model_AssetCategory.ItemField.Status}", assetCategory.StatusDesc); // Cleanse field values. data.Field.Value.RemoveAll(item => StringUtil.IsBlank(item.Value)); // Populate item list values that might be cleared during update after removing blank values to ensure that blank values are published. @@ -70,15 +73,20 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets { // Construction. public AjaxResponse_AssetCategoryConfig(SbmModel_Portal model) : base(model) { } - // Configuration. - public Model_AssetCategory.ListConfigData Config { get; } = new Model_AssetCategory.ListConfigData(); - public Model_AssetCategory.ItemConfigData ConfigItemNew { get; } = new Model_AssetCategory.ItemConfigData(); - // Reference data. - public List AssetTypes { get; } = new List(); - public List IncomeTypes { get; } = new List(); - public List Statuses { get; } = new List(); - public List StatusesCreate { get; } = new List(); - public String StatusCodeDefault { get; set; } + // Configuration data - object copied directly to env.datain script. + public class ConfigData + { + // Configuration. + public Model_AssetCategory.ListConfigData CfgList { get; } = new Model_AssetCategory.ListConfigData(); + public Model_AssetCategory.ItemConfigData CfgItemNew { get; } = new Model_AssetCategory.ItemConfigData(); + // Reference data. + public List AssetTypes { get; } = new List(); + public List IncomeTypes { get; } = new List(); + public List Statuses { get; } = new List(); + public List StatusesCreate { get; } = new List(); + public String StatusCodeDefault { get; set; } + } + public ConfigData Data { get; set; } = new ConfigData(); } // Ajax request. [HttpPost] @@ -104,23 +112,23 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets private void PopulateAssetCategoryConfig(Model_AssetCategory model, AjaxResponse_AssetCategoryConfig responseData) { // Configuration. - model.PopulateListConfig(responseData.Config); - model.PopulateItemConfig(responseData.ConfigItemNew, null, Sbm.AssetType.Unknown); + model.PopulateListConfig(responseData.Data.CfgList); + model.PopulateItemConfig(responseData.Data.CfgItemNew, null, Sbm.AssetType.Unknown); // Reference data - select lists. foreach (TypeCodeDesc assetType in GetSystemCodes(Sbm.SystemCode.AssetType)) - responseData.AssetTypes.Add(new AjaxResponse_Data.ItemCodeDesc(assetType.Code, assetType.Desc)); + responseData.Data.AssetTypes.Add(new AjaxResponse_Data.ItemCodeDesc(assetType.Code, assetType.Desc)); foreach (TypeCodeDesc incomeType in GetSystemCodes(Sbm.SystemCode.AssetIncomeType)) - responseData.IncomeTypes.Add(new AjaxResponse_Data.ItemCodeDesc(incomeType.Code, incomeType.Desc)); + responseData.Data.IncomeTypes.Add(new AjaxResponse_Data.ItemCodeDesc(incomeType.Code, incomeType.Desc)); // Reference data - statuses. foreach (SaStatus status in SbmAssetCategory.ValidStatuses) { - responseData.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); + responseData.Data.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); if (status != SaStatus.Deleted) - responseData.StatusesCreate.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); + responseData.Data.StatusesCreate.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); } - responseData.StatusCodeDefault = SacsSystem.GetStatusCode(SbmAssetCategory.DefaultStatus); + responseData.Data.StatusCodeDefault = SacsSystem.GetStatusCode(SbmAssetCategory.DefaultStatus); } //------------------------------------------------------------------- @@ -137,7 +145,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets public ushort? Maintain { get; set; } } public ModeData Mode { get; set; } - // AssetCategory list. + // Item list. public List AssetCategories { get; } = new List(); } //------------------------------------------------------------------- @@ -203,7 +211,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets TypeDesc = Localiser.GetAssetTypeCaption(assetType), StatusCode = values.GetString(colStatus.DataName), }; - assetCategoryData.Field.Value.Add($"{Model_AssetCategory.ItemField.Type}", Internals.AssetTypeCodes.GetDescForType(assetType)); + assetCategoryData.Field.Value.Add($"{Model_AssetCategory.ItemField.Type}", Internals.AssetTypeCodes.GetCodeForType(assetType)); + assetCategoryData.Field.Value.Add($"{Model_AssetCategory.ItemField.TypeDesc}", Internals.AssetTypeCodes.GetDescForType(assetType)); assetCategoryData.Field.Value.Add($"{Model_AssetCategory.ItemField.Code}", assetCategoryData.Code); assetCategoryData.Field.Value.Add($"{Model_AssetCategory.ItemField.Caption}", assetCategoryData.Caption); assetCategoryData.Field.Value.Add($"{Model_AssetCategory.ItemField.Notes}", AssetMgr.GetAssetCategoryDataValue(colNotes, values).ToString()); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetController-Ajax.cs index adb10ad..e421073 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Assets/AssetController-Ajax.cs @@ -35,12 +35,16 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets } private void PopulateAssetResponseListData(SbmModel_Portal model, AssetListData data, SbmAssetCategory assetCategory, SbmAsset asset) { - data.Field.Value.Add($"{Model_Asset.ItemField.SerialNumber}", asset.SerialNumber); - data.Field.Value.Add($"{Model_Asset.ItemField.ReferenceExt}", asset.RefExt); // Prominent properties for selecting and editing. data.Id = SysId.ToString(asset.Id); - data.CategoryDesc = assetCategory.DescBrief; + data.Field.Value.Add($"{Model_Asset.ItemField.Id}", data.Id); + data.Field.Value.Add($"{Model_Asset.ItemField.Exists}", "1"); + data.Field.Value.Add($"{Model_Asset.ItemField.CategoryId}", $"{asset.AssetCategoryId}"); + data.Field.Value.Add($"{Model_Asset.ItemField.Category}", assetCategory.DescBrief); data.Caption = asset.DescBrief; + data.Field.Value.Add($"{Model_Asset.ItemField.Caption}", data.Caption); + data.Field.Value.Add($"{Model_Asset.ItemField.SerialNumber}", asset.SerialNumber); + data.Field.Value.Add($"{Model_Asset.ItemField.ReferenceExt}", asset.RefExt); } private void PopulateAssetResponseItemData(SbmModel_Portal model, AssetItemData data, SbmAssetCategory assetCategory, SbmAsset asset) { @@ -61,7 +65,6 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets // Common properties. data.StatusCode = asset.StatusCode; data.StatusDesc = asset.StatusDesc; - data.Field.Value.Add($"{Model_Asset.ItemField.Status}", asset.StatusDesc); // Cleanse field values. data.Field.Value.RemoveAll(item => StringUtil.IsBlank(item.Value)); // Populate item list values that might be cleared during update after removing blank values to ensure that blank values are published. @@ -76,13 +79,18 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets { // Construction. public AjaxResponse_AssetConfig(SbmModel_Portal model) : base(model) { } - // Configuration. - public Model_Asset.ListConfigData Config { get; } = new Model_Asset.ListConfigData(); - public Model_Asset.ItemConfigData ConfigItemNew { get; } = new Model_Asset.ItemConfigData(); - // Reference data. - public List Statuses { get; } = new List(); - public List StatusesCreate { get; } = new List(); - public String StatusCodeDefault { get; set; } + // Configuration data - object copied directly to env.datain script. + public class ConfigData + { + // Configuration. + public Model_Asset.ListConfigData CfgList { get; } = new Model_Asset.ListConfigData(); + public Model_Asset.ItemConfigData CfgItemNew { get; } = new Model_Asset.ItemConfigData(); + // Reference data. + public List Statuses { get; } = new List(); + public List StatusesCreate { get; } = new List(); + public String StatusCodeDefault { get; set; } + } + public ConfigData Data { get; set; } = new ConfigData(); } //------------------------------------------------------------------- [HttpPost] @@ -108,17 +116,17 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets private void PopulateAssetConfig(Model_Asset model, AjaxResponse_AssetConfig responseData) { // Configuration. - model.PopulateListConfig(responseData.Config); - model.PopulateItemConfig(responseData.ConfigItemNew, null, Sbm.AssetType.Unknown); + model.PopulateListConfig(responseData.Data.CfgList); + model.PopulateItemConfig(responseData.Data.CfgItemNew, null, Sbm.AssetType.Unknown); // Reference data - statuses. foreach (SaStatus status in SbmAsset.ValidStatuses) { - responseData.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); + responseData.Data.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); if (status != SaStatus.Deleted) - responseData.StatusesCreate.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); + responseData.Data.StatusesCreate.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); } - responseData.StatusCodeDefault = SacsSystem.GetStatusCode(SbmAsset.DefaultStatus); + responseData.Data.StatusCodeDefault = SacsSystem.GetStatusCode(SbmAsset.DefaultStatus); } //------------------------------------------------------------------- diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Requirements/RequirementController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Requirements/RequirementController-Ajax.cs index 356dcdb..5c3a33a 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Requirements/RequirementController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Requirements/RequirementController-Ajax.cs @@ -472,7 +472,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements decimal unitAmount = commodity.SalesPrice; if (SbmTransaction.IsPurchaseType(transactionType)) unitAmount = commodity.CostPrice; - unitAmount = SbmRequirementHelper.Round(unitAmount, currencyDecimals); + unitAmount = SbmRequirementHelper.RoundMoney(unitAmount, currencyDecimals); // Populate response. responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.AmountUnit}"] = model.FormatMoneyForDisplay(unitAmount, currencyDecimals); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs index 9492c72..fccd82e 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Helpers; using Sarand.BusinessMgr.Web.Portal.Components; using Sarand.BusinessMgr.Web.Portal.Models.Contacts; using Sarand.BusinessMgr.Web.Portal.Models.Transactions; @@ -79,6 +80,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions data.Field.Value.Add($"{Model_Transaction.ItemField.InProgress}", model.FormatDateForForm(transaction.InProgress)); data.Field.Value.Add($"{Model_Transaction.ItemField.Required}", model.FormatDateForForm(transaction.Required)); data.Field.Value.Add($"{Model_Transaction.ItemField.Closed}", model.FormatDateForForm(transaction.Closed)); + if (model.UserCanViewFinancials()) + { + ushort currencyDecimals = SbmTransactionHelper.GetCurrencyDecimals(Internals, transaction); + data.Field.Value.Add($"{Model_Transaction.ItemField.AmountNet}", model.FormatMoneyForDisplay(transaction.AmountNet, currencyDecimals)); + data.Field.Value.Add($"{Model_Transaction.ItemField.AmountTax}", model.FormatMoneyForDisplay(transaction.AmountTax, currencyDecimals)); + data.Field.Value.Add($"{Model_Transaction.ItemField.AmountTotal}", model.FormatMoneyForDisplay(transaction.AmountTot, currencyDecimals)); + } if (dataGroups != null && dataGroups.Contains(TransactionDataGroup.Core)) { // Core. @@ -240,6 +248,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions ColumnDfn colRef = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.Ref); ColumnDfn colRefExt = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.RefExt); ColumnDfn colDescBrief = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.DescBrief); + ColumnDfn colCurrencyId = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.CurrencyId); ColumnDfn colItemCount = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.ReqntCount); ColumnDfn colRaisedOn = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.RaisedOn); ColumnDfn colRequiredOn = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.RequiredOn); @@ -254,7 +263,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions ColumnDfn colUpdatedOn = TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.UpdateOn_Date); List columns = new List() { - colId, colTargetName, colType, colRef, colRefExt, colDescBrief, colItemCount, + colId, colTargetName, colType, colRef, colRefExt, colDescBrief, colCurrencyId, colItemCount, colRaisedOn, colRequiredOn, colInProgressOn, colClosedOn, colNotes, colStatus, colCreatedOn, colUpdatedOn }; @@ -268,6 +277,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions { NamedValue.Map values = resultSet.GetRecordValues(); Sbm.TransactionType transactionType = (Sbm.TransactionType)values.GetLong(colType.DataName); + SysId currencyId = new SysId(values.GetLong(colCurrencyId.DataName)); + ushort currencyDecimals = Internals.GetCurrencyDecimalsById(currencyId); DateTime transactionRaisedOn = values.GetDate(colRaisedOn.DataName); DateTime transactionInProgressOn = values.GetDate(colInProgressOn.DataName); SaStatus transactionStatus = SacsSystem.GetStatusForCode(values.GetString(colStatus.DataName)); @@ -294,9 +305,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions transactionData.Field.Value.Add($"{Model_Transaction.ItemField.ClosedFmt}", model.FormatDateForDisplay(values.GetDate(colClosedOn.DataName))); if (model.UserCanViewFinancials()) { - transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountNet}", colAmountNet.FormatValue(values)); - transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountTax}", colAmountTax.FormatValue(values)); - transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountTotal}", colAmountTot.FormatValue(values)); + transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountNet}", model.FormatMoneyForDisplay(values.GetDecimal(colAmountNet.DataName), currencyDecimals)); + transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountTax}", model.FormatMoneyForDisplay(values.GetDecimal(colAmountTax.DataName), currencyDecimals)); + transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountTotal}", model.FormatMoneyForDisplay(values.GetDecimal(colAmountTot.DataName), currencyDecimals)); } transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Notes}", TransactionMgr.GetTransactionDataValue(colNotes, values).ToString()); transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Status}", SacsSystem.GetStatusDescForCode(SacsSystem.GetStatusCode(transactionStatus))); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_Asset-Config.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_Asset-Config.cs index 620547a..7ce6f01 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_Asset-Config.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_Asset-Config.cs @@ -14,15 +14,17 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Assets //------------------------------------------------------------------- /// Prefix for field names. - public const String FieldNamePrefix = "AssetCat"; + public const String FieldNamePrefix = "Asset"; /// Item fields. public enum ItemField { // Asset properties. Id, + Exists, // Identity. Category, + CategoryId, SerialNumber, ReferenceExt, Caption, diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_AssetCategory-Config.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_AssetCategory-Config.cs index 0828695..e8b7896 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_AssetCategory-Config.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Assets/Model_AssetCategory-Config.cs @@ -21,8 +21,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Assets { // AssetCategory properties. Id, + Exists, // Identity. Type, + TypeDesc, Code, Caption, // Defaults. @@ -107,7 +109,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Assets // List columns. if (GetFilterAssetType() > 0) - config.Column.Hide.Add($"{ItemField.Type}"); + config.Column.Hide.Add($"{ItemField.TypeDesc}"); // Asset Category Assets. if (!modeIsMaintain || !SessionConsole.AllowOption(Sbm.ConfigOption.Assets)) diff --git a/SaBusinessMgrCoreWebPortal/Views/Assets/Asset/Panel-AssetDialog.cshtml b/SaBusinessMgrCoreWebPortal/Views/Assets/Asset/Panel-AssetDialog.cshtml index e17d75e..48d5638 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Assets/Asset/Panel-AssetDialog.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Assets/Asset/Panel-AssetDialog.cshtml @@ -10,14 +10,14 @@ @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmAssetId", @onSubmit = "return false;" })) { - @Html.Hidden("Asset.Id", "", new { @id = "", @class = "AssetId" }) + @Html.Hidden("Asset.Id", "", new { @id = "", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.Id)}" }) }
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmAsset", @class = "sbm-form", @onSubmit = "return false;" })) { - @Html.Hidden("Asset.Exists", "", new { @id = "", @class = "AssetExists" }) - @Html.Hidden("Asset.Id", "", new { @id = "", @class = "AssetId" }) + @Html.Hidden("Asset.Exists", "", new { @id = "", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.Exists)} sbm-input sbm-auto-val" }) + @Html.Hidden("Asset.Id", "", new { @id = "", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.Id)} sbm-input sbm-auto-val" }) @* Type *@
@@ -30,8 +30,8 @@
- @Html.Hidden("Asset.CategoryId", "", new { @id = "", @class = "AssetCategoryId" }) - + @Html.Hidden("Asset.CategoryId", "", new { @id = "", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.CategoryId)} sbm-input sbm-auto-val" }) +
@@ -52,7 +52,7 @@
- @Html.TextBox("Asset.SerialNumber", "", new { @id = "ifAssetSerialNumber", @class = "AssetSerialNumber sbm-input upper", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAsset_SerialNumber) }) + @Html.TextBox("Asset.SerialNumber", "", new { @id = "ifAssetSerialNumber", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.SerialNumber)} sbm-input sbm-auto-val upper", @autocomplete = "off", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAsset_SerialNumber) })
@@ -69,7 +69,7 @@
- @Html.TextBox("Asset.DescBrief", "", new { @id = "ifAssetDescription", @class = "AssetDescription sbm-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAsset_DescBrief) }) + @Html.TextBox("Asset.DescBrief", "", new { @id = "ifAssetDescription", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.Caption)} sbm-input sbm-auto-val", @autocomplete = "off", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAsset_DescBrief) })
@@ -84,9 +84,9 @@
-
+
- +
@@ -103,7 +103,7 @@
- @Html.TextArea("Asset.Notes", "", new { @id = "ifAssetNotes", @class = "AssetNotes sbm-textarea", @rows = 3, @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAsset_Notes) }) + @Html.TextArea("Asset.Notes", "", new { @id = "ifAssetNotes", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.Notes)} sbm-textarea sbm-auto-val", @autocomplete = "off", @rows = 3, @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAsset_Notes) })
diff --git a/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryDialog.cshtml b/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryDialog.cshtml index 45c5f2f..14d86c7 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryDialog.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryDialog.cshtml @@ -10,14 +10,14 @@ @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmAssetCategoryId", @onSubmit = "return false;" })) { - @Html.Hidden("AssetCategory.Id", "", new { @id = "", @class = "AssetCategoryId" }) + @Html.Hidden("AssetCategory.Id", "", new { @id = "", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Id)}" }) }
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmAssetCategory", @class = "sbm-form", @onSubmit = "return false;" })) { - @Html.Hidden("AssetCategory.Exists", "", new { @id = "", @class = "AssetCategoryExists sbm-input" }) - @Html.Hidden("AssetCategory.Id", "", new { @id = "", @class = "AssetCategoryId sbm-input" }) + @Html.Hidden("AssetCategory.Exists", "", new { @id = "", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Exists)} sbm-input sbm-auto-val" }) + @Html.Hidden("AssetCategory.Id", "", new { @id = "", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Id)} sbm-input sbm-auto-val" }) @* Type *@
@@ -27,9 +27,9 @@
-
+
- @Html.DropDownList("AssetCategory.TypeCode", Model.GetAssetTypeCodesForDropdown(), Localiser["label.select"], new { @id = "ifAssetCategoryType", @class = "AssetCategoryType sbm-select sbm-auto-val" }) + @Html.DropDownList("AssetCategory.TypeCode", Model.GetAssetTypeCodesForDropdown(), Localiser["label.select"], new { @id = "ifAssetCategoryType", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Type)} sbm-select sbm-auto-val" })
@@ -44,9 +44,9 @@
-
+
- @Html.TextBox("AssetCategory.Code", "", new { @id = "ifAssetCategoryCode", @class = "AssetCategoryCode sbm-input sbm-auto-val upper", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAssetCategory_Code) }) + @Html.TextBox("AssetCategory.Code", "", new { @id = "ifAssetCategoryCode", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Code)} sbm-input sbm-auto-val upper", @autocomplete = "off", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAssetCategory_Code) })
@@ -61,9 +61,9 @@
-
+
- @Html.TextBox("AssetCategory.Caption", "", new { @id = "ifAssetCategoryCaption", @class = "AssetCategoryDescription sbm-input sbm-auto-val", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAssetCategory_DescBrief) }) + @Html.TextBox("AssetCategory.Caption", "", new { @id = "ifAssetCategoryCaption", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Caption)} sbm-input sbm-auto-val", @autocomplete = "off", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAssetCategory_DescBrief) })
@@ -78,9 +78,9 @@
-
+
- +
@@ -97,7 +97,7 @@
- @Html.TextArea("AssetCategory.Notes", "", new { @id = "ifAssetCategoryNotes", @class = "AssetCategoryNotes sbm-textarea sbm-auto-val", @rows = 3, @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAssetCategory_Notes) }) + @Html.TextArea("AssetCategory.Notes", "", new { @id = "ifAssetCategoryNotes", @class = $"{Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Notes)} sbm-textarea sbm-auto-val", @autocomplete = "off", @rows = 3, @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.SaAssetCategory_Notes) })
diff --git a/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryList.cshtml b/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryList.cshtml index 4a95f28..feadaa5 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryList.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Assets/AssetCategory/Panel-AssetCategoryList.cshtml @@ -11,7 +11,7 @@ - + @@ -36,7 +36,7 @@ @* AssetCategory row template - table is ignored. *@
@Localiser["label.type"]@Localiser["label.type"] @Localiser["label.code"] @Localiser["label.description"] @Localiser["label.notes"]
- + diff --git a/SaBusinessMgrCoreWebPortal/Views/Requirement/Panel-RequirementDialog.cshtml b/SaBusinessMgrCoreWebPortal/Views/Requirement/Panel-RequirementDialog.cshtml index 22f5792..d612ab7 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Requirement/Panel-RequirementDialog.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Requirement/Panel-RequirementDialog.cshtml @@ -64,7 +64,7 @@
- @Html.TextBox("Requirement.DescBrief", "", new { @id = "ifReqntDesc", @class = $"{@Model_Requirement.GetFieldName(Model_Requirement.ItemField.DescBrief)} sbm-input sbm-auto-val", @autocomplete = false, @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief) }) + @Html.TextBox("Requirement.DescBrief", "", new { @id = "ifReqntDesc", @class = $"{@Model_Requirement.GetFieldName(Model_Requirement.ItemField.DescBrief)} sbm-input sbm-auto-val", @autocomplete = "off", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief) })
@@ -136,7 +136,7 @@
- @Html.TextBox("Requirement.AmountUnit", "", new { @id = "ifReqntAmountUnit", @class = "ReqntAmountUnit sbm-input sbm-auto-val right sbm-format-currency", @autocomplete = false, @readonly = true, @maxlength = 12 }) + @Html.TextBox("Requirement.AmountUnit", "", new { @id = "ifReqntAmountUnit", @class = "ReqntAmountUnit sbm-input sbm-auto-val right sbm-format-currency", @autocomplete = "off", @readonly = true, @maxlength = 12 })
@@ -159,7 +159,7 @@
- @Html.TextBox("Requirement.Quantity", "", new { @id = "ifReqntQuantity", @class = "ReqntQuantity sbm-input sbm-auto-val right", @autocomplete = false, @maxlength = 8 }) + @Html.TextBox("Requirement.Quantity", "", new { @id = "ifReqntQuantity", @class = "ReqntQuantity sbm-input sbm-auto-val right", @autocomplete = "off", @maxlength = 8 })
@@ -179,7 +179,7 @@
- @Html.TextBox("Requirement.AmountAct", "", new { @id = "ifReqntAmountAct", @class = "ReqntAmountAct sbm-input sbm-auto-val right sbm-format-currency", @autocomplete = false, @readonly = true, @maxlength = 12 }) + @Html.TextBox("Requirement.AmountAct", "", new { @id = "ifReqntAmountAct", @class = "ReqntAmountAct sbm-input sbm-auto-val right sbm-format-currency", @autocomplete = "off", @readonly = true, @maxlength = 12 })
@@ -227,7 +227,7 @@
-
@Html.TextBox("Requirement.Required", "", new { @id = "ifRequirementRequired", @class = "RequirementRequired sbm-input sbm-calendar sbm-auto-val", @autocomplete = false, @maxlen = 10 })
+
@Html.TextBox("Requirement.Required", "", new { @id = "ifRequirementRequired", @class = "RequirementRequired sbm-input sbm-calendar sbm-auto-val", @autocomplete = "off", @maxlen = 10 })
@@ -354,7 +354,7 @@
- @Html.TextArea("Requirement.Notes", "", new { @id = "ifRequirementNotes", @class = $"{Model_Requirement.GetFieldName(Model_Requirement.ItemField.Notes)} sbm-textarea sbm-auto-val", @autocomplete = false, @rows = "3", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_Notes) }) + @Html.TextArea("Requirement.Notes", "", new { @id = "ifRequirementNotes", @class = $"{Model_Requirement.GetFieldName(Model_Requirement.ItemField.Notes)} sbm-textarea sbm-auto-val", @autocomplete = "off", @rows = "3", @maxlength = @Model.GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_Notes) })
diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset-cat.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset-cat.js index 0d0f17f..8ab68f5 100644 --- a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset-cat.js +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset-cat.js @@ -11,21 +11,12 @@ //-------------------------------------------------------------- ac.refreshConfig = function (env, delay) { - env.ajax.refreshConfig = env.ajax.refreshConfig || { url: sbm.url.base + 'Assets/AssetCategory/Ajax/Config', formSel: env.$frm.filter, callbackFn: function (response) { ac.doRefreshConfig(env, response); } }; - sbm.doAjaxRequest(env.ajax.refreshConfig, delay || 50); + sbm.doAjaxRequest(env.ajax.refreshConfig = env.ajax.refreshConfig || { url: sbm.url.base + 'Assets/AssetCategory/Ajax/Config', formSel: env.$frm.filter, callbackFn: function (response) { ac.doRefreshConfig(env, response); } }, delay || 50); } ac.doRefreshConfig = function (env, response) { - //sbm.debug('doRefreshConfig', env, response); if (!response.success) return; - // Config. - env.mode = response.mode; - env.config = response.config; - env.configItemNew = response.configItemNew; - env.data.assetTypes = response.assetTypes; - env.data.statuses = response.statuses; - env.data.statusesCreate = response.statusesCreate; - env.data.statusCodeDefault = response.statusCodeDefault; + Object.assign(env.data, response.data); } //-------------------------------------------------------------- @@ -37,8 +28,7 @@ env.$pnl.table.find('tbody tr').remove(); env.$pnl.msgs.hide().empty().append($('
' + sbm.msg.dataQuerying + '
')).fadeIn(200); } - env.ajax.assetCategories = env.ajax.assetCategories || { url: sbm.url.base + 'Assets/AssetCategory/Ajax/GetAssetCategories', formSel: env.$frm.filter, callbackFn: function (response) { ac.doRefreshResults(env, response); } }; - sbm.doAjaxRequest(env.ajax.assetCategories, delay || 50); + sbm.doAjaxRequest(env.ajax.assetCategories = env.ajax.assetCategories || { url: sbm.url.base + 'Assets/AssetCategory/Ajax/GetAssetCategories', formSel: env.$frm.filter, callbackFn: function (response) { ac.doRefreshResults(env, response); } }, delay || 50); env.data.awaitingRefreshResponse = true; } ac.doRefreshResults = function (env, response) @@ -50,6 +40,7 @@ sbm.refreshPaging(response, env.$frm.filter, function () { ac.refreshResults(env); }); if (!response.success) return; ac.doRefreshConfig(env, response); + env.mode = response.mode; // Menu. if (env.$pnl.bgr.length) @@ -57,7 +48,7 @@ env.$pnl.bgr.invisible(); env.$pnl.mnu.empty(); env.$pnl.mnu.append(ac.getFilterMenuOption(env, sbm.lbl.refresh, function () { ac.refreshResults(env); }, 'sbm-refresh')); - env.$pnl.mnu.append(ac.getFilterMenuOption(env, sbm.lbl.create, function () { ac.createItem(env, env.configItemNew); }, 'sbm-add')); + env.$pnl.mnu.append(ac.getFilterMenuOption(env, sbm.lbl.create, function () { ac.createItem(env, env.data.cfgItemNew); }, 'sbm-add')); env.$pnl.bgr.toggleVisibility(!!$('.sbm-dropdown-item', env.$pnl.mnu).length); } @@ -67,13 +58,14 @@ return env.$pnl.msgs.append($('
' + sbm.msg.dataNoneFound + '
')).fadeIn(500); for (const item of items) $table.append(env, ac.populateItem(env, ac.getItemTemplate(env), item)); + sbm.configureItemTable(env.data.cfgList, $table); } ac.populateItem = function (env, $item, item) { //sbm.debug('populateItem', env, $item, item) if (!item) return $item; $item.prop('id', ac.getItemId(item)); - let cfg = env.config; + let cfg = env.data.cfgList; if (cfg) sbm.populateItemValues(cfg, $item, item.field.value); let prefix = cfg.column.prefix; $('.' + prefix + 'Status', $item).text(item.statusDesc).removeStatusClasses().addClass('sbm-status-' + item.statusCode.toLowerCase()); @@ -164,7 +156,7 @@ ac.updateItem = function (env, id) { let $frm = env.$frm.itemId; - $('.AssetCategoryId', $frm).val(id); + $('.AssetCatId', $frm).val(id); env.ajax.updateItem = env.ajax.updateItem || { url: sbm.url.base + 'Assets/AssetCategory/Ajax/GetItem', formSel: $frm, callbackFn: function (response) { ac.onUpdateItem(env, response); } }; sbm.doAjaxRequest(env.ajax.updateItem, 50); } @@ -178,10 +170,8 @@ let $frm = env.$frm.item; sbm.populateFormValues(cfg, $frm, item.field.value); let $ctrls = $('.sbm-input,.sbm-textarea,.sbm-select', $frm); - $ctrls.filter('.AssetCategoryId').val(item.id); - $ctrls.filter('.AssetCategoryExists').val(1); - sbm.selectOrAdd($ctrls.filter('.AssetCategoryType'), item.typeCode, item.typeDesc); - sbm.selectOrAdd($ctrls.filter('.AssetCategoryStatus'), item.statusCode, item.field.value.Status); + sbm.selectOrAdd($ctrls.filter('.AssetCatType'), item.typeCode, item.typeDesc); + sbm.selectOrAdd($ctrls.filter('.AssetCatStatus'), item.statusCode, item.field.value.Status); ac.openItemDlg(env, cfg, sbm.dlg.title.updateItem); } @@ -276,7 +266,7 @@ env.$pnl.tmpls = $items.find('.sbm-panel-item-template'); env.$frm.filter = $items.find('.frmAssetCategoryFilter'); - env.$frm.filter.on('input', '.FilterSearch', function () { ac.refreshResults(env,250); }); + env.$frm.filter.on('input', '.FilterSearch', function () { ac.refreshResults(env, 250); }); env.$frm.filter.on('change', '.FilterAssetType', function () { ac.refreshResults(env, 50); }); env.$frm.itemId = $('#frmAssetCategoryId'); diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset.js index 86eb423..649f1e2 100644 --- a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset.js +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-asset.js @@ -18,13 +18,7 @@ { //sbm.debug('doRefreshConfig', env, response); if (!response.success) return; - // Config. - env.mode = response.mode; - env.config = response.config; - env.configItemNew = response.configItemNew; - env.data.statuses = response.statuses; - env.data.statusesCreate = response.statusesCreate; - env.data.statusCodeDefault = response.statusCodeDefault; + Object.assign(env.data, response.data); } //-------------------------------------------------------------- @@ -49,6 +43,7 @@ sbm.refreshPaging(response, env.$frm.filter, function () { as.refreshResults(env); }); if (!response.success) return; as.doRefreshConfig(env, response); + env.mode = response.mode; // Menu. if (env.$pnl.bgr.length) @@ -56,7 +51,7 @@ env.$pnl.bgr.invisible(); env.$pnl.mnu.empty(); env.$pnl.mnu.append(as.getFilterMenuOption(env, sbm.lbl.refresh, function () { as.refreshResults(env); }, 'sbm-refresh')); - env.$pnl.mnu.append(as.getFilterMenuOption(env, sbm.lbl.create, function () { as.createItem(env, env.configItemNew); }, 'sbm-add')); + env.$pnl.mnu.append(as.getFilterMenuOption(env, sbm.lbl.create, function () { as.createItem(env, env.data.cfgItemNew); }, 'sbm-add')); env.$pnl.bgr.toggleVisibility(!!$('.sbm-dropdown-item', env.$pnl.mnu).length); } @@ -66,13 +61,14 @@ return env.$pnl.msgs.append($('
' + sbm.msg.dataNoneFound + '
')).fadeIn(500); for (const item of items) $table.append(as.populateItem(env, as.getItemTemplate(env), item)); + sbm.configureItemTable(env.data.cfgList, $table); } as.populateItem = function (env, $item, item) { //sbm.debug('populateItem', env, $item, item) if (!item) return $item; $item.prop('id', as.getItemId(item)); - let cfg = env.config; + let cfg = env.data.cfgList; if (cfg) sbm.populateItemValues(cfg, $item, item.field.value); let prefix = cfg.column.prefix; $('.' + prefix + 'Status', $item).text(item.statusDesc).removeStatusClasses().addClass('sbm-status-' + item.statusCode.toLowerCase()); @@ -134,14 +130,14 @@ as.createItem = function (env, cfg) { as.clearItem(env, cfg); - sbm.populateSelectCodeDesc('#cbAssetStatus', sbm.data.statusesCreate); - $('#cbAssetStatus').val(sbm.data.statusCodeDefault).prop('readonly', false); + sbm.populateSelectCodeDesc('#cbAssetStatus', env.data.statusesCreate); + $('#cbAssetStatus').val(env.data.statusCodeDefault).prop('readonly', false); as.openItemDlg(env, cfg, sbm.dlg.title.createItem); } as.clearItem = function (env, cfg) { sbm.clearItemForm(env.$frm.item); - sbm.populateSelectCodeDesc('#cbAssetStatus', sbm.data.statuses); + sbm.populateSelectCodeDesc(env.$frm.item.find('#cbAssetStatus'), env.data.statusesCreate); } as.openItemDlg = function (env, cfg, title) { @@ -175,9 +171,6 @@ let $frm = env.$frm.item; sbm.populateFormValues(cfg, $frm, item.field.value); let $ctrls = $('.sbm-input,.sbm-textarea,.sbm-select', $frm); - $ctrls.filter('.AssetExists').val(1); - $ctrls.filter('.AssetId').val(item.id); - $ctrls.filter('.AssetCategoryId').val(item.categoryId); sbm.selectOrAdd($ctrls.filter('.AssetStatus'), item.statusCode, item.field.value.Status); as.openItemDlg(env, cfg, sbm.dlg.title.updateItem); } @@ -209,7 +202,7 @@ //-------------------------------------------------------------- as.storeItem = function (env) { - env.ajax.storeItem = env.ajax.storeItem || { url: sbm.url.base + 'Assets/Asset/Ajax/StoreItem', formSel: env.$frm.itemId, callbackFn: function (response) { as.onStoreItem(env, response); } }; + env.ajax.storeItem = env.ajax.storeItem || { url: sbm.url.base + 'Assets/Asset/Ajax/StoreItem', formSel: env.$frm.item, callbackFn: function (response) { as.onStoreItem(env, response); } }; sbm.doAjaxRequest(env.ajax.storeItem, 50); } as.onStoreItem = function (env, response) diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-main.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-main.js index f449414..d27df6a 100644 --- a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-main.js +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-main.js @@ -332,17 +332,15 @@ //-------------------------------------------------------------- // Notifications. - sbm.showNotification = function (title, msg) + sbm.showNotification = function (title, msg, selParent) { win.clearTimeout(sbm.toNotification); var $win = $(win); - var $main = $('#sbm-page-body main'); - var $not = $('#sbm-notification').hide(); + var $par = selParent ? $(selParent) : $('#sbm-page-body main'); + var $not = $('#sbm-notification').hide().remove(); if (!$not.length) - { $not = $('
✖
'); - ($main.length ? $main : $('body')).append($not); - } + ($par.length ? $par : $('body')).append($not); var $hdr = $('.heading', $not).css({ 'background-color': 'rgba(247,217,0,0.7)' }); $not.find('.title').html(title).end().find('.message').html(msg); //sbm.debug(sbm.topMargin($bdy)); @@ -389,7 +387,7 @@ if (!ajax.noWaitIcon) sbm.hidePleaseWait(); ajax.status = status; if (response.notification) - sbm.showNotification(response.notification.title, response.notification.message); + sbm.showNotification(response.notification.title, response.notification.message, ajax.selNotifyParent); if (response.message) { var fnCloseAlert = function () diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-req.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-req.js index 0830b68..7afc79a 100644 --- a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-req.js +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-req.js @@ -259,7 +259,9 @@ //-------------------------------------------------------------- re.storeItem = function (env) { - sbm.doAjaxRequest(env.ajax.storeItem = env.ajax.storeItem || { url: sbm.url.base + 'Requirement/Ajax/StoreItem', formSel: env.$frm.item, callbackFn: function (response) { re.onStoreItem(env, response); } }, 50); + env.ajax.storeItem = env.ajax.storeItem || { url: sbm.url.base + 'Requirement/Ajax/StoreItem', formSel: env.$frm.item, callbackFn: function (response) { re.onStoreItem(env, response); } }; + env.ajax.storeItem.selNotifyParent = env.$dlg.select.length ? env.$dlg.select.closest('.ui-dialog') : null; + sbm.doAjaxRequest(env.ajax.storeItem, 50); } re.onStoreItem = function (env, response) { @@ -292,15 +294,24 @@ { //sbm.debug('maintainRequirements', prm); let env = re.env.select; + if (!env || !env.$dlg.select) return; env.prmList = prm; prm.mode = 'Maintain'; + let btns = {}; + btns[sbm.lbl.close] = function () { re.clearSelect(env); $(this).dialog('close'); }; + env.$dlg.select.dialog('option', 'buttons', btns); re.showRequirements(env, prm); } sbm.fn.selectRequirement = function (prm) { let env = re.env.select; + if (!env || !env.$dlg.select) return; env.prmSelect = prm; prm.mode = 'Search'; + let btns = {}; + btns[sbm.lbl.ok] = function () { re.selectItem(env); }; + btns[sbm.lbl.cancel] = function () { re.clearSelect(env); $(this).dialog('close'); }; + env.$dlg.select.dialog('option', 'buttons', btns); re.showRequirements(env, prm); } /* Params: transId, transType, search, fnSuccess. */ @@ -328,8 +339,13 @@ { //sbm.debug('selectItem', env, env.prmSelect.item); env.$dlg.select.dialog('close'); - if ((env.prmList || {}).fnSuccess) env.prmList.fnSuccess(env.prmList.item); + if ((env.prmList || {}).fnSuccess) env.prmList.fnSuccess(); else if ((env.prmSelect || {}).fnSuccess) env.prmSelect.fnSuccess(env.prmSelect.item); + re.clearSelect(env); + } + re.clearSelect = function (env) + { + delete env.prmList; delete env.prmSelect; } @@ -384,8 +400,6 @@ { var opt = sbm.dlgOpts(); opt.dialogClass += " sbm-Requirement"; - opt.buttons[sbm.lbl.ok] = function () { re.selectItem(env); }; - opt.buttons[sbm.lbl.cancel] = function () { delete env.prmSelect; $(this).dialog('close'); }; env.$dlg.select = $dlgSelect.dialog(opt); env.$dlg.select.parent().find('.ui-dialog-titlebar').empty().append(env.$pnl.tmpl.find('.sbm-panel-header').remove()); } diff --git a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-trn.js b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-trn.js index f0f2cb1..f7180f1 100644 --- a/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-trn.js +++ b/SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-trn.js @@ -79,7 +79,7 @@ let fnUpd = function () { tr.updateItem(env, item.id) }; $mnu.append(tr.getItemMenuOption(env, sbm.lbl.edit, fnUpd, 'sbm-edit')); $item.off('dblclick').on('dblclick', fnUpd).find('.TransactionReference').off('click').on('click', fnUpd).addClass('sbm-action-text'); - let fnReqs = function () { tr.showRequirements(env, item); }; + let fnReqs = function () { tr.showRequirements(env, $item, item); }; $mnu.append(tr.getItemMenuOption(env, sbm.lbl.items, fnReqs, 'sbm-process')); $item.find('.TransactionItemCount').off('click').on('click', fnReqs).addClass('sbm-action-text'); $bgr.toggle(!!$('.sbm-dropdown-item', $mnu).length); @@ -243,14 +243,25 @@ } //-------------------------------------------------------------- - tr.showRequirements = function (env, item) + tr.refreshItem = function (env, $item, item) { - //sbm.debug('showRequirements', item); - let fn = function (env, item) + let $frm = env.$frm.itemId; + $('.TransactionId', $frm).val(item.id); + let fn = function (env, response) { - //sbm.debug('showRequirementsmaintainRequirementsDone', item); + if (!response.success) return; + tr.populateItem(env, $item, response.transaction); + sbm.configureItemTable(env.data.cfgList, env.$pnl.table); } - sbm.fn.maintainRequirements({ transId: item.id, transType: item.typeCode, taxEffective: item.taxEffective, fnSuccess: function (item) { fn(env, item); } }); + sbm.doAjaxRequest(env.ajax.refreshItem = env.ajax.refreshItem || { url: sbm.url.base + 'Transaction/Ajax/GetItem', formSel: $frm, callbackFn: function (response) { fn(env, response); } }, 50); + } + tr.showRequirements = function (env, $item, item) + { + let fn = function (env) + { + tr.refreshItem(env, $item, item); + } + sbm.fn.maintainRequirements({ transId: item.id, transType: item.typeCode, taxEffective: item.taxEffective, fnSuccess: function () { fn(env); } }); } //--------------------------------------------------------------