Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs
T
2021-08-05 20:36:06 +01:00

3883 lines
237 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.BusinessMgr.Net.Standard.Dbas.Bus;
using Sarand.BusinessMgr.Net.Standard.Dbas.Internal;
using Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog;
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.Utils;
using Sarand.Net.Standard.Dbas.Base;
using Sarand.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Threading.Tasks;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
//=======================================================================
internal partial class SbmCommodityMgr_Dbas : SbmCommodityMgr
{
//*******************************************************************
// C o m m o d i t i e s
//*******************************************************************
public class PlannedStockMovements_Params
{
public PlannedStockMovements_Params()
{
earliest = DateTime.MinValue;
latest = DateTime.MinValue;
moveCol = PlanStockMoveCol.ItemQuanity;
intoStock = true;
provisionalContainersOnly = false;
excludeAwaitingContainers = false;
tableAliasCommodity = aliasCommodity;
}
public DateTime earliest;
public DateTime latest;
public SbmCommodity.Params prmCmd;
public enum PlanStockMoveCol { ItemQuanity, MovementDate, };
public PlanStockMoveCol moveCol;
public bool intoStock;
public bool provisionalContainersOnly;
public bool excludeAwaitingContainers;
public String tableAliasCommodity;
public String commodityIdCol;
}
//-------------------------------------------------------------------
// Data members.
private bool locationIdListPopulated = false;
private List<SysId> locationIds_All = new List<SysId>();
private List<SysId> locationIds_Calc = new List<SysId>();
private List<SysId> locationIds_Sales = new List<SysId>();
private List<SysId> locationIds_NonSales = new List<SysId>();
//-------------------------------------------------------------------
// Utilities.
private List<StringPair> GetLogProperties(SbmCommodity commodity)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(commodity.Id)),
new StringPair("Code",commodity.Code),
new StringPair("DescBrief",commodity.DescBrief),
new StringPair("Status",commodity.StatusCode)
};
}
public override List<Sbm.CommodityType> GetCommodityTypesInUse()
{
List<Sbm.CommodityType> types = new List<Sbm.CommodityType>();
// Construct the query.
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity));
qry.Columns.Add("DISTINCT " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type));
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner) + "=" + AffiliateId_Owner.ToString());
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
types.Add((Sbm.CommodityType)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_Type)).AsLong());
}
}
return types;
}
public override Sbm.CommodityType GetTypeForCommodityId(SysId commodityId)
{
String colType = "Type";
ClearErrorState();
Sbm.CommodityType commodityType = Sbm.CommodityType.Unknown;
if (!SysId.IsValid(commodityId)) return commodityType;
// Construct the query.
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity));
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type), colType);
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id) + "=" + commodityId.ToString());
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
commodityType = (Sbm.CommodityType)values.GetValue(colType).AsLong();
}
}
return commodityType;
}
public override double GetCostPriceForCommodityId(SysId commodityId)
{
String colCostPrice = "CostPrice";
ClearErrorState();
double costPrice = 0.0f;
if (db == null && SysId.IsValid(commodityId))
{
// Construct the query.
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity));
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CostPrice), colCostPrice);
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id) + "=" + commodityId.ToString());
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
costPrice = values.GetValue(colCostPrice).ToNumeric();
}
}
}
return costPrice;
}
public override List<SysIdString> GetSalesTemplateCommmodities()
{
List<SysIdString> commodities = new List<SysIdString>();
String aliasCommodity = "aCmd";
String aliasCommodityTemplate = "aCmdTmpl";
// Construct the query.
DbQuery qry = new DbQuery(db.DbmsType);
qry.DistinctRows = true;
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasCommodity);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasCommodityTemplate);
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodityTemplate));
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodityTemplate));
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CommodityIdSalesProj, aliasCommodity) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodityTemplate));
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodityTemplate) + "=" + AffiliateId_Owner.ToString());
qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodity) + "=" + AffiliateId_Owner.ToString());
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
commodities.Add(new SysIdString(new SysId((int)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_Id)).AsLong()),
values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_Code)).ToString()));
}
}
return commodities;
}
public override bool UpdateReferencesToSalesTemplate(SbmCommodity commodity)
{
ClearErrorState();
if (commodity == null) return SetErrorState("item not specified");
// Build update query to refresh all commodities that refer to this template.
List<String> filters = new List<String>();
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_CommodityIdSalesProj) + "=" + commodity.Id.ToString());
// Calculate monthly sales proportions.
String salesProjMonthlyProp = "";
double totalSalesProp = 0.0f;
double[] salesProp = new double[12];
int i = 0;
for (i = 0; i < 12; i++)
{
salesProp[i] = (double)commodity.GetSalesProp(i + 1);
salesProjMonthlyProp += (i > 0 ? "," : "") + StringUtil.FormatNumeric(salesProp[i], 2);
totalSalesProp += salesProp[i];
}
for (i = 0; i < 12; i++)
{
// Spread the projected sales evenly if the total proportion is invalid.
if (totalSalesProp <= 0)
salesProp[i] = 1 / 12;
else
// Otherwise, calculate the actual proportion to apply.
salesProp[i] /= totalSalesProp;
}
// Build the list of columns to update to bring each commodity into line with this template.
int propDecimals = 5;
int ordQtyDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.OrderQuantity);
List<StringPair> value = new List<StringPair>();
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonthlyProp), salesProjMonthlyProp, true);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth01), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[0], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth02), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[1], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth03), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[2], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth04), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[3], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth05), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[4], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth06), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[5], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth07), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[6], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth08), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[7], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth09), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[8], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth10), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[9], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth11), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[10], (ushort)propDecimals), ordQtyDecimals), false);
SacsDatabase.AddValuePair(value, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth12), DbQuery.FormatFn_Round(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual) + "*" + StringUtil.FormatNumeric(salesProp[11], (ushort)propDecimals), ordQtyDecimals), false);
// Perform the update:
db.ExecuteUpdate(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), value, filters.Concat(" AND ", "(", ")"));
return !HasErrorState();
}
//-------------------------------------------------------------------
// Building the DateTime Query methods.
//---------------------------------------------------------------
// Sales Quantity Query.
public override String BuildSalesQuantityQuery(DateTime earliest, DateTime latest, bool completeOrders, String tableAliasCommodity)
{
tableAliasCommodity = StringUtil.OnEmpty(tableAliasCommodity, aliasCommodity);
// Calculate the quantity against sales orders for this commodity.
// Filter:
// Requirements for the commodity.
// Requirement is not cancelled.
// Orders created between the two dates.
// Order is not cancelled.
// Common definitions.
String alias_Transaction = "SQT";
String alias_Requirement = "SQR";
String colTrans_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AffIdOwner, alias_Transaction);
String colTrans_Raised = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Raised, alias_Transaction);
String colTrans_Closed = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Closed, alias_Transaction);
String colTrans_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, alias_Transaction);
String colTrans_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, alias_Transaction);
String colReqnt_CmdId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, alias_Requirement);
String colReqnt_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status, alias_Requirement);
// Requirements for this commodity:
DbQuery qryReq = new DbQuery(db.DbmsType);
qryReq.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), alias_Transaction));
qryReq.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), alias_Requirement));
qryReq.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity, alias_Requirement) + ")");
qryReq.Filters.Add(colTrans_AffIdOwner + "=" + AffiliateId_Owner.ToString());
qryReq.Filters.Add(colTrans_Type + "=" + ((int)Sbm.TransactionType.SalesOrder).ToString());
if (completeOrders)
{
if (DateUtil.IsValid(earliest)) qryReq.Filters.Add(colTrans_Closed + ">=" + DbQuery.FormatDateForCondition(earliest));
if (DateUtil.IsValid(latest)) qryReq.Filters.Add(colTrans_Closed + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(latest, 1)));
}
else
{
if (earliest.IsValid()) qryReq.Filters.Add(colTrans_Raised + ">=" + DbQuery.FormatDateForCondition(earliest));
if (latest.IsValid()) qryReq.Filters.Add(colTrans_Raised + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(latest, 1)));
}
qryReq.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, alias_Transaction) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, alias_Requirement));
qryReq.Filters.Add(colReqnt_CmdId + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, tableAliasCommodity));
if (completeOrders)
qryReq.Filters.Add(colTrans_Status + "='" + StatusCompleted + "'");
else
qryReq.Filters.Add(colTrans_Status + "<>'" + StatusCancelled + "'");
qryReq.Filters.Add(colReqnt_Status + "<>'" + StatusCancelled + "'");
return qryReq.BuildQuery();
}
//---------------------------------------------------------------
// Allocated Stock Query.
public override String BuildAllocatedStockQuery(List<SysId> locIds)
{
// Calculate the pending movements sourced to sales order requirements.
String tableAliasMov = "StkAllMov";
DbQuery qryAll = new DbQuery(db.DbmsType);
qryAll.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), tableAliasMov));
qryAll.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Quantity, tableAliasMov) + ")");
qryAll.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemType, tableAliasMov) + "=" + ((int)Sbm.ItemType.Commodity).ToString());
qryAll.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, tableAliasMov) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
qryAll.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdFrom, tableAliasMov) + " IN (" + locIds.Concat(",") + ")");
qryAll.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemTypeSource, tableAliasMov) + "=" + ((int)Sbm.ItemType.Requirement).ToString());
qryAll.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Status, tableAliasMov) + "='" + StatusAwaiting + "'");
return qryAll.BuildQuery();
}
//---------------------------------------------------------------
// Currency Stock Query.
public override String BuildCurrentStockQuery(List<SysId> locIds)
{
// Calculate the current stock level.
String aliasStockLevel = "aCmdStkLvl";
DbQuery qryLvl = new DbQuery(db.DbmsType);
qryLvl.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasStockLevel));
qryLvl.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Quantity, aliasStockLevel) + ")");
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasStockLevel) + "=" + (int)Sbm.StockLevelType.CurrentLevel);
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasStockLevel) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasStockLevel) + " IN (" + locIds.Concat(",") + ")");
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasStockLevel) + "='" + StatusCurrent + "'");
return qryLvl.BuildQuery();
}
//---------------------------------------------------------------
// Stock Movements Query.
public override String BuildPlannedStockMovementsQuery(DateTime earliest, DateTime latest, SbmCommodity.Params prmCmd, bool intoStock, bool provisional, String tableAliasCommodity)
{
PlannedStockMovements_Params prm = new PlannedStockMovements_Params();
prm.earliest = earliest;
prm.latest = latest;
prm.prmCmd = prmCmd;
prm.intoStock = intoStock;
prm.provisionalContainersOnly = provisional;
prm.tableAliasCommodity = StringUtil.OnEmpty(tableAliasCommodity, aliasCommodity);
return BuildPlannedStockMovementsQuery(prm);
}
/// <summary> Calculate the quantity due to arrive into stock in the next month. This includes:
/// <para>~ Planned movements to stock locations (from non-stock locations) for > The commodity itself which Containers that include the commodity and then take away.</para>
/// <para>~ Planned movements from stock locations (to non-stock locations) for > The commodity itself which Containers that include the commodity.</para>
/// </summary>
public String BuildPlannedStockMovementsQuery(PlannedStockMovements_Params prm)
{
// In case this routine is called in isolation (eg. from Requirement manager).
PopulateLocationIdLists();
DbmsType dbmsType = db.DbmsType;
// Common definitions.
String alias_ContainerItem = "M1CI";
String alias_Container = "M1C";
String alias_Movement = "M1M";
String colMov_Movement = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, alias_Movement);
String colMov_LocationIdFrom = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdFrom, alias_Movement);
String colMov_LocationIdTo = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdTo, alias_Movement);
String colMov_ItemType = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemType, alias_Movement);
String colMov_ItemId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, alias_Movement);
String colMov_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Type, alias_Movement);
String colMov_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Status, alias_Movement);
// Commodity identity column.
String commodityIdCol = prm.commodityIdCol;
if (StringUtil.IsEmpty(commodityIdCol)) commodityIdCol = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, prm.tableAliasCommodity);
// Stock locations.
SysId locStockId = prm.prmCmd.LocationIdStock;
List<SysId> LocStockIds = new List<SysId>();
if (prm.prmCmd.StockLocationFilter == Sbm.LocationFilter.All)
LocStockIds = locationIds_All;
else if (prm.prmCmd.StockLocationFilter == Sbm.LocationFilter.Calc)
LocStockIds = locationIds_Calc;
else if (!SysId.IsValid(locStockId))
LocStockIds = locationIds_Sales;
String stringLocStockIds = LocStockIds.Concat(",");
//---------------------------------------------------------------
// Planned stock movements for this commodity.
DbQuery qryMov1 = new DbQuery(db.DbmsType);
qryMov1.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), alias_Movement));
qryMov1.Filters.Add(colMov_ItemType + "=" + ((int)Sbm.ItemType.Commodity).ToString());
qryMov1.Filters.Add(colMov_ItemId + "=" + commodityIdCol);
qryMov1.Filters.Add(colMov_Type + "=" + ((int)Sbm.MovementType.StockTransfer).ToString() + " OR " + colMov_Type + "=" + ((int)Sbm.MovementType.SalesAllocation).ToString());
if (prm.earliest.IsValid())
qryMov1.Filters.Add(colMov_Movement + ">=" + DbQuery.FormatDateForCondition(prm.earliest));
if (prm.latest.IsValid())
qryMov1.Filters.Add(colMov_Movement + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.latest, 1)));
if (prm.intoStock)
{
if (SysId.IsValid(locStockId))
{
qryMov1.Filters.Add(colMov_LocationIdTo + "=" + locStockId.ToString());
}
else if (!stringLocStockIds.IsEmpty())
{
qryMov1.Filters.Add(colMov_LocationIdFrom + " NOT IN (" + stringLocStockIds + ")");
qryMov1.Filters.Add(colMov_LocationIdTo + " IN (" + stringLocStockIds + ")");
}
}
else
{
if (SysId.IsValid(locStockId))
{
qryMov1.Filters.Add(colMov_LocationIdFrom + "=" + locStockId.ToString());
}
else if (!stringLocStockIds.IsEmpty())
{
qryMov1.Filters.Add(colMov_LocationIdFrom + " IN (" + stringLocStockIds + ")");
qryMov1.Filters.Add(colMov_LocationIdTo + " NOT IN (" + stringLocStockIds + ")");
}
}
if (prm.provisionalContainersOnly)
// There won't be any commodity movements with status 'provisional', at least no functionality for this at the moment!
// But this keeps the logic in the method clean and consistent (just a bit of Db I/O overhead).
qryMov1.Filters.Add(colMov_Status + "='" + StatusProvisional + "'");
else
qryMov1.Filters.Add(colMov_Status + "='" + StatusAwaiting + "'");
// Need 2 versions of the query.
// a. To count the records.
// b. To retrieve the quantity sum (when there is at least 1 record).
// This avoids getting a null value for the sum when there are no matching records.
qryMov1.Columns.Clear();
qryMov1.Columns.Add("Count(1)");
String qryMov1a = qryMov1.BuildQuery();
qryMov1.Columns.Clear();
if (prm.moveCol == PlannedStockMovements_Params.PlanStockMoveCol.MovementDate)
qryMov1.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, alias_Movement));
else
qryMov1.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Quantity, alias_Movement) + ")");
String qryMov1b = qryMov1.BuildQuery();
//---------------------------------------------------------------
// Planned stock movements for containers that include this commodity.
String qryMov2a = ""; String qryMov2b = "";
if (db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container)))
{
DbQuery qryMov2 = new DbQuery(db.DbmsType);
qryMov2.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem), alias_ContainerItem));
qryMov2.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container), alias_Container));
qryMov2.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), alias_Movement));
// Container.
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Id, alias_Container) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, alias_ContainerItem));
//qryMov2.Filters.Add= SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_AffIdOwner,alias_Container)+"="+AffiliateId_Owner.ToString());
if (prm.provisionalContainersOnly)
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Status, alias_Container) + " IN ('" + StatusProvisional + "')");
else if (prm.excludeAwaitingContainers)
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Status, alias_Container) + " NOT IN ('" + StatusAwaiting + "','" + StatusProvisional + "','" + StatusDisabled + "','" + StatusCancelled + "','" + StatusDeleted + "')");
else
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Status, alias_Container) + " NOT IN ('" + StatusProvisional + "','" + StatusDisabled + "','" + StatusCancelled + "','" + StatusDeleted + "')");
// Container item must identify the Commodity.
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemType, alias_ContainerItem) + "=" + ((int)Sbm.ItemType.Commodity).ToString());
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, alias_ContainerItem) + "=" + commodityIdCol);
qryMov2.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Status, alias_ContainerItem) + " NOT IN('" + StatusCancelled + "','" + StatusDisabled + "','" + StatusDeleted + "')");
// Movement.
qryMov2.Filters.Add(colMov_ItemType + "=" + (((int)Sbm.ItemType.Container).ToString()).ToString());
qryMov2.Filters.Add(colMov_ItemId + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Id, alias_Container));
qryMov2.Filters.Add(colMov_Type + "=" + ((int)Sbm.MovementType.StockTransfer).ToString() + " OR " + colMov_Type + "=" + ((int)Sbm.MovementType.SalesAllocation).ToString());
if (prm.earliest.IsValid())
qryMov2.Filters.Add(colMov_Movement + ">=" + DbQuery.FormatDateForCondition(prm.earliest));
if (prm.latest.IsValid())
qryMov2.Filters.Add(colMov_Movement + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.latest, 1)));
if (prm.intoStock)
{
if (SysId.IsValid(locStockId))
qryMov2.Filters.Add(colMov_LocationIdTo + "=" + locStockId.ToString());
else if (!stringLocStockIds.IsEmpty())
{
qryMov2.Filters.Add(colMov_LocationIdFrom + " NOT IN (" + stringLocStockIds + ")");
qryMov2.Filters.Add(colMov_LocationIdTo + " IN (" + stringLocStockIds + ")");
}
}
else
{
if (SysId.IsValid(locStockId))
qryMov2.Filters.Add(colMov_LocationIdFrom + "=" + locStockId.ToString());
else if (!stringLocStockIds.IsEmpty())
{
qryMov2.Filters.Add(colMov_LocationIdFrom + " IN (" + stringLocStockIds + ")");
qryMov2.Filters.Add(colMov_LocationIdTo + " NOT IN (" + stringLocStockIds + ")");
}
}
qryMov2.Filters.Add(colMov_Status + "='" + StatusAwaiting + "'");
// Need 2 versions of the query (as above).
qryMov2.Columns.Clear();
qryMov2.Columns.Add("Count(1)");
qryMov2a = qryMov2.BuildQuery();
qryMov2.Columns.Clear();
if (prm.moveCol == PlannedStockMovements_Params.PlanStockMoveCol.MovementDate)
qryMov2.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, alias_Movement));
else
qryMov2.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Quantity, alias_ContainerItem) + ")");
qryMov2b = qryMov2.BuildQuery();
}
//---------------------------------------------------------------
// If the movement date is requested, union the commodity and container movement queries to return a single list of dates.
if (prm.moveCol == PlannedStockMovements_Params.PlanStockMoveCol.MovementDate)
{
if (!StringUtil.IsEmpty(qryMov2a) && !StringUtil.IsEmpty(qryMov2b))
return "(" + qryMov1b + ") UNION (" + qryMov2b + ")";
else
return qryMov1b;
}
String sQry;
if (dbmsType == DbmsType.MsSql)
{
// MS SQL syntax:
if (!qryMov2a.IsEmpty() && !qryMov2b.IsEmpty())
sQry = "IsNull((" + qryMov1b + "),0) + IsNull((" + qryMov2b + "),0)";
else
sQry = "IsNull((" + qryMov1b + "),0)";
}
else
{
// Calculate the total (MS Access version).
// NB The 'nz' function supplies an alternative value to use when the first parameter is null.
// This is required as the sub-queries will return null if there are no matching rows to sum:
if (!qryMov2a.IsEmpty() && !qryMov2b.IsEmpty())
sQry = "iif((" + qryMov1a + ")=0,0,(" + qryMov1b + "))+iif((" + qryMov2a + ")=0,0,(" + qryMov2b + "))";
else
sQry = "iif((" + qryMov1a + ")=0,0,(" + qryMov1b + "))";
}
return sQry;
//---------------------------------------------------------------
}
//-------------------------------------------------------------------
// Populate LocationId Lists.
public override void PopulateLocationIdLists()
{
// Verify that the location table exists.
String tableLocation = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Location);
if (!db.TableExists(tableLocation)) return;
locationIdListPopulated = true;
String colLocation_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Location_Id);
String colLocation_AffIdOwner = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Location_AffIdOwner);
String colLocation_Flags = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Location_Flags);
String colLocation_Status = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Location_Status);
// Stock locations.
DbQuery qryLoc = new DbQuery(db.DbmsType);
qryLoc.Tables.Add(tableLocation);
qryLoc.Columns.Add(colLocation_Id);
qryLoc.Columns.Add(colLocation_Flags);
qryLoc.Columns.Add(colLocation_Status);
qryLoc.Filters.Add(colLocation_AffIdOwner + "=" + AffiliateId_Owner.ToString());
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qryLoc.BuildQuery()))
{
while (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
SysId locationId = new SysId((int)values.GetValue(colLocation_Id).AsLong());
short flags = values.GetValue(colLocation_Flags).ToString().ToShort();
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(colLocation_Status).ToString());
if (status == SaStatus.Active)
{
locationIds_All.Add(locationId);
if (SacsHierarchyItem.GetFlag((ushort)flags, SbmLocation.Flag_CalculateStock))
locationIds_Calc.Add(locationId);
if (SacsHierarchyItem.GetFlag((ushort)flags, SbmLocation.Flag_SalesStock))
locationIds_Sales.Add(locationId);
else
locationIds_NonSales.Add(locationId);
}
}
}
if (locationIds_Sales.Count > 0)
{
// Assume that all locations are for sales.
locationIds_Sales = new List<SysId>(locationIds_NonSales);
locationIds_NonSales.Clear();
}
}
//-------------------------------------------------------------------
// Get Commodity.
public override SbmCommodity GetCommodity(SbmCommodity.Params prm)
{
return GetCommodity(GetCommodityQueryFilter(prm).Concat(" AND ", "(", ")"));
}
private SbmCommodity GetCommodity(String filter)
{
ClearErrorState();
long count = GetCommodityCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple Commodities found");
return null;
}
SbmCommodity commodity = null;
// Query data.
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Commodity_Db dbCommodity = new Commodity_Db(DbInfo);
dbCommodity.PopulateFrom(dbCommand, aliasCommodity, filter);
commodity = CreateCommodity(dbCommodity);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn(GetType().Name + ".GetCommodity\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message);
}
}
return commodity;
}
//-------------------------------------------------------------------
// Create Commodity.
public override SbmCommodity CreateCommodity(SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code)
{
return new SbmCommodity_Dbas(Internals, null, affiliateIdOwner, commodityType, code, 0);
}
private SbmCommodity_Dbas CreateCommodity(Commodity_Db dbCommodity)
{
ClearErrorState();
SbmCommodity_Dbas commodity = new SbmCommodity_Dbas(Internals, new SysId(dbCommodity._Id), new SysId(dbCommodity._AffIdOwner), (Sbm.CommodityType)dbCommodity._Type, dbCommodity._Code, (ushort)dbCommodity._Flags);
PopulateFrom(dbCommodity, commodity);
return commodity;
}
//-------------------------------------------------------------------
// Validate Commodity.
public override bool IsValidCommodityData(SbmCommodity.Data data, SbmCommodity.ErrField errField)
{
ClearErrorState();
if (!base.IsValidCommodityData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert Commodity.
public override bool InsertCommodity(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertCommodity";
ClearErrorState();
if (!IsValidCommodity(commodity)) return false;
if (SysId.IsValid(commodity.Id)) return SetErrorState(ErrorMessage.ValiditemId);
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Commodity_Db dbCommodity = new Commodity_Db(DbInfo);
PopulateTo(dbCommodity, commodity, dbUpdateInfo);
if (Commodity_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbCommodity._Id = SysId.ToInt(db.GetNextId("Commodity", dbUpdateInfo));
}
dbCommodity.ExecuteInsertCommand(dbCommand);
commodity.Id = new SysId(dbCommodity._Id);
commodity.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(commodity).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update Commodity.
public override bool UpdateCommodity(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateCommodity";
ClearErrorState();
if (!IsValidCommodity(commodity)) return false;
if (!SysId.IsValid(commodity.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!commodity.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(commodity).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve commodity.
dbConnection.Open();
Commodity_Db dbCommodity = new Commodity_Db(DbInfo);
dbCommodity.PopulateFrom(dbCommand, aliasCommodity, "Id=" + SysId.ToString(commodity.Id));
SbmUpdateLogItemMonitor_Commodity updateLogMonitor = new SbmUpdateLogItemMonitor_Commodity(Internals, CreateCommodity(dbCommodity));
// Update properties.
PopulateTo(dbCommodity, commodity, dbUpdateInfo);
dbCommodity.ExecuteUpdateCommand(dbCommand);
commodity.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(commodity).Concat(": ").Concat("", "\n\t"));
// Record updates.
updateLogMonitor.RecordUpdatedValues(commodity);
updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete Commodity.
public override bool CommodityCanBeDeleted(SbmCommodity commodity)
{
ClearErrorState();
if (!base.CommodityCanBeDeleted(commodity)) return false;
return true;
}
public override bool DeleteCommodity(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteCommodity";
ClearErrorState();
if (!CommodityCanBeDeleted(commodity)) return false;
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve Commodity.
dbConnection.Open();
Commodity_Db dbCommodity = new Commodity_Db(DbInfo);
dbCommodity.PopulateFrom(dbCommand, aliasCommodity, "Id=" + commodity.Id.ToString());
// Delete Commodity.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity) + " WHERE Id=" + SysId.ToString(commodity.Id) + ";";
dbCommand.ExecuteNonQuery();
commodity.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(commodity).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Commodity_Db dbCommodity, SbmCommodity commodity, DbUpdateInfo dbUpdateInfo)
{
dbCommodity._Id = commodity.Id.ToInt();
dbCommodity._AffIdOwner = commodity.AffiliateIdOwner.ToInt();
dbCommodity._Type = (short)commodity.CommodityType;
dbCommodity._Code = commodity.Code;
dbCommodity._DescBrief = commodity.DescBrief;
dbCommodity._DescOrder = commodity.DescOrder;
dbCommodity._DescDetail = commodity.DescDetail;
dbCommodity._DrawingNo = commodity.DrawingNumber;
dbCommodity._DrawingIssue = commodity.DrawingIssue;
dbCommodity._AssetCatId = commodity.AssetCatId.ToInt();
dbCommodity._ImagePath = commodity.ImagePath;
dbCommodity._Category = commodity.Category1;
dbCommodity._Category2 = commodity.Category2;
dbCommodity._Category3 = commodity.Category3;
dbCommodity._Location = commodity.Location;
dbCommodity._Department = commodity.Department;
dbCommodity._CatalogRef = commodity.CatalogRef;
dbCommodity._Weight = commodity.Weight;
dbCommodity._UomIdWeight = commodity.UomIdWeight.ToInt();
dbCommodity._Length = commodity.Length;
dbCommodity._UomIdLength = commodity.UomIdLength.ToInt();
dbCommodity._Volume = commodity.Volume;
dbCommodity._UomIdVolume = commodity.UomIdVolume.ToInt();
dbCommodity._Density = commodity.Density;
dbCommodity._UomIdDensity = commodity.UomIdDensity.ToInt();
dbCommodity._BoxQuantity = commodity.BoxQuantity;
dbCommodity._UomIdBox = commodity.UomIdBox.ToInt();
dbCommodity._Dimensions = commodity.Dimensions;
dbCommodity._SpecSummary = commodity.SpecSummary;
dbCommodity._RangeCode = commodity.RangeCode;
dbCommodity._ColourCode = commodity.ColourCode;
dbCommodity._SourceCode = commodity.SourceCode;
dbCommodity._SupplyMethodCode = commodity.SupplyMethodCode;
dbCommodity._HandlingCode = commodity.HandlingCode;
dbCommodity._DeliveryCode = commodity.DeliveryCode;
dbCommodity._MaterialCode = commodity.MaterialCode;
dbCommodity._FinishCode = commodity.FinishCode;
dbCommodity._PromotionCode = commodity.PromotionCode;
dbCommodity._NominalCode = commodity.NominalCode;
dbCommodity._NominalCodePurchase = commodity.NominalCodePurchase;
dbCommodity._ICNTariffCode = commodity.ICNTariffCode;
dbCommodity._TimeProd = commodity.TimeProd;
dbCommodity._UomIdTimeProd = commodity.UomIdTimeProd.ToInt();
dbCommodity._AssIdSupplier = commodity.AssociationIdSupplier.ToInt();
dbCommodity._SupplierRef = commodity.SupplierRef;
dbCommodity._CostPrice = commodity.CostPrice;
dbCommodity._PlaceOfOrigin = commodity.PlaceOfOrigin;
dbCommodity._MaterialCost = commodity.MaterialCost;
dbCommodity._CurrencyIdMaterial = commodity.CurrencyIdMaterial.ToInt();
dbCommodity._ExWorksCost = commodity.ExWorksCost;
dbCommodity._CurrencyIdExWorks = commodity.CurrencyIdExWorks.ToInt();
dbCommodity._ReorderLevel = commodity.ReorderLevel;
dbCommodity._ReorderQty = commodity.ReorderQty;
dbCommodity._QtyOnOrder = commodity.QtyOnOrder;
dbCommodity._AssIdCustomer = commodity.AssociationIdCustomer.ToInt();
dbCommodity._SalesPrice = commodity.SalesPrice;
dbCommodity._RetailPrice = commodity.RetailPrice;
dbCommodity._RetailPricePlanned = commodity.RetailPricePlanned;
dbCommodity._UomIdSale = commodity.UomIdSale.ToInt();
dbCommodity._CarriageCostIndicative = commodity.CarriageCostIndicative;
dbCommodity._MinOrderQty = commodity.MinOrderQty;
dbCommodity._PackQty = commodity.PackQtySale;
dbCommodity._TaxCodeId = commodity.TaxCodeId.ToInt();
dbCommodity._LastOrderDate = commodity.LastOrderDate;
dbCommodity._LastOrderQty = commodity.LastOrderQty;
dbCommodity._QtyInStock = commodity.QtyInStock;
dbCommodity._QtyAllocated = commodity.QtyAllocated;
dbCommodity._FreeStock = commodity.FreeStock;
dbCommodity._StockTakeDate = commodity.StockTakeDate;
dbCommodity._StockTakeQty = commodity.StockTakeQty;
dbCommodity._CommodityIdSalesProj = commodity.CommodityIdSalesProj.ToInt();
dbCommodity._SalesProjAnnual = commodity.SalesProjAnnual;
dbCommodity._SalesProjMonth01 = commodity.SalesProjMonth01;
dbCommodity._SalesProjMonth02 = commodity.SalesProjMonth02;
dbCommodity._SalesProjMonth03 = commodity.SalesProjMonth03;
dbCommodity._SalesProjMonth04 = commodity.SalesProjMonth04;
dbCommodity._SalesProjMonth05 = commodity.SalesProjMonth05;
dbCommodity._SalesProjMonth06 = commodity.SalesProjMonth06;
dbCommodity._SalesProjMonth07 = commodity.SalesProjMonth07;
dbCommodity._SalesProjMonth08 = commodity.SalesProjMonth08;
dbCommodity._SalesProjMonth09 = commodity.SalesProjMonth09;
dbCommodity._SalesProjMonth10 = commodity.SalesProjMonth10;
dbCommodity._SalesProjMonth11 = commodity.SalesProjMonth11;
dbCommodity._SalesProjMonth12 = commodity.SalesProjMonth12;
// Common properties.
dbCommodity._Notes = commodity.Notes;
dbCommodity._Status = SacsSystem.GetStatusCode(commodity.Status);
dbCommodity._Flags = (short)commodity.Flags;
if (!SysId.IsValid(commodity.Id))
{
dbCommodity._CreateOn = DateTime.UtcNow;
dbCommodity._CreateBy = dbUpdateInfo.UserId.ToInt();
dbCommodity._CreateHost = dbUpdateInfo.Host;
}
dbCommodity._UpdateOn = DateTime.UtcNow;
dbCommodity._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbCommodity._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Commodity_Db dbCommodity, SbmCommodity commodity)
{
//commodity.Id = new SysId(dbCommodity._Id);
commodity.AffiliateIdOwner = new SysId(dbCommodity._AffIdOwner);
commodity.CommodityType = (Sbm.CommodityType)dbCommodity._Type;
commodity.Code = dbCommodity._Code;
commodity.DescBrief = dbCommodity._DescBrief;
commodity.DescOrder = dbCommodity._DescOrder;
commodity.DescDetail = dbCommodity._DescDetail;
commodity.DrawingNumber = dbCommodity._DrawingNo;
commodity.DrawingIssue = dbCommodity._DrawingIssue;
commodity.AssetCatId = new SysId(dbCommodity._AssetCatId);
commodity.ImagePath = dbCommodity._ImagePath;
commodity.Category1 = dbCommodity._Category;
commodity.Category2 = dbCommodity._Category2;
commodity.Category3 = dbCommodity._Category3;
commodity.Location = dbCommodity._Location;
commodity.Department = dbCommodity._Department;
commodity.CatalogRef = dbCommodity._CatalogRef;
commodity.Weight = dbCommodity._Weight;
commodity.UomIdWeight = new SysId(dbCommodity._UomIdWeight);
commodity.Length = dbCommodity._Length;
commodity.UomIdLength = new SysId(dbCommodity._UomIdLength);
commodity.Volume = dbCommodity._Volume;
commodity.UomIdVolume = new SysId(dbCommodity._UomIdVolume);
commodity.Density = dbCommodity._Density;
commodity.UomIdDensity = new SysId(dbCommodity._UomIdDensity);
commodity.BoxQuantity = dbCommodity._BoxQuantity;
commodity.UomIdBox = new SysId(dbCommodity._UomIdBox);
commodity.Dimensions = dbCommodity._Dimensions;
commodity.SpecSummary = dbCommodity._SpecSummary;
commodity.RangeCode = dbCommodity._RangeCode;
commodity.ColourCode = dbCommodity._ColourCode;
commodity.SourceCode = dbCommodity._SourceCode;
commodity.SupplyMethodCode = dbCommodity._SupplyMethodCode;
commodity.HandlingCode = dbCommodity._HandlingCode;
commodity.DeliveryCode = dbCommodity._DeliveryCode;
commodity.MaterialCode = dbCommodity._MaterialCode;
commodity.FinishCode = dbCommodity._FinishCode;
commodity.PromotionCode = dbCommodity._PromotionCode;
commodity.NominalCode = dbCommodity._NominalCode;
commodity.NominalCodePurchase = dbCommodity._NominalCodePurchase;
commodity.ICNTariffCode = dbCommodity._ICNTariffCode;
commodity.TimeProd = dbCommodity._TimeProd;
commodity.UomIdTimeProd = new SysId(dbCommodity._UomIdTimeProd);
commodity.AssociationIdSupplier = new SysId(dbCommodity._AssIdSupplier);
commodity.SupplierRef = dbCommodity._SupplierRef;
commodity.CostPrice = dbCommodity._CostPrice;
commodity.PlaceOfOrigin = dbCommodity._PlaceOfOrigin;
commodity.MaterialCost = dbCommodity._MaterialCost;
commodity.CurrencyIdMaterial = new SysId(dbCommodity._CurrencyIdMaterial);
commodity.ExWorksCost = dbCommodity._ExWorksCost;
commodity.CurrencyIdExWorks = new SysId(dbCommodity._CurrencyIdExWorks);
commodity.ReorderLevel = dbCommodity._ReorderLevel;
commodity.ReorderQty = dbCommodity._ReorderQty;
commodity.QtyOnOrder = dbCommodity._QtyOnOrder;
commodity.AssociationIdCustomer = new SysId(dbCommodity._AssIdCustomer);
commodity.SalesPrice = dbCommodity._SalesPrice;
commodity.RetailPrice = dbCommodity._RetailPrice;
commodity.RetailPricePlanned = dbCommodity._RetailPricePlanned;
commodity.UomIdSale = new SysId(dbCommodity._UomIdSale);
commodity.CarriageCostIndicative = dbCommodity._CarriageCostIndicative;
commodity.MinOrderQty = dbCommodity._MinOrderQty;
commodity.PackQtySale = dbCommodity._PackQty;
commodity.TaxCodeId = new SysId(dbCommodity._TaxCodeId);
commodity.LastOrderDate = dbCommodity._LastOrderDate;
commodity.LastOrderQty = dbCommodity._LastOrderQty;
commodity.QtyInStock = dbCommodity._QtyInStock;
commodity.QtyAllocated = dbCommodity._QtyAllocated;
commodity.FreeStock = dbCommodity._FreeStock;
commodity.StockTakeDate = dbCommodity._StockTakeDate;
commodity.StockTakeQty = dbCommodity._StockTakeQty;
commodity.CommodityIdSalesProj = new SysId(dbCommodity._CommodityIdSalesProj);
commodity.SalesProjAnnual = dbCommodity._SalesProjAnnual;
commodity.SalesProjMonth01 = dbCommodity._SalesProjMonth01;
commodity.SalesProjMonth02 = dbCommodity._SalesProjMonth02;
commodity.SalesProjMonth03 = dbCommodity._SalesProjMonth03;
commodity.SalesProjMonth04 = dbCommodity._SalesProjMonth04;
commodity.SalesProjMonth05 = dbCommodity._SalesProjMonth05;
commodity.SalesProjMonth06 = dbCommodity._SalesProjMonth06;
commodity.SalesProjMonth07 = dbCommodity._SalesProjMonth07;
commodity.SalesProjMonth08 = dbCommodity._SalesProjMonth08;
commodity.SalesProjMonth09 = dbCommodity._SalesProjMonth09;
commodity.SalesProjMonth10 = dbCommodity._SalesProjMonth10;
commodity.SalesProjMonth11 = dbCommodity._SalesProjMonth11;
commodity.SalesProjMonth12 = dbCommodity._SalesProjMonth12;
// Common properties.
commodity.Notes = dbCommodity._Notes;
commodity.Status = SacsSystem.GetStatusForCode(dbCommodity._Status);
commodity.SetCreateStamp(dbCommodity._CreateOn, new SysId(dbCommodity._CreateBy), dbCommodity._CreateHost);
commodity.SetUpdateStamp(dbCommodity._UpdateOn, new SysId(dbCommodity._UpdateBy), dbCommodity._UpdateHost);
commodity.AcceptChanges();
}
//-------------------------------------------------------------------
// Table and column aliases.
private static readonly String aliasCommodity = "aCmd";
private static String aliasCommodity_CmdCustomer = "aCmdCmdCust";
private static String prefixCommodity_CmdCustomer = "CmdCmdCust_";
private static String aliasCommodity_AssocationSupplier = "aCmdAssSupp";
//private static String prefixCommodity_AssocationSupplier = "CmdAssSupp_";
private static String aliasCommodity_AffiliateSupplier = "aCmdAffSupp";
private static String prefixCommodity_AffiliateSupplier = "CmdAffSupp_";
private static String aliasCommodity_AssocationCustomer = "aCmdAsCust";
//private static String prefixCommodity_AssocationCustomer = "CmdAsCust_";
private static String aliasCommodity_AffiliateCustomer = "aCmdAffCust";
private static String prefixCommodity_AffiliateCustomer = "CmdAffCust_";
private static String aliasCommodity_UomSale = "aCmdUomSale";
private static String prefixCommodity_UomSale = "CmdUomSale_";
private static String aliasCommodity_CurrencyMaterial = "aCmdCurMat";
private static String prefixCommodity_CurrencyMaterial = "_CurMat";
private static String aliasCommodity_CurrencyExWorks = "aCmdCurExw";
private static String prefixCommodity_CurrencyExWorks = "_CurExw";
private static String aliasCommodity_TaxCode_Sale = "aCmdTxcSale";
private static String prefixCommodity_TaxCode_Sale = "CmdTxcSale_";
private static String prefixCommodity_Uom = "Uom_";
//---------------------------------------------------------------
private static String dataNameUomSale = "Uom_Sale";
private static String dataNameGrossPrice = "GrPrc";
private static String dataNameRequirement_AmtUnitEarlId = "ReqntAmtUnitEarlId";
private static String dataNameRequirement_AmtUnitEarlCode = "ReqntAmtUnitEarlCode";
private static String dataNameLastStockTake = "LstStkTk";
private static String dataNameCommodityCustomerCount = "CmdCustCount";
private static String dataNameCommoditySupplierCount = "CmdSuppCount";
private static String dataNameProcessCount = "CmdProcCount";
private static String dataNamePortfolioItemCount = "PrtItmCount";
private static String dataNameSales_YtdFinancial = "SalesYtdFin";
private static String dataNameSales_YtdCalendar = "SalesYtdCal";
private static String dataNameSales_PyFinancial = "SalesPyFin";
private static String dataNameSales_PyCalendar = "SalesPyCal";
private static String dataNameSales_MthCurrent = "SalesMthCurr";
private static String dataNameSales_Mth01 = "SalesMth01";
private static String dataNameSales_Mth02 = "SalesMth02";
private static String dataNameSales_Mth03 = "SalesMth03";
private static String dataNameSales_Mth04 = "SalesMth04";
private static String dataNameSales_Mth05 = "SalesMth05";
private static String dataNameSales_Mth06 = "SalesMth06";
private static String dataNameSales_Mth07 = "SalesMth07";
private static String dataNameSales_Mth08 = "SalesMth08";
private static String dataNameSales_Mth09 = "SalesMth09";
private static String dataNameSales_Mth10 = "SalesMth10";
private static String dataNameSales_Mth11 = "SalesMth11";
private static String dataNameSales_Mth12 = "SalesMth12";
private static String dataNameStockSold_Period = "StkSolPrd";
private static String dataNameStkLvl_Allocated = "StkLvl_Allo";
private static String dataNameStkLvl_Allocated_Sales = "StkLvl_AlloS";
private static String dataNameStkLvl_Allocated_Calc = "StkLvl_AlloC";
private static String dataNameStkLvl_Allocated_All = "StkLvl_AlloA";
private static String dataNameStkLvl_Current = "StkLvl_Curr";
private static String dataNameStkLvl_Current_Sales = "StkLvl_CurrS";
private static String dataNameStkLvl_Current_Calc = "StkLvl_CurrC";
private static String dataNameStkLvl_Current_All = "StkLvl_CurrA";
private static String dataNameStkLvl_Bays = "StkLvl_Bays";
private static String dataNameStkLvl_Bay1 = "StkLvl_Bay1";
private static String dataNameStkLvl_Bay2 = "StkLvl_Bay2";
private static String dataNameStkLvl_Bay3 = "StkLvl_Bay3";
private static String dataNameStkDue_NextCmdStkDate = "StkDue_NextCmdDate"; // Date next commodity movement expected.
private static String dataNameStkDue_NextCmdStkQty = "StkDue_NextCmdQty"; // Quantity on next expected commodity movement.
private static String dataNameStkDue_NextCntStkDate = "StkDue_NextCntDate"; // Date next container movement expected.
private static String dataNameStkDue_NextCntStkQty = "StkDue_NextCntQty"; // Quantity on next expected container movement.
private static String dataNameStkDue_Imminent = "StkLvl_Immi";
private static String dataNameStkDue_Week1 = "StkDue_Wk1"; // Stock due in by future weeks.
private static String dataNameStkDue_Week2 = "StkDue_Wk2";
private static String dataNameStkDue_Week3 = "StkDue_Wk3";
private static String dataNameStkDue_Week4 = "StkDue_Wk4";
private static String dataNameStkDue_Week5 = "StkDue_Wk5";
private static String dataNameStkDue_Week6 = "StkDue_Wk6";
private static String dataNameStkDue_Week7 = "StkDue_Wk7";
private static String dataNameStkDue_Week8 = "StkDue_Wk8";
private static String dataNameStkDue_Week9 = "StkDue_Wk9";
private static String dataNameStkDue_Week10 = "StkDue_Wk10";
private static String dataNameStkDue_Week11 = "StkDue_Wk11";
private static String dataNameStkDue_Week12 = "StkDue_Wk12";
private static String dataNameStkDue_Week1To2 = "StkDue_Wk1To2";
private static String dataNameStkDue_Week3To4 = "StkDue_Wk3To4";
private static String dataNameStkDue_Week5To6 = "StkDue_Wk5To6";
private static String dataNameStkDue_Week7To8 = "StkDue_Wk7To8";
private static String dataNameStkDue_Week9To10 = "StkDue_Wk9To10";
private static String dataNameStkDue_Week11To12 = "StkDue_Wk11To12";
private static String dataNameStkDue_Week7On = "StkDue_Wk7On";
private static String dataNameStkDue_Week13On = "StkDue_Wk13On";
private static String dataNameStkDue_MonthCurr = "StkDue_MthCurr";
private static String dataNameStkDue_Month01 = "StkDue_Mth01";
private static String dataNameStkDue_Month02 = "StkDue_Mth02";
private static String dataNameStkDue_Month03 = "StkDue_Mth03";
private static String dataNameStkDue_Month04 = "StkDue_Mth04";
private static String dataNameStkDue_Month05 = "StkDue_Mth05";
private static String dataNameStkDue_Month06 = "StkDue_Mth06";
private static String dataNameStkDue_Month07 = "StkDue_Mth07";
private static String dataNameStkDue_Month08 = "StkDue_Mth08";
private static String dataNameStkDue_Month09 = "StkDue_Mth09";
private static String dataNameStkDue_Month10 = "StkDue_Mth10";
private static String dataNameStkDue_Month11 = "StkDue_Mth11";
private static String dataNameStkDue_Month12 = "StkDue_Mth12";
private static String dataNameStkDue_MonthTo03 = "StkDue_MthTo3";
private static String dataNameStkDue_MonthTo06 = "StkDue_MthTo6";
private static String dataNameStkDue_MonthTo09 = "StkDue_MthTo9";
private static String dataNameStkDue_MonthTo12 = "StkDue_MthTo12";
private static String dataNameStkDue_Month04To06 = "StkDue_Mth4To6";
private static String dataNameStkDue_Month07To09 = "StkDue_Mth7To9";
private static String dataNameStkDue_Month10To12 = "StkDue_Mth10To12";
private static String dataNameStkDue_Month07To12 = "StkDue_Mth7To12";
private static String dataNameStkDue_Month04On = "StkDue_Mth4On";
private static String dataNameStkDue_Month05On = "StkDue_Mth5On";
private static String dataNameStkDue_Month06On = "StkDue_Mth6On";
private static String dataNameStkDue_Month07On = "StkDue_Mth7On";
private static String dataNameStkDue_Month13On = "StkDue_Mth13On";
private static String dataNameStkDue_Provisional = "StkDue_Prov";
private static String dataNameStkAll_Week1 = "StkAll_Wk1"; // Stock allocated by future weeks.
private static String dataNameStkAll_Week2 = "StkAll_Wk2";
private static String dataNameStkAll_Week3To4 = "StkAll_Wk3To4";
private static String dataNameStkAll_Week5To6 = "StkAll_Wk5To6";
private static String dataNameStkAll_Week7To8 = "StkAll_Wk7To8";
private static String dataNameStkAll_Week9To10 = "StkAll_Wk9To10";
private static String dataNameStkAll_Week11To12 = "StkAll_Wk11To12";
private static String dataNameStkAll_Week13On = "StkAll_Wk13On";
private static String dataNameStkAll_MonthCurr = "StkAll_MthCurr"; // Stock allocated by month.
private static String dataNameStkAll_Month01 = "StkAll_Mth01"; // Stock allocated by future month.
private static String dataNameStkAll_Month02 = "StkAll_Mth02";
private static String dataNameStkAll_Month03 = "StkAll_Mth03";
private static String dataNameStkAll_Month04 = "StkAll_Mth04";
private static String dataNameStkAll_Month05 = "StkAll_Mth05";
private static String dataNameStkAll_Month06 = "StkAll_Mth06";
private static String dataNameStkAll_Month07 = "StkAll_Mth07";
private static String dataNameStkAll_Month08 = "StkAll_Mth08";
private static String dataNameStkAll_Month09 = "StkAll_Mth09";
private static String dataNameStkAll_Month10 = "StkAll_Mth10";
private static String dataNameStkAll_Month11 = "StkAll_Mth11";
private static String dataNameStkAll_Month12 = "StkAll_Mth12";
//-------------------------------------------------------------------
// Setting Commodity column definitions.
private void SetCommodityColDfn
(ColumnDfn col, String caption, int width, SbmDbDfn.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SbmDbDfn.GetTableForColumn(dbCol) == SbmDbDfn.TableIdx.Commodity)
alias = aliasCommodity;
col.Set(caption, width, (int)dbCol, prefix + SbmDbDfn.GetColumnName(dbCol, false), SbmDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SbmDbDfn.ColumnIdx.Unknown)
col.MaxLength = (int)SbmDbDfn.GetColTextLen(dbCol);
}
//-------------------------------------------------------------------
// Getting Commodity column definition.
public override ColumnDfn GetCommodityColumnDfn(SbmCommodity.Column columnId, string caption = "", int width = 0)
{
bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales);
bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply);
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
case SbmCommodity.Column.Pos:
SetCommodityColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SbmCommodity.Column.Id:
SetCommodityColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.Commodity_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
// Commodity Properties.
case SbmCommodity.Column.Type:
SetCommodityColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Commodity_Type, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmCommodity.Column.Type_Code:
SetCommodityColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Commodity_Type, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Type_Desc:
SetCommodityColDfn(columnDfn, "Type", 90, SbmDbDfn.ColumnIdx.Commodity_Type, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Code:
SetCommodityColDfn(columnDfn, "Code", 120, SbmDbDfn.ColumnIdx.Commodity_Code);
if (ConfigConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityDoubleColumnWidth))
columnDfn.Width = columnDfn.Width * (int)1.25;
break;
case SbmCommodity.Column.DescBrief:
SetCommodityColDfn(columnDfn, "Desc", 120, SbmDbDfn.ColumnIdx.Commodity_DescBrief);
if (ConfigConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityDoubleColumnWidth))
columnDfn.Width = columnDfn.Width * (int)1.25;
break;
case SbmCommodity.Column.DescOrder:
SetCommodityColDfn(columnDfn, "Desc order", 120, SbmDbDfn.ColumnIdx.Commodity_DescOrder);
break;
case SbmCommodity.Column.DescDetail:
SetCommodityColDfn(columnDfn, "Desc detail", 240, SbmDbDfn.ColumnIdx.Commodity_DescDetail);
break;
case SbmCommodity.Column.DrawingNo:
SetCommodityColDfn(columnDfn, "Drawing", 86, SbmDbDfn.ColumnIdx.Commodity_DrawingNo, ColumnAlignment.Center);
break;
case SbmCommodity.Column.DrawingIssue:
SetCommodityColDfn(columnDfn, "Issue", 40, SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, ColumnAlignment.Center);
break;
case SbmCommodity.Column.ImagePath:
SetCommodityColDfn(columnDfn, "Image file", 140, SbmDbDfn.ColumnIdx.Commodity_ImagePath, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Image:
SetCommodityColDfn(columnDfn, "Image", 160, SbmDbDfn.ColumnIdx.Commodity_ImagePath, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Category1Code:
SetCommodityColDfn(columnDfn, "Category 1", 65, SbmDbDfn.ColumnIdx.Commodity_Category, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Category1_Desc:
SetCommodityColDfn(columnDfn, "Category 1", 80, SbmDbDfn.ColumnIdx.Commodity_Category);
break;
case SbmCommodity.Column.Category2Code:
SetCommodityColDfn(columnDfn, "Category 2", 65, SbmDbDfn.ColumnIdx.Commodity_Category2, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Category2_Desc:
SetCommodityColDfn(columnDfn, "Category 2", 80, SbmDbDfn.ColumnIdx.Commodity_Category2);
break;
case SbmCommodity.Column.Category3Code:
SetCommodityColDfn(columnDfn, "Category 3", 65, SbmDbDfn.ColumnIdx.Commodity_Category3, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Category3_Desc:
SetCommodityColDfn(columnDfn, "Category 3", 80, SbmDbDfn.ColumnIdx.Commodity_Category3);
break;
case SbmCommodity.Column.Location:
SetCommodityColDfn(columnDfn, "Location", 80, SbmDbDfn.ColumnIdx.Commodity_Location, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Department:
SetCommodityColDfn(columnDfn, "Department", 80, SbmDbDfn.ColumnIdx.Commodity_Department, ColumnAlignment.Center);
break;
case SbmCommodity.Column.CatalogRef:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CatalogRef, "Catalog ref");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_CatalogRef, ColumnAlignment.Center);
break;
}
//---------------------------------------------------------------
// Specification.
case SbmCommodity.Column.Weight:
SetCommodityColDfn(columnDfn, "Weight", 70, SbmDbDfn.ColumnIdx.Commodity_Weight, ColumnAlignment.Right, DataValue.DataType.Decimal);
columnDfn.NumDecimals = (byte)WeightDecimals;
break;
case SbmCommodity.Column.Weight_UomId:
SetCommodityColDfn(columnDfn, "Weight uomId", 70, SbmDbDfn.ColumnIdx.Commodity_UomIdWeight, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmCommodity.Column.Weight_Unit:
SetCommodityColDfn(columnDfn, "Weight unit", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Weight_ValueUnits:
SetCommodityColDfn(columnDfn, "Weight UOM #", 80, SbmDbDfn.ColumnIdx.Commodity_UomIdWeight, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmCommodity.Column.Length:
SetCommodityColDfn(columnDfn, "Length", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)LengthDecimals;
break;
case SbmCommodity.Column.Length_UomId:
SetCommodityColDfn(columnDfn, "Length UOM #", 70, SbmDbDfn.ColumnIdx.Commodity_UomIdWeight, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmCommodity.Column.Length_Unit:
SetCommodityColDfn(columnDfn, "Length unit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Length_ValueUnits:
SetCommodityColDfn(columnDfn, "Length valueunit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right);
break;
case SbmCommodity.Column.Volume:
SetCommodityColDfn(columnDfn, "Volume", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)VolumeDecimals;
break;
case SbmCommodity.Column.Volume_UomId:
SetCommodityColDfn(columnDfn, "Volume uomId", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Volume_Unit:
SetCommodityColDfn(columnDfn, "Volume unit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Volume_ValueUnits:
SetCommodityColDfn(columnDfn, "Volume valueunit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right);
break;
case SbmCommodity.Column.Density:
SetCommodityColDfn(columnDfn, "Density", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)DensityDecimals;
break;
case SbmCommodity.Column.Density_UomId:
SetCommodityColDfn(columnDfn, "Length uomId", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Density_Unit:
SetCommodityColDfn(columnDfn, "Length unit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Density_ValueUnits:
SetCommodityColDfn(columnDfn, "Density valueunit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right);
break;
case SbmCommodity.Column.BoxQuantity:
SetCommodityColDfn(columnDfn, "Box qty", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmCommodity.Column.BoxQuantity_UomId:
SetCommodityColDfn(columnDfn, "Box qty uomId", 70, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.BoxQuantity_Unit:
SetCommodityColDfn(columnDfn, "Box qty unit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Center);
break;
case SbmCommodity.Column.BoxQuantity_ValueUnits:
SetCommodityColDfn(columnDfn, "Box qty valueunit", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right);
break;
case SbmCommodity.Column.Dimensions:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Dimensions, "Dimensions");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_Dimensions, ColumnAlignment.Center);
break;
}
case SbmCommodity.Column.SpecSummary:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_SpecSummary, "Specification");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_SpecSummary, ColumnAlignment.Center);
break;
}
case SbmCommodity.Column.ICNTariffCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, "ICN tariff");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, ColumnAlignment.Center);
break;
}
//---------------------------------------------------------------
// Codings.
case SbmCommodity.Column.RangeCode:
SetCommodityColDfn(columnDfn, "Range", 80, SbmDbDfn.ColumnIdx.Commodity_RangeCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.RangeDesc:
SetCommodityColDfn(columnDfn, "Range", 90, SbmDbDfn.ColumnIdx.Commodity_RangeCode, ColumnAlignment.Left);
break;
case SbmCommodity.Column.ColourCode:
SetCommodityColDfn(columnDfn, "Colour", 80, SbmDbDfn.ColumnIdx.Commodity_ColourCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.ColourDesc:
SetCommodityColDfn(columnDfn, "Colour", 90, SbmDbDfn.ColumnIdx.Commodity_ColourCode, ColumnAlignment.Left);
break;
case SbmCommodity.Column.SourceCode:
SetCommodityColDfn(columnDfn, "Source", 80, SbmDbDfn.ColumnIdx.Commodity_SourceCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.SourceDesc:
SetCommodityColDfn(columnDfn, "Source", 90, SbmDbDfn.ColumnIdx.Commodity_SourceCode, ColumnAlignment.Left);
break;
case SbmCommodity.Column.SupplyMethodCode:
SetCommodityColDfn(columnDfn, "Supply", 80, SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.SupplyMethodDesc:
SetCommodityColDfn(columnDfn, "Supply", 90, SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode, ColumnAlignment.Left);
break;
case SbmCommodity.Column.HandlingCode:
SetCommodityColDfn(columnDfn, "Handling", 80, SbmDbDfn.ColumnIdx.Commodity_HandlingCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.HandlingDesc:
SetCommodityColDfn(columnDfn, "Handling", 90, SbmDbDfn.ColumnIdx.Commodity_HandlingCode, ColumnAlignment.Left);
break;
case SbmCommodity.Column.DeliveryCode:
SetCommodityColDfn(columnDfn, "Delivery", 80, SbmDbDfn.ColumnIdx.Commodity_DeliveryCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.DeliveryDesc:
SetCommodityColDfn(columnDfn, "Delivery", 90, SbmDbDfn.ColumnIdx.Commodity_DeliveryCode, ColumnAlignment.Left);
break;
case SbmCommodity.Column.MaterialCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_MaterialCode, ColumnAlignment.Center);
break;
}
case SbmCommodity.Column.MaterialDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material");
SetCommodityColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Commodity_MaterialCode, ColumnAlignment.Left);
break;
}
case SbmCommodity.Column.FinishCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_FinishCode, ColumnAlignment.Center);
break;
}
case SbmCommodity.Column.FinishDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish");
SetCommodityColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Commodity_FinishCode, ColumnAlignment.Left);
break;
}
case SbmCommodity.Column.PromotionCode:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Promotion");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_PromotionCode, ColumnAlignment.Center);
break;
}
case SbmCommodity.Column.PromotionDesc:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Promotion");
SetCommodityColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Commodity_PromotionCode, ColumnAlignment.Left);
break;
}
case SbmCommodity.Column.NominalCode:
SetCommodityColDfn(columnDfn, "Sales nominal", 80, SbmDbDfn.ColumnIdx.Commodity_NominalCode, ColumnAlignment.Center);
break;
case SbmCommodity.Column.NominalCodePurchase:
SetCommodityColDfn(columnDfn, "Purchase nominal", 80, SbmDbDfn.ColumnIdx.Commodity_NominalCodePurchase, ColumnAlignment.Center);
break;
//-----------------------------------------------------------
// Purchasing.
case SbmCommodity.Column.Supplier_Name:
SetCommodityColDfn(columnDfn, "Supplier", 120, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasCommodity_AffiliateSupplier, prefixCommodity_AffiliateSupplier);
break;
case SbmCommodity.Column.Supplier_Ref:
SetCommodityColDfn(columnDfn, "Part number", 90, SbmDbDfn.ColumnIdx.Commodity_SupplierRef, ColumnAlignment.Center);
break;
case SbmCommodity.Column.CostPrice:
if (canViewSupplyFinancials)
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price");
SetCommodityColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.CostPrice_Fmt:
if (canViewSupplyFinancials)
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price");
SetCommodityColDfn(columnDfn, label, 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.PlaceOfOrigin:
SetCommodityColDfn(columnDfn, "Place of origin", 90, SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin);
break;
case SbmCommodity.Column.MaterialCost:
if (canViewSupplyFinancials)
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.Double, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial);
columnDfn.NumDecimals = 2; // Unknown currency.
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.MaterialCost_Fmt:
if (canViewSupplyFinancials)
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost");
SetCommodityColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.String, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial);
}
break;
case SbmCommodity.Column.MaterialCurrencyId:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, "Material curr #");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, ColumnAlignment.Right, DataValue.DataType.Long, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial);
break;
}
case SbmCommodity.Column.MaterialCurrency_Code:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, "Material currency code");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial);
break;
}
case SbmCommodity.Column.MaterialCurrency_Symbol:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, "Material currency");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CurrencyMaterial, prefixCommodity_CurrencyMaterial);
break;
}
case SbmCommodity.Column.ExWorksCost:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost, "Ex-works cost");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_ExWorksCost, ColumnAlignment.Right, DataValue.DataType.Double, aliasCommodity_CurrencyExWorks, prefixCommodity_CurrencyExWorks);
columnDfn.NumDecimals = 2; // Unknown currency.
columnDfn.ShowZeroValues = false;
break;
}
case SbmCommodity.Column.ExWorksCost_Fmt:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost, "Ex-works cost");
SetCommodityColDfn(columnDfn, label, 90, SbmDbDfn.ColumnIdx.Commodity_ExWorksCost, ColumnAlignment.Right, DataValue.DataType.String, aliasCommodity_CurrencyExWorks, prefixCommodity_CurrencyExWorks);
break;
}
case SbmCommodity.Column.ExWorksCurrencyId:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, "Ex-works currency #");
SetCommodityColDfn(columnDfn, label, 80, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, ColumnAlignment.Right, DataValue.DataType.Long, aliasCommodity_CurrencyExWorks, prefixCommodity_CurrencyExWorks);
break;
}
case SbmCommodity.Column.ExWorksCurrency_Code:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, "Ex-works currency");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CurrencyExWorks, prefixCommodity_CurrencyExWorks);
break;
}
case SbmCommodity.Column.ExWorksCurrency_Symbol:
{
String label = GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, "Ex-works currency code");
SetCommodityColDfn(columnDfn, label, 100, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CurrencyExWorks, prefixCommodity_CurrencyExWorks);
break;
}
case SbmCommodity.Column.ReorderLevel:
SetCommodityColDfn(columnDfn, "Reorder level", 90, SbmDbDfn.ColumnIdx.Commodity_ReorderLevel, ColumnAlignment.Center, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.ReorderQty:
SetCommodityColDfn(columnDfn, "Reorder qty", 90, SbmDbDfn.ColumnIdx.Commodity_ReorderQty, ColumnAlignment.Center, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.QtyOnOrder:
SetCommodityColDfn(columnDfn, "Qty on Order", 90, SbmDbDfn.ColumnIdx.Commodity_QtyOnOrder, ColumnAlignment.Center, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Sales:
case SbmCommodity.Column.Customer_Name:
SetCommodityColDfn(columnDfn, "Customer", 100, SbmDbDfn.ColumnIdx.Affiliate_Name);
break;
case SbmCommodity.Column.SalesPrice:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Sales price", 80, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.SalesPrice_Fmt:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Sales price", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String);
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.RetailPrice:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "RRP", 80, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.RetailPrice_Fmt:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "RRP", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String);
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.RetailPricePlanned:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Planned RRP", 80, SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.RetailPricePlanned_Fmt:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Planned RRP", 90, SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, ColumnAlignment.Right, DataValue.DataType.String);
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.GrossPrice:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Gross price", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.GrossPrice_Fmt:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Gross price", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String);
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.UnitOfSale:
SetCommodityColDfn(columnDfn, "Unit of Sale", 100, SbmDbDfn.ColumnIdx.UnitMeasure_Single, ColumnAlignment.Center);
break;
case SbmCommodity.Column.CarriageCostIndicative:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Carriage cost (ind)", 80, SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.CarriageCostIndicative_Fmt:
if (canViewSalesFinancials)
{
SetCommodityColDfn(columnDfn, "Carriage cost (ind)", 90, SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, ColumnAlignment.Right, DataValue.DataType.String);
columnDfn.ShowZeroValues = false;
}
break;
case SbmCommodity.Column.MinOrderQty:
SetCommodityColDfn(columnDfn, "Min Order Qty", 100, SbmDbDfn.ColumnIdx.Commodity_MinOrderQty, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.PackQtySale:
SetCommodityColDfn(columnDfn, "Pack Qty - sale", 80, SbmDbDfn.ColumnIdx.Commodity_PackQty, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
// Sales tax code.
case SbmCommodity.Column.TaxCode:
SetCommodityColDfn(columnDfn, "Tax code", 90, SbmDbDfn.ColumnIdx.TaxCode_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_TaxCode_Sale, prefixCommodity_TaxCode_Sale);
columnDfn.ReadOnly = true;
break;
case SbmCommodity.Column.TaxRate:
SetCommodityColDfn(columnDfn, "Tax %", 80, SbmDbDfn.ColumnIdx.TaxCode_TaxRate, ColumnAlignment.Center, DataValue.DataType.Decimal, aliasCommodity_TaxCode_Sale, prefixCommodity_TaxCode_Sale);
columnDfn.NumDecimals = 2;
columnDfn.ReadOnly = true;
break;
// Last order.
case SbmCommodity.Column.LastOrderDate:
SetCommodityColDfn(columnDfn, "Last order date", 100, SbmDbDfn.ColumnIdx.Commodity_LastOrderDate, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SbmCommodity.Column.LastOrderQty:
SetCommodityColDfn(columnDfn, "Last order qty", 100, SbmDbDfn.ColumnIdx.Commodity_LastOrderQty, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
//---------------------------------------------------------------
// Customer definition.
case SbmCommodity.Column.Cust_ProductCode:
SetCommodityColDfn(columnDfn, "Customer product code", 100, SbmDbDfn.ColumnIdx.CommodityCustomer_ProductCode, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_AmountRetail:
SetCommodityColDfn(columnDfn, "Customer retail", 100, SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail, ColumnAlignment.Right, DataValue.DataType.Double, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_AmountRetail_Fmt:
SetCommodityColDfn(columnDfn, "Customer retail", 100, SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail, ColumnAlignment.Right, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_CurrencyIdRetail:
SetCommodityColDfn(columnDfn, "Customer currency#", 60, SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail, ColumnAlignment.Right, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_CurrencyIdRetail_Code:
SetCommodityColDfn(columnDfn, "Customer currency", 80, SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_CurrencyIdRetail_Symbol:
SetCommodityColDfn(columnDfn, "Customer currency", 80, SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_PromotionCode:
SetCommodityColDfn(columnDfn, "Customer promotion", 100, SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
case SbmCommodity.Column.Cust_PromotionDesc:
SetCommodityColDfn(columnDfn, "Customer promotion", 120, SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, ColumnAlignment.Center, DataValue.DataType.String, aliasCommodity_CmdCustomer, prefixCommodity_CmdCustomer);
break;
//---------------------------------------------------------------
// Stock:
case SbmCommodity.Column.QtyInStock:
SetCommodityColDfn(columnDfn, "Qty in Stock", 80, SbmDbDfn.ColumnIdx.Commodity_QtyInStock, ColumnAlignment.Right);
break;
case SbmCommodity.Column.QtyAllocated:
SetCommodityColDfn(columnDfn, "Qty allocated", 100, SbmDbDfn.ColumnIdx.Commodity_QtyAllocated, ColumnAlignment.Center);
break;
case SbmCommodity.Column.StockTakeDate:
SetCommodityColDfn(columnDfn, "Stock take date", 100, SbmDbDfn.ColumnIdx.Commodity_StockTakeDate, ColumnAlignment.Center);
break;
case SbmCommodity.Column.StockTakeQty:
SetCommodityColDfn(columnDfn, "Stock take qty", 100, SbmDbDfn.ColumnIdx.Commodity_StockTakeQty, ColumnAlignment.Center);
break;
case SbmCommodity.Column.FreeStock:
SetCommodityColDfn(columnDfn, "Free stock", 100, SbmDbDfn.ColumnIdx.Commodity_FreeStock, ColumnAlignment.Center);
break;
//---------------------------------------------------------------
// Stock take date.
case SbmCommodity.Column.StockTake_Date:
SetCommodityColDfn(columnDfn, "Last stock take", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DataName = dataNameLastStockTake;
break;
//---------------------------------------------------------------
// Sales budget.
case SbmCommodity.Column.SalesProj_Annual:
SetCommodityColDfn(columnDfn, "Budget (annual)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Jan:
SetCommodityColDfn(columnDfn, "Budget (Jan)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth01, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Feb:
SetCommodityColDfn(columnDfn, "Budget (Feb)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth02, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Mar:
SetCommodityColDfn(columnDfn, "Budget (Mar)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth03, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Apr:
SetCommodityColDfn(columnDfn, "Budget (Apr)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth04, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_May:
SetCommodityColDfn(columnDfn, "Budget (May)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth05, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Jun:
SetCommodityColDfn(columnDfn, "Budget (Jun)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth06, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Jul:
SetCommodityColDfn(columnDfn, "Budget (Jul)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth07, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Aug:
SetCommodityColDfn(columnDfn, "Budget (Aug)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth08, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Sep:
SetCommodityColDfn(columnDfn, "Budget (Sep)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth09, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Oct:
SetCommodityColDfn(columnDfn, "Budget (Oct)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth10, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Nov:
SetCommodityColDfn(columnDfn, "Budget (Nov)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth11, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Dec:
SetCommodityColDfn(columnDfn, "Budget (Dec)", 75, SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth12, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesProj_Period:
SetCommodityColDfn(columnDfn, "Budget (period)", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Sales Orders:
case SbmCommodity.Column.SalesYtdFinancial:
SetCommodityColDfn(columnDfn, "Sales FYTD", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesYtdCalendar:
SetCommodityColDfn(columnDfn, "Sales CYTD", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesPyFinancial:
SetCommodityColDfn(columnDfn, "Sales PFY", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesPyCalendar:
SetCommodityColDfn(columnDfn, "Sales PCY", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthCurrent:
SetCommodityColDfn(columnDfn, "Sales Mth curr", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast01:
SetCommodityColDfn(columnDfn, "Sales Mth -1", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast02:
SetCommodityColDfn(columnDfn, "Sales Mth -2", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast03:
SetCommodityColDfn(columnDfn, "Sales Mth -3", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast04:
SetCommodityColDfn(columnDfn, "Sales Mth -4", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast05:
SetCommodityColDfn(columnDfn, "Sales Mth -5", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast06:
SetCommodityColDfn(columnDfn, "Sales Mth -6", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast07:
SetCommodityColDfn(columnDfn, "Sales Mth -7", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast08:
SetCommodityColDfn(columnDfn, "Sales Mth -8", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast09:
SetCommodityColDfn(columnDfn, "Sales Mth -9", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast10:
SetCommodityColDfn(columnDfn, "Sales Mth -10", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast11:
SetCommodityColDfn(columnDfn, "Sales Mth -11", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.SalesMonthPast12:
SetCommodityColDfn(columnDfn, "Sales Mth -12", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Stock sold:
case SbmCommodity.Column.StockSold_Period:
SetCommodityColDfn(columnDfn, "Sold during period", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Stock Levels:
case SbmCommodity.Column.Stock_Allocated:
SetCommodityColDfn(columnDfn, "Allocated", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Sales:
SetCommodityColDfn(columnDfn, "Allocated (sales)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Calc:
SetCommodityColDfn(columnDfn, "Allocated (calc)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_All:
SetCommodityColDfn(columnDfn, "Allocated (all)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_CurrentLevel:
SetCommodityColDfn(columnDfn, "Stock", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_CurrentLevel_Sales:
SetCommodityColDfn(columnDfn, "Stock (sales)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_CurrentLevel_Calc:
SetCommodityColDfn(columnDfn, "Stock (calc)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_CurrentLevel_All:
SetCommodityColDfn(columnDfn, "Stock (all)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_ImminentLevel:
SetCommodityColDfn(columnDfn, "Stock (imminent)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Available:
SetCommodityColDfn(columnDfn, "Avail", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_Available_MinZero:
SetCommodityColDfn(columnDfn, "Avail", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_Available_Sales:
SetCommodityColDfn(columnDfn, "Avail (sales)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_Available_Sales_MinZero:
SetCommodityColDfn(columnDfn, "Avail (sales)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_ImminentAvailable:
SetCommodityColDfn(columnDfn, "Avail (imminent)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_CurrentVsReorder:
SetCommodityColDfn(columnDfn, "Current-v-Reorder", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_ImminentVsReorder:
SetCommodityColDfn(columnDfn, "Imminent-v-Reorder", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_AvailVsReorder:
SetCommodityColDfn(columnDfn, "Avail-v-Reorder", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
case SbmCommodity.Column.Stock_ImminentAvailVsReorder:
SetCommodityColDfn(columnDfn, "Avail(imm)-v-Reorder", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.ShowZeroValues = false;
break;
//---------------------------------------------------------------
// Stock bays by location.
case SbmCommodity.Column.Stock_Bays:
SetCommodityColDfn(columnDfn, "Stock bays", 90, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmCommodity.Column.Stock_Bay1:
SetCommodityColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.StockLevel_Bay1, "Bay 1"), 80, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmCommodity.Column.Stock_Bay2:
SetCommodityColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.StockLevel_Bay2, "Bay 2"), 80, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmCommodity.Column.Stock_Bay3:
SetCommodityColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.StockLevel_Bay3, "Bay 3"), 80, SbmDbDfn.ColumnIdx.Unknown);
break;
//---------------------------------------------------------------
// Stock due next date:
case SbmCommodity.Column.Stock_NextDue_Date: // Date next movement arrival expected.
SetCommodityColDfn(columnDfn, "Stk next due", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmCommodity.Column.Stock_NextDue_Quantity: // Quantity next movement arrival expected.
SetCommodityColDfn(columnDfn, "Stk next due qty", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_NextDue_Commodity_Date: // Date next commodity movement arrival expected.
SetCommodityColDfn(columnDfn, "Cmd next due", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmCommodity.Column.Stock_NextDue_Commodity_Quantity: // Quantity next commodity movement arrival expected.
SetCommodityColDfn(columnDfn, "Cmd next due qty", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_NextDue_Container_Date: // Date next container movement arrival expected.
SetCommodityColDfn(columnDfn, "Cont next due", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmCommodity.Column.Stock_NextDue_Container_Quantity: // Quantity next container movement arrival expected.
SetCommodityColDfn(columnDfn, "Cont next due qty", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
// Stock due in imminently - under organisation configuration control:
case SbmCommodity.Column.Stock_Due_Imminently:
SetCommodityColDfn(columnDfn, "Due imminently", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
// Stock due in by future weeks:
case SbmCommodity.Column.Stock_DueIn_Week1:
SetCommodityColDfn(columnDfn, "Due in wk1", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week2:
SetCommodityColDfn(columnDfn, "Due in wk2", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week3:
SetCommodityColDfn(columnDfn, "Due in wk3", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week4:
SetCommodityColDfn(columnDfn, "Due in wk4", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week5:
SetCommodityColDfn(columnDfn, "Due in wk5", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week6:
SetCommodityColDfn(columnDfn, "Due in wk6", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week7:
SetCommodityColDfn(columnDfn, "Due in wk7", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week8:
SetCommodityColDfn(columnDfn, "Due in wk8", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week9:
SetCommodityColDfn(columnDfn, "Due in wk9", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week10:
SetCommodityColDfn(columnDfn, "Due in wk10", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week11:
SetCommodityColDfn(columnDfn, "Due in wk11", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week12:
SetCommodityColDfn(columnDfn, "Due in wk12", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week1To2:
SetCommodityColDfn(columnDfn, "Due in wk1-2", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week3To4:
SetCommodityColDfn(columnDfn, "Due in wk3-4", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week5To6:
SetCommodityColDfn(columnDfn, "Due in wk5-6", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week7To8:
SetCommodityColDfn(columnDfn, "Due in wk7-8", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week9To10:
SetCommodityColDfn(columnDfn, "Due in wk9-10", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week11To12:
SetCommodityColDfn(columnDfn, "Due in wk11-12", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week7On:
SetCommodityColDfn(columnDfn, "Due in wk7 on", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Week13On:
SetCommodityColDfn(columnDfn, "Due in wk13 on", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
// Stock allocated by future weeks.
case SbmCommodity.Column.Stock_Allocated_Week1:
SetCommodityColDfn(columnDfn, "Alloc wk1", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week2:
SetCommodityColDfn(columnDfn, "Alloc wk2", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week3To4:
SetCommodityColDfn(columnDfn, "Alloc wk3-4", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week5To6:
SetCommodityColDfn(columnDfn, "Alloc wk5-6", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week7To8:
SetCommodityColDfn(columnDfn, "Alloc wk7-8", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week9To10:
SetCommodityColDfn(columnDfn, "Alloc wk9-10", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week11To12:
SetCommodityColDfn(columnDfn, "Alloc wk11-12", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Week13On:
SetCommodityColDfn(columnDfn, "Alloc wk13 on", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Stock allocated in current and following months.
case SbmCommodity.Column.Stock_Allocated_MonthCurrent:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today, "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month01:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(1), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month02:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(2), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month03:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(3), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month04:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(4), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month05:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(5), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month06:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(6), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month07:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(7), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month08:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(8), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month09:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(9), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month10:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(10), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month11:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(11), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_Allocated_Month12:
SetCommodityColDfn(columnDfn, "Alloc " + DateUtil.Format(today.AddMonths(12), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Stock level at end of current and following months [derived].
case SbmCommodity.Column.Stock_EndOfMonth_Current:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today, "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_01:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(1), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_02:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(2), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_03:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(3), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_04:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(4), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_05:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(5), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_06:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(6), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_07:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(7), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_08:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(8), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_09:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(9), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_10:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(10), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_11:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(11), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_EndOfMonth_12:
SetCommodityColDfn(columnDfn, "EOM Stock " + DateUtil.Format(today.AddMonths(12), "MMM-yy"), 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//---------------------------------------------------------------
// Stock due in by future months.
case SbmCommodity.Column.Stock_DueIn_MonthCurrent:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime(), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month01:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(1), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month02:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(2), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month03:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(3), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month04:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(4), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month05:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(5), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month06:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(6), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month07:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(7), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month08:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(8), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month09:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(9), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month10:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(10), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month11:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(11), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month12:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(12), "MMM-yy"), 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
// Up to 3 months in future.
case SbmCommodity.Column.Stock_DueIn_MonthTo03:
SetCommodityColDfn(columnDfn, "Due to " + DateUtil.Format(new DateTime().AddMonths(3), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_MonthTo06:
SetCommodityColDfn(columnDfn, "Due to " + DateUtil.Format(new DateTime().AddMonths(6), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_MonthTo09:
SetCommodityColDfn(columnDfn, "Due to " + DateUtil.Format(new DateTime().AddMonths(9), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_MonthTo12:
SetCommodityColDfn(columnDfn, "Due to " + DateUtil.Format(new DateTime().AddMonths(12), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month04To06:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(4), "MMM-yy") + ":" + DateUtil.Format(new DateTime().AddMonths(6), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month07To09:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(7), "MMM-yy") + ":" + DateUtil.Format(new DateTime().AddMonths(9), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month10To12:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(10), "MMM-yy") + ":" + DateUtil.Format(new DateTime().AddMonths(12), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month07To12:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(7), "MMM-yy") + ":" + DateUtil.Format(new DateTime().AddMonths(12), "MMM-yy"), 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month04On:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(4), "MMM-yy") + " on", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month05On:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(5), "MMM-yy") + " on", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month06On:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(6), "MMM-yy") + " on", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month07On:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(7), "MMM-yy") + " on", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmCommodity.Column.Stock_DueIn_Month13On:
SetCommodityColDfn(columnDfn, "Due " + DateUtil.Format(new DateTime().AddMonths(13), "MMM-yy") + " on", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
// Stock provisionally due in.
case SbmCommodity.Column.Stock_DueIn_Provisional:
SetCommodityColDfn(columnDfn, "Due (provisional)", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//-----------------------------------------------------------------
// Requirements.
case SbmCommodity.Column.Reqnt_AmountUnit_Earliest_ById:
SetCommodityColDfn(columnDfn, "Earliest item amount", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
break;
case SbmCommodity.Column.Reqnt_AmountUnit_Earliest_ByCode:
SetCommodityColDfn(columnDfn, "Earliest item amount", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
break;
//-----------------------------------------------------------------
// Associated data.
case SbmCommodity.Column.CommodityCustomer_Count:
SetCommodityColDfn(columnDfn, "Customer items", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.DataName = dataNameCommodityCustomerCount;
columnDfn.ReadOnly = true;
break;
case SbmCommodity.Column.CommoditySupplier_Count:
SetCommodityColDfn(columnDfn, "Supplier items", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.DataName = dataNameCommoditySupplierCount;
columnDfn.ReadOnly = true;
break;
case SbmCommodity.Column.Process_Count:
SetCommodityColDfn(columnDfn, "Processes", 50, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.DataName = dataNameProcessCount;
columnDfn.ReadOnly = true;
break;
case SbmCommodity.Column.PortfolioItem_Count:
SetCommodityColDfn(columnDfn, "Portfolio items", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = dataNamePortfolioItemCount;
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------------------
// Barcode image.
case SbmCommodity.Column.BarcodeImagePath:
SetCommodityColDfn(columnDfn, "Barcode image file", 140, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center);
break;
case SbmCommodity.Column.BarcodeImage:
SetCommodityColDfn(columnDfn, "Barcode image", 320, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center);
break;
// Common properties.
case SbmCommodity.Column.Notes:
SetCommodityColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.Commodity_Notes);
break;
case SbmCommodity.Column.Status:
SetCommodityColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Status_Desc:
SetCommodityColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Center);
break;
case SbmCommodity.Column.Status_Ind:
SetCommodityColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SbmCommodity.Column.Status_Current_Y:
case SbmCommodity.Column.Status_Current_X:
SetCommodityColDfn(columnDfn, "Current", 60, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SbmCommodity.Column.Status_Current_Tick:
SetCommodityColDfn(columnDfn, "Current", 60, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Center, DataValue.DataType.Bool);
columnDfn.BoolFormat = ColumnBoolFormat.Tick;
break;
case SbmCommodity.Column.CreateOn_Date:
SetCommodityColDfn(columnDfn, "Created", 80, SbmDbDfn.ColumnIdx.Commodity_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SbmCommodity.Column.UpdateOn_Date:
SetCommodityColDfn(columnDfn, "Updated", 80, SbmDbDfn.ColumnIdx.Commodity_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Commodity query filter.
public override List<string> GetCommodityQueryFilter(SbmCommodity.Params prm)
{
String fn = GetType().Name + ".GetCommodityQueryFilter";
List<String> filter = new List<String>();
//---------------------------------------------------------------
// Common columns.
String colCommodity_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity);
String colCommodity_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodity);
String colCommodity_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type, aliasCommodity);
String colCommodity_Code = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodity);
String colCommodity_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescBrief, aliasCommodity);
String colCommodity_DescDetail = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescDetail, aliasCommodity);
String colCommodity_SpecSummary = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SpecSummary, aliasCommodity);
String colCommodity_DrawingNo = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingNo, aliasCommodity);
String colCommodity_DrawingIssue = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, aliasCommodity);
//---------------------------------------------------------------
// Commodity Id.
String includedIds = prm.IncludedIds.Concat(",");
if (!includedIds.IsEmpty()) filter.Add(colCommodity_Id + " IN (" + includedIds + ")");
String excludedIds = prm.ExcludedIds.Concat(",");
if (!excludedIds.IsEmpty()) filter.Add(colCommodity_Id + " NOT IN (" + excludedIds + ")");
//---------------------------------------------------------------
// Organisation.
// Must filter by organisation if insufficient alternative filetrs.
if (!prm.IncludedIds.HasValidIds() && !prm.PriceSetIdsIncluded.HasValidIds() && !SysId.IsValid(prm.AssociationIdCustomer) && !SysId.IsValid(prm.AssociationIdCommodityCustomer))
{
if (!SysId.IsValid(AffiliateId_Owner)) throw new NotSupportedException("Commodity query filter - Organisation Id must be specified");
filter.Add(colCommodity_AffIdOwner + "=" + SysId.ToLong(AffiliateId_Owner));
}
//---------------------------------------------------------------
// Type.
if (prm.CommodityType == Sbm.CommodityType.AnyProduct)
filter.Add(colCommodity_Type + " In (" + ((int)Sbm.CommodityType.Stock).ToString() + "," + ((int)Sbm.CommodityType.NonStock).ToString() + ")");
else if ((int)prm.CommodityType > 0)
filter.Add(colCommodity_Type + "=" + ((int)prm.CommodityType).ToString());
if (prm.StockItemsOnly)
filter.Add(colCommodity_Type + " IN (" + ((int)Sbm.CommodityType.Stock).ToString() + ")");
//---------------------------------------------------------------
// Code.
if (!StringUtil.IsEmpty(prm.CodeFull))
filter.Add(colCommodity_Code + "='" + DbQuery.FormatForCondition(prm.CodeFull) + "'");
else if (!StringUtil.IsEmpty(prm.CodePartial))
{
if (ConfigConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityPartialCodeFilter))
filter.Add(colCommodity_Code + " LIKE '%" + DbQuery.FormatForLike(prm.CodePartial) + "%'");
else filter.Add(DbQuery.FormatFn_Left(colCommodity_Code, prm.CodePartial.Length) + "='" + DbQuery.FormatForCondition(prm.CodePartial) + "'");
}
//---------------------------------------------------------------
// Brief Desc.
bool allowEmbeddedTextSearch = true;
bool allowFullTextSearch = true;
if (!StringUtil.IsEmpty(prm.DescBriefFull))
filter.Add(colCommodity_DescBrief + "='" + DbQuery.FormatForCondition(prm.DescBriefFull) + "'");
else if (!StringUtil.IsEmpty(prm.DescBriefPartial))
{
List<String> filterDesc = new List<String>();
filterDesc.Add(DbQuery.FormatFn_Left(colCommodity_DescBrief, prm.DescBriefPartial.Length) + "='" + DbQuery.FormatForLike(prm.DescBriefPartial) + "'");
if (allowEmbeddedTextSearch)
{
filterDesc.Add(colCommodity_DescBrief + " LIKE '%" + DbQuery.FormatForLike(prm.DescBriefPartial) + "%'");
if (allowFullTextSearch)
{
// Split the description into words:
}
}
filter.Add(filterDesc.Concat(" OR ", "(", ")"));
}
//---------------------------------------------------------------
// DrawingNumber.
if (!StringUtil.IsEmpty(prm.DrawingNoFull))
{
filter.Add(colCommodity_DrawingNo + "='" + DbQuery.FormatForCondition(prm.DrawingNoFull) + "'");
}
else if (!StringUtil.IsEmpty(prm.DrawingNoPartial))
{
filter.Add(DbQuery.FormatFn_Left(colCommodity_DrawingNo, prm.DrawingNoPartial.Length) + "='" + DbQuery.FormatForCondition(prm.DrawingNoPartial) + "'");
}
// DrawingIssue.
if (!StringUtil.IsEmpty(prm.DrawingIssueFull))
filter.Add(colCommodity_DrawingIssue + "='" + DbQuery.FormatForCondition(prm.DrawingIssueFull) + "'");
else if (!StringUtil.IsEmpty(prm.DrawingIssuePartial))
filter.Add(DbQuery.FormatFn_Left(colCommodity_DrawingIssue, prm.DrawingIssuePartial.Length) + "='" + DbQuery.FormatForCondition(prm.DrawingIssuePartial) + "'");
//---------------------------------------------------------------
// Generic search.
if (!StringUtil.IsEmpty(prm.Search))
{
List<String> searchFilter = new List<string>();
foreach (String rawSearchValue in prm.Search.Split(new char[] { ' ', ',', ';' }))
{
String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue));
if (StringUtil.IsEmpty(searchValue)) continue;
List<String> searchValueFilter = new List<string>();
searchValueFilter.Add(colCommodity_Code + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colCommodity_DescBrief + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colCommodity_DescDetail + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colCommodity_SpecSummary + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colCommodity_DrawingNo + " LIKE '%" + searchValue + "%'");
searchFilter.Add(searchValueFilter.Concat(" OR ", "(", ")"));
}
filter.AddRange(searchFilter);
}
//---------------------------------------------------------------
// Catalog.
String colCommodity_CatalogRef = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CatalogRef, aliasCommodity);
if (!StringUtil.IsEmpty(prm.CatalogRefPartial))
filter.Add(DbQuery.FormatFn_Left(colCommodity_CatalogRef, prm.CatalogRefPartial.Length) + "='" + DbQuery.FormatForCondition(prm.CatalogRefPartial) + "'");
//---------------------------------------------------------------
// Category.
String categoryList = prm.Categories.Concat(",", "'", "'", true, true);
if (!StringUtil.IsEmpty(categoryList))
{
List<String> filterCategory = new List<String>();
filterCategory.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Category, aliasCommodity) + " IN(" + categoryList + ")");
if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_Category2))
filterCategory.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Category2, aliasCommodity) + " IN(" + categoryList + ")");
if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_Category3))
filterCategory.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Category3, aliasCommodity) + " IN(" + categoryList + ")");
filter.Add(filterCategory.Concat(" OR ", "(", ")"));
}
//---------------------------------------------------------------
// Coding.
String Commodity_RangeCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RangeCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.RangeCode))
filter.Add(Commodity_RangeCode + "='" + DbQuery.FormatForCondition(prm.RangeCode) + "'");
String colCommodity_ColourCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ColourCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.ColourCode))
filter.Add(colCommodity_ColourCode + "='" + DbQuery.FormatForCondition(prm.ColourCode) + "'");
String colCommodity_SourceCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SourceCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.SourceCode))
filter.Add(colCommodity_SourceCode + "='" + DbQuery.FormatForCondition(prm.SourceCode) + "'");
String colCommodity_SupplyMethodCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.SupplyMethodCode))
filter.Add(colCommodity_SupplyMethodCode + "='" + DbQuery.FormatForCondition(prm.SupplyMethodCode) + "'");
String colCommodity_HandlingCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_HandlingCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.HandlingCode))
filter.Add(colCommodity_HandlingCode + "='" + DbQuery.FormatForCondition(prm.HandlingCode) + "'");
String colCommodity_DeliveryCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DeliveryCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.DeliveryCode))
filter.Add(colCommodity_DeliveryCode + "='" + DbQuery.FormatForCondition(prm.DeliveryCode) + "'");
String colCommodity_MaterialCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.MaterialCode))
filter.Add(colCommodity_MaterialCode + "='" + DbQuery.FormatForCondition(prm.MaterialCode) + "'");
String colCommodity_FinishCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_FinishCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.FinishCode))
filter.Add(colCommodity_FinishCode + "='" + DbQuery.FormatForCondition(prm.FinishCode) + "'");
String colCommodity_PromotionCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, aliasCommodity);
if (!StringUtil.IsEmpty(prm.PromotionCode))
filter.Add(colCommodity_PromotionCode + "='" + DbQuery.FormatForCondition(prm.PromotionCode) + "'");
//---------------------------------------------------------------
// Stock level.
if (prm.StockLevelMin > decimal.MinValue || prm.StockLevelMax > decimal.MinValue)
{
// Prepare list of locations to be queried for current stock.
PopulateLocationIdLists();
List<SysId> locactionIdsStock = new List<SysId>();
if (prm.StockLocationFilter == Sbm.LocationFilter.All) locactionIdsStock = locationIds_All;
else if (prm.StockLocationFilter == Sbm.LocationFilter.Calc) locactionIdsStock = locationIds_Calc;
else if (!SysId.IsValid(prm.LocationIdStock)) locactionIdsStock = locationIds_Sales;
String stringLocactionStockId = locactionIdsStock.Concat(",");
// Query the current stock level.
String aliasStockLevel = "aCmdStkLvl";
DbQuery qryLvl = new DbQuery(db.DbmsType);
qryLvl.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasStockLevel);
qryLvl.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Quantity, aliasStockLevel) + ")");
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasStockLevel) + "=" + (int)Sbm.StockLevelType.CurrentLevel);
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasStockLevel) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
if (SysId.IsValid(prm.LocationIdStock))
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasStockLevel) + "=" + SysId.ToString(prm.LocationIdStock));
else
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasStockLevel) + " IN (" + stringLocactionStockId + ")");
qryLvl.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasStockLevel) + "='" + StatusCurrent + "'");
if (prm.StockLevelMin > decimal.MinValue)
{
filter.Add("(" + qryLvl.BuildQuery() + ") >= " + StringUtil.FormatNumeric(prm.StockLevelMin, 2));
}
if (prm.StockLevelMax > decimal.MinValue)
{
filter.Add("(" + qryLvl.BuildQuery() + ") <= " + StringUtil.FormatNumeric(prm.StockLevelMax, 2));
}
}
//---------------------------------------------------------------
// Price set.
if (prm.PriceSetIdsIncluded.HasValidIds())
{
// Restrict to commodities that belong to the specified price sets.
String aliasPrice = "aCmdPrc";
DbQuery qryPriceSet = new DbQuery(db.DbmsType);
qryPriceSet.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPrice), aliasPrice);
qryPriceSet.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaPrice_CommodityId, aliasPrice));
qryPriceSet.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaPrice_PriceSetId, aliasPrice) + " In (" + prm.PriceSetIdsIncluded.Concat(",") + ")");
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity) + " In (" + qryPriceSet.BuildQuery() + ")");
}
if (prm.PriceSetIdsExcluded.HasValidIds())
{
// Restrict to commodities that do not belong to the specified price sets.
String aliasPrice = "aCmdPrc";
DbQuery qryPriceSet = new DbQuery(db.DbmsType);
qryPriceSet.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPrice), aliasPrice);
qryPriceSet.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaPrice_CommodityId, aliasPrice));
qryPriceSet.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaPrice_PriceSetId, aliasPrice) + " Not In (" + prm.PriceSetIdsIncluded.Concat(",") + ")");
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity) + " Not In (" + qryPriceSet.BuildQuery() + ")");
}
//---------------------------------------------------------------
// Customer.
if (SysId.IsValid(prm.AssociationIdCustomer))
{
List<String> filterCustId = new List<String>();
filterCustId.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdCustomer, aliasCommodity) + "=0");
filterCustId.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdCustomer, aliasCommodity) + "=" + prm.AssociationIdCustomer.ToString());
filter.Add(filterCustId.Concat(" OR "));
}
else if (!StringUtil.IsEmpty(prm.CustomerName))
{
// Partial or complete match on customer name:
String filterAffiliate_CustomerName = "FltCustNameAff";
String filterAssociation_CustomerName = "FltCustNameAss";
// Build query to filter on customer name:
DbQuery qryCustName = new DbQuery(db.DbmsType);
qryCustName.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), filterAffiliate_CustomerName);
qryCustName.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filterAssociation_CustomerName);
qryCustName.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, filterAssociation_CustomerName));
qryCustName.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, filterAssociation_CustomerName) + "=" + Sbm.AssociationType.Customer.ToString());
qryCustName.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, filterAffiliate_CustomerName) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, filterAssociation_CustomerName));
String colAffiliate_CustomerName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, filterAffiliate_CustomerName);
qryCustName.Filters.Add(DbQuery.FormatFn_Left(colAffiliate_CustomerName, prm.CustomerName.Length) + "='" + DbQuery.FormatForCondition(prm.CustomerName) + "'");
// Add the customer name filter to the main filter list.
List<String> filterCustName = new List<String>();
filterCustName.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdCustomer, aliasCommodity) + "=0");
filterCustName.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdCustomer, aliasCommodity) + " IN (" + qryCustName.BuildQuery() + ")");
filter.Add(filterCustName.Concat(" OR "));
}
//---------------------------------------------------------------
// Supplier.
if (!StringUtil.IsEmpty(prm.SupplierName))
{
// Partial or complete match on Supplier name.
String filterAffiliate_SupplierName = "FltSuppNameAff";
String filterAssocation_SupplierName = "FltSuppNameAss";
// Build query to filter on Supplier name.
DbQuery qrySuppName = new DbQuery(db.DbmsType);
qrySuppName.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), filterAffiliate_SupplierName);
qrySuppName.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), filterAssocation_SupplierName);
qrySuppName.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, filterAssocation_SupplierName));
qrySuppName.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, filterAssocation_SupplierName) + "=" + Sbm.AssociationType.Supplier.ToString());
qrySuppName.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, filterAffiliate_SupplierName) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, filterAssocation_SupplierName));
String colAffiliate_SupplierName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, filterAffiliate_SupplierName);
qrySuppName.Filters.Add(DbQuery.FormatFn_Left(colAffiliate_SupplierName, prm.SupplierName.Length) + "='" + DbQuery.FormatForCondition(prm.SupplierName) + "'");
// Add the Supplier name filter to the main filter list.
List<String> filterSupplierName = new List<String>();
filterSupplierName.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdSupplier, aliasCommodity) + "=0");
filterSupplierName.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdSupplier, aliasCommodity) + " IN (" + qrySuppName.BuildQuery() + ")");
filter.Add(filterSupplierName.Concat(" OR "));
}
//---------------------------------------------------------------
// Transaction.
bool linkRequirement = false;
bool linkTransaction = !StringUtil.IsEmpty(prm.OrderRef);
if (linkRequirement || linkTransaction)
{
String aliasCommodity_Transaction = "aCmdTrn";
String aliasCommodity_Requirement = "aCmdReq";
DbQuery qryReqnt = new DbQuery(db.DbmsType);
qryReqnt.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasCommodity_Requirement));
qryReqnt.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasCommodity_Requirement));
qryReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AffIdOwner, aliasCommodity_Requirement) + "=" + AffiliateId_Owner.ToString());
qryReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasCommodity_Requirement) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
if (linkTransaction)
{
qryReqnt.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasCommodity_Transaction));
qryReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasCommodity_Requirement) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasCommodity_Transaction));
qryReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasCommodity_Transaction) + "=" + Sbm.TransactionType.SalesOrder.ToString());
if (!StringUtil.IsEmpty(prm.OrderRef))
qryReqnt.Filters.Add(DbQuery.FormatFn_Left(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Ref, aliasCommodity_Transaction), prm.OrderRef.Length) + "='" + DbQuery.FormatForCondition(prm.OrderRef) + "'");
}
filter.Add("EXISTS(" + qryReqnt.BuildQuery() + ")");
}
//---------------------------------------------------------------
// Commodities defined by Customer.
if (SysId.IsValid(prm.AssociationIdCommodityCustomer) || !StringUtil.IsEmpty(prm.AccountCodeCommodityCustomer))
{
if (CanManageCommodityCustomers())
{
DbQuery qryCmdCust = new DbQuery(db.DbmsType);
qryCmdCust.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer), aliasCommodity_CmdCustomer));
qryCmdCust.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId, aliasCommodity_CmdCustomer));
if (SysId.IsValid(prm.AssociationIdCommodityCustomer))
{
qryCmdCust.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_AssocIdCustomer, aliasCommodity_CmdCustomer) + "=" + prm.AssociationIdCommodityCustomer.ToString());
}
if (!StringUtil.IsEmpty(prm.AccountCodeCommodityCustomer))
{
// To match the customer account code, must also join to the association table:
String aliasCommodity_CmdCustAssoc = "aCmdCmdCustAss";
DbQueryJoin joinCmdCustAssoc = new DbQueryJoin(DbJoinType.Inner);
joinCmdCustAssoc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasCommodity_CmdCustAssoc);
joinCmdCustAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasCommodity_CmdCustAssoc) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_AssocIdCustomer, aliasCommodity_CmdCustomer));
joinCmdCustAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Code, aliasCommodity_CmdCustAssoc) + "='" + DbQuery.FormatForCondition(prm.AccountCodeCommodityCustomer) + "'");
qryCmdCust.Joins.Add(joinCmdCustAssoc);
}
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity) + " IN (" + qryCmdCust.BuildQuery() + ")");
}
else SaLogger.Error(fn + " CmdCust filter specified and CmdCust management not allowed");
}
//---------------------------------------------------------------
// Status.
String colCommodity_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Status, aliasCommodity);
if (prm.StatusCat == SbmCommodity.StatusCat.NotDeleted)
filter.Add(colCommodity_Status + "<>'" + StatusDeleted + "'");
else if (prm.StatusCat == SbmCommodity.StatusCat.Current)
filter.Add(colCommodity_Status + "='" + StatusCurrent + "'");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
//-------------------------------------------------------------------
// Commodity sort columns.
public List<String> GetCommoditySortColumns(SbmCommodity.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Commodity columns in case of conflict.
String sortCol = String.Empty;
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.Commodity)
{
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasCommodity);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodity) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Commodity count.
private long GetCommodityCount(String filter)
{
ClearErrorState();
return db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity) + " As " + aliasCommodity, filter);
}
public override long GetCommodityCount(SbmCommodity.Params prm)
{
ClearErrorState();
return GetCommodityCount(GetCommodityQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Commodity list.
public override List<SbmCommodity> GetCommodityList(SbmCommodity.Params prm)
{
List<SbmCommodity> Commodities = new List<SbmCommodity>();
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasCommodity);
Commodity_Db dbCommodity = new Commodity_Db(DbInfo);
qry.Columns.AddRange(dbCommodity.ExistingColumnNames);
qry.Filters.AddRange(GetCommodityQueryFilter(prm));
qry.OrderBy.AddRange(GetCommoditySortColumns(prm));
// Query data.
using (var dbConnection = db.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbCommodity = new Commodity_Db(DbInfo);
dbCommodity.PopulateFrom(dbDataReader);
Commodities.Add(CreateCommodity(dbCommodity));
}
}
}
catch (Exception exc)
{
SaLogger.Warn(GetType().Name + ".GetCommodityList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message);
}
}
return Commodities;
}
//-------------------------------------------------------------------
// Commodity query execution.
public override DbResultSet ExecuteCommodityQuery(List<ColumnDfn> columns, SbmCommodity.Params prm)
{
ClearErrorState();
DbQuery query = CompileCommodityQuery(columns, prm);
return DbResultSet_DataReader.ExecuteQuery(db, query.BuildQuery(prm.ResultsPaging));
}
public override async Task<DbResultSet> ExecuteCommodityQueryAsync(List<ColumnDfn> columns, SbmCommodity.Params prm)
{
ClearErrorState();
DbQuery query = CompileCommodityQuery(columns, prm);
return await DbResultSet_DataReader.ExecuteQueryAsync(db, query.BuildQuery(prm.ResultsPaging)) as DbResultSet;
}
private DbQuery CompileCommodityQuery(List<ColumnDfn> columns, SbmCommodity.Params prm)
{
ClearErrorState();
PopulateLocationIdLists();
bool canViewSupplyFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySupply);
bool canViewSalesFinancials = UserContext.SecurityProfile.UserCanViewFinancials(Sbm.FinancialType.CommoditySales);
//---------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(db.DbmsType);
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasCommodity);
// Stock locations.
SysId locationStockId = null;
List<SysId> locationStockIds = new List<SysId>();
if (prm.StockLocationFilter == Sbm.LocationFilter.All)
locationStockIds = locationIds_All;
else if (prm.StockLocationFilter == Sbm.LocationFilter.Calc)
locationStockIds = locationIds_Calc;
else if (SysId.IsValid(locationStockId))
locationStockIds.Add(locationStockId);
else
locationStockIds = locationIds_Sales;
String stringLocactionStockId = locationStockIds.Concat(",");
//---------------------------------------------------------------
// Commodity Properties - add columns as defined in query list.
if (columns.HasId(SbmCommodity.Column.Id))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Type) || columns.HasId(SbmCommodity.Column.Type_Code) || columns.HasId(SbmCommodity.Column.Type_Desc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Code)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.DescBrief)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescBrief, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.DescDetail)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescDetail, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.DrawingNo)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingNo, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.DrawingIssue)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ImagePath) || columns.HasId(SbmCommodity.Column.Image)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ImagePath, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Category1Code) || columns.HasId(SbmCommodity.Column.Category1_Desc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Category, aliasCommodity));
if ((columns.HasId(SbmCommodity.Column.Category2Code) || columns.HasId(SbmCommodity.Column.Category2_Desc)) && ColumnExists(SbmDbDfn.ColumnIdx.Commodity_Category2))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Category2, aliasCommodity));
if ((columns.HasId(SbmCommodity.Column.Category3Code) || columns.HasId(SbmCommodity.Column.Category3_Desc)) && ColumnExists(SbmDbDfn.ColumnIdx.Commodity_Category3))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Category3, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Location)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Location, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Department)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Department, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.CatalogRef)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CatalogRef, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Weight) || columns.HasId(SbmCommodity.Column.Weight_ValueUnits)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Weight, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Weight_UomId) || columns.HasId(SbmCommodity.Column.Weight_Unit) || columns.HasId(SbmCommodity.Column.Weight_ValueUnits))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UomIdWeight, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Length) || columns.HasId(SbmCommodity.Column.Length_ValueUnits)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Length, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Length_UomId) || columns.HasId(SbmCommodity.Column.Length_Unit) || columns.HasId(SbmCommodity.Column.Length_ValueUnits))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UomIdLength, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Volume) || columns.HasId(SbmCommodity.Column.Volume_ValueUnits)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Volume, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Volume_UomId) || columns.HasId(SbmCommodity.Column.Volume_Unit) || columns.HasId(SbmCommodity.Column.Volume_ValueUnits))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UomIdVolume, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Density) || columns.HasId(SbmCommodity.Column.Density_ValueUnits)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Density, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Density_UomId) || columns.HasId(SbmCommodity.Column.Density_Unit) || columns.HasId(SbmCommodity.Column.Density_ValueUnits))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UomIdDensity, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.BoxQuantity) || columns.HasId(SbmCommodity.Column.BoxQuantity_ValueUnits)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_BoxQuantity, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.BoxQuantity_UomId) || columns.HasId(SbmCommodity.Column.BoxQuantity_Unit) || columns.HasId(SbmCommodity.Column.BoxQuantity_ValueUnits))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UomIdBox, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Dimensions)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Dimensions, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SpecSummary)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SpecSummary, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ICNTariffCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.RangeCode) || columns.HasId(SbmCommodity.Column.RangeDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RangeCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ColourCode) || columns.HasId(SbmCommodity.Column.ColourDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ColourCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SourceCode) || columns.HasId(SbmCommodity.Column.SourceDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SourceCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SupplyMethodCode) || columns.HasId(SbmCommodity.Column.SupplyMethodDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.HandlingCode) || columns.HasId(SbmCommodity.Column.HandlingDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_HandlingCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.DeliveryCode) || columns.HasId(SbmCommodity.Column.DeliveryDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DeliveryCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.MaterialCode) || columns.HasId(SbmCommodity.Column.MaterialDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.FinishCode) || columns.HasId(SbmCommodity.Column.FinishDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_FinishCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.PromotionCode) || columns.HasId(SbmCommodity.Column.PromotionDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.NominalCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_NominalCode, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.NominalCodePurchase)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_NominalCodePurchase, aliasCommodity));
//---------------------------------------------------------------
// Currency (to come).
if ((canViewSupplyFinancials && (columns.HasId(SbmCommodity.Column.CostPrice_Fmt))) ||
(canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.SalesPrice_Fmt) || columns.HasId(SbmCommodity.Column.RetailPrice_Fmt) || columns.HasId(SbmCommodity.Column.RetailPricePlanned_Fmt) || columns.HasId(SbmCommodity.Column.GrossPrice_Fmt) || columns.HasId(SbmCommodity.Column.CarriageCostIndicative_Fmt))))
{
}
//---------------------------------------------------------------
// Purchasing.
if (columns.HasId(SbmCommodity.Column.Supplier_Ref)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SupplierRef, aliasCommodity));
if (canViewSupplyFinancials && (columns.HasId(SbmCommodity.Column.CostPrice) ||
columns.HasId(SbmCommodity.Column.CostPrice_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CostPrice, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.PlaceOfOrigin)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.MaterialCost) || columns.HasId(SbmCommodity.Column.MaterialCost_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.MaterialCost_Fmt) ||
columns.HasId(SbmCommodity.Column.MaterialCurrencyId) ||
columns.HasId(SbmCommodity.Column.MaterialCurrency_Code) ||
columns.HasId(SbmCommodity.Column.MaterialCurrency_Symbol)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ExWorksCost) || columns.HasId(SbmCommodity.Column.ExWorksCost_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ExWorksCost_Fmt) ||
columns.HasId(SbmCommodity.Column.ExWorksCurrencyId) ||
columns.HasId(SbmCommodity.Column.ExWorksCurrency_Code) ||
columns.HasId(SbmCommodity.Column.ExWorksCurrency_Symbol)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ReorderLevel)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ReorderLevel, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.ReorderQty)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_ReorderQty, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.QtyOnOrder)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_QtyOnOrder, aliasCommodity));
//---------------------------------------------------------------
// Sales.
if (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.SalesPrice) ||
columns.HasId(SbmCommodity.Column.SalesPrice_Fmt) ||
columns.HasId(SbmCommodity.Column.GrossPrice) || columns.HasId(SbmCommodity.Column.GrossPrice_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, aliasCommodity));
if (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.RetailPrice) ||
columns.HasId(SbmCommodity.Column.RetailPrice_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RetailPrice, aliasCommodity));
if (canViewSalesFinancials && (columns.HasId(SbmCommodity.Column.RetailPricePlanned) ||
columns.HasId(SbmCommodity.Column.RetailPricePlanned_Fmt))) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.CarriageCostIndicative) ||
columns.HasId(SbmCommodity.Column.CarriageCostIndicative_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.MinOrderQty)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_MinOrderQty, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.PackQtySale)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_PackQty, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.LastOrderDate)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_LastOrderDate, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.LastOrderQty)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_LastOrderQty, aliasCommodity));
//---------------------------------------------------------------
// Sales budget.
if (columns.HasId(SbmCommodity.Column.SalesProj_Annual)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjAnnual, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Jan) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth01, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Feb) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth02, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Mar) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth03, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Apr) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth04, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_May) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth05, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Jun) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth06, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Jul) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth07, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Aug) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth08, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Sep) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth09, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Oct) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth10, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Nov) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth11, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.SalesProj_Dec) || columns.HasId(SbmCommodity.Column.SalesProj_Period)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesProjMonth12, aliasCommodity));
// Stock.
if (columns.HasId(SbmCommodity.Column.QtyInStock)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_QtyInStock, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.QtyAllocated)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_QtyAllocated, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.FreeStock)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_FreeStock, aliasCommodity));
// Common Properties
if (columns.HasId(SbmCommodity.Column.Notes))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Notes, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.Status) || columns.HasId(SbmCommodity.Column.Status_Desc) || columns.HasId(SbmCommodity.Column.Status_Ind) || columns.HasId(SbmCommodity.Column.Status_Current_Y) || columns.HasId(SbmCommodity.Column.Status_Current_X) || columns.HasId(SbmCommodity.Column.Status_Current_Tick))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Status, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.CreateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CreateOn, aliasCommodity));
if (columns.HasId(SbmCommodity.Column.UpdateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UpdateOn, aliasCommodity));
//---------------------------------------------------------------
// Supplier.
bool hasSupplierName = columns.HasId(SbmCommodity.Column.Supplier_Name);
if (hasSupplierName)
{
// Join to the association (owner) table.
DbQueryJoin joinAssSupplier = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssSupplier.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasCommodity_AssocationSupplier);
joinAssSupplier.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasCommodity_AssocationSupplier) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdSupplier, aliasCommodity));
query.Joins.Add(joinAssSupplier);
// Join to the affiliate (Supplier) table.
DbQueryJoin joinAffSupplier = new DbQueryJoin(DbJoinType.LeftOuter);
joinAffSupplier.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasCommodity_AffiliateSupplier);
joinAffSupplier.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasCommodity_AffiliateSupplier) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasCommodity_AssocationSupplier));
query.Joins.Add(joinAffSupplier);
// Supplier Affiliate columns.
List<SbmDbDfn.ColumnIdx> cmdSupplierAffiliateCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.Affiliate_Name
};
foreach (SbmDbDfn.ColumnIdx dbColumn in cmdSupplierAffiliateCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommodity_AffiliateSupplier), prefixCommodity_AffiliateSupplier + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// Customer.
bool hasCustomerName = columns.HasId(SbmCommodity.Column.Customer_Name);
if (hasCustomerName)
{
// Join to the association (owner table).
DbQueryJoin joinAssCustomer = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssCustomer.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasCommodity_AssocationCustomer);
joinAssCustomer.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasCommodity_AssocationCustomer) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AssIdCustomer, aliasCommodity));
query.Joins.Add(joinAssCustomer);
// Join to the affiliate (customer) table.
DbQueryJoin joinAffCustomer = new DbQueryJoin(DbJoinType.LeftOuter);
joinAffCustomer.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasCommodity_AffiliateCustomer);
joinAffCustomer.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasCommodity_AffiliateCustomer) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasCommodity_AssocationCustomer));
query.Joins.Add(joinAffCustomer);
// Customer Affiliate columns.
List<SbmDbDfn.ColumnIdx> cmdCustomerAffiliateCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.Affiliate_Name
};
foreach (SbmDbDfn.ColumnIdx dbColumn in cmdCustomerAffiliateCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommodity_AffiliateCustomer), prefixCommodity_AffiliateCustomer + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// Customer definition.
if (CanManageCommodityCustomers())
{
bool hasCmdCustField = false;
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_ProductCode);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_AmountRetail);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_AmountRetail_Fmt);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_CurrencyIdRetail);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_CurrencyIdRetail_Code);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_CurrencyIdRetail_Symbol);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_PromotionCode);
if (!hasCmdCustField) hasCmdCustField = columns.HasId(SbmCommodity.Column.Cust_PromotionDesc);
if (hasCmdCustField && (SysId.IsValid(prm.AssociationIdCommodityCustomer) || !StringUtil.IsEmpty(prm.AccountCodeCommodityCustomer)))
{
// Join to the commodity customer.
DbQueryJoin joinCmdCust = new DbQueryJoin(DbJoinType.LeftOuter);
joinCmdCust.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer), aliasCommodity_CmdCustomer);
joinCmdCust.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId, aliasCommodity_CmdCustomer) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
if (SysId.IsValid(prm.AssociationIdCommodityCustomer))
{
// Filter by the Customer's association Id.
joinCmdCust.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_AssocIdCustomer, aliasCommodity_CmdCustomer) + "=" + prm.AssociationIdCommodityCustomer.ToString());
}
query.Joins.Add(joinCmdCust);
if (!StringUtil.IsEmpty(prm.AccountCodeCommodityCustomer))
{
// Join to the Association to filter by the Customer's account code.
}
// Add the CmdCust columns.
List<SbmDbDfn.ColumnIdx> cmdCustCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.CommodityCustomer_ProductCode,
SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail,
SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail,
SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode
};
foreach (SbmDbDfn.ColumnIdx dbColumn in cmdCustCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommodity_CmdCustomer), prefixCommodity_CmdCustomer + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
//---------------------------------------------------------------
// Uom Sale.
if (columns.HasId(SbmCommodity.Column.UnitOfSale))
{
// Join to the Unit of Measure table:
DbQueryJoin joinUom = new DbQueryJoin(DbJoinType.LeftOuter);
joinUom.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.UnitMeasure), aliasCommodity_UomSale);
joinUom.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.UnitMeasure_Id, aliasCommodity_UomSale) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_UomIdSale, aliasCommodity));
query.Joins.Add(joinUom);
// Add the UomSales columns.
List<SbmDbDfn.ColumnIdx> uomSalesCols = new List<SbmDbDfn.ColumnIdx>()
{
SbmDbDfn.ColumnIdx.UnitMeasure_Single
};
foreach (SbmDbDfn.ColumnIdx dbColumn in uomSalesCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommodity_UomSale), prefixCommodity_UomSale + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// Material Currency.
if (columns.HasId(SbmCommodity.Column.MaterialCost_Fmt) ||
columns.HasId(SbmCommodity.Column.MaterialCurrency_Code) ||
columns.HasId(SbmCommodity.Column.MaterialCurrency_Symbol))
{
// Join to the Currency table.
DbQueryJoin joinCur = new DbQueryJoin(DbJoinType.LeftOuter);
joinCur.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Currency), aliasCommodity_CurrencyMaterial);
joinCur.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Currency_Id, aliasCommodity_CurrencyMaterial) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, aliasCommodity));
query.Joins.Add(joinCur);
// Add the Currency columns.
List<SbmDbDfn.ColumnIdx> currencyMaterialCols = new List<SbmDbDfn.ColumnIdx>();
currencyMaterialCols.Add(SbmDbDfn.ColumnIdx.Currency_Code);
currencyMaterialCols.Add(SbmDbDfn.ColumnIdx.Currency_Name);
currencyMaterialCols.Add(SbmDbDfn.ColumnIdx.Currency_Symbol);
currencyMaterialCols.Add(SbmDbDfn.ColumnIdx.Currency_Suffix);
foreach (SbmDbDfn.ColumnIdx dbColumn in currencyMaterialCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommodity_CurrencyMaterial), prefixCommodity_CurrencyMaterial + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// ExWorks currency.
if (columns.HasId(SbmCommodity.Column.ExWorksCost_Fmt) ||
columns.HasId(SbmCommodity.Column.ExWorksCurrency_Code) ||
columns.HasId(SbmCommodity.Column.ExWorksCurrency_Symbol))
{
// Join to the Currency table.
DbQueryJoin joinCur = new DbQueryJoin(DbJoinType.LeftOuter);
joinCur.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Currency), aliasCommodity_CurrencyExWorks);
joinCur.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Currency_Id, aliasCommodity_CurrencyExWorks) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks, aliasCommodity));
query.Joins.Add(joinCur);
// Add the Currency columns.
List<SbmDbDfn.ColumnIdx> currencyExWorksCols = new List<SbmDbDfn.ColumnIdx>();
currencyExWorksCols.Add(SbmDbDfn.ColumnIdx.Currency_Code);
currencyExWorksCols.Add(SbmDbDfn.ColumnIdx.Currency_Name);
currencyExWorksCols.Add(SbmDbDfn.ColumnIdx.Currency_Symbol);
currencyExWorksCols.Add(SbmDbDfn.ColumnIdx.Currency_Suffix);
foreach (SbmDbDfn.ColumnIdx dbColumn in currencyExWorksCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommodity_CurrencyExWorks), prefixCommodity_CurrencyExWorks + SbmDbDfn.GetColumnName(dbColumn, false));
}
//---------------------------------------------------------------
// Tax code.
if (columns.HasId(SbmCommodity.Column.TaxCode) || columns.HasId(SbmCommodity.Column.TaxRate) || columns.HasId(SbmCommodity.Column.GrossPrice))
{
// Join to the Tax Code table.
DbQueryJoin joinTxc = new DbQueryJoin(DbJoinType.LeftOuter);
joinTxc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.TaxCode), aliasCommodity_TaxCode_Sale);
joinTxc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Id, aliasCommodity_TaxCode_Sale) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_TaxCodeId, aliasCommodity));
query.Joins.Add(joinTxc);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Code, aliasCommodity_TaxCode_Sale), prefixCommodity_TaxCode_Sale + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.TaxCode_Code, false));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, aliasCommodity_TaxCode_Sale), prefixCommodity_TaxCode_Sale + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, false));
}
if (canViewSalesFinancials && columns.HasId(SbmCommodity.Column.GrossPrice))
{
// Calculate RRP: SalesPrice + TaxRate%
String colCommodity_SalesPrice = "(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, aliasCommodity) + "*(1.0+(" + prefixCommodity_TaxCode_Sale + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, false) + "/100.0)))";
query.Columns.Add(colCommodity_SalesPrice, dataNameGrossPrice);
}
//---------------------------------------------------------------
// Last stock take.
if (columns.HasId(SbmCommodity.Column.StockTake_Date))
{
SysId locationIdSales = UserContext.GetOwnerOption_StockLocation(Sbm.OrgOption_StockLocation.SalesOrderDefault);
if (SysId.IsValid(locationStockId)) locationIdSales = locationStockId;
if (SysId.IsValid(locationIdSales))
{
// Join to the stock movements to identify the most recent stock take at the default sales location.
String aliasCommodity_LastStockTake = "aCmdLST";
DbQuery qryStTk = new DbQuery(db.DbmsType);
qryStTk.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasCommodity_LastStockTake);
qryStTk.Columns.Add("MAX(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Recorded, aliasCommodity_LastStockTake) + ")");
qryStTk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasCommodity_LastStockTake) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
qryStTk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasCommodity_LastStockTake) + "=" + locationIdSales.ToString());
qryStTk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasCommodity_LastStockTake) + "=" + ((int)Sbm.StockLevelType.StockTake).ToString());
qryStTk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasCommodity_LastStockTake) + "='" + StatusCompleted + "'");
query.Columns.Add("(" + qryStTk.BuildQuery() + ")", dataNameLastStockTake);
}
}
//---------------------------------------------------------------
// Sales.
if (columns.HasId(SbmCommodity.Column.SalesYtdCalendar))
{
// Current calendar year.
DateTime earliest = new DateTime(DateTime.Today.Year, 1, 1);
DateTime latest = DateTime.MinValue;
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_YtdCalendar);
//if (DebugMode) SaLogger.Trace("BuildSalesQuantityQuery: " + BuildSalesQuantityQuery(earliest, latest, false, null));
}
if (columns.HasId(SbmCommodity.Column.SalesPyCalendar))
{
// Previous calendar year.
DateTime earliest = new DateTime(DateTime.Today.Year, 1, 1);
DateTime latest = new DateTime(DateTime.Today.Year - 1, 12, 31);
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_PyCalendar);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthCurrent))
{
// Sales - current month.
DateTime earliest = DateTime.Today.StartOfMonth();
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_MthCurrent);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast01))
{
// Sales - part month 1:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-1);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth01);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast02))
{
// Sales - part month 2:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-2);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth02);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast03))
{
// Sales - part month 3:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-3);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth03);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast04))
{
// Sales - part month 4:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-4);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth04);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast05))
{
// Sales - part month 5:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-5);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth05);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast06))
{
// Sales - part month 6:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-6);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth06);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast07))
{
// Sales - part month 7:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-7);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth07);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast08))
{
// Sales - part month 8:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-8);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth08);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast09))
{
// Sales - part month 9:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-9);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth09);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast10))
{
// Sales - part month 10:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-10);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth10);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast11))
{
// Sales - part month 11:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-11);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth11);
}
if (columns.HasId(SbmCommodity.Column.SalesMonthPast12))
{
// Sales - part month 12:
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(-12);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add("(" + BuildSalesQuantityQuery(earliest, latest, false, null) + ")", dataNameSales_Mth12);
}
if (columns.HasId(SbmCommodity.Column.StockSold_Period))
{
// Stock sold during specified period.
query.Columns.Add("(" + BuildSalesQuantityQuery(prm.StockSoldFrom, prm.StockSoldTo, false, null) + ")", dataNameStockSold_Period);
}
//---------------------------------------------------------------
// Allocated stock.
if ((columns.HasId(SbmCommodity.Column.Stock_Allocated) || columns.HasId(SbmCommodity.Column.Stock_Available) || columns.HasId(SbmCommodity.Column.Stock_Available_MinZero)) && locationStockIds.Count > 0)
{
query.Columns.Add("(" + BuildAllocatedStockQuery(locationStockIds) + ")", dataNameStkLvl_Allocated);
}
if ((columns.HasId(SbmCommodity.Column.Stock_Allocated_Sales) || columns.HasId(SbmCommodity.Column.Stock_Available_Sales) || columns.HasId(SbmCommodity.Column.Stock_Available_Sales_MinZero)) && locationIds_Sales.Count > 0)
{
query.Columns.Add("(" + BuildAllocatedStockQuery(locationIds_Sales) + ")", dataNameStkLvl_Allocated_Sales);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Calc) && locationIds_Calc.Count > 0)
{
query.Columns.Add("(" + BuildAllocatedStockQuery(locationIds_Calc) + ")", dataNameStkLvl_Allocated_Calc);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_All) && locationIds_All.Count > 0)
{
query.Columns.Add("(" + BuildAllocatedStockQuery(locationIds_All) + ")", dataNameStkLvl_Allocated_All);
}
//---------------------------------------------------------------
// Current stock level.
if ((columns.HasId(SbmCommodity.Column.Stock_CurrentLevel) || columns.HasId(SbmCommodity.Column.Stock_ImminentLevel) || columns.HasId(SbmCommodity.Column.Stock_Available) || columns.HasId(SbmCommodity.Column.Stock_Available_Sales)) && locationStockIds.Count > 0)
{
query.Columns.Add("(" + BuildCurrentStockQuery(locationStockIds) + ")", dataNameStkLvl_Current);
}
if ((columns.HasId(SbmCommodity.Column.Stock_CurrentLevel_Sales) || columns.HasId(SbmCommodity.Column.Stock_Available_Sales) || columns.HasId(SbmCommodity.Column.Stock_Available_Sales_MinZero)) && locationIds_Sales.Count > 0)
{
query.Columns.Add("(" + BuildCurrentStockQuery(locationIds_Sales) + ")", dataNameStkLvl_Current_Sales);
}
if (columns.HasId(SbmCommodity.Column.Stock_CurrentLevel_Calc) && locationIds_Calc.Count > 0)
{
query.Columns.Add("(" + BuildCurrentStockQuery(locationIds_Calc) + ")", dataNameStkLvl_Current_Calc);
}
if (columns.HasId(SbmCommodity.Column.Stock_CurrentLevel_All) && locationIds_All.Count > 0)
{
query.Columns.Add("(" + BuildCurrentStockQuery(locationIds_All) + ")", dataNameStkLvl_Current_All);
}
//---------------------------------------------------------------
// Stock bays.
if (columns.HasId(SbmCommodity.Column.Stock_Bays))
{
// Join to current stock level for the specified location to retrieve the bays.
String aliasCommodity_StockBays = "aCmdStkBays";
DbQueryJoin joinStkBay = new DbQueryJoin(DbJoinType.LeftOuter);
String sTblStkBays =
(String)"(Select CommodityId, Min(IsNull(Bay1,'')+','+IsNull(Bay2,'')+','+IsNull(Bay3,'')) 'Bays' " +
"From StockLevel " +
"Where Type=10 And Status='CUR' And Len(Bay1)>0 " + // Type.eSapStockLevelType_CurrentLevel=10
(SysId.IsValid(prm.LocationIdStock) ? " And LocationId=" + prm.LocationIdStock.ToString() + " " : "") +
"Group By CommodityId)";
joinStkBay.Table = new StringPair(sTblStkBays, aliasCommodity_StockBays);
joinStkBay.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasCommodity_StockBays) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
query.Columns.Add(aliasCommodity_StockBays + ".Bays", dataNameStkLvl_Bays);
query.Joins.Add(joinStkBay);
}
if ((columns.HasId(SbmCommodity.Column.Stock_Bay1) || columns.HasId(SbmCommodity.Column.Stock_Bay2) || columns.HasId(SbmCommodity.Column.Stock_Bay3)) && SysId.IsValid(prm.LocationIdStock))
{
// Join to current stock level for the specified location to retrieve the bays.
String aliasCommodity_StkBay = "aCmdStkBay";
DbQueryJoin joinStkBay = new DbQueryJoin(DbJoinType.LeftOuter);
joinStkBay.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasCommodity_StkBay);
joinStkBay.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasCommodity_StkBay) + "=" + Sbm.StockLevelType.CurrentLevel.ToString());
joinStkBay.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasCommodity_StkBay) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
joinStkBay.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasCommodity_StkBay) + "=" + prm.LocationIdStock.ToString());
joinStkBay.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasCommodity_StkBay) + "='" + StatusCurrent + "'");
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Bay1, aliasCommodity_StkBay), dataNameStkLvl_Bay1);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Bay2, aliasCommodity_StkBay), dataNameStkLvl_Bay2);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Bay3, aliasCommodity_StkBay), dataNameStkLvl_Bay3);
query.Joins.Add(joinStkBay);
}
//---------------------------------------------------------------
// Stock Due - Commodity and Container movements.
bool bHasStockNextDueCols =
(columns.HasId(SbmCommodity.Column.Stock_NextDue_Date) ||
columns.HasId(SbmCommodity.Column.Stock_NextDue_Quantity));
bool bHasCmdStockNextDueCols =
(columns.HasId(SbmCommodity.Column.Stock_NextDue_Commodity_Date) ||
columns.HasId(SbmCommodity.Column.Stock_NextDue_Commodity_Quantity));
bool bHasContStockNextDueCols =
(columns.HasId(SbmCommodity.Column.Stock_NextDue_Container_Date) ||
columns.HasId(SbmCommodity.Column.Stock_NextDue_Container_Quantity));
if ((bHasStockNextDueCols || bHasCmdStockNextDueCols) && (SysId.IsValid(locationStockId) || !stringLocactionStockId.IsEmpty()))
{
// When is the next commodity stock movement due and the associated quantity:
String aliasCommodity_StockCommodity = "aCmdStkCmd";
String aliasCommodity_StockCommodityDate = "aCmdStkCmdDate";
// Sub query form join to consolidate commodity movements by date:
DbQuery qryStkCmd = new DbQuery(db.DbmsType);
qryStkCmd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), aliasCommodity_StockCommodity);
qryStkCmd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StockCommodity));
qryStkCmd.Columns.Add("Min(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockCommodity) + ")", dataNameStkDue_NextCmdStkDate);
qryStkCmd.GroupBy.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StockCommodity));
qryStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemType, aliasCommodity_StockCommodity) + "=" + ((int)Sbm.ItemType.Commodity).ToString());
qryStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Type, aliasCommodity_StockCommodity) + "=" + ((int)Sbm.MovementType.StockTransfer).ToString());
if (SysId.IsValid(locationStockId))
qryStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdTo, aliasCommodity_StockCommodity) + "=" + locationStockId.ToString());
else
{
qryStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdTo, aliasCommodity_StockCommodity) + " IN (" + stringLocactionStockId + ")");
qryStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdFrom, aliasCommodity_StockCommodity) + " NOT IN (" + stringLocactionStockId + ")");
}
qryStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Status, aliasCommodity_StockCommodity) + "='" + StatusAwaiting + "'");
// Join main query to the commodity movements to get earliest expected movement date:
DbQueryJoin joinStkCmd = new DbQueryJoin(DbJoinType.LeftOuter);
joinStkCmd.Table = new StringPair("(" + qryStkCmd.BuildQuery() + ")", aliasCommodity_StockCommodityDate);
joinStkCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StockCommodityDate) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
query.Joins.Add(joinStkCmd);
query.Columns.Add(aliasCommodity_StockCommodityDate + "." + dataNameStkDue_NextCmdStkDate, dataNameStkDue_NextCmdStkDate);
if (columns.HasId(SbmCommodity.Column.Stock_NextDue_Quantity) || columns.HasId(SbmCommodity.Column.Stock_NextDue_Commodity_Quantity))
{
// Join to the commodity movements again and restrict to the date identified above.
String aliasCommodity_StkCmdQty = "aStkCmdQty";
// Start with the same sub-query as above, but group by movement date as well as commodity Id and sum the quantities.
qryStkCmd.Columns.Clear();
qryStkCmd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StockCommodity));
qryStkCmd.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockCommodity));
qryStkCmd.Columns.Add("Sum(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Quantity, aliasCommodity_StockCommodity) + ")", dataNameStkDue_NextCmdStkQty);
qryStkCmd.GroupBy.Clear();
qryStkCmd.GroupBy.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StockCommodity));
qryStkCmd.GroupBy.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockCommodity));
// Join main query to the commodity movements to get quantity for earliest expected movement date:
DbQueryJoin joinStkCmdQty = new DbQueryJoin(DbJoinType.LeftOuter);
joinStkCmdQty.Table = new StringPair("(" + qryStkCmd.BuildQuery() + ")", aliasCommodity_StkCmdQty);
joinStkCmdQty.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StkCmdQty) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id));
joinStkCmdQty.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StkCmdQty) + "=" + aliasCommodity_StockCommodityDate + "." + dataNameStkDue_NextCmdStkDate);
query.Joins.Add(joinStkCmdQty);
query.Columns.Add(aliasCommodity_StkCmdQty + "." + dataNameStkDue_NextCmdStkQty, dataNameStkDue_NextCmdStkQty);
}
}
if (StockControlConfig.AllowStockContainers() && db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container)) && (bHasStockNextDueCols || bHasContStockNextDueCols) && (SysId.IsValid(locationStockId) || !stringLocactionStockId.IsEmpty()))
{
// When is the next container stock movement due that includes this commodity.
// Sub query form join to consolidate commodity movements by date:
String aliasCommodity_StockContainer_Movement = "aStkCntMov";
String aliasCommodity_StockContainer_Container = "aStkCntCnt";
String aliasCommodity_StkCntCit = "aStkCntCit";
DbQuery qryStkCnt = new DbQuery(db.DbmsType);
qryStkCnt.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), aliasCommodity_StockContainer_Movement);
qryStkCnt.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container), aliasCommodity_StockContainer_Container);
qryStkCnt.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem), aliasCommodity_StkCntCit);
qryStkCnt.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasCommodity_StkCntCit));
qryStkCnt.Columns.Add("MIN(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockContainer_Movement) + ")", dataNameStkDue_NextCntStkDate);
qryStkCnt.GroupBy.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasCommodity_StkCntCit));
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Type, aliasCommodity_StockContainer_Movement) + "=" + ((int)Sbm.MovementType.StockTransfer).ToString());
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemType, aliasCommodity_StockContainer_Movement) + "=" + (((int)Sbm.ItemType.Container).ToString()).ToString());
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Id, aliasCommodity_StockContainer_Container) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasCommodity_StockContainer_Movement));
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, aliasCommodity_StkCntCit) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Id, aliasCommodity_StockContainer_Container));
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemType, aliasCommodity_StkCntCit) + "=" + ((int)Sbm.ItemType.Commodity).ToString());
if (SysId.IsValid(locationStockId))
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdTo, aliasCommodity_StockContainer_Movement) + "=" + locationStockId.ToString());
else
{
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdTo, aliasCommodity_StockContainer_Movement) + " IN (" + stringLocactionStockId + ")");
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdFrom, aliasCommodity_StockContainer_Movement) + " NOT IN (" + stringLocactionStockId + ")");
}
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Status, aliasCommodity_StockContainer_Movement) + "='" + StatusAwaiting + "'");
qryStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Status, aliasCommodity_StockContainer_Container) + "<>'" + StatusCancelled + "'");
// Join main query to the container movements to get earliest expected movement date:
String aliasCommodity_StockContainerDate = "aStkCntDate";
DbQueryJoin joinStkCnt = new DbQueryJoin(DbJoinType.LeftOuter);
joinStkCnt.Table = new StringPair("(" + qryStkCnt.BuildQuery() + ")", aliasCommodity_StockContainerDate);
joinStkCnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasCommodity_StockContainerDate) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
query.Joins.Add(joinStkCnt);
query.Columns.Add(aliasCommodity_StockContainerDate + "." + dataNameStkDue_NextCntStkDate, dataNameStkDue_NextCntStkDate);
if (columns.HasId(SbmCommodity.Column.Stock_NextDue_Quantity) || columns.HasId(SbmCommodity.Column.Stock_NextDue_Container_Quantity))
{
// Join to the commodity movements again and restrict to the date identified above.
String aliasCommodity_StockContainer_Quality = "aStkCntQty";
// Start with the same sub-query as above, but group by movement date as well as commodity Id and sum the quantities.
qryStkCnt.Columns.Clear();
qryStkCnt.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasCommodity_StkCntCit));
qryStkCnt.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockContainer_Movement));
qryStkCnt.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Quantity, aliasCommodity_StkCntCit) + ")", dataNameStkDue_NextCntStkQty);
qryStkCnt.GroupBy.Clear();
qryStkCnt.GroupBy.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasCommodity_StkCntCit));
qryStkCnt.GroupBy.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockContainer_Movement));
// Join main query to the container movements to get quantity for the earliest expected movement date.
DbQueryJoin joinStkCntQty = new DbQueryJoin(DbJoinType.LeftOuter);
joinStkCntQty.Table = new StringPair("(" + qryStkCnt.BuildQuery() + ")", aliasCommodity_StockContainer_Quality);
joinStkCntQty.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasCommodity_StockContainer_Quality) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
joinStkCntQty.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Movement, aliasCommodity_StockContainer_Quality) + "=" + aliasCommodity_StockContainerDate + "." + dataNameStkDue_NextCntStkDate);
query.Joins.Add(joinStkCntQty);
query.Columns.Add(aliasCommodity_StockContainer_Quality + "." + dataNameStkDue_NextCntStkQty, dataNameStkDue_NextCntStkQty);
}
}
//---------------------------------------------------------------
// Imminent stock level.
if ((columns.HasId(SbmCommodity.Column.Stock_Due_Imminently) || columns.HasId(SbmCommodity.Column.Stock_ImminentLevel)) && (SysId.IsValid(locationStockId) || !stringLocactionStockId.IsEmpty()))
{
// Calculate the imminent stock level:
if (UserContext.GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption.ImminentStock))
{
PlannedStockMovements_Params prmPSM = new PlannedStockMovements_Params();
prmPSM.prmCmd = prm;
prmPSM.excludeAwaitingContainers = !UserContext.GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption.AwaitingContainersInImminentStock);
int weeksImminentStock = Math.Max(0, Math.Min(12, UserContext.GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks.ImminentStockDue, 0)));
prmPSM.latest = DateTime.Today.StartOfWorkingWeek().AddDays(weeksImminentStock * 7);
query.Columns.Add(BuildPlannedStockMovementsQuery(prmPSM), dataNameStkDue_Imminent);
}
}
//---------------------------------------------------------------
// Stock movements
if (SysId.IsValid(locationStockId) || !StringUtil.IsEmpty(stringLocactionStockId))
{
// Stock due in by future weeks.
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week1))
{
DateTime earliest = DateTime.MinValue;// No earliest date - to pick up any past planned movements.
DateTime latest = DateTime.Today.StartOfWorkingWeek().AddDays(4); // End of this week (Monday + 4 = Friday).
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week1);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week2))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((2 * 7) - 9);// From the Saturday following week 1.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week2);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week3))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((3 * 7) - 9);// From the Saturday following week 2.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week3);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week4))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((4 * 7) - 9);// From the Saturday following week 3.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week4);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week5))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((5 * 7) - 9);// From the Saturday following week 4.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week5);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week6))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((6 * 7) - 9);// From the Saturday following week 5.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week6);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week7))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((7 * 7) - 9);// From the Saturday following week 6.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week7);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week8))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((8 * 7) - 9);// From the Saturday following week 7.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week8);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week9))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((9 * 7) - 9);// From the Saturday following week 8.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week9);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week10))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((10 * 7) - 9); // From the Saturday following week 9.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week10);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week11))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((11 * 7) - 9); // From the Saturday following week 10.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week11);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week12))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays((12 * 7) - 9); // From the Saturday following week 11.
DateTime latest = earliest.AddDays(6);// End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week12);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week1To2))
{
DateTime earliest = DateTime.MinValue;// No earliest date - to pick up any overdue movements.
DateTime latest = DateTime.Today.StartOfWorkingWeek().AddDays(11); // End of the following week (Monday + 11 = Friday).
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week1To2);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week3To4))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(12); // From the Saturday following week 2.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week3To4);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week5To6))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(26); // From the Saturday following week 4.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week5To6);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week7To8))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(40); // From the Saturday following week 6.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week7To8);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week9To10))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(54); // From the Saturday following week 8.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week9To10);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week11To12))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(68); // From the Saturday following week 10.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week11To12);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week7On))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(40); // From the Saturday following week 6.
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week7On);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Week13On))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(82); // From the Saturday following week 12.
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Week13On);
}
//---------------------------------------------------------------
// Stock due in future months:
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_MonthCurrent))
{
DateTime earliest = DateTime.MinValue; // No earliest date - to pick up any past planned movements.
DateTime latest = DateTime.Today.EndOfMonth(); // Movements to end of current month.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_MonthCurr);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month01))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(1);// First day of month 1.
DateTime latest = earliest.EndOfMonth();// Last day of month.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month01);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month02))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(2);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month02);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month03))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(3);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month03);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month04))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(4);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month04);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month05))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(5);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month05);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month06))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(6);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month06);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month07))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(7);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month07);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month08))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(8);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month08);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month09))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(9);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month09);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month10))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(10);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month10);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month11))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(11);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month11);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month12))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(12);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month12);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_MonthTo03))
{
// Up to 3 months in future.
DateTime earliest = DateTime.MinValue;
DateTime latest = DateTime.Today.StartOfMonth().AddMonths(3).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_MonthTo03);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_MonthTo06))
{
// Up to 6 months in future.
DateTime earliest = DateTime.MinValue;
DateTime latest = DateTime.Today.StartOfMonth().AddMonths(6).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_MonthTo06);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_MonthTo09))
{
// Up to 9 months in future.
DateTime earliest = DateTime.MinValue;
DateTime latest = DateTime.Today.StartOfMonth().AddMonths(9).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_MonthTo09);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_MonthTo12))
{
// Up to 12 months in future.
DateTime earliest = DateTime.MinValue;
DateTime latest = DateTime.Today.StartOfMonth().AddMonths(12).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_MonthTo12);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month04To06))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(4);
DateTime latest = earliest.AddMonths(2).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month04To06);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month07To09))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(7);
DateTime latest = earliest.AddMonths(2).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month07To09);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month10To12))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(10);
DateTime latest = earliest.AddMonths(2).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month10To12);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month07To12))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(7);
DateTime latest = earliest.AddMonths(5).EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month07To12);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month04On))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(4);
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month04On);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month05On))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(5);
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month05On);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month06On))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(6);
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month06On);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month07On))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(7);
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month07On);
}
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Month13On))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(13);
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Month13On);
}
//---------------------------------------------------------------
// Stock provisionally due in:
if (columns.HasId(SbmCommodity.Column.Stock_DueIn_Provisional))
{
DateTime earliest = DateTime.MinValue;
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkDue_Provisional);
}
//---------------------------------------------------------------
// Stock allocated by future weeks.
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week1))
{
DateTime earliest = DateTime.MinValue; // No earliest date - to pick up any past planned movements.
DateTime latest = DateTime.Today.StartOfWorkingWeek().AddDays(4); // End of this week (Monday + 4 = Friday).
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week1);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week2))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(5); // From the Saturday following week 1.
DateTime latest = earliest.AddDays(6); // End of that week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week2);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week3To4))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(12); // From the Saturday following week 2.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week3To4);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week5To6))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(26); // From the Saturday following week 4.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week5To6);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week7To8))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(40); // From the Saturday following week 6.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week7To8);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week9To10))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(54); // From the Saturday following week 8.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week9To10);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week11To12))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(68); // From the Saturday following week 10.
DateTime latest = earliest.AddDays(13);// End of the following week.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week11To12);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Week13On))
{
DateTime earliest = DateTime.Today.StartOfWorkingWeek().AddDays(82); // From the Saturday following week 12.
DateTime latest = DateTime.MinValue;
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Week13On);
}
// Stock allocations by month:
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_MonthCurrent))
{
DateTime earliest = DateTime.MinValue;
DateTime latest = DateTime.Today.StartOfMonth().EndOfMonth(); // End of current month.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_MonthCurr);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month01))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(1); // Start of next month.
DateTime latest = earliest.EndOfMonth(); // End of next month.
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month01);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month02))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(2);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month02);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month03))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(3);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month03);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month04))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(4);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month04);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month05))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(5);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month05);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month06))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(6);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month06);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month07))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(7);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month07);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month08))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(8);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month08);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month09))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(9);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month09);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month10))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(10);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month10);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month11))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(11);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month11);
}
if (columns.HasId(SbmCommodity.Column.Stock_Allocated_Month12))
{
DateTime earliest = DateTime.Today.StartOfMonth().AddMonths(12);
DateTime latest = earliest.EndOfMonth();
query.Columns.Add(BuildPlannedStockMovementsQuery(earliest, latest, prm, true, false, null), dataNameStkAll_Month12);
}
}
//---------------------------------------------------------------
// Requirements.
if (columns.HasId(SbmCommodity.Column.Reqnt_AmountUnit_Earliest_ById))
{
String qry =
"Select req3.AmountUnit " +
"From (Select Min(req1.Id) 'IdMin' From Requirement req1 Where req1.CommodityId=Commodity.Id Group By CommodityId) req2 " +
"Inner Join Requirement req3 on req3.Id=req2.IdMin";
query.Columns.Add("(" + qry + ")", dataNameRequirement_AmtUnitEarlId);
}
if (columns.HasId(SbmCommodity.Column.Reqnt_AmountUnit_Earliest_ByCode))
{
String sQry =
"Select req3.AmountUnit " +
"From (Select Min(req1.Id) 'IdMin' From Requirement req1 Where req1.ProductCode=Commodity.Code Group By ProductCode) req2 " +
"Inner Join Requirement req3 on req3.Id=req2.IdMin";
query.Columns.Add("(" + sQry + ")", dataNameRequirement_AmtUnitEarlCode);
}
//---------------------------------------------------------------
// Commodity Customer count.
if (columns.HasId(SbmCommodity.Column.CommodityCustomer_Count) && db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer)))
{
// Count the Customer items for this Commodity.
String aliasCommodityCustomerCount = "aCmdCust";
DbQuery qryProc = new DbQuery(db.DbmsType);
qryProc.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer), aliasCommodityCustomerCount));
qryProc.Columns.Add("COUNT(*)");
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId, aliasCommodityCustomerCount) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_Status, aliasCommodityCustomerCount) + " Not In ('" + StatusDeleted + "')");
query.Columns.Add("(" + qryProc.BuildQuery() + ")", dataNameCommodityCustomerCount);
}
// Commodity Supplier count.
if (columns.HasId(SbmCommodity.Column.CommoditySupplier_Count) && db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier)))
{
// Count the Supplier items for this Commodity.
String aliasCommoditySupplierCount = "aCmdCust";
DbQuery qryProc = new DbQuery(db.DbmsType);
qryProc.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier), aliasCommoditySupplierCount));
qryProc.Columns.Add("COUNT(*)");
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, aliasCommoditySupplierCount) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_Status, aliasCommoditySupplierCount) + " Not In ('" + StatusDeleted + "')");
query.Columns.Add("(" + qryProc.BuildQuery() + ")", dataNameCommoditySupplierCount);
}
//---------------------------------------------------------------
// Process count.
if (columns.HasId(SbmCommodity.Column.Process_Count))
{
// Count the processes for this commodity (in the ItemLink table):
String aliasProcessCount = "aProc";
DbQuery qryProc = new DbQuery(db.DbmsType);
qryProc.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink), aliasProcessCount));
qryProc.Columns.Add("COUNT(*)");
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeFrom, aliasProcessCount) + "=" + ((int)Sbm.ItemType.Commodity).ToString());
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom, aliasProcessCount) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
qryProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeTo, aliasProcessCount) + "=" + ((int)Sbm.ItemType.Process).ToString());
query.Columns.Add("(" + qryProc.BuildQuery() + ")", dataNameProcessCount);
}
//---------------------------------------------------------------
// Portfolio item count.
if (columns.HasId(SbmCommodity.Column.PortfolioItem_Count))
{
// Count the portfolio items for this commodity.
String aliasPortfolioItemCount = "CmdPrtItm";
DbQuery qryPrtItm = new DbQuery(db.DbmsType);
qryPrtItm.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem), aliasPortfolioItemCount));
qryPrtItm.Columns.Add("COUNT(*)");
//qryPrtItm.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.PortfolioItem_ItemType,aliasCommodity_PortfolioItem)+"="+String(eSapItemTypeCommodity));
qryPrtItm.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.PortfolioItem_CommodityId, aliasPortfolioItemCount) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodity));
query.Columns.Add("(" + qryPrtItm.BuildQuery() + ")", dataNamePortfolioItemCount);
}
//---------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetCommodityQueryFilter(prm));
if (prm.IncludedIds.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetCommoditySortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------
return query;
}
//-------------------------------------------------------------------
}
//=======================================================================
}