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
@@ -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);
}
//-------------------------------------------------------------------
@@ -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))