3.0.1.3 Requirements

This commit is contained in:
Andy Howard
2025-03-02 19:08:41 +00:00
parent 80b085cf29
commit 6e23b091cf
45 changed files with 1420 additions and 681 deletions
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc.Filters;
using DocumentFormat.OpenXml.EMMA;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using Sarand.BusinessMgr.Net.Core.Web.App;
using Sarand.BusinessMgr.Net.Core.Web.Components;
@@ -230,6 +230,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Consoles
if (HasErrorState()) return false;
SysId affilliateIdOwner = data.AffiliateIdOrganisation;
Dictionary<SaUomType, SaUnitMeasure> uomTypes = Internals.GetUnitsOfMeasure().ToDictionary(item => item.UnitType, item => item);
SaTaxCode taxCode = Internals.GetTaxCodesEffectiveOn(DateTime.Today).FirstOrDefault(item => item.Code.EqualsCI(SaReferenceDataConsole.GetStdTaxCode()));
if (taxCode == null)
taxCode = Internals.GetTaxCodes().OrderByDescending(item => item.EffectFrom).FirstOrDefault(item => item.Code.EqualsCI(SaReferenceDataConsole.GetStdTaxCode()));
foreach (var commodityData in data.Commodities)
{
@@ -237,6 +240,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Consoles
commodity.DescBrief = commodityData.Caption;
commodity.SalesPrice = commodityData.SalePrice;
commodity.UomIdSale = uomTypes.GetValueOrDefault(commodityData.SaleUnitType)?.Id;
commodity.TaxCodeId = taxCode?.Id;
commodity.Notes = commodityData.Notes;
if (Internals.CommodityMgr.InsertCommodity(commodity, DbUpdateInfo))
{
@@ -39,60 +39,79 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
}
private class CommodityItemData : CommodityListData
{
// Affiliate properties with specific handling.
// Item properties with specific handling.
public String TypeCode { get; set; }
public String TypeDesc { get; set; }
public String SalesUnitType { get; set; }
}
private void PopulateCommodityResponseListData(SbmCommodity commodity, CommodityListData data)
private void PopulateCommodityResponseListData(SbmModel_Portal model, SbmCommodity commodity, CommodityListData data)
{
data.Id = SysId.ToString(commodity.Id);
}
private void PopulateCommodityResponseItemData(SbmCommodity commodity, CommodityItemData data, HashSet<CommodityDataGroup> dataGroups)
private void PopulateCommodityResponseItemData(SbmModel_Portal model, SbmCommodity commodity, CommodityItemData data, HashSet<CommodityDataGroup> dataGroups)
{
PopulateCommodityResponseListData(commodity, data as CommodityListData);
PopulateCommodityResponseListData(model, commodity, data as CommodityListData);
// Prominent properties for selecting and editing.
data.Code = commodity.Code;
data.Caption = commodity.DescBrief;
// Affiliate type - populate for list ('Type' property populated with desc) and form (Type Code & Desc).
data.Caption = commodity.GetCaption();
// Commodity type - populate for list ('Type' property populated with desc) and form (Type Code & Desc).
data.TypeCode = Internals.CommodityTypeCodes.GetCodeForType(commodity.CommodityType);
data.TypeDesc = Internals.CommodityTypeCodes.GetDescForType(commodity.CommodityType);
data.Field.Value.Add($"{Model_Commodity.ItemField.Type}", Internals.CommodityTypeCodes.GetDescForType(commodity.CommodityType));
data.Field.Value.Add($"{Model_Commodity.ItemField.Type}", Internals.CommodityTypeCodes.GetCodeForType(commodity.CommodityType));
data.Field.Value.Add($"{Model_Commodity.ItemField.TypeDesc}", Internals.CommodityTypeCodes.GetDescForType(commodity.CommodityType));
// Commodity properties.
data.Field.Value.Add($"{Model_Commodity.ItemField.Code}", commodity.Code);
data.Field.Value.Add($"{Model_Commodity.ItemField.DescBrief}", commodity.DescBrief);
data.Field.Value.Add($"{Model_Commodity.ItemField.DrawingIssue}", commodity.DrawingIssue);
// Sales.
data.Field.Value.Add($"{Model_Commodity.ItemField.SalesPriceFmt}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.SalesPrice, SbmInternals.CurrencyDecimalsDefault, 0, ',')));
data.Field.Value.Add($"{Model_Commodity.ItemField.SalesUnit}", StringUtil.NullOnBlank(Internals.GetUnitOfMeasureCaption(commodity.UomIdSale)));
if (model.UserCanViewCommodityFinancials_Sales())
{
data.Field.Value.Add($"{Model_Commodity.ItemField.SaleAmountFmt}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.SalesPrice, SbmInternals.CurrencyDecimalsDefault, 0, ',')));
}
data.Field.Value.Add($"{Model_Commodity.ItemField.SaleUnit}", StringUtil.NullOnBlank(Internals.GetUnitOfMeasureCaption(commodity.UomIdSale)));
if (dataGroups != null && dataGroups.Contains(CommodityDataGroup.Sales))
{
// Sales.
data.Field.Value.Add($"{Model_Commodity.ItemField.SalesPrice}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.SalesPrice, SbmInternals.CurrencyDecimalsDefault)));
data.Field.Value.Add($"{Model_Commodity.ItemField.SalesTaxCode}", Internals.GetTaxCodeById(commodity.TaxCodeId)?.Code);
if (model.UserCanViewCommodityFinancials_Sales())
{
data.Field.Value.Add($"{Model_Commodity.ItemField.SaleAmount}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.SalesPrice, SbmInternals.CurrencyDecimalsDefault)));
}
data.Field.Value.Add($"{Model_Commodity.ItemField.SaleTaxCode}", Internals.GetTaxCodeById(commodity.TaxCodeId)?.Code);
data.SalesUnitType = SbmSystem.GetSystemCodes(Sbm.SystemCode.UnitMeasureType).GetCodeForType(Internals.GetUnitOfMeasureType(commodity.UomIdSale));
if (commodity.PackQtySale > 0)
data.Field.Value.Add($"{Model_Commodity.ItemField.SalesPackQty}", $"{commodity.PackQtySale}");
data.Field.Value.Add($"{Model_Commodity.ItemField.SalePackQty}", $"{commodity.PackQtySale}");
data.Field.Value.Add($"{Model_Commodity.ItemField.AssocIdCustomer}", StringUtil.NullOnBlank(SysId.ToString(commodity.AssociationIdCustomer)));
}
// Purchasing.
if (model.UserCanViewCommodityFinancials_Supply())
{
//if (model.GetInternals().SessionConsole.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.Commodity_CostPrice))
// data.Field.Value.Add($"{Model_Commodity.ItemField.AmountCostFmt}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.CostPrice, SbmInternals.CurrencyDecimalsDefault, 0, ',')));
}
if (dataGroups != null && dataGroups.Contains(CommodityDataGroup.Purchasing))
{
// Purchasing.
data.Field.Value.Add($"{Model_Commodity.ItemField.CostPrice}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.CostPrice, SbmInternals.CurrencyDecimalsDefault)));
data.Field.Value.Add($"{Model_Commodity.ItemField.CostPriceFmt}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.CostPrice, SbmInternals.CurrencyDecimalsDefault, 0, ',')));
if (model.UserCanViewCommodityFinancials_Supply())
{
data.Field.Value.Add($"{Model_Commodity.ItemField.AmountCost}", StringUtil.NullOnBlank(StringUtil.FormatNumeric(commodity.CostPrice, SbmInternals.CurrencyDecimalsDefault)));
}
data.Field.Value.Add($"{Model_Commodity.ItemField.AssocIdSupplier}", StringUtil.NullOnBlank(SysId.ToString(commodity.AssociationIdSupplier)));
}
// Specification.
if (dataGroups != null && dataGroups.Contains(CommodityDataGroup.Specification))
{
// Specification.
}
// Production.
if (dataGroups != null && dataGroups.Contains(CommodityDataGroup.Production))
{
// Production.
}
// Common properties.
data.StatusCode = commodity.StatusCode;
data.StatusDesc = commodity.StatusDesc;
@@ -120,11 +139,11 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
// Reference data.
public List<ItemCodeDesc> CommodityTypes { get; } = new List<ItemCodeDesc>();
public String CommodityTypeDefault { get; set; }
public List<TaxCode> TaxCodes { get; } = new List<TaxCode>();
public String taxCodeDefault { get; set; }
public List<TaxCodeData> TaxCodes { get; } = new List<TaxCodeData>();
public String TaxCodeDefault { get; set; }
public List<ItemCodeDesc> UomCats { get; } = new List<ItemCodeDesc>();
public List<ItemCodeDesc> UomTypes { get; } = new List<ItemCodeDesc>();
public String uomTypeDefault { get; set; }
public String UomTypeDefault { get; set; }
public List<UomData> Uoms { get; set; } = new List<UomData>();
public List<ItemCodeDesc> Statuses { get; } = new List<ItemCodeDesc>();
public String DefaultStatusCode { get; set; }
@@ -169,8 +188,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
// Tax codes.
DateTime taxEffectiveOn = DateTime.Today;
responseData.Data.TaxCodes.AddRange(Internals.GetTaxCodesEffectiveOn(taxEffectiveOn).Select(tax => new AjaxResponse_Data.TaxCode() { Id = $"{SysId.ToLong(tax.Id)}", Code = tax.Code, Caption = tax.GetCaption(), Rate = tax.TaxRate }));
responseData.Data.taxCodeDefault = Internals.GetDefaultTaxCode();
responseData.Data.TaxCodes.AddRange(Internals.GetTaxCodesEffectiveOn(taxEffectiveOn).Select(tax => new AjaxResponse_Data.TaxCodeData() { Id = $"{SysId.ToLong(tax.Id)}", Code = tax.Code, Caption = tax.GetCaption(), Rate = tax.TaxRate }));
responseData.Data.TaxCodeDefault = Internals.GetDefaultTaxCode();
// Units of measure.
List<TypeCodeDesc> uomCategories = SbmSystem.GetSystemCodes(Sbm.SystemCode.UnitMeasureCategory);
@@ -187,7 +206,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
Caption = uom.GetCaption()
});
}
responseData.Data.uomTypeDefault = uomTypes.GetCodeForType(Internals.GetDefaultUomType());
responseData.Data.UomTypeDefault = uomTypes.GetCodeForType(Internals.GetDefaultUomType());
// Reference data - statuses.
foreach (SaStatus status in SbmCommodity.ValidStatuses.FindAll(item => item != SaStatus.Deleted))
@@ -289,16 +308,16 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
Caption = values.GetString(colDescBrief.DataName),
StatusCode = values.GetString(colStatus.DataName),
};
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.Type}", Internals.CommodityTypeCodes.GetDescForType(commodityType));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.TypeDesc}", Internals.CommodityTypeCodes.GetDescForType(commodityType));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.Code}", values.GetString(colCode.DataName));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.DescBrief}", values.GetString(colDescBrief.DataName));
if (model.UserCanViewCommodityFinancials_Sales())
{
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.SalesPriceFmt}", StringUtil.FormatNumeric(values.GetValue(colSalesPrice.DataName).ToDecimal(), SbmInternals.CurrencyDecimalsDefault, 0, ','));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.SalesUnit}", Internals.GetUnitOfMeasureCaption(new SysId(values.GetLong(colSalesUomId.DataName))));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.SaleAmountFmt}", StringUtil.FormatNumeric(values.GetValue(colSalesPrice.DataName).ToDecimal(), SbmInternals.CurrencyDecimalsDefault, 0, ','));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.SaleUnit}", Internals.GetUnitOfMeasureCaption(new SysId(values.GetLong(colSalesUomId.DataName))));
}
if (model.UserCanViewCommodityFinancials_Supply())
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.CostPriceFmt}", StringUtil.FormatNumeric(values.GetValue(colCostPrice.DataName).ToDecimal(), SbmInternals.CurrencyDecimalsDefault, 0, ','));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.AmountCostFmt}", StringUtil.FormatNumeric(values.GetValue(colCostPrice.DataName).ToDecimal(), SbmInternals.CurrencyDecimalsDefault, 0, ','));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.Notes}", CommodityMgr.GetCommodityDataValue(colNotes, values).ToString());
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.Status}", SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName)));
commodityData.Field.Value.Add($"{Model_Commodity.ItemField.CreatedOn}", Localiser.FormatDate(values.GetDate(colCreatedOn.DataName)));
@@ -367,7 +386,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
// Construct response.
model.PopulateItemConfig(responseData.Config, commodity);
PopulateCommodityResponseItemData(commodity, responseData.commodity, model.GetDataGroups());
PopulateCommodityResponseItemData(model, commodity, responseData.commodity, model.GetDataGroups());
responseData.Success = true;
}
return Json(responseData);
@@ -436,13 +455,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
if (model.Commodity.DescBrief != null)
commodity.DescBrief = model.Commodity.DescBrief;
// Sales.
if (model.Commodity.SalesPrice != null)
if (model.Commodity.SaleAmount != null)
commodity.SalesPrice = model.GetCommoditySalesPrice();
if (model.Commodity.SalesTaxCode != null)
if (model.Commodity.SaleTaxCode != null)
commodity.TaxCodeId = model.GetCommoditySalesTaxCodeId();
if (model.Commodity.SalesUnitType != null)
if (model.Commodity.SaleUnitType != null)
commodity.UomIdSale = model.GetCommoditySalesUnitId();
if (model.Commodity.SalesPackQty != null)
if (model.Commodity.SalePackQty != null)
commodity.PackQtySale = model.GetCommoditySalesPackQty();
// Common properties.
if (model.Commodity.Notes != null)
@@ -473,7 +492,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Commodities
// Construct response.
model.PopulateItemConfig(responseData.Config, commodity);
PopulateCommodityResponseItemData(commodity, responseData.commodity, model.GetDataGroups());
PopulateCommodityResponseItemData(model, commodity, responseData.commodity, model.GetDataGroups());
responseData.Success = true;
}
return Json(responseData);
@@ -39,7 +39,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts
}
private class AffiliateItemData : AffiliateListData
{
// Affiliate properties with specific handling.
// Item properties with specific handling.
public String TypeCode { get; set; }
public String TypeDesc { get; set; }
}
@@ -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.Requirements;
@@ -15,6 +16,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using static Sarand.BusinessMgr.Web.Portal.Models.Requirements.Model_Requirement;
namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
{
@@ -36,30 +38,38 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
}
private class RequirementItemData : RequirementListData
{
// Affiliate properties with specific handling.
// Item properties with specific handling.
public String CommodityId { get; set; }
public String CommodityCaption { get; set; }
public String UnitType { get; set; }
}
private void PopulateRequirementResponseListData(SbmModel_Portal model, SbmTransaction transaction, SbmRequirement requirement, RequirementListData data)
private void PopulateRequirementResponseListData(SbmModel_Portal model, SbmTransaction transaction, SbmRequirement requirement, SbmCommodity commodity, RequirementListData data)
{
data.Id = SysId.ToString(requirement.Id);
data.Field.Value.Add($"{Model_Requirement.ItemField.Id}", $"{SysId.ToLong(requirement.Id)}");
// Status dates for list refresh.
data.Field.Value.Add($"{Model_Requirement.ItemField.RequiredFmt}", model.FormatDateForDisplay(requirement.Required));
}
private void PopulateRequirementResponseItemData(SbmModel_Portal model, SbmTransaction transaction, SbmRequirement requirement, RequirementItemData data, HashSet<RequirementDataGroup> dataGroups = null)
private void PopulateRequirementResponseItemData(SbmModel_Portal model, SbmTransaction transaction, SbmRequirement requirement, SbmCommodity commodity, RequirementItemData data, HashSet<RequirementDataGroup> dataGroups = null)
{
PopulateRequirementResponseListData(model, transaction, requirement, data as RequirementListData);
PopulateRequirementResponseListData(model, transaction, requirement, commodity, data as RequirementListData);
// Requirement properties.
data.Field.Value.Add($"{Model_Requirement.ItemField.TransactionId}", $"{SysId.ToLong(requirement.TransactionId)}");
data.Field.Value.Add($"{Model_Requirement.ItemField.TransactionType}", Internals.TransactionTypeCodes.GetCodeForType(transaction.TransactionType));
data.Field.Value.Add($"{Model_Requirement.ItemField.CurrencyId}", $"{transaction.CurrencyId ?? model.GetInternals().GetCurrentCurrency()?.Id}");
data.Field.Value.Add($"{Model_Requirement.ItemField.Type}", Internals.RequirementTypeCodes.GetDescForType(requirement.RequirementType));
data.Field.Value.Add($"{Model_Requirement.ItemField.Sequence}", $"{requirement.Seq}");
data.Field.Value.Add($"{Model_Requirement.ItemField.JobNumber}", requirement.JobNumber);
data.Field.Value.Add($"{Model_Requirement.ItemField.Required}", model.FormatDateForForm(requirement.Required));
data.Field.Value.Add($"{Model_Requirement.ItemField.DescBrief}", requirement.DescBrief);
data.Field.Value.Add($"{Model_Requirement.ItemField.CommodityId}", $"{SysId.ToLong(requirement.CommodityId)}");
// Commodity.
data.CommodityId = $"{SysId.ToLong(requirement.CommodityId)}";
data.CommodityCaption = commodity?.GetCaption();
data.Field.Value.Add($"{Model_Requirement.ItemField.ProductCode}", requirement.ProductCode);
data.Field.Value.Add($"{Model_Requirement.ItemField.Quantity}", $"{requirement.Quantity}");
data.Field.Value.Add($"{Model_Requirement.ItemField.QuantityProd}", $"{requirement.QuantityProd}");
data.Field.Value.Add($"{Model_Requirement.ItemField.UomId}", $"{SysId.ToLong(requirement.UomId)}");
data.UnitType = SbmSystem.GetSystemCodes(Sbm.SystemCode.UnitMeasureType).GetCodeForType(Internals.GetUnitOfMeasureType(requirement.UomId));
data.Field.Value.Add($"{Model_Requirement.ItemField.UnitType}", SaReferenceDataConsole.GetReferenceDataCodes(ReferenceDataSystemCode.UnitMeasureType).GetCodeForType(Internals.GetUnitOfMeasureById(requirement.UomId)?.UnitType ?? Internals.GetDefaultUomType()));
data.Field.Value.Add($"{Model_Requirement.ItemField.MaterialSourceCode}", requirement.MaterialSourceCode);
data.Field.Value.Add($"{Model_Requirement.ItemField.PromotionCode}", requirement.PromotionCode);
data.Field.Value.Add($"{Model_Requirement.ItemField.LocationIdStock}", $"{SysId.ToLong(requirement.LocationIdStock)}");
@@ -69,6 +79,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
data.Field.Value.Add($"{Model_Requirement.ItemField.AmountDisc}", $"{requirement.AmountDisc}");
data.Field.Value.Add($"{Model_Requirement.ItemField.AmountNet}", $"{requirement.AmountNet}");
data.Field.Value.Add($"{Model_Requirement.ItemField.TaxCode}", Internals.GetTaxCodeById(requirement.TaxCodeId)?.Code);
data.Field.Value.Add($"{Model_Requirement.ItemField.TaxEffective}", DateUtil.FormatSqlDate(Internals.TransactionMgr.GetTransactionTaxEffectiveDate(transaction)));
data.Field.Value.Add($"{Model_Requirement.ItemField.TaxCodeId}", $"{SysId.ToLong(requirement.TaxCodeId)}");
data.Field.Value.Add($"{Model_Requirement.ItemField.TaxRate}", $"{Internals.GetTaxCodeById(requirement.TaxCodeId)?.TaxRate}");
data.Field.Value.Add($"{Model_Requirement.ItemField.AmountTax}", $"{requirement.AmountTax}");
@@ -121,7 +132,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
public Model_Requirement.ItemConfigData CfgItemNew { get; } = new Model_Requirement.ItemConfigData();
// Reference data.
public List<ItemCodeDesc> RequirementTypes { get; } = new List<ItemCodeDesc>();
public List<TaxCode> TaxCodes { get; } = new List<TaxCode>();
public List<TaxCodeData> TaxCodes { get; } = new List<TaxCodeData>();
public String taxCodeDefault { get; set; }
public List<ItemCodeDesc> UomCats { get; } = new List<ItemCodeDesc>();
public List<ItemCodeDesc> UomTypes { get; } = new List<ItemCodeDesc>();
@@ -165,7 +176,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
// Tax codes.
DateTime taxEffectiveOn = DateTime.Today;
responseData.Data.TaxCodes.AddRange(Internals.GetTaxCodesEffectiveOn(taxEffectiveOn).Select(tax => new AjaxResponse_Data.TaxCode() { Id = $"{SysId.ToLong(tax.Id)}", Code = tax.Code, Caption = tax.GetCaption(), Rate = tax.TaxRate }));
responseData.Data.TaxCodes.AddRange(
Internals.GetTaxCodesEffectiveOn(taxEffectiveOn)
.Select(tax => new AjaxResponse_Data.TaxCodeData() { Id = $"{SysId.ToLong(tax.Id)}", Code = tax.Code, Caption = tax.GetCaption(), Rate = tax.TaxRate }));
responseData.Data.taxCodeDefault = Internals.GetDefaultTaxCode();
// Units of measure.
@@ -358,7 +371,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
// Configuration.
public Model_Requirement.ItemConfigData Config { get; } = new Model_Requirement.ItemConfigData();
// Requirement details.
public RequirementItemData requirement { get; } = new RequirementItemData();
public RequirementItemData Requirement { get; } = new RequirementItemData();
}
//-------------------------------------------------------------------
[HttpPost]
@@ -375,7 +388,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
RefreshModel(model);
// Identify item.
SysId requirementId = SysId.ToSysId(model.Requirement.Id);
SysId requirementId = model.GetRequirementId();
if (!SysId.IsValid(requirementId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
@@ -395,9 +408,134 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
}
// Commodity.
SbmCommodity commodity = CommodityMgr.GetCommodityById(requirement.CommodityId);
// Construct response.
model.PopulateItemConfig(responseData.Config, transaction, requirement);
PopulateRequirementResponseItemData(model, transaction, requirement, responseData.requirement);
PopulateRequirementResponseItemData(model, transaction, requirement, commodity, responseData.Requirement);
// Complete response.
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
// Get Commodity ajax request.
//-------------------------------------------------------------------
private class AjaxResponse_Commodity : AjaxResponse_Data
{
// Construction.
public AjaxResponse_Commodity(SbmModel_Portal model) : base(model) { }
// Configuration - only required for Field.Prefix.
public Model_Requirement.ItemConfigData Config { get; } = new Model_Requirement.ItemConfigData();
// Item details.
public RequirementItemData Requirement { get; } = new RequirementItemData();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Requirement/Ajax/Commodity")]
public IActionResult Ajax_GetCommodity(Model_Requirement model)
{
String messageTitle = Localiser["label.requirement"];
AjaxResponse_Commodity responseData = new AjaxResponse_Commodity(model);
// Validate session and referrer.
if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData);
if (!ValidReferer) return Forbid();
RefreshModel(model);
// Transaction.
Sbm.TransactionType transactionType = model.GetTransactionType();
SysId currencyId = model.GetCurrencyId();
if (transactionType == 0 || !SysId.IsValid(currencyId))
{
SbmTransaction transaction = Internals.TransactionMgr.GetTransactionById(model.GetTransactionId());
if (transaction != null)
{
transactionType = transaction.TransactionType;
currencyId = transaction.CurrencyId;
}
}
if (!SysId.IsValid(currencyId))
currencyId = Internals.GetCurrentCurrency()?.Id;
// Control values.
ushort currencyDecimals = Internals.GetCurrencyDecimalsById(model.GetCurrencyId());
// Retrieve Commodity.
SbmCommodity commodity = Internals.CommodityMgr.GetCommodityById(model.GetCommodityId());
if (commodity != null)
{
// Unit amount.
decimal unitAmount = commodity.SalesPrice;
if (SbmTransaction.IsPurchaseType(transactionType))
unitAmount = commodity.CostPrice;
unitAmount = SbmRequirementHelper.Round(unitAmount, currencyDecimals);
// Populate response.
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.AmountUnit}"] = model.FormatMoneyForDisplay(unitAmount, currencyDecimals);
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.TaxCodeId}"] = $"{commodity.TaxCodeId}";
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.TaxCode}"] = Internals.GetTaxCodeById(commodity.TaxCodeId)?.Code;
// Cleanse item values.
responseData.Requirement.Field.Value.RemoveAll(item => StringUtil.IsBlank(item.Value));
}
// Complete response.
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
// Calculate Requirement ajax request.
//-------------------------------------------------------------------
private class AjaxResponse_Calculate : AjaxResponse_Data
{
// Construction.
public AjaxResponse_Calculate(SbmModel_Portal model) : base(model) { }
// Configuration - only required for Field.Prefix.
public Model_Requirement.ItemConfigData Config { get; } = new Model_Requirement.ItemConfigData();
// Item details.
public RequirementItemData Requirement { get; } = new RequirementItemData();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Requirement/Ajax/Calculate")]
public IActionResult Ajax_RequirementCalculate(Model_Requirement model)
{
String messageTitle = Localiser["label.requirement"];
AjaxResponse_Calculate responseData = new AjaxResponse_Calculate(model);
// Validate session and referrer.
if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData);
if (!ValidReferer) return Forbid();
RefreshModel(model);
// Control values.
ushort currencyDecimals = Internals.GetCurrencyDecimalsById(model.GetCurrencyId());
// Calculate Requirement.
SbmRequirementHelper.CalculateRequest request = new SbmRequirementHelper.CalculateRequest(Internals);
request.TransactionId = model.GetTransactionId();
request.TransactionType = model.GetTransactionType();
request.CommodityId = model.GetCommodityId();
request.AmountUnit = StringUtil.ToDecimal(model.Requirement.AmountUnit);
request.Quantity = StringUtil.ToDecimal(model.Requirement.Quantity);
request.AmountDiscount = StringUtil.ToDecimal(model.Requirement.AmountDisc);
request.TaxCode = model.Requirement.TaxCode;
request.TaxEffective = model.GetRequirementTaxEffective();
SbmRequirementHelper.CalculateRespose response = SbmRequirementHelper.Calculate(request);
// Populate response.
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.AmountAct}"] = model.FormatMoneyForDisplay(response.AmountAct, currencyDecimals);
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.AmountNet}"] = model.FormatMoneyForDisplay(response.AmountNet, currencyDecimals);
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.AmountTax}"] = model.FormatMoneyForDisplay(response.AmountTax, currencyDecimals);
responseData.Requirement.Field.Value[$"{Model_Requirement.ItemField.AmountTot}"] = model.FormatMoneyForDisplay(response.AmountTot, currencyDecimals);
// Cleanse item values.
responseData.Requirement.Field.Value.RemoveAll(item => StringUtil.IsBlank(item.Value));
// Complete response.
responseData.Success = true;
@@ -433,7 +571,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
return Json(responseData);
// Validate item Id against 'Exists' flag.
SysId requirementId = SysId.ToSysId(model.Requirement.Id);
SysId requirementId = model.GetRequirementId();
bool requirementExists = StringUtil.ToBool(model.Requirement.Exists);
if (requirementExists && !SysId.IsValid(requirementId))
{
@@ -470,13 +608,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
if (requirement == null)
{
// Transaction.
SysId transactionId = SysId.ToSysId(model.Requirement.TransactionId);
SysId transactionId = model.GetTransactionId();
if (!SysId.IsValid(transactionId))
{
SaLogger.Warn($"{SysUtil.Fn} Transaction not specified for new Requirement.");
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
}
transaction = TransactionMgr.GetTransactionById(requirement.TransactionId);
transaction = TransactionMgr.GetTransactionById(transactionId);
if (transaction == null)
{
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve transaction for Id: '{transactionId}'");
@@ -490,8 +628,23 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
SaLogger.Warn($"{SysUtil.Fn} Failed to create Requirement. {TransactionMgr.ErrorStateMessage.TrimEnd('.')}.");
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
}
requirement.Seq = (short)(TransactionMgr.GetTransactionRequirementCount(transaction.Id) + 1);
}
// Commodity.
SbmCommodity commodity = null;
if (model.Requirement.CommodityId != null)
{
commodity = CommodityMgr.GetCommodityById(model.GetCommodityId());
if (commodity == null)
{
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Commodity. Id: {model.Requirement.CommodityId}.");
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
}
}
else if (SysId.IsValid(requirement.CommodityId))
commodity = CommodityMgr.GetCommodityById(requirement.CommodityId);
// Populate item properties.
if (model.Requirement.RequirementIdSource != null)
requirement.RequirementIdSource = SysId.ToSysId(model.Requirement.RequirementIdSource);
@@ -508,19 +661,21 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
requirement.Completed = model.ParseDateFromForm(model.Requirement.Completed);
// Commodity.
if (model.Requirement.CommodityId != null)
requirement.CommodityId = model.GetRequirementCommodityId();
requirement.CommodityId = model.GetCommodityId();
if (model.Requirement.ProductCode != null)
requirement.ProductCode = model.Requirement.ProductCode;
else if (commodity != null)
requirement.ProductCode = commodity.Code;
if (model.Requirement.DescBrief != null)
requirement.DescBrief = model.Requirement.DescBrief;
if (model.Requirement.Quantity != null)
requirement.Quantity = StringUtil.ToDecimal(model.Requirement.Quantity);
if (model.Requirement.QuantityProd != null)
requirement.QuantityProd = StringUtil.ToDecimal(model.Requirement.QuantityProd);
if (model.Requirement.UomId != null)
requirement.UomId = SysId.ToSysId(model.Requirement.UomId);
if (model.Requirement.UomIdWeight != null)
requirement.UomIdWeight = SysId.ToSysId(model.Requirement.UomIdWeight);
if (model.Requirement.UnitType != null)
requirement.UomId = model.GetRequirementUnitId();
if (model.Requirement.WeightUnitType != null)
requirement.UomIdWeight = model.GetRequirementWeightUnitId();
if (model.Requirement.MaterialSourceCode != null)
requirement.MaterialSourceCode = model.Requirement.MaterialSourceCode;
if (model.Requirement.LocationIdStock != null)
@@ -528,18 +683,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
// Amounts.
if (model.Requirement.AmountUnit != null)
requirement.AmountUnit = StringUtil.ToDecimal(model.Requirement.AmountUnit);
if (model.Requirement.AmountAct != null)
requirement.AmountAct = StringUtil.ToDecimal(model.Requirement.AmountAct);
if (model.Requirement.AmountDisc != null)
requirement.AmountDisc = StringUtil.ToDecimal(model.Requirement.AmountDisc);
if (model.Requirement.AmountNet != null)
requirement.AmountNet = StringUtil.ToDecimal(model.Requirement.AmountNet);
if (model.Requirement.TaxCodeId != null)
requirement.TaxCodeId = SysId.ToSysId(model.Requirement.TaxCodeId);
if (model.Requirement.AmountTax != null)
requirement.AmountTax = StringUtil.ToDecimal(model.Requirement.AmountTax);
if (model.Requirement.AmountTot != null)
requirement.AmountTot = StringUtil.ToDecimal(model.Requirement.AmountTot);
if (model.Requirement.TaxCode != null)
{
requirement.TaxCodeId = model.GetRequirementTaxCodeId();
requirement.TaxRate = model.GetRequirementTaxRate();
}
// Common properties.
if (model.Requirement.StatusCode != null)
requirement.Status = model.GetRequirementStatus();
@@ -572,7 +722,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Requirements
// Construct response.
model.PopulateItemConfig(responseData.Config, transaction, requirement);
PopulateRequirementResponseItemData(model, transaction, requirement, responseData.requirement);
PopulateRequirementResponseItemData(model, transaction, requirement, commodity, responseData.Requirement);
// Complete response.
responseData.Success = true;
return Json(responseData);
}
@@ -13,6 +13,7 @@ using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
{
@@ -26,8 +27,11 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
private class TransactionListData : AjaxResponse_Data.ItemData_Base
{
// Item properties with specific handling.
public String TypeCode { get; set; }
public String TypeDesc { get; set; }
public String Reference { get; set; }
public String Narrative { get; set; }
public String TaxEffective { get; set; }
// Field values.
public AjaxResponse_Data.FieldValuesData Field { get; } = new AjaxResponse_Data.FieldValuesData();
}
@@ -37,13 +41,18 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
}
private class TransactionItemData : TransactionListData
{
// Affiliate properties with specific handling.
public String TypeCode { get; set; }
public String TypeDesc { get; set; }
}
private void PopulateTransactionResponseListData(SbmModel_Portal model, SbmTransaction transaction, TransactionListData data)
{
data.Id = SysId.ToString(transaction.Id);
// Affiliate type - populate for list ('Type' property populated with desc) and form (Type Code & Desc).
data.TypeCode = Internals.TransactionTypeCodes.GetCodeForType(transaction.TransactionType);
data.TypeDesc = Internals.TransactionTypeCodes.GetDescForType(transaction.TransactionType);
// Prominent properties for selecting and editing.
data.Reference = transaction.Ref;
data.Narrative = transaction.DescBrief;
// Tax effective date.
data.TaxEffective = DateUtil.FormatSqlDate(Internals.TransactionMgr.GetTransactionTaxEffectiveDate(transaction));
// Derived values for list refresh.
long itemCount = TransactionMgr.GetTransactionRequirementCount(transaction.Id);
if (itemCount > 0)
@@ -56,16 +65,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
private void PopulateTransactionResponseItemData(SbmModel_Portal model, SbmTransaction transaction, TransactionItemData data, HashSet<TransactionDataGroup> dataGroups = null)
{
PopulateTransactionResponseListData(model, transaction, data as TransactionListData);
// Prominent properties for selecting and editing.
data.Reference = transaction.Ref;
data.Narrative = transaction.DescBrief;
// Affiliate type - populate for list ('Type' property populated with desc) and form (Type Code & Desc).
data.TypeCode = Internals.TransactionTypeCodes.GetCodeForType(transaction.TransactionType);
data.TypeDesc = Internals.TransactionTypeCodes.GetDescForType(transaction.TransactionType);
// Transaction properties.
data.Field.Value.Add($"{Model_Transaction.ItemField.Type}", Internals.TransactionTypeCodes.GetDescForType(transaction.TransactionType));
data.Field.Value.Add($"{Model_Transaction.ItemField.AssociationId}", $"{SysId.ToInt(transaction.AssociationId)}");
data.Field.Value.Add($"{Model_Transaction.ItemField.AssociationName}", AccountMgr.GetAssociationTargetName(transaction.AssociationId));
data.Field.Value.Add($"{Model_Transaction.ItemField.Association}", AccountMgr.GetAssociationTargetName(transaction.AssociationId));
data.Field.Value.Add($"{Model_Transaction.ItemField.Reference}", transaction.Ref);
data.Field.Value.Add($"{Model_Transaction.ItemField.ReferenceExt}", transaction.RefExt);
data.Field.Value.Add($"{Model_Transaction.ItemField.DescBrief}", transaction.DescBrief);
@@ -74,6 +77,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
// Status dates.
data.Field.Value.Add($"{Model_Transaction.ItemField.Raised}", model.FormatDateForForm(transaction.Raised));
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 (dataGroups != null && dataGroups.Contains(TransactionDataGroup.Core))
{
@@ -225,7 +229,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
else prmTransaction.StatusCat = SbmTransaction.StatusCat.NotDeleted;
if (model.GetFilterTransactionType() <= 0)
prmTransaction.SortColumns.Add(TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.Type_Desc));
prmTransaction.SortColumns.Add(TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.RaisedOn).SetSortDescending());
prmTransaction.SortColumns.Add(TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.Id).SetSortDescending());
model.Paging.ItemTotal = (ulong)TransactionMgr.GetTransactionCount(prmTransaction);
model.PopulatePagingTo(prmTransaction.ResultsPaging);
@@ -264,14 +268,18 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
{
NamedValue.Map values = resultSet.GetRecordValues();
Sbm.TransactionType transactionType = (Sbm.TransactionType)values.GetLong(colType.DataName);
DateTime transactionRaisedOn = values.GetDate(colRaisedOn.DataName);
DateTime transactionInProgressOn = values.GetDate(colInProgressOn.DataName);
SaStatus transactionStatus = SacsSystem.GetStatusForCode(values.GetString(colStatus.DataName));
TransactionListData transactionData = new TransactionListData()
{
Id = values.GetString(colId.DataName),
Reference = values.GetString(colRef.DataName),
Narrative = values.GetString(colDescBrief.DataName),
TaxEffective = DateUtil.FormatSqlDate(Internals.TransactionMgr.GetTransactionTaxEffectiveDate(transactionType, transactionStatus, transactionRaisedOn, transactionInProgressOn)),
StatusCode = values.GetString(colStatus.DataName),
};
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AssociationName}", values.GetString(colTargetName.DataName));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Association}", values.GetString(colTargetName.DataName));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Type}", Internals.TransactionTypeCodes.GetDescForType(transactionType));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Reference}", values.GetString(colRef.DataName));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.ReferenceExt}", values.GetString(colRefExt.DataName));
@@ -280,9 +288,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
if (itemCount > 0)
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.ItemCount}", $"{itemCount}");
// Status dates.
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.RaisedFmt}", model.FormatDateForDisplay(values.GetDate(colRaisedOn.DataName)));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.RaisedFmt}", model.FormatDateForDisplay(transactionRaisedOn));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.RequiredFmt}", model.FormatDateForDisplay(values.GetDate(colRequiredOn.DataName)));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.InProgressFmt}", model.FormatDateForDisplay(values.GetDate(colInProgressOn.DataName)));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.InProgressFmt}", model.FormatDateForDisplay(transactionInProgressOn));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.ClosedFmt}", model.FormatDateForDisplay(values.GetDate(colClosedOn.DataName)));
if (model.UserCanViewFinancials())
{
@@ -291,7 +299,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.AmountTotal}", colAmountTot.FormatValue(values));
}
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Notes}", TransactionMgr.GetTransactionDataValue(colNotes, values).ToString());
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Status}", SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName)));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.Status}", SacsSystem.GetStatusDescForCode(SacsSystem.GetStatusCode(transactionStatus)));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.CreatedOn}", Localiser.FormatDate(values.GetDate(colCreatedOn.DataName)));
transactionData.Field.Value.Add($"{Model_Transaction.ItemField.UpdatedOn}", Localiser.FormatDate(values.GetDate(colUpdatedOn.DataName)));
// Cleanse item values.
@@ -447,6 +455,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
// Status & dates.
if (model.Transaction.StatusCode != null)
transaction.Status = model.GetTransactionStatus();
// Required date.
if (model.Transaction.Required != null)
transaction.Required = model.ParseDateFromForm(model.Transaction.Required);
// Raised date.
if (model.Transaction.Raised != null)
transaction.Raised = model.ParseDateFromForm(model.Transaction.Raised);
@@ -458,7 +469,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
if (model.Transaction.InProgress != null)
transaction.InProgress = model.ParseDateFromForm(model.Transaction.InProgress);
// Closed date.
if (transaction.TransactionStatusCat == SbmTransaction.StatusCat.Closed)
if (transaction.TransactionStatusCat == SbmTransaction.StatusCat.Open)
transaction.Closed = DateTime.MinValue;
else if (model.Transaction.Closed != null)
transaction.Closed = model.ParseDateFromForm(model.Transaction.Closed);
@@ -65,16 +65,19 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
DrawingNo,
DrawingIssue,
Type,
TypeDesc,
DescBrief,
//---------------------------------------------------------------
// Sales.
SalesPrice,
SaleAmount,
/// <summary>Formatted sales price - for list only.</summary>
SalesPriceFmt,
SalesTaxCode,
SaleAmountFmt,
SaleTaxCode,
/// <summary>Unit of sale - caption for list & name of form control.</summary>
SalesUnit,
SalesPackQty,
SaleUnit,
SaleUnitCat,
SaleUnitType,
SalePackQty,
MinOrderQty,
RetailPrice,
RetailPricePlanned,
@@ -87,9 +90,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
Promotion,
//---------------------------------------------------------------
// Purchasing.
CostPrice,
AmountCost,
/// <summary>Formatted cost price - for list only.</summary>
CostPriceFmt,
AmountCostFmt,
PlaceOfOrigin,
MaterialCost,
MaterialCurrency,
@@ -265,9 +268,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Commodity type.
if (commodityType <= 0)
config.Column.Label.Add($"{ItemField.Type}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Type, Localiser["label.type"]));
config.Column.Label.Add($"{ItemField.TypeDesc}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Type, Localiser["label.type"]));
else
config.Column.Hide.Add($"{ItemField.Type}");
config.Column.Hide.Add($"{ItemField.TypeDesc}");
// Description.
@@ -276,13 +279,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Sales price.
if (!UserCanViewCommodityFinancials_Sales())
config.Column.Hide.Add($"{ItemField.SalesPrice}");
config.Column.Hide.Add($"{ItemField.SaleAmount}");
// Pack qty.
if (modeIsStockControl || SessionConsole.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.Commodity_PackQtySale))
config.Column.Label.Add($"{ItemField.SalesPackQty}", Localiser["label.pack.quantity"]);
config.Column.Label.Add($"{ItemField.SalePackQty}", Localiser["label.pack.quantity"]);
else
config.Column.Hide.Add($"{ItemField.SalesPackQty}");
config.Column.Hide.Add($"{ItemField.SalePackQty}");
// Customer.
if (modeIsStockControl || !SessionConsole.AllowOption(Sbm.ConfigOption.CommodityExclusiveToCustomer))
@@ -297,7 +300,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Cost price.
if (!UserCanViewCommodityFinancials_Supply())
config.Column.Hide.Add($"{ItemField.CostPrice}");
config.Column.Hide.Add($"{ItemField.AmountCost}");
// Supplier.
if (!modeIsStockControl)
@@ -451,9 +454,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Sales price.
if (!UserCanViewCommodityFinancials_Sales())
config.Field.Hide.Add($"{ItemField.SalesPrice}");
config.Field.Hide.Add($"{ItemField.SaleAmount}");
else if (managedByAccounts || !UserCanUpdateFinancials())
config.Field.Readonly.Add($"{ItemField.SalesPrice}");
config.Field.Readonly.Add($"{ItemField.SaleAmount}");
// Retail price.
if (UserCanViewCommodityFinancials_Sales() && SessionConsole.DisplayAttribute(SbmDbDfn.ColumnIdx.Commodity_RetailPrice))
@@ -475,7 +478,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Tax code
if (managedByAccounts || !UserCanUpdateFinancials())
config.Field.Readonly.Add($"{ItemField.SalesTaxCode}");
config.Field.Readonly.Add($"{ItemField.SaleTaxCode}");
// Indicative carriage cost.
if (UserCanViewCommodityFinancials_Sales() && SessionConsole.DisplayAttribute(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative) || !CommodityMgr.ColumnExists(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative))
@@ -488,7 +491,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Sales Unit.
if (managedByAccounts || !UserCanUpdateFinancials())
config.Field.Readonly.Add($"{ItemField.SalesUnit}");
config.Field.Readonly.Add($"{ItemField.SaleUnit}");
// Sales Pack quantity.
@@ -522,11 +525,11 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Cost price.
if (UserCanViewCommodityFinancials_Supply())
{
config.Field.Label.Add($"{ItemField.CostPrice}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, Localiser["label.cost.price"]));
config.Field.Label.Add($"{ItemField.AmountCost}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, Localiser["label.cost.price"]));
if (!UserCanUpdateFinancials())
config.Field.Readonly.Add($"{ItemField.CostPrice}");
config.Field.Readonly.Add($"{ItemField.AmountCost}");
}
else config.Field.Hide.Add($"{ItemField.CostPrice}");
else config.Field.Hide.Add($"{ItemField.AmountCost}");
// Place of origin.
config.Field.Label.Add($"{ItemField.PlaceOfOrigin}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin, Localiser["label.place.of.origin"]));
@@ -73,10 +73,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
public String AssocIdCustomer { get; set; }
public String AssocIdSupplier { get; set; }
// Sales.
public String SalesPrice { get; set; }
public String SalesTaxCode { get; set; }
public String SalesUnitType { get; set; }
public String SalesPackQty { get; set; }
public String SaleAmount { get; set; }
public String SaleTaxCode { get; set; }
public String SaleUnitType { get; set; }
public String SalePackQty { get; set; }
// Common properties.
public String Notes { get; set; }
public String StatusCode { get; set; }
@@ -98,15 +98,15 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
// Sales.
public decimal GetCommoditySalesPrice()
{
return StringUtil.ToDecimal(Commodity.SalesPrice);
return StringUtil.ToDecimal(Commodity.SaleAmount);
}
public SysId GetCommoditySalesTaxCodeId()
{
return Internals.GetTaxCodesEffectiveOn(DateTime.Today).FirstOrDefault(tax => tax.Code.EqualsCI(Commodity.SalesTaxCode))?.Id;
return Internals.GetTaxCodesEffectiveOn(DateTime.Today).FirstOrDefault(tax => tax.Code.EqualsCI(Commodity.SaleTaxCode))?.Id;
}
public SaUomType GetCommoditySalesUnitType()
{
return (SaUomType)Internals.GetSystemCodes(Sbm.SystemCode.UnitMeasureType).GetTypeForCode(Commodity.SalesUnitType);
return (SaUomType)Internals.GetSystemCodes(Sbm.SystemCode.UnitMeasureType).GetTypeForCode(Commodity.SaleUnitType);
}
public SysId GetCommoditySalesUnitId()
{
@@ -114,7 +114,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
}
public int GetCommoditySalesPackQty()
{
return StringUtil.ToInt(Commodity.SalesPackQty);
return StringUtil.ToInt(Commodity.SalePackQty);
}
// Common properties.
public SaStatus GetCommodityStatus()
@@ -160,41 +160,41 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Commodities
}
// Commodity Sales Price.
if (Commodity.SalesPrice != null)
if (Commodity.SaleAmount != null)
{
String controlName = GetFieldName(Model_Commodity.ItemField.SalesPrice);
responseData.SetControlValue(controlName, Commodity.SalesPrice);
if (Commodity.SalesPrice.IsBlank())
String controlName = GetFieldName(Model_Commodity.ItemField.SaleAmount);
responseData.SetControlValue(controlName, Commodity.SaleAmount);
if (Commodity.SaleAmount.IsBlank())
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
else if (!StringUtil.IsDecimal(Commodity.SalesPrice) || GetCommoditySalesPrice() < 0.0m)
else if (!StringUtil.IsDecimal(Commodity.SaleAmount) || GetCommoditySalesPrice() < 0.0m)
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Commodity Tax.
if (Commodity.SalesTaxCode != null)
if (Commodity.SaleTaxCode != null)
{
String controlName = GetFieldName(Model_Commodity.ItemField.SalesTaxCode);
if (Commodity.SalesTaxCode.IsBlank())
String controlName = GetFieldName(Model_Commodity.ItemField.SaleTaxCode);
if (Commodity.SaleTaxCode.IsBlank())
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
else if (!SysId.IsValid(GetCommoditySalesTaxCodeId()))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Commodity Sales Unit Type.
if (Commodity.SalesUnitType != null)
if (Commodity.SaleUnitType != null)
{
String controlName = GetFieldName(Model_Commodity.ItemField.SalesUnit);
if (Commodity.SalesUnitType.IsBlank())
String controlName = GetFieldName(Model_Commodity.ItemField.SaleUnit);
if (Commodity.SaleUnitType.IsBlank())
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
else if (GetCommoditySalesUnitType() == SaUomType.Unknown || !SysId.IsValid(GetCommoditySalesUnitId()))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Commodity Sales pack quantity.
if (Commodity.SalesPackQty != null)
if (Commodity.SalePackQty != null)
{
String controlName = GetFieldName(Model_Commodity.ItemField.SalesPackQty);
if (!StringUtil.IsBlank(Commodity.SalesPackQty) && (!StringUtil.IsDecimal(Commodity.SalesPackQty) || GetCommoditySalesPackQty() < 1))
String controlName = GetFieldName(Model_Commodity.ItemField.SalePackQty);
if (!StringUtil.IsBlank(Commodity.SalePackQty) && (!StringUtil.IsDecimal(Commodity.SalePackQty) || GetCommoditySalesPackQty() < 1))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
@@ -27,8 +27,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts
{
Id,
Type,
OwnerId,
Owner,
/// <summary>Target name.</summary>
TargetId,
Target,
Code,
ReferenceExt,
@@ -28,9 +28,11 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
// Identity.
Pos,
Id,
Exists,
TransactionId,
TransactionType,
TransactionRef,
CurrencyId,
AssociationName,
AssociationId,
Type,
@@ -60,12 +62,16 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
CommodityId,
ProductCode,
DrawingIssue,
Asset,
AssetId,
Quantity,
QuantityProd,
Unit,
UomId,
UnitType,
PackQty,
Weight,
WeightUnit,
WeightUnitType,
MaterialSourceCode,
LocationIdStock,
AllocationIndicator,
@@ -74,8 +80,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
AmountAct,
AmountDisc,
AmountNet,
TaxCodeId,
TaxCode,
TaxCodeId,
TaxEffective,
TaxRate,
AmountTax,
AmountTot,
@@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Mvc.Rendering;
using DocumentFormat.OpenXml.EMMA;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Sarand.BusinessMgr.Net.Core.Web.App;
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
@@ -6,6 +8,7 @@ using Sarand.BusinessMgr.Web.Portal.Components;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.ReferenceData;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
@@ -50,8 +53,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
public String Mode { get; set; }
public String TransactionId { get; set; }
public String TransactionType { get; set; }
public String Search { get; set; }
public String TransactionStatusCat { get; set; }
public String Search { get; set; }
public String StatusCat { get; set; }
}
public FilterData Filter { get; } = new FilterData();
@@ -88,55 +91,135 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
public String Exists { get; set; }
public String Id { get; set; }
public String TransactionId { get; set; }
public String TransactionType { get; set; }
public String RequirementIdSource { get; set; }
public String Type { get; set; }
public String Sequence { get; set; }
public String JobNumber { get; set; }
// Status dates.
public String Required { get; set; }
public String Started { get; set; }
public String Completed { get; set; }
// Details.
public String AssociationIdSubContract { get; set; }
public String DescBrief { get; set; }
public String DescIntro { get; set; }
public String DescOutline { get; set; }
public String DescDetail { get; set; }
public String CurrencyId { get; set; }
public String PromotionCode { get; set; }
public String NominalCode { get; set; }
public String AssociationIdSubContract { get; set; }
// Commodity.
public String CommodityId { get; set; }
public String ProductCode { get; set; }
public String AssetId { get; set; }
public String Quantity { get; set; }
public String QuantityProd { get; set; }
public String UomId { get; set; }
public String UnitType { get; set; }
public String Weight { get; set; }
public String UomIdWeight { get; set; }
public String WeightUnitType { get; set; }
public String MaterialSourceCode { get; set; }
public String LocationIdStock { get; set; }
// Amounts.
public String AmountUnit { get; set; }
public String AmountAct { get; set; }
public String PercentDisc { get; set; }
public String AmountDisc { get; set; }
public String AmountNet { get; set; }
public String TaxCodeId { get; set; }
public String TaxCode { get; set; }
public String TaxRate { get; set; }
public String AmountTax { get; set; }
public String AmountTot { get; set; }
public String TaxEffective { get; set; }
// Status dates.
public String Required { get; set; }
public String Started { get; set; }
public String Completed { get; set; }
// Common properties.
public String Notes { get; set; }
public String StatusCode { get; set; }
// Confirmations.
public class ConfirmData
{
public String SuperStatus { get; set; }
}
public ConfirmData Confirm { get; } = new ConfirmData();
}
public RequirementData Requirement { get; } = new RequirementData();
//-------------------------------------------------------------------
// Extract Requirement properties.
// Transaction.
public SysId GetTransactionId()
{
return SysId.ToSysId(Requirement.TransactionId);
}
public Sbm.TransactionType GetTransactionType()
{
return (Sbm.TransactionType)Internals.TransactionTypeCodes.GetTypeForCode(Requirement.TransactionType);
}
// Requirement.
public SysId GetRequirementId()
{
return SysId.ToSysId(Requirement.Id);
}
public Sbm.RequirementType GetRequirementType()
{
return (Sbm.RequirementType)Internals.RequirementTypeCodes.GetTypeForCode(Requirement.Type);
Sbm.RequirementType requirementType = (Sbm.RequirementType)Internals.RequirementTypeCodes.GetTypeForCode(Requirement.Type);
if (requirementType <= 0)
requirementType = Sbm.RequirementType.Detail;
return requirementType;
}
public SysId GetRequirementCommodityId()
// Currency.
public SysId GetCurrencyId()
{
return SysId.ToSysId(Requirement.CurrencyId);
}
// Commodity.
public SysId GetCommodityId()
{
return SysId.ToSysId(Requirement.CommodityId);
}
// Unit.
public SaUomType GetRequirementUnitType()
{
List<TypeCodeDesc> unitTypes = SaReferenceDataConsole.GetReferenceDataCodes(ReferenceDataSystemCode.UnitMeasureType);
SaUomType unitType = (SaUomType)unitTypes.GetTypeForCode(Requirement.UnitType);
return unitType;
}
public SysId GetRequirementUnitId()
{
return Internals.GetUnitOfMeasureByType(GetRequirementUnitType())?.Id;
}
// Weight Unit.
public SaUomType GetRequirementWeightUnitType()
{
List<TypeCodeDesc> unitTypes = SaReferenceDataConsole.GetReferenceDataCodes(ReferenceDataSystemCode.UnitMeasureType);
SaUomType weightUnitType = (SaUomType)unitTypes.GetTypeForCode(Requirement.WeightUnitType);
return weightUnitType;
}
public SysId GetRequirementWeightUnitId()
{
return Internals.GetUnitOfMeasureByType(GetRequirementWeightUnitType())?.Id;
}
// Tax code.
public SaTaxCode GetRequirementTaxCode()
{
return Internals.GetTaxCodesEffectiveOn(GetRequirementTaxEffective()).FirstOrDefault(tax => tax.Code.EqualsCI(Requirement.TaxCode));
}
public DateTime GetRequirementTaxEffective()
{
return DateUtil.OnInvalid(DateUtil.ParseXmlDate(Requirement.TaxEffective), DateTime.Today);
}
public SysId GetRequirementTaxCodeId()
{
return GetRequirementTaxCode()?.Id;
}
public decimal GetRequirementTaxRate()
{
return GetRequirementTaxCode()?.TaxRate ?? 0.0m;
}
// Status.
public SaStatus GetRequirementStatus()
{
return SacsSystem.GetStatusForCode(Requirement.StatusCode);
@@ -148,13 +231,48 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
// Requirement validation.
public bool ValidateRequirementData(Sacs.Web.Components.SaController.AjaxResponse_Data responseData)
{
//---------------------------------------------------------------
// Transaction.
if (Requirement.TransactionId != null)
{
String controlName = GetFieldName(ItemField.TransactionId);
}
// Source Requirement.
if (Requirement.RequirementIdSource != null)
{
String controlName = GetFieldName(ItemField.SourceReqntId);
}
// Type.
if (Requirement.Type != null)
{
String controlName = GetFieldName(ItemField.Type);
}
// Sequence.
if (Requirement.Sequence != null)
{
String controlName = GetFieldName(ItemField.Sequence);
}
// Job Number.
if (Requirement.JobNumber != null)
{
String controlName = GetFieldName(ItemField.JobNumber);
}
//---------------------------------------------------------------
// Narrative.
if (Requirement.DescBrief != null)
{
String controlName = GetFieldName(ItemField.DescBrief);
responseData.SetControlValue(controlName, Requirement.DescBrief);
if (StringUtil.GetLength(Requirement.DescBrief) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief))
if (StringUtil.IsBlank(Requirement.DescBrief))
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
else if (StringUtil.GetLength(Requirement.DescBrief) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief))
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief)]);
}
@@ -185,6 +303,156 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescDetail)]);
}
// Promotion Code.
if (Requirement.PromotionCode != null)
{
String controlName = GetFieldName(ItemField.PromotionCode);
responseData.SetControlValue(controlName, Requirement.PromotionCode);
if (StringUtil.GetLength(Requirement.PromotionCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_PromotionCode))
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_PromotionCode)]);
}
// Nominal Code.
if (Requirement.NominalCode != null)
{
String controlName = GetFieldName(ItemField.NominalCode);
responseData.SetControlValue(controlName, Requirement.NominalCode);
if (StringUtil.GetLength(Requirement.NominalCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_NominalCode))
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_NominalCode)]);
}
// SubContractor Association.
if (Requirement.AssociationIdSubContract != null)
{
String controlName = GetFieldName(ItemField.AssociationIdSubContract);
}
//---------------------------------------------------------------
// Commodity.
if (Requirement.CommodityId != null)
{
String controlName = GetFieldName(ItemField.Commodity);
SysId commodityId = GetCommodityId();
if (!SysId.IsValid(commodityId))
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
else if (!CommodityMgr.CommodityExistsById(commodityId))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Product Code.
if (Requirement.ProductCode != null)
{
String controlName = GetFieldName(ItemField.ProductCode);
responseData.SetControlValue(controlName, Requirement.ProductCode);
if (StringUtil.GetLength(Requirement.ProductCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_ProductCode))
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_ProductCode)]);
}
// Asset.
if (Requirement.AssetId != null)
{
String controlName = GetFieldName(ItemField.Asset);
SysId assetId = SysId.ToSysId(Requirement.AssetId);
if (!AssetMgr.AssetExistsById(assetId))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Quantity.
if (Requirement.Quantity != null)
{
String controlName = GetFieldName(ItemField.Quantity);
if (!StringUtil.IsDecimal(Requirement.Quantity))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Production Quantity.
if (Requirement.QuantityProd != null)
{
String controlName = GetFieldName(ItemField.QuantityProd);
if (!StringUtil.IsDecimal(Requirement.QuantityProd))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Unit of Measure.
if (Requirement.UnitType != null)
{
String controlName = GetFieldName(ItemField.Unit);
SaUomType unitType = GetRequirementUnitType();
SaUnitMeasure uom = Internals.GetUnitOfMeasureByType(unitType);
if (uom == null)
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Weight.
if (Requirement.Weight != null)
{
String controlName = GetFieldName(ItemField.Weight);
if (!StringUtil.IsDecimal(Requirement.Weight))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Weight Unit.
if (Requirement.WeightUnitType != null)
{
String controlName = GetFieldName(ItemField.WeightUnit);
SaUomType unitTypeWeight = GetRequirementWeightUnitType();
SaUnitMeasure uom = Internals.GetUnitOfMeasureByType(unitTypeWeight);
if (uom == null)
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Material Source Code.
if (Requirement.MaterialSourceCode != null)
{
String controlName = GetFieldName(ItemField.MaterialSourceCode);
}
// Stock Location.
if (Requirement.LocationIdStock != null)
{
String controlName = GetFieldName(ItemField.LocationIdStock);
SysId locationId = SysId.ToSysId(Requirement.LocationIdStock);
if (!StockMgr.LocationExistsById(locationId))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
//---------------------------------------------------------------
// Amount Unit.
if (Requirement.AmountUnit != null)
{
String controlName = GetFieldName(ItemField.AmountUnit);
if (!StringUtil.IsDecimal(Requirement.AmountUnit))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Amount Discount.
if (Requirement.AmountDisc != null)
{
String controlName = GetFieldName(ItemField.AmountDisc);
if (!StringUtil.IsBlank(Requirement.AmountDisc) && !StringUtil.IsDecimal(Requirement.AmountDisc))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Tax Code.
if (Requirement.TaxCode != null)
{
String controlName = GetFieldName(ItemField.TaxCodeId);
SaTaxCode taxCode = GetRequirementTaxCode();
if (taxCode == null)
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
// Tax Rate.
if (Requirement.TaxRate != null)
{
String controlName = GetFieldName(ItemField.TaxRate);
if (!StringUtil.IsDecimal(Requirement.TaxRate))
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
}
//---------------------------------------------------------------
// Requirement status.
if (Requirement.StatusCode != null)
@@ -229,6 +497,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_Notes)]);
}
//---------------------------------------------------------------
return !responseData.HasControlErrors();
}
@@ -29,7 +29,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
// Transaction.
Pos,
Id,
AssociationName,
Association,
AssociationId,
Type,
Reference,
@@ -276,9 +276,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
String associationLabel = Localiser["label.target"];
if (isSales) associationLabel = Localiser["label.customer"];
else if (isPurchase) associationLabel = Localiser["label.supplier"];
config.Column.Label.Add($"{ItemField.AssociationName}", associationLabel);
config.Column.Label.Add($"{ItemField.Association}", associationLabel);
}
else config.Column.Hide.Add($"{ItemField.AssociationName}");
else config.Column.Hide.Add($"{ItemField.Association}");
// Narrative.
config.Column.Label.Add($"{ItemField.DescBrief}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Transaction_DescBrief, Localiser["label.narrative"]));
@@ -627,7 +627,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
config.Field.Readonly.Add($"{ItemField.Type}");
// Association.
config.Field.Readonly.Add($"{ItemField.AssociationName}");
config.Field.Readonly.Add($"{ItemField.Association}");
// Reference.
config.Field.Label.Add($"{ItemField.Reference}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Transaction_Ref, Localiser["label.reference"]));
@@ -202,7 +202,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
// Association.
if (Transaction.AssociationId != null)
{
String controlName = GetFieldName(ItemField.AssociationName);
String controlName = GetFieldName(ItemField.Association);
SysId associationId = SysId.ToSysId(Transaction.AssociationId);
if (!SysId.IsValid(associationId))
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);