Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr_Commodity.cs
T
2021-08-04 21:32:35 +01:00

1064 lines
50 KiB
C#

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:
case SbmCommodity.Column.Type_Code:
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<String> 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<Sbm.CommodityType> GetCommodityTypesInUse();
public abstract Sbm.CommodityType GetTypeForCommodityId(SysId commodityId);
public abstract double GetCostPriceForCommodityId(SysId commodityId);
public abstract List<SysIdString> 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<SysId> locIds);// Allocated Stock Query.
public abstract String BuildCurrentStockQuery(List<SysId> 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 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.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<String> GetCommodityQueryFilter(SbmCommodity.Params prm);
public abstract long GetCommodityCount(SbmCommodity.Params prm);
public abstract List<SbmCommodity> GetCommodityList(SbmCommodity.Params prm);
public abstract DbResultSet ExecuteCommodityQuery(List<ColumnDfn> columns, SbmCommodity.Params prm);
public abstract Task<DbResultSet> ExecuteCommodityQueryAsync(List<ColumnDfn> columns, SbmCommodity.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
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;
}
//---------------------------------------------------------------
// 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;
}
//-------------------------------------------------------------------
}
//=======================================================================
}