using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.ReferenceData; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { //======================================================================= // Commodity Manager - Commodity. //======================================================================= partial class SbmCommodityMgr { //------------------------------------------------------------------- // Utilities. public bool IsValidCode(String code) { if (StringUtil.IsBlank(code)) return false; if (code != code.Trim(' ')) return false; return true; } //------------------------------------------------------------------- // Retrieve individual commodities. //------------------------------------------------------------------- // Commodity exists. public bool CommodityExistsById(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.IdsIncluded.Add(commodityId); prmCommodity.StatusCat = SbmCommodity.StatusCat.Any; return GetCommodityCount(prmCommodity) == 1; } public bool CommodityExistsByCode(String code) { ClearErrorState(); if (StringUtil.IsEmpty(code)) return false; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.CodeFull = code; prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted; return GetCommodityCount(prmCommodity) == 1; } public bool CommodityExistsByCodeIssue(String code, String issue) { ClearErrorState(); if (StringUtil.IsEmpty(code) && StringUtil.IsEmpty(issue)) return false; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.CodeFull = code; prmCommodity.DrawingIssueFull = issue; prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted; return GetCommodityCount(prmCommodity) == 1; } //------------------------------------------------------------------- // Get commodities. public abstract SbmCommodity GetCommodity(SbmCommodity.Params prm); public SbmCommodity GetCommodityById(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return null; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.IdsIncluded.Add(commodityId); prmCommodity.StatusCat = SbmCommodity.StatusCat.Any; return GetCommodity(prmCommodity); } public SbmCommodity GetCommodityCurrentByCode(String code) { ClearErrorState(); SbmCommodity commodity = null; if (StringUtil.IsEmpty(code)) return commodity; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.CodeFull = code; prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted; return GetCommodity(prmCommodity); } public SbmCommodity GetCommodityByCodeIssue(String code, String issue) { ClearErrorState(); SbmCommodity commodity = null; if (StringUtil.IsEmpty(code) && StringUtil.IsEmpty(issue)) return commodity; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.CodeFull = code; prmCommodity.DrawingIssueFull = issue; prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted; return GetCommodity(prmCommodity); } //------------------------------------------------------------------- // Create commodities. public abstract SbmCommodity CreateCommodity(Sbm.CommodityType commodityType, String code); //------------------------------------------------------------------- // Validate Commodity data. public bool IsValidCommodity(SbmCommodity commodity) { ClearErrorState(); if (commodity == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidCommodityData(commodity.GetData(), new SbmCommodity.ErrField()); } public virtual bool IsValidCommodityData(SbmCommodity.Data data, SbmCommodity.ErrField errField) { ClearErrorState(); //Validate the identity. if (errField.AffiliateIdOwner != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AffiliateIdOwner)) { errField.AffiliateIdOwner = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("invalid owner"); } if (errField.CommodityType != SacsHierarchyItem.ValidValue.Ignore && (int)data.CommodityType < 1) { errField.CommodityType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("invalid type"); } // Validate the text attributes. if (errField.Code != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Code, "code", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Code), true)) { errField.Code = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "description brief", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DescBrief), true)) { errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DescOrder != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescOrder, "description order", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DescOrder))) { errField.DescOrder = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DescDetail != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescDetail, "description detail", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DescDetail))) { errField.DescDetail = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DrawingNumber != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DrawingNumber, "drawing no", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DrawingNo))) { errField.DrawingNumber = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DrawingIssue != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DrawingIssue, "drawing issue", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue))) { errField.DrawingIssue = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ImagePath != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ImagePath, "image path", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_ImagePath))) { errField.ImagePath = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Category1 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category1, "category1", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Category))) { errField.Category1 = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Category2 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category2, "category2", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Category2))) { errField.Category2 = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Category3 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category3, "category3", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Category3))) { errField.Category3 = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Location != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Location, "location", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Location))) { errField.Location = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Department != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Department, "department", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Department))) { errField.Department = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.CatalogRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.CatalogRef, "catalog ref", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_CatalogRef))) { errField.CatalogRef = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Dimensions != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Dimensions, "dimensions", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Dimensions))) { errField.Dimensions = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.SpecSummary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.SpecSummary, "spec summary", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_SpecSummary))) { errField.SpecSummary = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.MaterialCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.MaterialCode, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "material code"), (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_MaterialCode))) { errField.MaterialCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.FinishCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.FinishCode, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_FinishCode, "finish code"), (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_FinishCode))) { errField.FinishCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.PromotionCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PromotionCode, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "promotion code"), (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_PromotionCode))) { errField.PromotionCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ICNTariffCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ICNTariffCode, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, "ICN tariff code"), (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode))) { errField.ICNTariffCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.NominalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.NominalCode, "nominal code", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_NominalCode))) { errField.NominalCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.NominalCodePurchase != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.NominalCodePurchase, "nominal code purchase", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_NominalCodePurchase))) { errField.NominalCodePurchase = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.SupplierRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.SupplierRef, "supplier ref", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_SupplierRef))) { errField.SupplierRef = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.PlaceOfOrigin != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PlaceOfOrigin, "place of origin", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin))) { errField.PlaceOfOrigin = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SbmCommodity.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } } return true; } //------------------------------------------------------------------- // Commodity database interface. public abstract bool InsertCommodity(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateCommodity(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo); public virtual bool CommodityCanBeDeleted(SbmCommodity commodity) { ClearErrorState(); return true; } public abstract bool DeleteCommodity(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Commodity list. public abstract ColumnDfn GetCommodityColumnDfn(SbmCommodity.Column columnId, String caption = "", int width = 0); public abstract List GetCommodityQueryFilter(SbmCommodity.Params prm); public abstract long GetCommodityCount(SbmCommodity.Params prm); public abstract List GetCommodityList(SbmCommodity.Params prm); public abstract DbResultSet ExecuteCommodityQuery(List columns, SbmCommodity.Params prm); public abstract Task ExecuteCommodityQueryAsync(List columns, SbmCommodity.Params prm); //------------------------------------------------------------------- // D a t a V a l u e s //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// public DataValue GetCommodityDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SbmCommodity.Column)column.Id) { //----------------------------------------------------------- // Commodity TypeDesc. case SbmCommodity.Column.Type_Code: case SbmCommodity.Column.Type_Desc: { Sbm.CommodityType commodityType = (Sbm.CommodityType)values.GetValue(column.DataName).AsLong(); if (column.Id == (int)SbmCommodity.Column.Type_Desc) value = new DataValue(CommodityTypes.GetDescForType(commodityType, ((int)commodityType).ToString())); else value = new DataValue(CommodityTypes.GetCodeForType(commodityType, ((int)commodityType).ToString())); break; } // Category Desc. case SbmCommodity.Column.Category1_Desc: case SbmCommodity.Column.Category2_Desc: case SbmCommodity.Column.Category3_Desc: { String categoryCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityCategory, categoryCode)); break; } //----------------------------------------------------------- // Weight units. case SbmCommodity.Column.Weight_Unit: { String valWeight = ""; SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Id).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); if (uom != null) valWeight = uom.Abbr; value = new DataValue(valWeight); break; } case SbmCommodity.Column.Weight_ValueUnits: { String valWeight = ""; double weight = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Weight).DataName).ToNumeric(); if (weight > 0.0) { #if _DEBUG_XXX values.Dump(::afxDump); #endif SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Weight_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); valWeight = StringUtil.FormatNumeric(weight, (ushort)WeightDecimals, 0, ','); if (uom != null) valWeight += " " + uom.Abbr; } value = new DataValue(valWeight); break; } // Length units. case SbmCommodity.Column.Length_Unit: { String valLength; SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Length_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); if (uom != null) valLength = uom.Abbr; break; } case SbmCommodity.Column.Length_ValueUnits: { String valLength = ""; double length = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Length).DataName).ToNumeric(); if (length > 0.0) { #if _DEBUG_XXX values.Dump(::afxDump); #endif SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Length_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); valLength = StringUtil.FormatNumeric(length, (ushort)LengthDecimals, 0, ','); if (uom != null) valLength += " " + uom.Abbr; } value = new DataValue(valLength); break; } // Volume units: case SbmCommodity.Column.Volume_Unit: { String volVolume; SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Volume_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); if (uom != null) volVolume = uom.Abbr; break; } case SbmCommodity.Column.Volume_ValueUnits: { String valVolume = ""; double volume = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Volume).DataName).ToNumeric(); if (volume > 0.0) { #if _DEBUG_XXX lValue.Dump(::afxDump); #endif SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Volume_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); valVolume = StringUtil.FormatNumeric(volume, (ushort)VolumeDecimals, 0, ','); if (uom != null) valVolume += " " + uom.Abbr; } value = new DataValue(valVolume); break; } // Density units. case SbmCommodity.Column.Density_Unit: { String valDensity; SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Density_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); if (uom != null) valDensity = uom.Abbr; break; } case SbmCommodity.Column.Density_ValueUnits: { String valDensity = ""; double density = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Density).DataName).ToNumeric(); if (density > 0.0) { #if _DEBUG_XXX values.Dump(::afxDump); #endif SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Density_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); valDensity = StringUtil.FormatNumeric(density, (ushort)DensityDecimals, 0, ','); if (uom != null) valDensity += " " + uom.Abbr; } value = new DataValue(valDensity); break; } // BoxQty units. case SbmCommodity.Column.BoxQuantity_Unit: { String valBox = ""; SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.BoxQuantity_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); if (uom != null) valBox = uom.Abbr; value = new DataValue(valBox); break; } case SbmCommodity.Column.BoxQuantity_ValueUnits: { String valBox = ""; double box = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.BoxQuantity).DataName).ToNumeric(); if (box > 0.0) { #if _DEBUG_XXX values.Dump(::afxDump); #endif SysId unitId = new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.BoxQuantity_UomId).DataName).ToString())); SaUnitMeasure uom = FindUnitOfMeasureById(unitId); valBox = StringUtil.FormatNumeric(box, (ushort)BoxQuantityDecimals, 0, ','); if (uom != null) valBox += " " + uom.Abbr; } value = new DataValue(valBox); break; } //----------------------------------------------------------- // Commodity Codings Description. case SbmCommodity.Column.RangeDesc: { String rangeCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityRange, rangeCode)); break; } case SbmCommodity.Column.ColourDesc: { String colourCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityColour, colourCode)); break; } case SbmCommodity.Column.SourceDesc: { String sourceCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommoditySource, sourceCode)); break; } case SbmCommodity.Column.SupplyMethodDesc: { String supplyMethodCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommoditySupplyMethod, supplyMethodCode)); break; } case SbmCommodity.Column.HandlingDesc: { String handlingCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityHandling, handlingCode)); break; } case SbmCommodity.Column.DeliveryDesc: { String deliveryCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityDelivery, deliveryCode)); break; } case SbmCommodity.Column.MaterialDesc: { String materialCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityMaterial, materialCode)); break; } case SbmCommodity.Column.FinishDesc: { String finishCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityFinish, finishCode)); break; } case SbmCommodity.Column.PromotionDesc: { String promotionCode = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityPromotion, promotionCode)); break; } //----------------------------------------------------------- // Commodity Formatted Currency Values. case SbmCommodity.Column.CostPrice_Fmt: { String valFormat = ""; double amount = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(amount, 2, 0, ','); SaCurrency currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)amount); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.SalesPrice_Fmt: { String valFormat = ""; double amount = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(amount, 2, 0, ','); SaCurrency currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)amount); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.RetailPrice_Fmt: { String valFormat = ""; double amount = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(amount, 2, 0, ','); SaCurrency currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)amount); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.RetailPricePlanned_Fmt: { String valFormat = ""; double amount = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(amount, 2, 0, ','); SaCurrency currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)amount); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.CarriageCostIndicative_Fmt: { String valFormat = ""; double amount = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.CarriageCostIndicative).DataName).ToNumeric(); if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(amount, 2, 0, ','); SaCurrency currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)amount); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.GrossPrice_Fmt: { String valFormat = ""; double amount = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.GrossPrice).DataName).ToNumeric(); if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(amount, 2, 0, ','); SaCurrency currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)amount); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.MaterialCost_Fmt: { String valFormat = ""; double materialCost = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(materialCost) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(materialCost, 2, 0, ','); SaCurrency currency = GetCurrency(new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.MaterialCurrencyId).DataName).ToString()))); currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)materialCost); } value = new DataValue(valFormat); break; } case SbmCommodity.Column.ExWorksCost_Fmt: { String valFormat = ""; double exWorksCost = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(exWorksCost) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(exWorksCost, 2, 0, ','); SaCurrency currency = GetCurrency(new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.ExWorksCurrencyId).DataName).ToString()))); currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)exWorksCost); } value = new DataValue(valFormat); break; } //----------------------------------------------------------- // Customer Definition. /*case SbmCommodity.Column.Cust_ProductCode: case SbmCommodity.Column.Cust_AmountRetail:*/ case SbmCommodity.Column.Cust_AmountRetail_Fmt: { String valFormat = ""; double custAmountRetail = values.GetValue(column.DataName).ToNumeric(); if (Math.Abs(custAmountRetail) > 0.001 || column.ShowZeroValues) { valFormat = StringUtil.FormatNumeric(custAmountRetail, 2, 0, ','); SaCurrency currency = GetCurrency(new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Cust_CurrencyIdRetail).DataName).ToString()))); if (currency == null) currency = GetDefaultCurrency(); if (currency != null) valFormat = currency.FormatAmount((decimal)custAmountRetail); } value = new DataValue(valFormat); break; } //case SbmCommodity.Column.Cust_CurrencyIdRetail: case SbmCommodity.Column.Cust_CurrencyIdRetail_Code: case SbmCommodity.Column.Cust_CurrencyIdRetail_Symbol: { String valFormat = ""; SaCurrency currency = GetCurrency(new SysId(StringUtil.ToInt(values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Cust_CurrencyIdRetail).DataName).ToString()))); currency = GetDefaultCurrency(); if (currency != null) { if (column.Id == (int)SbmCommodity.Column.Cust_CurrencyIdRetail_Code) valFormat = currency.Code; else if (column.Id == (int)SbmCommodity.Column.Cust_CurrencyIdRetail_Symbol) valFormat = currency.Symbol; } value = new DataValue(valFormat); break; } /*case SbmCommodity.Column.Cust_PromotionCode: case SbmCommodity.Column.Cust_PromotionDesc: break;*/ //----------------------------------------------------------- // Stock Bays. case SbmCommodity.Column.Stock_Bays: { String stockBay = values.GetValue(column.DataName).ToString(); stockBay.Replace(",,", ",").Replace(",,", ",").Trim(',').Replace(",", ", "); value = new DataValue(stockBay); break; } // Stock NextDue. case SbmCommodity.Column.Stock_NextDue_Date: case SbmCommodity.Column.Stock_NextDue_Quantity: { // Next stock movement arrival expected and quantity. DateTime stockCommodity = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_NextDue_Commodity_Date).DataName).AsDate(); DateTime stockContainer = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_NextDue_Container_Date).DataName).AsDate(); double stockCmd = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_NextDue_Commodity_Quantity).DataName).ToNumeric(); double stockContain = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_NextDue_Container_Quantity).DataName).ToNumeric(); // Only need the earliest date and corresponding quantity. DateTime dtStock = DateTime.MinValue; double fStock = 0; if (DateUtil.IsValid(stockCommodity)) { dtStock = stockCommodity; fStock = stockCmd; } if (DateUtil.IsValid(stockContainer)) { if (!DateUtil.IsValid(dtStock) || stockContainer < dtStock) { // Container movement earlier than commodity movement (or no commodity movement). dtStock = stockContainer; fStock = stockContain; } else if (stockContainer == dtStock) { // Container movement on same date as commodity movement - combine quantities. fStock += stockContain; } } if (column.Id == (int)SbmCommodity.Column.Stock_NextDue_Date) value = new DataValue(dtStock); else if (column.Id == (int)SbmCommodity.Column.Stock_NextDue_Quantity) value = new DataValue(fStock); break; } case SbmCommodity.Column.Stock_Available: case SbmCommodity.Column.Stock_Available_MinZero: { // Database query doesn't do the calculation. double stockLevel = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel).DataName).ToNumeric(); double allocated = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated).DataName).ToNumeric(); double available = stockLevel - allocated; if (column.Id == (int)SbmCommodity.Column.Stock_Available_MinZero) value = new DataValue(Math.Max(0.0, available)); else value = new DataValue(available); break; } case SbmCommodity.Column.Stock_Available_Sales: case SbmCommodity.Column.Stock_Available_Sales_MinZero: { // Database query doesn't do the calculation. double stockLevel = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel_Sales).DataName).ToNumeric(); double allocated = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Sales).DataName).ToNumeric(); double available = stockLevel - allocated; if (column.Id == (int)SbmCommodity.Column.Stock_Available_Sales_MinZero) value = new DataValue(Math.Max(0.0, available)); else value = new DataValue(available); break; } //----------------------------------------------------------- // Barcode Images. case SbmCommodity.Column.BarcodeImagePath: { String commodityCode = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Code).DataName).ToString(); value = new DataValue(GetBarcodeImagePath(commodityCode)); break; } //----------------------------------------------------------- // Commodity Notes. case SbmCommodity.Column.Notes: value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; // Commodity Status. case SbmCommodity.Column.Status_Current_Y: case SbmCommodity.Column.Status_Current_X: case SbmCommodity.Column.Status_Current_Tick: { SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString()); bool currentStatus = status == SaStatus.Current; if (column.Id == (int)SbmCommodity.Column.Status_Current_Y) value = new DataValue(currentStatus ? "Y" : ""); else if (column.Id == (int)SbmCommodity.Column.Status_Current_X) value = new DataValue(currentStatus ? "" : "X"); else value = new DataValue(currentStatus); } break; case SbmCommodity.Column.Status_Desc: case SbmCommodity.Column.Status_Ind: { SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString()); if (column.Id == (int)SbmCommodity.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDesc(status)); else if (column.Id == (int)SbmCommodity.Column.Status_Ind) value = new DataValue(SbmCommodity.GetStatusTriState(status)); } break; //----------------------------------------------------------- default: value = values.GetValue(column.DataName); break; } return value; } //------------------------------------------------------------------- } //======================================================================= }