3.0.1.5 Refresh Transaction. Assets tidy.

This commit is contained in:
Andy Howard
2025-03-03 18:21:03 +00:00
parent b9701aff88
commit 047f9db390
18 changed files with 197 additions and 137 deletions
+2 -1
View File
@@ -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.
@@ -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;
@@ -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.
/// <summary>Work out how many currency decimals should be used for the specified transaction.</summary>
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();
}
//-------------------------------------------------------------------
}
@@ -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,9 +73,12 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets
{
// Construction.
public AjaxResponse_AssetCategoryConfig(SbmModel_Portal model) : base(model) { }
// Configuration data - object copied directly to env.datain script.
public class ConfigData
{
// Configuration.
public Model_AssetCategory.ListConfigData Config { get; } = new Model_AssetCategory.ListConfigData();
public Model_AssetCategory.ItemConfigData ConfigItemNew { get; } = new Model_AssetCategory.ItemConfigData();
public Model_AssetCategory.ListConfigData CfgList { get; } = new Model_AssetCategory.ListConfigData();
public Model_AssetCategory.ItemConfigData CfgItemNew { get; } = new Model_AssetCategory.ItemConfigData();
// Reference data.
public List<ItemCodeDesc> AssetTypes { get; } = new List<ItemCodeDesc>();
public List<ItemCodeDesc> IncomeTypes { get; } = new List<ItemCodeDesc>();
@@ -80,6 +86,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets
public List<ItemCodeDesc> StatusesCreate { get; } = new List<ItemCodeDesc>();
public String StatusCodeDefault { get; set; }
}
public ConfigData Data { get; set; } = new ConfigData();
}
// Ajax request.
[HttpPost]
[Route("Assets/AssetCategory/Ajax/Config")]
@@ -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<AssetCategoryListData> AssetCategories { get; } = new List<AssetCategoryListData>();
}
//-------------------------------------------------------------------
@@ -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());
@@ -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,14 +79,19 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Assets
{
// Construction.
public AjaxResponse_AssetConfig(SbmModel_Portal model) : base(model) { }
// Configuration data - object copied directly to env.datain script.
public class ConfigData
{
// Configuration.
public Model_Asset.ListConfigData Config { get; } = new Model_Asset.ListConfigData();
public Model_Asset.ItemConfigData ConfigItemNew { get; } = new Model_Asset.ItemConfigData();
public Model_Asset.ListConfigData CfgList { get; } = new Model_Asset.ListConfigData();
public Model_Asset.ItemConfigData CfgItemNew { get; } = new Model_Asset.ItemConfigData();
// Reference data.
public List<ItemCodeDesc> Statuses { get; } = new List<ItemCodeDesc>();
public List<ItemCodeDesc> StatusesCreate { get; } = new List<ItemCodeDesc>();
public String StatusCodeDefault { get; set; }
}
public ConfigData Data { get; set; } = new ConfigData();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Assets/Asset/Ajax/Config")]
@@ -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);
}
//-------------------------------------------------------------------
@@ -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);
@@ -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<ColumnDfn> columns = new List<ColumnDfn>()
{
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)));
@@ -14,15 +14,17 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Assets
//-------------------------------------------------------------------
/// <summary>Prefix for field names.</summary>
public const String FieldNamePrefix = "AssetCat";
public const String FieldNamePrefix = "Asset";
/// <summary>Item fields.</summary>
public enum ItemField
{
// Asset properties.
Id,
Exists,
// Identity.
Category,
CategoryId,
SerialNumber,
ReferenceExt,
Caption,
@@ -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))
@@ -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)}" })
}
<div id="dlgAsset" class="sbm-dialog">
<div class="spacer2"></div>
@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 *@
<div class="sbm-form-control @Model_Asset.GetFieldName(Model_Asset.ItemField.Category)">
@@ -30,8 +30,8 @@
<div class="col-sm-9">
<div class="sbm-control row">
<div class="col">
@Html.Hidden("Asset.CategoryId", "", new { @id = "", @class = "AssetCategoryId" })
<input type="text" class="AssetCategory sbm-input" readonly="readonly" />
@Html.Hidden("Asset.CategoryId", "", new { @id = "", @class = $"{Model_Asset.GetFieldName(Model_Asset.ItemField.CategoryId)} sbm-input sbm-auto-val" })
<input type="text" class="@Model_Asset.GetFieldName(Model_Asset.ItemField.Category) sbm-input sbm-auto-val" autocomplete="off" readonly="readonly" />
</div>
<div class="fixed">
<div class="sbm-action AssetCategorySearch"><img src="~/img/action/search24.png" alt="" title="" /></div>
@@ -52,7 +52,7 @@
</div>
<div class="col-sm-9">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -69,7 +69,7 @@
</div>
<div class="col-sm-9">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -84,9 +84,9 @@
<label for="cbAssetStatus"><span>@Localiser["label.status"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="col-sm-6">
<div class="sbm-control">
<select id="cbAssetStatus" class="sbm-select AssetStatus" name="Asset.StatusCode"></select>
<select name="Asset.StatusCode" id="cbAssetStatus" class="@Model_Asset.GetFieldName(Model_Asset.ItemField.Status) sbm-select sbm-auto-val"></select>
</div>
<div class="sbm-message"></div>
</div>
@@ -103,7 +103,7 @@
</div>
<div class="col-sm">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -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)}" })
}
<div id="dlgAssetCategory" class="sbm-dialog">
<div class="spacer2"></div>
@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 *@
<div class="sbm-form-control @Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Type)">
@@ -27,9 +27,9 @@
<label for="ifAssetCategoryType"><span>@Localiser["label.type"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="col-sm">
<div class="sbm-control">
@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" })
</div>
<div class="sbm-message"></div>
</div>
@@ -44,9 +44,9 @@
<label for="ifAssetCategoryCode"><span>@Localiser["label.code"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="col-sm-6">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -61,9 +61,9 @@
<label for="ifAssetCategoryCaption"><span>@Localiser["label.description"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="col-sm">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -78,9 +78,9 @@
<label for="cbAssetCategoryStatus"><span>@Localiser["label.status"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="col-sm-6">
<div class="sbm-control">
<select id="cbAssetCategoryStatus" class="sbm-select AssetCategoryStatus sbm-auto-val" name="AssetCategory.StatusCode"></select>
<select id="cbAssetCategoryStatus" class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Status) sbm-select sbm-auto-val" name="AssetCategory.StatusCode"></select>
</div>
<div class="sbm-message"></div>
</div>
@@ -97,7 +97,7 @@
</div>
<div class="col-sm">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -11,7 +11,7 @@
<table class="sbm-item-list">
<thead>
<tr>
<th class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Type) width25pc pl-1">@Localiser["label.type"]</th>
<th class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.TypeDesc) width25pc pl-1">@Localiser["label.type"]</th>
<th class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Code) width10pc">@Localiser["label.code"]</th>
<th class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Caption) width25pc">@Localiser["label.description"]</th>
<th class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Notes) width25pc d-none d-md-table-cell">@Localiser["label.notes"]</th>
@@ -36,7 +36,7 @@
@* AssetCategory row template - table is ignored. *@
<table class="">
<tr class="sbm-row-item AssetCategory">
<td class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Type) pl-1"></td>
<td class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.TypeDesc) pl-1"></td>
<td class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Code)"></td>
<td class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Caption)"></td>
<td class="@Model_AssetCategory.GetFieldName(Model_AssetCategory.ItemField.Notes) d-none d-md-table-cell"></td>
@@ -64,7 +64,7 @@
</div>
<div class="col-sm">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -136,7 +136,7 @@
</div>
<div class="col-sm">
<div class="sbm-control">
@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 })
</div>
<div class="sbm-message"></div>
</div>
@@ -159,7 +159,7 @@
</div>
<div class="col-sm-3">
<div class="sbm-control">
@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 })
</div>
<div class="sbm-message"></div>
</div>
@@ -179,7 +179,7 @@
</div>
<div class="col-sm">
<div class="sbm-control">
@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 })
</div>
<div class="sbm-message"></div>
</div>
@@ -227,7 +227,7 @@
</div>
<div class="col-sm">
<div class="sbm-control row">
<div class="fixed">@Html.TextBox("Requirement.Required", "", new { @id = "ifRequirementRequired", @class = "RequirementRequired sbm-input sbm-calendar sbm-auto-val", @autocomplete = false, @maxlen = 10 })</div>
<div class="fixed">@Html.TextBox("Requirement.Required", "", new { @id = "ifRequirementRequired", @class = "RequirementRequired sbm-input sbm-calendar sbm-auto-val", @autocomplete = "off", @maxlen = 10 })</div>
<div class="col"><div class="pt-2 pl-2"><img src="~/img/action/delete16.png" class="ClearRequirementRequired sbm-action" alt="" title="" /></div></div>
</div>
<div class="sbm-message"></div>
@@ -354,7 +354,7 @@
</div>
<div class="col-sm">
<div class="sbm-control">
@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) })
</div>
<div class="sbm-message"></div>
</div>
@@ -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($('<div class="sbm-message">' + sbm.msg.dataQuerying + '</div>')).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($('<div class="sbm-message">' + sbm.msg.dataNoneFound + '</div>')).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);
}
@@ -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($('<div class="sbm-message">' + sbm.msg.dataNoneFound + '</div>')).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)
@@ -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 = $('<div id="sbm-notification"><div class="content"><div class="heading"><div class="close" onclick="sbm.hideNotification()">&#10006;</div><div class="title"></div></div><div class="message"></div></div></div>');
($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 ()
@@ -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());
}
@@ -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); } });
}
//--------------------------------------------------------------