797 lines
34 KiB
C#
797 lines
34 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
|
|
{
|
|
//=======================================================================
|
|
// Commodity Manager - Commodity.
|
|
//=======================================================================
|
|
partial class SbmCommodityMgr
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
public bool IsValidCode(String code)
|
|
{
|
|
if (StringUtil.IsBlank(code)) return false;
|
|
if (code != code.Trim(' ')) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Retrieve individual commodities.
|
|
//-------------------------------------------------------------------
|
|
// Commodity exists.
|
|
public bool CommodityExistsById(SysId commodityId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(commodityId)) return false;
|
|
SbmCommodity.Params prmCommodity = new SbmCommodity.Params();
|
|
prmCommodity.IdsIncluded.Add(commodityId);
|
|
prmCommodity.StatusCat = SbmCommodity.StatusCat.Any;
|
|
return GetCommodityCount(prmCommodity) == 1;
|
|
}
|
|
public bool CommodityExistsByCode(String code)
|
|
{
|
|
ClearErrorState();
|
|
if (StringUtil.IsEmpty(code)) return false;
|
|
SbmCommodity.Params prmCommodity = new SbmCommodity.Params();
|
|
prmCommodity.CodeFull = code;
|
|
prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted;
|
|
return GetCommodityCount(prmCommodity) == 1;
|
|
}
|
|
|
|
public bool CommodityExistsByCodeIssue(String code, String issue)
|
|
{
|
|
ClearErrorState();
|
|
if (StringUtil.IsEmpty(code) && StringUtil.IsEmpty(issue)) return false;
|
|
SbmCommodity.Params prmCommodity = new SbmCommodity.Params();
|
|
prmCommodity.CodeFull = code;
|
|
prmCommodity.DrawingIssueFull = issue;
|
|
prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted;
|
|
return GetCommodityCount(prmCommodity) == 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get commodities.
|
|
public abstract SbmCommodity GetCommodity(SbmCommodity.Params prm);
|
|
|
|
public SbmCommodity GetCommodityById(SysId commodityId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(commodityId)) return null;
|
|
SbmCommodity.Params prmCommodity = new SbmCommodity.Params();
|
|
prmCommodity.IdsIncluded.Add(commodityId);
|
|
prmCommodity.StatusCat = SbmCommodity.StatusCat.Any;
|
|
return GetCommodity(prmCommodity);
|
|
}
|
|
public SbmCommodity GetCommodityCurrentByCode(String code)
|
|
{
|
|
ClearErrorState();
|
|
SbmCommodity commodity = null;
|
|
if (StringUtil.IsEmpty(code)) return commodity;
|
|
SbmCommodity.Params prmCommodity = new SbmCommodity.Params();
|
|
prmCommodity.CodeFull = code;
|
|
prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted;
|
|
return GetCommodity(prmCommodity);
|
|
}
|
|
public SbmCommodity GetCommodityByCodeIssue(String code, String issue)
|
|
{
|
|
ClearErrorState();
|
|
SbmCommodity commodity = null;
|
|
if (StringUtil.IsEmpty(code) && StringUtil.IsEmpty(issue)) return commodity;
|
|
SbmCommodity.Params prmCommodity = new SbmCommodity.Params();
|
|
prmCommodity.CodeFull = code;
|
|
prmCommodity.DrawingIssueFull = issue;
|
|
prmCommodity.StatusCat = SbmCommodity.StatusCat.NotDeleted;
|
|
return GetCommodity(prmCommodity);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create commodities.
|
|
public abstract SbmCommodity CreateCommodity(Sbm.CommodityType commodityType, String code);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate Commodity data.
|
|
public bool IsValidCommodity(SbmCommodity commodity)
|
|
{
|
|
ClearErrorState();
|
|
if (commodity == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
|
|
return IsValidCommodityData(commodity.GetData(), new SbmCommodity.ErrField());
|
|
}
|
|
public virtual bool IsValidCommodityData(SbmCommodity.Data data, SbmCommodity.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
//Validate the identity.
|
|
if (errField.AffiliateIdOwner != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AffiliateIdOwner))
|
|
{
|
|
errField.AffiliateIdOwner = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("invalid owner");
|
|
}
|
|
if (errField.CommodityType != SacsHierarchyItem.ValidValue.Ignore && (int)data.CommodityType < 1)
|
|
{
|
|
errField.CommodityType = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("invalid type");
|
|
}
|
|
|
|
// Validate the text attributes.
|
|
if (errField.Code != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Code, "code", (long)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), true))
|
|
{
|
|
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;
|
|
}
|
|
|
|
//-----------------------------------------------------------
|
|
// Barcode Images.
|
|
case SbmCommodity.Column.BarcodeImagePath:
|
|
{
|
|
String commodityCode = values.GetValue(GetCommodityColumnDfn(SbmCommodity.Column.Code).DataName).ToString();
|
|
value = new DataValue(GetBarcodeImagePath(commodityCode));
|
|
break;
|
|
}
|
|
|
|
//-----------------------------------------------------------
|
|
// Commodity Notes.
|
|
case SbmCommodity.Column.Notes:
|
|
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
|
|
break;
|
|
|
|
// Commodity Status.
|
|
case SbmCommodity.Column.Status_Current_Y:
|
|
case SbmCommodity.Column.Status_Current_X:
|
|
case SbmCommodity.Column.Status_Current_Tick:
|
|
{
|
|
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
|
|
bool currentStatus = status == SaStatus.Current;
|
|
if (column.Id == (int)SbmCommodity.Column.Status_Current_Y)
|
|
value = new DataValue(currentStatus ? "Y" : "");
|
|
else if (column.Id == (int)SbmCommodity.Column.Status_Current_X)
|
|
value = new DataValue(currentStatus ? "" : "X");
|
|
else value = new DataValue(currentStatus);
|
|
}
|
|
break;
|
|
case SbmCommodity.Column.Status_Desc:
|
|
case SbmCommodity.Column.Status_Ind:
|
|
{
|
|
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
|
|
if (column.Id == (int)SbmCommodity.Column.Status_Desc)
|
|
value = new DataValue(SacsSystem.GetStatusDesc(status));
|
|
else if (column.Id == (int)SbmCommodity.Column.Status_Ind)
|
|
value = new DataValue(SbmCommodity.GetStatusTriState(status));
|
|
}
|
|
break;
|
|
|
|
//-----------------------------------------------------------
|
|
default:
|
|
value = values.GetValue(column.DataName);
|
|
break;
|
|
|
|
}
|
|
return value;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|