3.0.1.3 Requirements
This commit is contained in:
@@ -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))
|
||||
{
|
||||
|
||||
+49
-30
@@ -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; }
|
||||
}
|
||||
|
||||
+183
-30
@@ -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);
|
||||
}
|
||||
|
||||
+27
-16
@@ -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"]);
|
||||
|
||||
Reference in New Issue
Block a user