3.0.1.5 Refresh Transaction. Assets tidy.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
|
||||
+30
-21
@@ -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<ItemCodeDesc> AssetTypes { get; } = new List<ItemCodeDesc>();
|
||||
public List<ItemCodeDesc> IncomeTypes { get; } = new List<ItemCodeDesc>();
|
||||
public List<ItemCodeDesc> Statuses { get; } = new List<ItemCodeDesc>();
|
||||
public List<ItemCodeDesc> StatusesCreate { get; } = new List<ItemCodeDesc>();
|
||||
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<ItemCodeDesc> AssetTypes { get; } = new List<ItemCodeDesc>();
|
||||
public List<ItemCodeDesc> IncomeTypes { get; } = new List<ItemCodeDesc>();
|
||||
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();
|
||||
}
|
||||
// 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<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,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<ItemCodeDesc> Statuses { get; } = new List<ItemCodeDesc>();
|
||||
public List<ItemCodeDesc> StatusesCreate { get; } = new List<ItemCodeDesc>();
|
||||
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<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]
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+15
-4
@@ -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"> *</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>
|
||||
|
||||
+12
-12
@@ -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"> *</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"> *</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"> *</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"> *</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>
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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()">✖</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); } });
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user