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 { //======================================================================= partial class SbmCommodityMgr { public object StringList { get; private set; } //******************************************************************* // C o m m o d i t i e s //******************************************************************* // Utilities. public bool IsValidCode(String code) { if (StringUtil.IsEmpty(code)) return false; if (code != code.Trim(' ')) return false; return true; } // Commodity interface rules. public bool AllowColumnImport(SbmCommodity.Column column) { switch (column) { //case SbmCommodity.Column.Id: //case SbmCommodity.Column.AffIdOwner: //case SbmCommodity.Column.Type: case SbmCommodity.Column.Code: case SbmCommodity.Column.DescBrief: case SbmCommodity.Column.DescOrder: case SbmCommodity.Column.DescDetail: case SbmCommodity.Column.DrawingNo: case SbmCommodity.Column.DrawingIssue: case SbmCommodity.Column.ImagePath: case SbmCommodity.Column.Category1Code: case SbmCommodity.Column.Category2Code: case SbmCommodity.Column.Category3Code: case SbmCommodity.Column.Location: case SbmCommodity.Column.Department: case SbmCommodity.Column.CatalogRef: case SbmCommodity.Column.Weight: case SbmCommodity.Column.Weight_UomId: case SbmCommodity.Column.Length: case SbmCommodity.Column.Length_UomId: case SbmCommodity.Column.Volume: case SbmCommodity.Column.Volume_UomId: case SbmCommodity.Column.Density: case SbmCommodity.Column.Density_UomId: case SbmCommodity.Column.BoxQuantity: case SbmCommodity.Column.BoxQuantity_UomId: case SbmCommodity.Column.Dimensions: case SbmCommodity.Column.SpecSummary: case SbmCommodity.Column.NominalCode: case SbmCommodity.Column.NominalCodePurchase: case SbmCommodity.Column.ICNTariffCode: //case SbmCommodity.Column.TimeProd: //case SbmCommodity.Column.UomIdTimeProd: //case SbmCommodity.Column.RangeCode: //case SbmCommodity.Column.ColourCode: //case SbmCommodity.Column.SourceCode: //case SbmCommodity.Column.SupplyMethodCode: //case SbmCommodity.Column.HandlingCode: //case SbmCommodity.Column.DeliveryCode: case SbmCommodity.Column.MaterialCode: case SbmCommodity.Column.FinishCode: case SbmCommodity.Column.PromotionCode: case SbmCommodity.Column.AssociationIdSupplier: case SbmCommodity.Column.Supplier_Ref: case SbmCommodity.Column.CostPrice: case SbmCommodity.Column.PlaceOfOrigin: case SbmCommodity.Column.MaterialCost: case SbmCommodity.Column.MaterialCurrencyId: case SbmCommodity.Column.ExWorksCost: case SbmCommodity.Column.ExWorksCurrencyId: case SbmCommodity.Column.ReorderLevel: case SbmCommodity.Column.ReorderQty: //case SbmCommodity.Column.QtyOnOrder: case SbmCommodity.Column.AssociationIdCustomer: case SbmCommodity.Column.SalesPrice: case SbmCommodity.Column.RetailPrice: case SbmCommodity.Column.RetailPricePlanned: case SbmCommodity.Column.UomIdSale: case SbmCommodity.Column.CarriageCostIndicative: //case SbmCommodity.Column.CarriageCostIndicative_Fmt: case SbmCommodity.Column.MinOrderQty: case SbmCommodity.Column.PackQty: case SbmCommodity.Column.TaxCodeId: //case SbmCommodity.Column.LastOrderDate: //case SbmCommodity.Column.LastOrderQty: //case SbmCommodity.Column.QtyInStock: //case SbmCommodity.Column.QtyAllocated: //case SbmCommodity.Column.FreeStock: //case SbmCommodity.Column.StockTakeDate: //case SbmCommodity.Column.StockTakeQty: //case SbmCommodity.Column.OrderQtyDecimals: case SbmCommodity.Column.CommodityIdSalesProj: //case SbmCommodity.Column.SalesProjMonthlyProp: case SbmCommodity.Column.SalesProj_Annual: case SbmCommodity.Column.SalesProjMonth01: case SbmCommodity.Column.SalesProjMonth02: case SbmCommodity.Column.SalesProjMonth03: case SbmCommodity.Column.SalesProjMonth04: case SbmCommodity.Column.SalesProjMonth05: case SbmCommodity.Column.SalesProjMonth06: case SbmCommodity.Column.SalesProjMonth07: case SbmCommodity.Column.SalesProjMonth08: case SbmCommodity.Column.SalesProjMonth09: case SbmCommodity.Column.SalesProjMonth10: case SbmCommodity.Column.SalesProjMonth11: case SbmCommodity.Column.SalesProjMonth12: case SbmCommodity.Column.Notes: //case SbmCommodity.Column.Flags: //case SbmCommodity.Column.Status: //case SbmCommodity.Column.CreateOn: //case SbmCommodity.Column.CreateBy: //case SbmCommodity.Column.CreateHost: //case SbmCommodity.Column.UpdateOn: //case SbmCommodity.Column.UpdateBy: //case SbmCommodity.Column.UpdateHost: return true;//return ConfigConsole.DisplayAttribute(column); } return false; } public String GetColumnCode(SbmCommodity.Column column) { switch (column) { case SbmCommodity.Column.Type_Desc: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Type, "Type"); case SbmCommodity.Column.Code: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Code, "Code"); case SbmCommodity.Column.DescBrief: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DescBrief, "Brief description"); case SbmCommodity.Column.DescOrder: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DescOrder, "Order description"); case SbmCommodity.Column.DescDetail: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DescDetail, "Detail description"); case SbmCommodity.Column.DrawingNo: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DrawingNo, "Drawing no"); case SbmCommodity.Column.DrawingIssue: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, "Drawing issue"); case SbmCommodity.Column.ImagePath: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ImagePath, "Image path"); case SbmCommodity.Column.Category1Code: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Category, "Category"); case SbmCommodity.Column.Location: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Location, "Location"); case SbmCommodity.Column.Department: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Department, "Department"); case SbmCommodity.Column.CatalogRef: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CatalogRef, "Catalog ref"); case SbmCommodity.Column.Weight: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Weight, "Weight"); case SbmCommodity.Column.Weight_UomId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_UomIdWeight, "Weight unit"); case SbmCommodity.Column.Length: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Length, "Length"); case SbmCommodity.Column.Length_UomId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_UomIdLength, "Length unit"); case SbmCommodity.Column.Volume: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Volume, "Volume"); case SbmCommodity.Column.Volume_UomId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_UomIdVolume, "Volume unit"); case SbmCommodity.Column.Density: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Density, "Density"); case SbmCommodity.Column.Density_UomId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_UomIdDensity, "Density unit"); case SbmCommodity.Column.BoxQuantity: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_BoxQuantity, "Box quantity"); case SbmCommodity.Column.BoxQuantity_UomId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_UomIdBox, "Box unit"); case SbmCommodity.Column.Dimensions: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Dimensions, "Dimensions"); case SbmCommodity.Column.SpecSummary: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SpecSummary, "Specification"); case SbmCommodity.Column.NominalCode: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_NominalCode, "Nominal code - sales"); case SbmCommodity.Column.NominalCodePurchase: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_NominalCodePurchase, "Nominal code - purchase"); case SbmCommodity.Column.ICNTariffCode: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, "ICN Tariff code"); case SbmCommodity.Column.MaterialCode: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material"); case SbmCommodity.Column.FinishCode: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish"); case SbmCommodity.Column.PromotionCode: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Promotion"); case SbmCommodity.Column.AssociationIdSupplier: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_AssIdSupplier, "Supplier"); case SbmCommodity.Column.Supplier_Ref: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SupplierRef, "Supplier ref"); case SbmCommodity.Column.CostPrice: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price"); case SbmCommodity.Column.PlaceOfOrigin: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin, "Place of origin"); case SbmCommodity.Column.MaterialCost: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost"); case SbmCommodity.Column.MaterialCurrencyId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, "Material currency"); case SbmCommodity.Column.ExWorksCost: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost, "Ex-works cost"); case SbmCommodity.Column.ExWorksCurrencyId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, "Ex-works currency"); case SbmCommodity.Column.ReorderLevel: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ReorderLevel, "Reorder level"); case SbmCommodity.Column.ReorderQty: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ReorderQty, "Reorder qty"); case SbmCommodity.Column.AssociationIdCustomer: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_AssIdCustomer, "Customer"); case SbmCommodity.Column.SalesPrice: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, "Sales price"); case SbmCommodity.Column.RetailPrice: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_RetailPrice, "Retail price"); case SbmCommodity.Column.RetailPricePlanned: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, "Retail price planned"); case SbmCommodity.Column.UomIdSale: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_UomIdSale, "Sale unit"); case SbmCommodity.Column.PackQty: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PackQty, "Pack qty - sale"); case SbmCommodity.Column.TaxCodeId: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_TaxCodeId, "Tax code"); case SbmCommodity.Column.SalesProj_Annual: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual, "Projected annual sales"); case SbmCommodity.Column.SalesProjMonth01: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth01, "Projected sales - Jan"); case SbmCommodity.Column.SalesProjMonth02: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth02, "Projected sales - Feb"); case SbmCommodity.Column.SalesProjMonth03: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth03, "Projected sales - Mar"); case SbmCommodity.Column.SalesProjMonth04: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth04, "Projected sales - Apr"); case SbmCommodity.Column.SalesProjMonth05: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth05, "Projected sales - May"); case SbmCommodity.Column.SalesProjMonth06: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth06, "Projected sales - Jun"); case SbmCommodity.Column.SalesProjMonth07: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth07, "Projected sales - Jul"); case SbmCommodity.Column.SalesProjMonth08: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth08, "Projected sales - Aug"); case SbmCommodity.Column.SalesProjMonth09: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth09, "Projected sales - Sep"); case SbmCommodity.Column.SalesProjMonth10: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth10, "Projected sales - Oct"); case SbmCommodity.Column.SalesProjMonth11: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth11, "Projected sales - Nov"); case SbmCommodity.Column.SalesProjMonth12: return GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth12, "Projected sales - Dec"); } return ""; } // Image Paths. public String GetImagePathPrefix() { String prefix = ""; if (AccountsDfn.IsItemTypeManagedByAccounts(Sbm.ItemType.Commodity)) { if (AccountsDfn.IsUsingSageInterface()) prefix = "%SAGE%\\"; } return prefix; } public String GetActualImagePath(String imagePath) { //SATRACE("SapCommodityMgr::GetActualImagePath '"+imagePath+"'\n"); if (StringUtil.IsEmpty(imagePath)) return imagePath; String imagePathPrefix = GetImagePathPrefix(); String cmdImagePath = imagePath; if (cmdImagePath.Left(imagePathPrefix.Length) == imagePathPrefix) { String imageFolder = ""; if (AccountsDfn.IsItemTypeManagedByAccounts(Sbm.ItemType.Commodity)) { if (AccountsDfn.IsUsingSageInterface()) imageFolder = AccountsDfn.GetImageFolder(Sbm.InterfaceType_Accounts.SageLine50); } //ToDo SaSystem::GETPATHDELIM in SbmCmdMgr need to be created inorder to work cmdImagePath = imageFolder + /*SaSystem::GetPathDelim(imageFolder) +*/ cmdImagePath.Right(cmdImagePath.Length - imagePathPrefix.Length); } #if _DEBUG_XXX if (!sCmdImagePath.IsEmpty()) { SATRACE("GetActualImagePath Path = '" + cmdImagePath + "'\n"); } #endif return cmdImagePath; } public String GetStandardImagePath(String commodityCode) { // Using organisation configuration image folder. if (StringUtil.IsEmpty(commodityCode)) return commodityCode; String path = ""; if (!StringUtil.IsEmpty(commodityCode)) { String folder = UserContext.GetOwnerOption_Folder(Sbm.OrgOption_Folder.CommodityImage); path = GetImagePath(folder, commodityCode); } return path; } public String GetBarcodeImagePath(String commodityCode) { // Using organisation configuration barcode image folder. if (StringUtil.IsEmpty(commodityCode)) return commodityCode; String path = ""; if (!StringUtil.IsEmpty(commodityCode)) { String folder = UserContext.GetOwnerOption_Folder(Sbm.OrgOption_Folder.CommodityBarcodeImage); path = GetImagePath(folder, commodityCode); } return path; } public String GetImagePath(String folder, String filenamePrefix) { String path = ""; //SATRACE("SapCommodityMgr::GetImagePath Locating image file '"+sFilenamePrefix+"' in folder '"+sFolder+"'\n"); if (!folder.IsEmpty() && Directory.Exists(folder) && !filenamePrefix.IsEmpty()) { List imageExtensions = StringListUtil.Split("jpg,jpeg,gif,png,tif,eps", ","); foreach (String imageExtension in imageExtensions) { //ToDo SaSystem::GETPATHDELIM in SbmCmdMgr need to be created inorder to work path = folder + /*SaSystem::GetPathDelim(folder) +*/ filenamePrefix + "." + imageExtension; #if _DEBUG if (Sys_Fn::FileExists(path)) { SATRACE("GetImagePath Found image file: " + path + "\n"); } #endif if (!Directory.Exists(path)) path.IsEmpty(); } } return path; } public abstract List GetCommodityTypesInUse(); public abstract Sbm.CommodityType GetTypeForCommodityId(SysId commodityId); public abstract double GetCostPriceForCommodityId(SysId commodityId); public abstract List GetSalesTemplateCommmodities(); public abstract bool UpdateReferencesToSalesTemplate(SbmCommodity commodity); public abstract String BuildSalesQuantityQuery(DateTime earliest, DateTime latest, bool completeOrders, String tableAliasCommodity);// Sales Quantity Query. public abstract String BuildAllocatedStockQuery(List locIds);// Allocated Stock Query. public abstract String BuildCurrentStockQuery(List locIds);// Currency Stock Query. public abstract String BuildPlannedStockMovementsQuery(DateTime earliest, DateTime latest, SbmCommodity.Params prmCmd, bool intoStock, bool provisional, String tableAliasCommodity);// Stock Movements Query. public abstract void PopulateLocationIdLists();// Populate LocationId Lists. //------------------------------------------------------------------- // Retrieve individual commodities. //------------------------------------------------------------------- // Commodity exists. public bool CommodityExistsById(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; SbmCommodity.Params prmCommodity = new SbmCommodity.Params(); prmCommodity.IncludedIds.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.IncludedIds.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(SysId id, SysId affIdOwner, 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)SbmDbDfn.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)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DescBrief))) { errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DescOrder != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescOrder, "description order", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DescOrder))) { errField.DescOrder = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DescDetail != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescDetail, "description detail", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DescDetail))) { errField.DescDetail = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DrawingNumber != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DrawingNumber, "drawing no", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DrawingNo))) { errField.DrawingNumber = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DrawingIssue != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DrawingIssue, "drawing issue", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue))) { errField.DrawingIssue = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ImagePath != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ImagePath, "image path", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_ImagePath))) { errField.ImagePath = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Category1 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category1, "category1", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Category))) { errField.Category1 = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Category2 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category2, "category2", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Category2))) { errField.Category2 = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Category3 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category3, "category3", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Category3))) { errField.Category3 = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Location != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Location, "location", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Location))) { errField.Location = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Department != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Department, "department", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Department))) { errField.Department = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.CatalogRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.CatalogRef, "catalog ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_CatalogRef))) { errField.CatalogRef = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Dimensions != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Dimensions, "dimensions", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Dimensions))) { errField.Dimensions = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.SpecSummary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.SpecSummary, "spec summary", (long)SbmDbDfn.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)SbmDbDfn.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)SbmDbDfn.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)SbmDbDfn.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)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode))) { errField.ICNTariffCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.NominalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.NominalCode, "nominal code", (long)SbmDbDfn.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)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_NominalCodePurchase))) { errField.NominalCodePurchase = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.SupplierRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.SupplierRef, "supplier ref", (long)SbmDbDfn.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)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin))) { errField.PlaceOfOrigin = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Commodity_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SbmCommodity.CommodityStatuses.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_Desc: { Sbm.CommodityType commodityType = (Sbm.CommodityType)values.GetValue(column.DataName).AsLong(); value = new DataValue(CommodityTypes.GetDescForType(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; } //--------------------------------------------------------------- // 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; // Barcode Images. case SbmCommodity.Column.BarcodeImagePath: { String commodityCode = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Code).DataName).ToString(); value = new DataValue(GetBarcodeImagePath(commodityCode)); break; } //--------------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }