Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs
T

3342 lines
227 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
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.ReferenceData;
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.Transactions;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
//=======================================================================
// TRansaction manager - Requirements.
//=======================================================================
partial class SbmTransactionMgr_Dbas
{
//-------------------------------------------------------------------
// Utilities.
private List<StringPair> GetLogProperties(SbmRequirement requirement)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(requirement.Id)),
new StringPair("DescBrief",requirement.DescBrief),
new StringPair("Status",requirement.StatusCode)
};
}
public override SbmRequirement CloneRequirement(SbmRequirement reqntSource, bool copyAddDescs)
{
SbmRequirement.Data data = CloneRequirement(reqntSource.GetData(), copyAddDescs);
SbmRequirement requirement = CreateRequirement(data.AssociationId, data.TransactionId, data.RequirementType);
requirement.SetData(data);
return requirement;
}
public override SbmRequirement.Data CloneRequirement(SbmRequirement.Data reqntSource, bool copyAddDescs)
{
ClearErrorState();
SbmRequirement.Data requirement = null;
if (reqntSource != null && SysId.IsValid(AffiliateId_Owner))
requirement = new SbmRequirement.Data();
else SetErrorState("owner not selected");
if (requirement != null)
{
requirement.AffiliateIdOwner = AffiliateId_Owner;
requirement.RequirementType = reqntSource.RequirementType;
requirement.Flags = reqntSource.Flags;
requirement.Seq = 0;
requirement.Required = reqntSource.Required;
requirement.Started = reqntSource.Started;
requirement.Completed = reqntSource.Completed;
requirement.AssociationIdSubContract = reqntSource.AssociationIdSubContract;
requirement.CommodityId = reqntSource.CommodityId;
requirement.ProductCode = reqntSource.ProductCode;
requirement.DescBrief = reqntSource.DescBrief;
if (copyAddDescs)
{
requirement.DescIntro = reqntSource.DescBrief;
requirement.DescOutline = reqntSource.DescOutline;
requirement.DescDetail = reqntSource.DescDetail;
}
requirement.Quantity = reqntSource.Quantity;
requirement.UomId = reqntSource.UomId;
requirement.QuantityProd = reqntSource.QuantityProd;
requirement.MaterialSourceCode = reqntSource.MaterialSourceCode;
requirement.AmountUnit = reqntSource.AmountUnit;
requirement.AmountAct = reqntSource.AmountAct;
requirement.AmountDisc = reqntSource.AmountDisc;
requirement.AmountNet = reqntSource.AmountNet;
requirement.TaxCodeId = reqntSource.TaxCodeId;
requirement.TaxRate = reqntSource.TaxRate;
requirement.AmountTax = reqntSource.AmountTax;
requirement.AmountTot = reqntSource.AmountTot;
requirement.TimeEst = reqntSource.TimeEst;
requirement.TimeAct = reqntSource.TimeAct;
//requirement.TimeTot = reqntSource.TimeTot;
requirement.Notes = reqntSource.Notes;
requirement.Status = reqntSource.Status;
}
return requirement;
}
public override bool CostColumnsAreAvailable()
{
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_PromotionCode)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_UomIdWeight)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_Weight)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_TimeEstChunks)) return false; //Requirement_TimeEstChunks or TimeEst
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_TimeActChunks)) return false; //Requirement_TimeActChunks or TimAct
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostLabourHours)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostLabourRateHour)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostLabour)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostCommodity)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostPurchase)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostProcess)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostAdditional)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostTotal)) return false;
if (!ColumnExists(SbmDbDfn.ColumnIdx.Requirement_CostCalculated)) return false;
return true;
}
//-------------------------------------------------------------------
// Requirement associated quantities.
public override decimal GetRequirementQuantityDispatched(SysId requirementId, SysId transIdExclude)
{
if (SysId.IsValid(requirementId))
{
// Build query to sum associated dispatch item quantities.
List<String> filters = new List<String>
{
$"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource)}={SysId.ToLong(requirementId)}",
$"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status)}<>'{StatusCancelled}'"
};
// Requirement must belong to a transaction of type 'Dispatch Note'.
DbQuery qryTrans = new DbQuery(Database.DbmsType);
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction));
qryTrans.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id));
if (SysId.IsValid(transIdExclude))
qryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id) + "<>" + transIdExclude.ToString());
qryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId));
qryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type) + "=" + Sbm.TransactionType.SalesDispatch.ToString());
qryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status) + "<>'" + StatusCancelled + "'");
filters.Add("EXISTS (" + qryTrans.BuildQuery() + ")");
return Database.GetRowValue(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity), filters.Concat(" AND ", "(", ")"), DbGetValueType.eDbValueSum).ToDecimal();
}
return 0.0m;
}
public override decimal GetRequirementQuantityInvoiced(SysId requirementId, SysId transIdExclude)
{
if (SysId.IsValid(requirementId))
{
// Build query to sum associated dispatch item quantities.
List<String> filter = new List<String>
{
$"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource)}={SysId.ToLong(requirementId)}",
$"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status)}<>'" + StatusCancelled + "'"
};
// Requirement must belong to a transaction of type 'Invoice' (Sales or Purchase).
DbQuery qryTrans = new DbQuery(Database.DbmsType);
String colTransaction_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id);
String colRequirement_TransId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId);
String colTransaction_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type);
String colTransaction_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status);
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction));
qryTrans.Columns.Add(colTransaction_Id);
if (SysId.IsValid(transIdExclude))
qryTrans.Filters.Add(colTransaction_Id + "<>" + transIdExclude.ToString());
qryTrans.Filters.Add(colTransaction_Id + "=" + colRequirement_TransId);
qryTrans.Filters.Add("(" + colTransaction_Type + "=" + Sbm.TransactionType.SalesInvoice.ToString() + "OR" + colTransaction_Type + "=" + Sbm.TransactionType.PurchaseInvoice + ")".ToString());
qryTrans.Filters.Add(colTransaction_Status + "<>'" + StatusCancelled + "'");
filter.Add("EXISTS (" + qryTrans.BuildQuery() + ")");
return Database.GetRowValue(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity), filter.Concat(" AND ", "(", ")"), DbGetValueType.eDbValueSum).AsDecimal();
}
return 0.0m;
}
//-------------------------------------------------------------------
// Associated data.
public override bool RequirementHasAssociatedRequirements(SysId requirementId)
{
ClearErrorState();
if (!SysId.IsValid(requirementId)) return SetErrorState(Msg_InvalidItemSpecified);
String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource) + "=" + SysId.ToString(requirementId);
long rowCount = Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), filter);
SetErrorState(Database.ErrorStateMessage);
return rowCount > 0;
}
public override bool RequirementHasConstituents(SysId requirementId, Sbm.ConstituentType constituentType)
{
ClearErrorState();
List<String> filter = new List<String> { SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_ReqntId) + "=" + SysId.ToString(requirementId) };
if (constituentType > 0)
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Type) + "=" + ((int)constituentType).ToString());
long rowCount = Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), filter.Concat(" AND ", "(", ")"));
SetErrorState(Database.ErrorStateMessage);
return rowCount > 0;
}
public override bool RequirementHasStockMovements(SysId requirementId)
{
ClearErrorState();
if (!SysId.IsValid(requirementId)) return false;
return StockMgr.SourceItemHasMovements(Sbm.ItemType.Requirement, requirementId);
}
public override bool RequirementHasItemLinks(SysId requirementId)
{
ClearErrorState();
if (!SysId.IsValid(requirementId)) return false;
return DataItemMgr.HasItemLinks(Sbm.ItemType.Requirement, requirementId);
}
public override bool ClearRequirementDependentData(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (requirement == null || !SysId.IsValid(requirement.Id)) return SetErrorState(Msg_InvalidItemSpecified);
// Clear any references to this requirement from other requirements.
if (!HasErrorState())
ClearRequirementAssociatedRequirements(requirement, dbUpdateInfo);
// Delete any constituents that belong to this requirement.
if (!HasErrorState())
{
String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_ReqntId) + "=" + SysId.ToString(requirement.Id);
int rowsDeleted = Database.ExecuteDelete(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), filter);
if (Database.HasErrorState())
{
String msg = "Failed to clear requirement constituents";
SaLogger.Warn($"{SysUtil.Fn} {msg}: {Database.ErrorStateMessage}. RequirentId: {SysId.ToString(requirement.Id)}.");
SetErrorState(msg);
}
}
// Clear stock movements.
if (!HasErrorState())
{
if (StockMgr.ClearMovementsForSourceItem(Sbm.ItemType.Requirement, requirement.Id))
{
// ToDo need to create CalculateStockLevels method in stockMgr
// StockMgr.CalculateStockLevels(commodityId);
}
}
// Delete any associated items links.
if (!HasErrorState())
{
if (DataItemMgr.ClearDataItem(requirement.GetItemId(), dbUpdateInfo))
{
String msg = "failed to clear requirement item links";
SaLogger.Warn($"{SysUtil.Fn} {msg}: {DataItemMgr.ErrorStateMessage}. RequirentId: {requirement.Id}.");
SetErrorState(msg);
}
}
return OK;
}
public override bool ClearRequirementAssociatedRequirements(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
// Clear ReqntIdSource for any requirements that reference this one.
ClearErrorState();
if (requirement == null || !SysId.IsValid(requirement.Id)) return SetErrorState(Msg_InvalidItemSpecified);
String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource)}={SysId.ToLong(requirement.Id)}";
List<StringPair> values = new List<StringPair>();
SacsDatabase.AddValuePair(values, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource), "0", false);
Database.ExecuteUpdate(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), values, filter);
if (Database.HasErrorState())
SetErrorState("Failed to clear requirement references");
return OK;
}
//-------------------------------------------------------------------
public override bool CalculateTotal(SbmRequirement.Data requirement)
{
ClearErrorState();
if (requirement == null) return SetErrorState(Msg_ItemNotSpecified);
int decimalsCurrency = 2;
// Calculate intermediate amounts.
if (requirement.AmountAct == 0.0m)
requirement.AmountAct = Math.Round(requirement.AmountUnit * requirement.Quantity, decimalsCurrency);
if (requirement.AmountNet == 0.0m)
requirement.AmountNet = Math.Round(requirement.AmountAct - requirement.AmountDisc, decimalsCurrency);
// Calculate tax amount.
decimal amountNet = requirement.AmountNet;
decimal rateTax = 0.0m;
decimal amountTax = 0.0m;
if (Math.Abs(amountNet) > 0.001m && SysId.IsValid(requirement.TaxCodeId)) // Aug14 AWH Was 'if (fAmountNet > 0.0 && ...)'.
{
SaTaxCode taxCodeCalculate = FindTaxCodeById(requirement.TaxCodeId);
if (taxCodeCalculate != null)
{
// Calculate tax amount:
rateTax = taxCodeCalculate.TaxRate;
amountTax = amountNet * rateTax / 100.0m;
// Round the tax amount:
amountTax = Math.Round(amountTax, decimalsCurrency);
}
}
// Calculate total amount:
decimal amountTot = amountNet + amountTax;
requirement.TaxRate = rateTax;
requirement.AmountTax = Math.Round(amountTax, decimalsCurrency);
requirement.AmountTot = Math.Round(amountTot, decimalsCurrency);
return OK;
}
//-------------------------------------------------------------------
// C o s t E s t i m a t e s
//-------------------------------------------------------------------
public override bool RequirementHasCostEstimates(SysId requirementId)
{
if (!SysId.IsValid(requirementId)) return false;
SbmItemLink.Params prmItemLink = new SbmItemLink.Params();
prmItemLink.ItemLinkType = Sbm.ItemLinkType.Requirement_CostEstimate;
prmItemLink.ItemTypeFrom = Sbm.ItemType.Requirement;
prmItemLink.ItemIdFrom = requirementId;
return DataItemMgr.GetItemLinkCount(prmItemLink) > 0;
}
public override List<SbmCostEstimate> GetRequirementCostEstimates(SysId requirementId)
{
List<SbmCostEstimate> costEstimates = new List<SbmCostEstimate>();
if (!SysId.IsValid(requirementId)) return costEstimates;
SbmItemLink.Params prmConstituentItemLink = new SbmItemLink.Params
{
ItemLinkType = Sbm.ItemLinkType.Requirement_CostEstimate,
ItemTypeFrom = Sbm.ItemType.Requirement,
ItemIdFrom = requirementId
};
List<SbmItemLink> itemLinks = DataItemMgr.GetItemLinkList(prmConstituentItemLink);
if (itemLinks != null)
{
foreach (SbmItemLink itemLink in itemLinks)
{
if (itemLinks == null) continue;
SbmCostEstimate costEstimate = new SbmCostEstimate(itemLink.DataContent);
costEstimate.Notes = itemLink.Notes;
costEstimate.Changed = false;
costEstimates.Add(costEstimate);
}
// Clean-up:
itemLinks.Clear();
}
costEstimates.Sort();
return costEstimates;
}
public override bool CommitRequirementCostEstimates(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Do not attempt any updates unless the list has been populated.
if (requirement != null && SysId.IsValid(requirement.Id) && requirement.CostEstimates != null)
{
// Build an item link list corresponding to the list of cost estimates:
List<SbmItemLink> itemLinks = new List<SbmItemLink>();
foreach (SbmCostEstimate costEstimate in requirement.CostEstimates)
{
if (costEstimate == null) continue;
SbmItemLink itemLink = DataItemMgr.CreateItemLink(Sbm.ItemLinkType.Requirement_CostEstimate, Sbm.ItemType.Requirement, requirement.Id, Sbm.ItemType.Unknown, new SysId(0));
if (itemLink != null)
{
itemLink.Seq = (short)costEstimate.CodeSeq;
itemLink.DataContent = costEstimate.ToString();
itemLink.Notes = costEstimate.Notes;
itemLinks.Add(itemLink);
itemLink = null; // Now owned by the list.
}
}
// Store these details.
if (!DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.Requirement_CostEstimate, requirement.GetItemId(), itemLinks, dbUpdateInfo))
SetErrorState("Failed to save cost estimate item links - " + DataItemMgr.ErrorState);
if (itemLinks != null)
itemLinks.Clear();
}
return false;
}
//-------------------------------------------------------------------
// P r o c e s s e s
//-------------------------------------------------------------------
public override bool RequirementHasProcess(SysId requirementId)
{
if (!SysId.IsValid(requirementId)) return false;
SbmConstituent.Params prmConstituent = new SbmConstituent.Params();
prmConstituent.ConstituentType = Sbm.ConstituentType.Process;
prmConstituent.ReqntId = requirementId;
return GetConstituentCount(prmConstituent) > 0;
}
public override List<SbmItemProcess> GetRequirementProcesses(SysId requirementId)
{
List<SbmItemProcess> itemProcesses = new List<SbmItemProcess>();
if (SysId.IsValid(requirementId))
{
// Requirement processes are held as constituents against the requirement.
SbmConstituent.Params prmConstituent = new SbmConstituent.Params();
prmConstituent.ConstituentType = Sbm.ConstituentType.Process;
prmConstituent.ReqntId = requirementId;
foreach (SbmConstituent constituent in TransactionMgr.GetConstituentList(prmConstituent))
{
// ToDo need to create SbmProcessMgr_Dbas-ItemProcess for CreateItemProcess
SbmItemProcess itemProcess = ProcessMgr.CreateItemProcessForConstituent(constituent);
// Verify that the process is not already in the list.
itemProcess = itemProcesses.Find(item => item.ProcessId.Equals(constituent.ProcessId));
if (itemProcess != null)
itemProcesses.Add(itemProcess);
}
itemProcesses.Sort();
}
return itemProcesses;
}
public override bool CommitRequirementProcesses(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Do not attempt any updates unless the list has been populated.
if (requirement == null || !SysId.IsValid(requirement.Id) || requirement.Processes == null) return true;
// Make a copy of the process list so that we can track those that have been updated.
List<SbmItemProcess> itemProcesses = new List<SbmItemProcess>(requirement.Processes);
// Retrieve the existing processes for this requirement.
SbmConstituent.Params prmConstituent = new SbmConstituent.Params();
prmConstituent.ConstituentType = Sbm.ConstituentType.Process;
prmConstituent.ReqntId = requirement.Id;
foreach (SbmConstituent constituent in TransactionMgr.GetConstituentList(prmConstituent))
{
// Does this process still exist in the list.
SbmItemProcess itemProcessLocal = itemProcesses.Find(item => item.ProcessId.Equals(constituent.ProcessId));
if (itemProcessLocal != null)
{
if (itemProcessLocal.Changed)
{
// Update the details.
CopyFrom(itemProcessLocal, constituent);
if (TransactionMgr.UpdateConstituent(constituent, dbUpdateInfo))
itemProcessLocal.Changed = false;
else SetErrorState("failed to update process constituent");
}
// Remove this process from the local copy of the list (without deleting it).
itemProcesses.Remove(itemProcessLocal);
}
else
{
// Process no longer required.
constituent.Status = SaStatus.Cancelled;
if (!TransactionMgr.DeleteConstituent(constituent, dbUpdateInfo))
SetErrorState("failed to delete process constituent");
}
}
// Any item processes left in the local list need to be created.
foreach (SbmItemProcess itemprocess in itemProcesses)
{
if (itemprocess == null) continue;
// Create a constituent to represent this process:
SbmConstituent constituent = TransactionMgr.CreateConstituent(requirement.AssociationId, Sbm.ConstituentType.Process);
if (constituent != null)
{
// Update the constituent to belong to this requirement.
constituent.TransactionId = requirement.TransactionId;
constituent.RequirementId = requirement.Id;
CopyFrom(itemprocess, constituent);
// Add it to the database:
if (TransactionMgr.InsertConstituent(constituent, dbUpdateInfo))
itemprocess.Changed = false;
else SetErrorState("failed to add constituent - " + TransactionMgr.ErrorState);
}
else SetErrorState("failed to create constituent - " + TransactionMgr.ErrorState);
}
return OK;
}
// Item Process - Constituent Interface.
public void CopyFrom(SbmItemProcess itemProcess, SbmConstituent constituent)
{
if (itemProcess == null || constituent != null) return;
constituent.Seq = itemProcess.Seq;
constituent.Notes = itemProcess.Notes;
constituent.ProcessId = itemProcess.ProcessId;
constituent.AssociationIdContractor = itemProcess.AssocIdContractor;
constituent.AmountNet = itemProcess.AmountNet;
constituent.Completed = itemProcess.Completed;
constituent.Notes = itemProcess.Notes;
constituent.Status = itemProcess.Status;
}
//-------------------------------------------------------------------
// Set the correct tax code corresponding with the date specified:
public override bool SetTaxCode(SbmRequirement requirement, DateTime effective)
{
ClearErrorState();
if (requirement == null) return SetErrorState(Msg_ItemNotSpecified);
if (!effective.IsValid()) return SetErrorState("invalid effective date specified");
// Locate the specified tax code in the list:
String taxCode = SaReferenceDataConsole.GetTaxCode(SaTaxCodeType.Std);
SysId taxCodeId = requirement.TaxCodeId;
if (SysId.IsValid(taxCodeId))
{
SaTaxCode taxCodeById = FindTaxCodeById(taxCodeId);
if (taxCodeById != null)
taxCode = taxCodeById.Code;
}
SaTaxCode taxCodeApplicable = null;
if (!taxCode.IsEmpty())
{
taxCodeApplicable = FindTaxCodeEffectiveOn(taxCode, effective);
if (taxCodeApplicable == null)
SetErrorState("No effective tax code available for '" + taxCode + "'");
}
if (taxCodeApplicable != null)
requirement.TaxCodeId = taxCodeApplicable.Id;
return OK;
}
//-------------------------------------------------------------------
// Exists Requirement.
public override bool RequirementsExistByParams(SbmRequirement.Params prmRequirement)
{
ClearErrorState();
String filter = GetRequirementQueryFilter(prmRequirement).Concat(" AND ", "(", ")");
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), filter) > 0;
}
//-------------------------------------------------------------------
// Get Requirement.
public override SbmRequirement GetRequirement(SbmRequirement.Params prm)
{
return GetRequirement(GetRequirementQueryFilter(prm).Concat(" AND ", "(", ")"));
}
private SbmRequirement GetRequirement(String filter)
{
ClearErrorState();
long count = GetRequirementCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState(Msg_MultipleItemsFound);
return null;
}
SbmRequirement prmRequirement = null;
// Query data.
using (var dbConnection = Database.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Requirement_Db dbRequirement = new Requirement_Db(DbInfo);
dbRequirement.PopulateFrom(dbCommand, aliasRequirement, filter);
prmRequirement = CreateRequirement(dbRequirement);
}
catch (Exception exc)
{
SetErrorState(Msg_DatabaseQueryException);
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return prmRequirement;
}
//-------------------------------------------------------------------
// Create Requirement.
public override SbmRequirement CreateRequirement(SysId assocId, SysId transId, Sbm.RequirementType requirementType)
{
ClearErrorState();
SbmRequirement requirement = null;
if (SysId.IsValid(assocId) && SysId.IsValid(transId) && requirementType > 0)
requirement = new SbmRequirement_Dbas(new SysId(), AffiliateId_Owner, assocId, transId, requirementType, 0);
else SetErrorState("Asset type not identified");
return requirement;
}
private SbmRequirement_Dbas CreateRequirement(Requirement_Db dbRequirement)
{
ClearErrorState();
SbmRequirement_Dbas requirement = new SbmRequirement_Dbas(new SysId(dbRequirement._Id), new SysId(dbRequirement._AffIdOwner), new SysId(dbRequirement._AssocId ?? 0), new SysId(dbRequirement._TransId ?? 0), (Sbm.RequirementType)dbRequirement._Type, (ushort)dbRequirement._Flags);
PopulateFrom(dbRequirement, requirement);
return requirement;
}
//-------------------------------------------------------------------
// Validate Requirement.
public override bool IsValidRequirementData(SbmRequirement.Data data, SbmRequirement.ErrField errField)
{
ClearErrorState();
if (!base.IsValidRequirementData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert Requirement.
public override bool InsertRequirement(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidRequirement(requirement)) return false;
if (SysId.IsValid(requirement.Id)) return SetErrorState(ErrorMessage.ValiditemId);
using (var dbConnection = Database.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Requirement_Db dbRequirement = new Requirement_Db(DbInfo);
PopulateTo(dbRequirement, requirement, dbUpdateInfo);
if (Requirement_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbRequirement._Id = SysId.ToInt(Database.GetNextId("Requirement", dbUpdateInfo));
}
dbRequirement.ExecuteInsertCommand(dbCommand);
requirement.Id = new SysId(dbRequirement._Id);
requirement.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. " + GetLogProperties(requirement).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return OK;
}
//-------------------------------------------------------------------
// Update Requirement.
public override bool UpdateRequirement(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidRequirement(requirement)) return false;
if (!SysId.IsValid(requirement.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!requirement.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. " + GetLogProperties(requirement).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = Database.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve Requirement.
dbConnection.Open();
Requirement_Db dbRequirement = new Requirement_Db(DbInfo);
dbRequirement.PopulateFrom(dbCommand, aliasRequirement, "Id=" + SysId.ToString(requirement.Id));
SbmUpdateLogItemMonitor_Requirement updateLogMonitor = new SbmUpdateLogItemMonitor_Requirement(Internals, CreateRequirement(dbRequirement));
// Update properties.
PopulateTo(dbRequirement, requirement, dbUpdateInfo);
dbRequirement.ExecuteUpdateCommand(dbCommand);
requirement.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. " + GetLogProperties(requirement).Concat(": ").Concat("", "\n\t"));
// Record updates.
updateLogMonitor.RecordUpdatedValues(requirement);
updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return OK;
}
//-------------------------------------------------------------------
// Delete Requirement.
public override bool RequirementCanBeDeleted(SbmRequirement.Data requirement, Sbm.TransactionType transactionType)
{
if (!base.RequirementCanBeDeleted(requirement, transactionType)) return false;
return true;
}
public override bool DeleteRequirement(SbmRequirement requirement, Sbm.TransactionType transactionType, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!RequirementCanBeDeleted(requirement, transactionType)) return false;
using (var dbConnection = Database.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve prmRequirement.
dbConnection.Open();
Requirement_Db dbRequirement = new Requirement_Db(DbInfo);
dbRequirement.PopulateFrom(dbCommand, aliasRequirement, "Id=" + requirement.Id.ToString());
// Delete prmRequirement.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement) + " WHERE Id=" + SysId.ToString(requirement.Id) + ";";
dbCommand.ExecuteNonQuery();
requirement.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(requirement).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return OK;
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Requirement_Db dbRequirement, SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
dbRequirement._Id = requirement.Id.ToInt();
dbRequirement._AffIdOwner = requirement.AffiliateIdOwner.ToInt();
dbRequirement._AssocId = requirement.AssociationId.ToInt();
dbRequirement._TransId = requirement.TransactionId.ToInt();
dbRequirement._Type = (short)requirement.RequirementType;
dbRequirement._Seq = requirement.Seq;
dbRequirement._ReqntIdSource = requirement.RequirementIdSource.ToInt();
dbRequirement._Required = requirement.Required;
dbRequirement._Started = requirement.Started;
dbRequirement._Completed = requirement.Completed;
dbRequirement._JobNumber = requirement.JobNumber;
dbRequirement._AssIdSubcontract = requirement.AssociationIdSubContract.ToInt();
dbRequirement._CommodityId = requirement.CommodityId.ToInt();
dbRequirement._ProductCode = requirement.ProductCode;
dbRequirement._AssetId = requirement.AssetId.ToInt();
dbRequirement._DescBrief = requirement.DescBrief;
dbRequirement._DescIntro = requirement.DescIntro;
dbRequirement._DescOutline = requirement.DescOutline;
dbRequirement._DescDetail = requirement.DescDetail;
dbRequirement._PromotionCode = requirement.PromotionCode;
dbRequirement._NominalCode = requirement.NominalCode;
dbRequirement._Quantity = requirement.Quantity;
dbRequirement._QuantityProd = requirement.QuantityProd;
dbRequirement._UomId = requirement.UomId.ToInt();
dbRequirement._MaterialSourceCode = requirement.MaterialSourceCode;
dbRequirement._AmountUnit = requirement.AmountUnit;
dbRequirement._AmountAct = requirement.AmountAct;
dbRequirement._AmountDisc = requirement.AmountDisc;
dbRequirement._AmountNet = requirement.AmountNet;
dbRequirement._TaxCodeId = requirement.TaxCodeId.ToInt();
dbRequirement._TaxRate = requirement.TaxRate;
dbRequirement._AmountTax = requirement.AmountTax;
dbRequirement._AmountTot = requirement.AmountTot;
dbRequirement._TimeEst = requirement.TimeEst;
dbRequirement._TimeAct = requirement.TimeAct;
dbRequirement._TimeTot = requirement.TimeTot;
dbRequirement._LocationIdStock = requirement.LocationIdStock.ToInt();
dbRequirement._CostLabourHours = requirement.CostLabourHours;
dbRequirement._CostLabourRateHour = requirement.CostLabourRateHour;
dbRequirement._CostLabour = requirement.CostLabour;
dbRequirement._CostCommodity = requirement.CostCommodity;
dbRequirement._CostPurchase = requirement.CostPurchase;
dbRequirement._CostProcess = requirement.CostProcess;
dbRequirement._CostAdditional = requirement.CostAdditional;
dbRequirement._CostTotal = requirement.CostTotal;
dbRequirement._CostCalculated = requirement.CostCalculated;
// Common properties.
dbRequirement._Notes = requirement.Notes;
dbRequirement._Status = SacsSystem.GetStatusCode(requirement.Status);
dbRequirement._Flags = (short)requirement.Flags;
if (!SysId.IsValid(requirement.Id))
{
dbRequirement._CreateOn = DateTime.UtcNow;
dbRequirement._CreateBy = dbUpdateInfo.UserId.ToInt();
dbRequirement._CreateHost = dbUpdateInfo.Host;
}
dbRequirement._UpdateOn = DateTime.UtcNow;
dbRequirement._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbRequirement._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Requirement_Db dbRequirement, SbmRequirement requirement)
{
//requirement.Id = new SysId(dbRequirement._Id);
requirement.AffiliateIdOwner = new SysId(dbRequirement._AffIdOwner);
requirement.AssociationId = new SysId(dbRequirement._AssocId ?? 0);
requirement.TransactionId = new SysId(dbRequirement._TransId ?? 0);
requirement.RequirementType = (Sbm.RequirementType)(dbRequirement._Type ?? 0);
requirement.Seq = dbRequirement._Seq ?? 0;
requirement.RequirementIdSource = new SysId(dbRequirement._ReqntIdSource ?? 0);
requirement.Required = dbRequirement._Required ?? default(DateTime);
requirement.Started = dbRequirement._Started ?? default(DateTime);
requirement.Completed = dbRequirement._Completed ?? default(DateTime);
requirement.JobNumber = dbRequirement._JobNumber;
requirement.AssociationIdSubContract = new SysId(dbRequirement._AssIdSubcontract ?? 0);
requirement.CommodityId = new SysId(dbRequirement._CommodityId ?? 0);
requirement.ProductCode = dbRequirement._ProductCode;
requirement.AssetId = new SysId(dbRequirement._AssetId ?? 0);
requirement.DescBrief = dbRequirement._DescBrief;
requirement.DescIntro = dbRequirement._DescIntro;
requirement.DescOutline = dbRequirement._DescOutline;
requirement.DescDetail = dbRequirement._DescDetail;
requirement.PromotionCode = dbRequirement._PromotionCode;
requirement.NominalCode = dbRequirement._NominalCode;
requirement.Quantity = (decimal)dbRequirement._Quantity;
requirement.QuantityProd = (decimal)dbRequirement._QuantityProd;
requirement.UomId = new SysId(dbRequirement._UomId ?? 0);
requirement.MaterialSourceCode = dbRequirement._MaterialSourceCode;
requirement.AmountNet = (decimal)dbRequirement._AmountNet;
requirement.TaxCodeId = new SysId(dbRequirement._TaxCodeId ?? 0);
requirement.TaxRate = (decimal)dbRequirement._TaxRate;
requirement.AmountTax = (decimal)dbRequirement._AmountTax;
requirement.AmountTot = (decimal)dbRequirement._AmountTot;
requirement.TimeEst = (decimal)dbRequirement._TimeEst;
requirement.TimeAct = (decimal)dbRequirement._TimeAct;
requirement.TimeTot = (decimal)dbRequirement._TimeTot;
requirement.LocationIdStock = new SysId(dbRequirement._LocationIdStock ?? 0);
requirement.CostLabourHours = dbRequirement._CostLabourHours ?? 0.0m;
requirement.CostLabourRateHour = dbRequirement._CostLabourRateHour ?? 0.0m;
requirement.CostLabour = dbRequirement._CostLabour ?? 0.0m;
requirement.CostCommodity = dbRequirement._CostCommodity ?? 0.0m;
requirement.CostPurchase = dbRequirement._CostPurchase ?? 0.0m;
requirement.CostProcess = dbRequirement._CostProcess ?? 0.0m;
requirement.CostAdditional = dbRequirement._CostAdditional ?? 0.0m;
requirement.CostTotal = dbRequirement._CostTotal ?? 0.0m;
requirement.CostCalculated = dbRequirement._CostCalculated ?? default(DateTime);
// Common properties.
requirement.Notes = dbRequirement._Notes;
requirement.Status = SacsSystem.GetStatusForCode(dbRequirement._Status);
requirement.SetCreateStamp(dbRequirement._CreateOn ?? default(DateTime), new SysId(dbRequirement._CreateBy ?? 0), dbRequirement._CreateHost);
requirement.SetUpdateStamp(dbRequirement._UpdateOn ?? default(DateTime), new SysId(dbRequirement._UpdateBy ?? 0), dbRequirement._UpdateHost);
requirement.AcceptChanges();
}
//-------------------------------------------------------------------
// Column definitions.
private static readonly String aliasRequirement = "aReqnt";
private static readonly String aliasRequirement_AffiliateOwner = "Req_AffOwn";
private static readonly String prefixRequirement_AffiliateOwner = aliasRequirement_AffiliateOwner + "_";
private static readonly String aliasRequirement_AssAffTarget = "Req_AssTgt";
private static readonly String prefixRequirement_AssAffTarget = aliasRequirement_AssAffTarget + "_";
private static readonly String aliasRequirement_AffiliateTarget = "Req_AffTgt";
private static readonly String prefixRequirement_AffiliateTarget = aliasRequirement_AffiliateTarget + "_";
private static readonly String aliasRequirement_AddressTarget = "Req_AddTgt";
private static readonly String prefixRequirement_AddressTarget = aliasRequirement_AddressTarget + "_";
private static readonly String aliasRequirement_Association = "Req_Ass";
private static readonly String prefixRequirement_Association = aliasRequirement_Association + "_";
private static readonly String aliasRequirement_Transaction = "Req_Tra";
private static readonly String prefixRequirement_Transaction = aliasRequirement_Transaction + "_";
private static readonly String aliasRequirement_SourceTransaction = "Req_SrcTra";
private static readonly String prefixRequirement_SourceTransaction = aliasRequirement_SourceTransaction + "_";
private static readonly String aliasRequirement_DeliveryTaxcode = "Req_DelTxc";
private static readonly String prefixRequirement_DeliveryTaxcode = aliasRequirement_DeliveryTaxcode + "_";
private static readonly String aliasRequirement_Currency = "Req_Cur";
private static readonly String prefixRequirement_Currency = aliasRequirement_Currency + "_";
private static readonly String aliasRequirement_DeliveryAddress = "Req_DelAdd";
private static readonly String prefixRequirement_DeliveryAddress = aliasRequirement_DeliveryAddress + "_";
private static readonly String aliasRequirement_SourceRequirement = "Req_SrcReqnt";
private static readonly String prefixRequirement_SourceRequirement = aliasRequirement_SourceRequirement + "_";
private static readonly String aliasRequirement_SourceRequirementTransaction = "Req_SrcReqntTrans";
private static readonly String prefixRequirement_SourceRequirementTransaction = aliasRequirement_SourceRequirementTransaction + "_";
private static readonly String aliasRequirement_UnitOfMeasure = "Req_Uom";
private static readonly String prefixRequirement_UnitOfMeasure = aliasRequirement_UnitOfMeasure + "_";
private static readonly String aliasRequirement_Taxcode = "Req_Txc";
private static readonly String prefixRequirement_Taxcode = aliasRequirement_Taxcode + "_";
private static readonly String aliasRequirement_Commodity = "Req_Cmd";
private static readonly String prefixRequirement_Commodity = aliasRequirement_Commodity + "_";
private static readonly String aliasRequirement_CommodityCustomer = "Req_CmdCust";
private static readonly String prefixRequirement_CommodityCustomer = aliasRequirement_CommodityCustomer + "_";
private static readonly String aliasRequirement_Process = "Req_Proc";
private static readonly String prefixRequirement_Process = aliasRequirement_Process + "_";
private static readonly String aliasRequirment_ContainerItem = "Req_CntItm";
private static readonly String prefixRequirement_ContainerItem = aliasRequirment_ContainerItem + "_";
private static readonly String aliasAssociated_ItemLink = "Req_AssItmLnk";
private static readonly String prefixAssociated_ItemLink = aliasAssociated_ItemLink + "_";
private static readonly String aliasAssociated_Requirement = "Req_AssReq";
private static readonly String prefixAssociated_Requirement = aliasAssociated_Requirement + "_";
private static readonly String aliasAssociated_Requirement_Transaction = "aAssReqTra";
private static readonly String prefixAssociated_Requirement_Transaction = aliasAssociated_Requirement_Transaction + "_";
private static readonly String aliasAssociated_Requirement_Transaction_Association = "aAssReqTraAssoc";
private static readonly String prefixAssociated_Requirement_Transaction_Association = aliasAssociated_Requirement_Transaction_Association + "_";
private static readonly String aliasAssociated_Requirement_Transaction_AffiliateTarget = "aAssReqTraAffTgt";
private static readonly String prefixAssociated_Requirement_Transaction_AffiliateTarget = aliasAssociated_Requirement_Transaction_AffiliateTarget + "_";
private static readonly String aliasRequirment_ConstituentTime = "Req_ConTim";
private static readonly String prefixRequirement_ConstituentTime = aliasRequirment_ConstituentTime + "_";
private static readonly String aliasRequirment_ConstituentTime_AffiliateTarget = "Req_ConTimAffTgt";
private static readonly String prefixRequirement_ConstituentTime_AffiliateTarget = aliasRequirment_ConstituentTime_AffiliateTarget + "_";
private static readonly String aliasRequirment_SourceRequirementInvoice = "Req_SrcReqntInv";
private static readonly String aliasRequirment_SourceRequirementDispatched = "Req_SrcReqntDisp";
private static readonly String aliasRequirment_ConstProc = "Req_ConstProc";
private static readonly String prefixRequirement_LinkProcess = "ReqLnkPrc_";
// Column definition population.
private void SetRequirementColDfn
(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.Requirement)
alias = aliasRequirement;
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)Internals.GetColTextLen(dbCol);
}
//-------------------------------------------------------------------
// Getting Requirement column definition.
private static string transCostTotal = "TraReqCount";
private static string transReqntCount = "TraReqCount";
private static string quantityTotalByCmd = "QtyTotalByCmd";
private static string quantityDispatch = "QtyDisp";
private static string quantityInvoice = "QtyInv";
private static string cntItmCount = "CntItmCount";
private static string reqStockCurrent = "StkCurr";
private static string reqStockSalesLoc01 = "StkSalLoc01";
private static string reqStockSalesLoc02 = "StkSalLoc02";
private static string reqStockSalesLoc03 = "StkSalLoc03";
private static string reqStockDueImmin = "StkDueImm";
private static string reqStockAllocated = "StkAlloc";
private static string assocReqntRefCount = "AssReqRefCount";
public override ColumnDfn GetRequirementColumnDfn(SbmRequirement.Column column, string caption = "", int width = 0)
{
bool canViewSupplyFinancials = UserCanViewCommoditySupplyFinancials();
bool canViewSalesFinancials = UserCanViewCommoditySalesFinancials();
ColumnDfn columnDfn = new ColumnDfn((int)column, caption, width);
switch (column)
{
case SbmRequirement.Column.Pos:
SetRequirementColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SbmRequirement.Column.Id:
SetRequirementColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.Requirement_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
// Requirement Properties.
case SbmRequirement.Column.TransId:
SetRequirementColDfn(columnDfn, "Trans Id", 80, SbmDbDfn.ColumnIdx.Requirement_TransId, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmRequirement.Column.Seq:
SetRequirementColDfn(columnDfn, "Seq", 50, SbmDbDfn.ColumnIdx.Requirement_Seq, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.Started:
SetRequirementColDfn(columnDfn, "Started", 65, SbmDbDfn.ColumnIdx.Requirement_Started, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.StartedTime:
SetRequirementColDfn(columnDfn, "at", 60, SbmDbDfn.ColumnIdx.Requirement_Started, ColumnAlignment.Center, DataValue.DataType.Time);
columnDfn.TimeFormat = "HH-d-MM";
break;
case SbmRequirement.Column.Started_Day:
SetRequirementColDfn(columnDfn, "on", 60, SbmDbDfn.ColumnIdx.Requirement_Started, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.TimeFormat = "WWW";
break;
case SbmRequirement.Column.Required:
SetRequirementColDfn(columnDfn, "Required", 65, SbmDbDfn.ColumnIdx.Requirement_Required, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.RequiredTime:
SetRequirementColDfn(columnDfn, "at", 60, SbmDbDfn.ColumnIdx.Requirement_Required, ColumnAlignment.Center, DataValue.DataType.Time);
columnDfn.TimeFormat = "HH-d-MM";
break;
case SbmRequirement.Column.Required_Fmt:
SetRequirementColDfn(columnDfn, "Required", 100, SbmDbDfn.ColumnIdx.Requirement_Required, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.DateFormat = "dd-MMM-yyyy";
break;
case SbmRequirement.Column.Completed:
SetRequirementColDfn(columnDfn, "Completed", 65, SbmDbDfn.ColumnIdx.Requirement_Completed, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.CompletedTime:
SetRequirementColDfn(columnDfn, "at", 60, SbmDbDfn.ColumnIdx.Requirement_Completed, ColumnAlignment.Center, DataValue.DataType.Time);
columnDfn.TimeFormat = "HH-d-MM";
break;
case SbmRequirement.Column.JobNumber:
SetRequirementColDfn(columnDfn, "Job no", 65, SbmDbDfn.ColumnIdx.Requirement_JobNumber, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SbmRequirement.Column.CommodityId:
SetRequirementColDfn(columnDfn, "CmdId", 60, SbmDbDfn.ColumnIdx.Requirement_CommodityId, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmRequirement.Column.ProductCode:
SetRequirementColDfn(columnDfn, "Code", 120, SbmDbDfn.ColumnIdx.Requirement_ProductCode);
if (SessionConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityDoubleColumnWidth))
columnDfn.Width = columnDfn.Width * 2;
break;
case SbmRequirement.Column.DescBrief:
SetRequirementColDfn(columnDfn, "Description", 140, SbmDbDfn.ColumnIdx.Requirement_DescBrief);
if (SessionConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityDoubleColumnWidth))
columnDfn.Width = columnDfn.Width * 2;
break;
case SbmRequirement.Column.DescOutline:
SetRequirementColDfn(columnDfn, "Outline", 140, SbmDbDfn.ColumnIdx.Requirement_DescOutline);
break;
case SbmRequirement.Column.DescDetail:
SetRequirementColDfn(columnDfn, "Detail", 200, SbmDbDfn.ColumnIdx.Requirement_DescDetail);
break;
case SbmRequirement.Column.PromotionCode:
SetRequirementColDfn(columnDfn, "Promotion", 80, SbmDbDfn.ColumnIdx.Requirement_PromotionCode, ColumnAlignment.Center);
break;
case SbmRequirement.Column.PromotionDesc:
SetRequirementColDfn(columnDfn, "Promotion", 120, SbmDbDfn.ColumnIdx.Requirement_PromotionCode);
break;
case SbmRequirement.Column.Promotion_AltText:
SetRequirementColDfn(columnDfn, "Promo alt", 120, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmRequirement.Column.NominalCode:
SetRequirementColDfn(columnDfn, "Nominal", 80, SbmDbDfn.ColumnIdx.Requirement_NominalCode, ColumnAlignment.Center);
break;
case SbmRequirement.Column.Quantity:
SetRequirementColDfn(columnDfn, "Quantity", 70, SbmDbDfn.ColumnIdx.Requirement_Quantity, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmRequirement.Column.Quantity_TotalByCommodity:
SetRequirementColDfn(columnDfn, "Quantity", 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = quantityTotalByCmd;
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmRequirement.Column.QuantityProd:
SetRequirementColDfn(columnDfn, "Qty (prod)", 70, SbmDbDfn.ColumnIdx.Requirement_QuantityProd, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmRequirement.Column.Allocation_Ind:
SetRequirementColDfn(columnDfn, "Alloc", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SbmRequirement.Column.AllocationInd_YP:
SetRequirementColDfn(columnDfn, "Alloc", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SbmRequirement.Column.QuantityDispatched:
SetRequirementColDfn(columnDfn, "Qty (disp)", 64, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = quantityDispatch;
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmRequirement.Column.QuantityInvoiced:
SetRequirementColDfn(columnDfn, "Qty (inv)", 64, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = quantityInvoice;
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
case SbmRequirement.Column.AmountUnit:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Unit", 62, SbmDbDfn.ColumnIdx.Requirement_AmountUnit, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
}
break;
case SbmRequirement.Column.AmountUnit_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Unit", 80, SbmDbDfn.ColumnIdx.Requirement_AmountUnit, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.AmountAct:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Estimate", 62, SbmDbDfn.ColumnIdx.Requirement_AmountAct, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
}
break;
case SbmRequirement.Column.AmountAct_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Estimate", 80, SbmDbDfn.ColumnIdx.Requirement_AmountAct, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.AmountUnitNet:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Unit", 62, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
}
break;
case SbmRequirement.Column.AmountUnitNet_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Unit", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.AmountNet:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Net", 60, SbmDbDfn.ColumnIdx.Requirement_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
}
break;
case SbmRequirement.Column.AmountNet_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Net", 80, SbmDbDfn.ColumnIdx.Requirement_AmountNet, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.TaxCodeId:
SetRequirementColDfn(columnDfn, "Tax Id", 32, SbmDbDfn.ColumnIdx.Requirement_TaxCodeId, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmRequirement.Column.TaxCode_Code:
SetRequirementColDfn(columnDfn, "Tax Code", 50, SbmDbDfn.ColumnIdx.TaxCode_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Taxcode, prefixRequirement_Taxcode);
break;
case SbmRequirement.Column.TaxRate:
SetRequirementColDfn(columnDfn, "Tax%", 50, SbmDbDfn.ColumnIdx.Requirement_TaxRate, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmRequirement.Column.AmountTax:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Tax", 60, SbmDbDfn.ColumnIdx.Requirement_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
}
break;
case SbmRequirement.Column.AmountTax_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Tax", 80, SbmDbDfn.ColumnIdx.Requirement_AmountTax, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.AmountTot:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Total", 60, SbmDbDfn.ColumnIdx.Requirement_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = CurrencyDecimalsDefault;
}
break;
case SbmRequirement.Column.AmountTot_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Total", 80, SbmDbDfn.ColumnIdx.Requirement_AmountTot, ColumnAlignment.Right, DataValue.DataType.String);
break;
//-----------------------------------------------------------------
// Derived discounts:
case SbmRequirement.Column.PercentDiscountBySalesPrice:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Discount % by price", 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = 1;
}
break;
case SbmRequirement.Column.PercentDiscountByRetailPrice:
if (canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Discount % by RRP", 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = 1;
}
break;
//-----------------------------------------------------------------
// Item times:
case SbmRequirement.Column.TimeEst:
case SbmRequirement.Column.TimeEstMins:
case SbmRequirement.Column.TimeEstWithMins:
SetRequirementColDfn(columnDfn, "Time (est)", 75, SbmDbDfn.ColumnIdx.Requirement_TimeEst, ColumnAlignment.Right);
if (column == SbmRequirement.Column.TimeEst) columnDfn.DataType = DataValue.DataType.Double;
else if (column == SbmRequirement.Column.TimeEstMins) columnDfn.DataType = DataValue.DataType.Long;
break;
case SbmRequirement.Column.TimeEstUnit:
case SbmRequirement.Column.TimeEstUnitMins:
case SbmRequirement.Column.TimeEstUnitWithMins:
SetRequirementColDfn(columnDfn, "Unit time (est)", 90, SbmDbDfn.ColumnIdx.Requirement_TimeEst, ColumnAlignment.Right);
if (column == SbmRequirement.Column.TimeEstUnit) columnDfn.DataType = DataValue.DataType.Double;
else if (column == SbmRequirement.Column.TimeEstUnitMins) columnDfn.DataType = DataValue.DataType.Long;
break;
case SbmRequirement.Column.TimeAct:
case SbmRequirement.Column.TimeActMins:
case SbmRequirement.Column.TimeActWithMins:
SetRequirementColDfn(columnDfn, "Time (act)", 75, SbmDbDfn.ColumnIdx.Requirement_TimeAct, ColumnAlignment.Right);
if (column == SbmRequirement.Column.TimeAct) columnDfn.DataType = DataValue.DataType.Double;
else if (column == SbmRequirement.Column.TimeActMins) columnDfn.DataType = DataValue.DataType.Long;
break;
case SbmRequirement.Column.TimeActUnit:
case SbmRequirement.Column.TimeActUnitMins:
case SbmRequirement.Column.TimeActUnitWithMins:
SetRequirementColDfn(columnDfn, "Unit time (act)", 90, SbmDbDfn.ColumnIdx.Requirement_TimeAct, ColumnAlignment.Right);
if (column == SbmRequirement.Column.TimeActUnit) columnDfn.DataType = DataValue.DataType.Double;
else if (column == SbmRequirement.Column.TimeActUnitMins) columnDfn.DataType = DataValue.DataType.Long;
break;
case SbmRequirement.Column.TimeTot:
case SbmRequirement.Column.TimeTotMins:
case SbmRequirement.Column.TimeTotWithMins:
SetRequirementColDfn(columnDfn, "Time (tot)", 60, SbmDbDfn.ColumnIdx.Requirement_TimeTot, ColumnAlignment.Right);
if (column == SbmRequirement.Column.TimeTot) columnDfn.DataType = DataValue.DataType.Double;
else if (column == SbmRequirement.Column.TimeTotMins) columnDfn.DataType = DataValue.DataType.Long;
break;
// Job costing.
case SbmRequirement.Column.CostTotal:
if (canViewSupplyFinancials)
SetRequirementColDfn(columnDfn, "Cost", 80, SbmDbDfn.ColumnIdx.Requirement_CostTotal, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmRequirement.Column.CostTotal_Fmt:
if (canViewSupplyFinancials)
SetRequirementColDfn(columnDfn, "Cost", 90, SbmDbDfn.ColumnIdx.Requirement_CostTotal, ColumnAlignment.Right);
break;
case SbmRequirement.Column.CostCalculated:
if (canViewSupplyFinancials)
SetRequirementColDfn(columnDfn, "Cost calcuated", 90, SbmDbDfn.ColumnIdx.Requirement_CostCalculated, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SbmRequirement.Column.AmountMargin:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.AmountMargin_Fmt:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.PercentMargin:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "% Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.PercentMargin_Fmt:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "% Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.ResearchDevelopment_YN:
case SbmRequirement.Column.ResearchDevelopment_YBlank:
SetRequirementColDfn(columnDfn, "RandD", 60, SbmDbDfn.ColumnIdx.Requirement_Flags, ColumnAlignment.Center);
break;
//-----------------------------------------------------------------
// Association details.
case SbmRequirement.Column.Owner_Name:
SetRequirementColDfn(columnDfn, "Owner", 100, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AffiliateOwner, prefixRequirement_AffiliateOwner);
break;
case SbmRequirement.Column.Assoc_Code:
SetRequirementColDfn(columnDfn, "Code", 80, SbmDbDfn.ColumnIdx.Association_Code, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Association, prefixRequirement_Association);
break;
case SbmRequirement.Column.Assoc_AccountManagerCode:
case SbmRequirement.Column.Assoc_AccountManagerDesc:
{
String colLabel = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Acc.Mgr.");
SetRequirementColDfn(columnDfn, colLabel, 80, SbmDbDfn.ColumnIdx.Association_AccountManagerCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Association, prefixRequirement_Association);
break;
}
case SbmRequirement.Column.Assoc_AccountHandlerCode:
case SbmRequirement.Column.Assoc_AccountHandlerDesc:
{
String colLabel = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "Acc.Hndlr");
SetRequirementColDfn(columnDfn, colLabel, 80, SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Association, prefixRequirement_Association);
break;
}
case SbmRequirement.Column.Assoc_Target_Name:
SetRequirementColDfn(columnDfn, "Target", 130, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AssAffTarget, prefixRequirement_AssAffTarget);
break;
case SbmRequirement.Column.Assoc_Target_PhoneMain:
SetRequirementColDfn(columnDfn, "Phone", 75, SbmDbDfn.ColumnIdx.Affiliate_PhoneMain, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AssAffTarget, prefixRequirement_AssAffTarget);
break;
case SbmRequirement.Column.Assoc_Target_PhoneAlt:
SetRequirementColDfn(columnDfn, "Phone (alt)", 75, SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AssAffTarget, prefixRequirement_AssAffTarget);
break;
//-----------------------------------------------------------------
// Transaction details.
case SbmRequirement.Column.Trans_TypeDesc:
SetRequirementColDfn(columnDfn, "Trans type", 70, SbmDbDfn.ColumnIdx.Transaction_Type, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_Ref:
SetRequirementColDfn(columnDfn, "Ref", 80, SbmDbDfn.ColumnIdx.Transaction_Ref, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_RefExt:
SetRequirementColDfn(columnDfn, "Ext. ref", 80, SbmDbDfn.ColumnIdx.Transaction_RefExt, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DescBrief:
SetRequirementColDfn(columnDfn, "Transaction", 150, SbmDbDfn.ColumnIdx.Transaction_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_ContactName:
SetRequirementColDfn(columnDfn, "Contact", 120, SbmDbDfn.ColumnIdx.Transaction_ContactName, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_Raised:
SetRequirementColDfn(columnDfn, "Raised", 65, SbmDbDfn.ColumnIdx.Transaction_Raised, ColumnAlignment.Center, DataValue.DataType.Date, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.Trans_Required:
SetRequirementColDfn(columnDfn, "Required", 65, SbmDbDfn.ColumnIdx.Transaction_Required, ColumnAlignment.Center, DataValue.DataType.Date, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.Trans_InProgress:
SetRequirementColDfn(columnDfn, "InProgress", 65, SbmDbDfn.ColumnIdx.Transaction_InProgress, ColumnAlignment.Center, DataValue.DataType.Date, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.Trans_Closed:
SetRequirementColDfn(columnDfn, "Closed", 65, SbmDbDfn.ColumnIdx.Transaction_Closed, ColumnAlignment.Center, DataValue.DataType.Date, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.DateFormat = "d-MMM-yy";
break;
case SbmRequirement.Column.Trans_ContactAreaCode:
case SbmRequirement.Column.Trans_ContactArea:
{
String colLabel = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, column == SbmRequirement.Column.Trans_ContactAreaCode ? "Cont.Area" : "ContactArea");
int colWidth = column == SbmRequirement.Column.Trans_ContactAreaCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_ContactAreaCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_BoxCount:
SetRequirementColDfn(columnDfn, "Box count", 80, SbmDbDfn.ColumnIdx.Transaction_BoxCount, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryStatusCode:
case SbmRequirement.Column.Trans_DeliveryStatus:
{
String colLabel = column == SbmRequirement.Column.Trans_DeliveryStatusCode ? "Del.Stat" : "Delivery status";
int colWidth = column == SbmRequirement.Column.Trans_DeliveryStatusCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_DeliveryStatusCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryTypeCode:
case SbmRequirement.Column.Trans_DeliveryType:
{
String colLabel = column == SbmRequirement.Column.Trans_DeliveryTypeCode ? "Del.Type" : "Delivery type";
int colWidth = column == SbmRequirement.Column.Trans_DeliveryTypeCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_DeliveryTypeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryMethodCode:
case SbmRequirement.Column.Trans_DeliveryMethod:
{
String colLabel = column == SbmRequirement.Column.Trans_DeliveryMethodCode ? "Del.Meth." : "Delivery Method";
int colWidth = column == SbmRequirement.Column.Trans_DeliveryMethodCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_DeliveryMethodCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryCourierCode:
case SbmRequirement.Column.Trans_DeliveryCourier:
{
String colLabel = column == SbmRequirement.Column.Trans_DeliveryCourierCode ? "Del.Cour." : "Delivery Courier";
int colWidth = column == SbmRequirement.Column.Trans_DeliveryCourierCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_DeliveryCourierCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryBookInCode:
case SbmRequirement.Column.Trans_DeliveryBookIn:
{
String colLabel = column == SbmRequirement.Column.Trans_DeliveryBookInCode ? "Del.BookIn" : "Delivery BookIn";
int colWidth = column == SbmRequirement.Column.Trans_DeliveryBookInCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_DeliveryBookInCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_StockPickerCode:
case SbmRequirement.Column.Trans_StockPicker:
{
String colLabel = column == SbmRequirement.Column.Trans_StockPickerCode ? "Del.BookIn" : "Delivery BookIn";
int colWidth = column == SbmRequirement.Column.Trans_StockPickerCode ? 60 : 120;
SetRequirementColDfn(columnDfn, colLabel, colWidth, SbmDbDfn.ColumnIdx.Transaction_StockPickerCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryAmountNet:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Delivery net.amt", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Delivery net.amt", 100, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryTaxCodeId:
{
SetRequirementColDfn(columnDfn, "Delivery TxcId", 80, SbmDbDfn.ColumnIdx.Transaction_TaxCodeId, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryTaxCode_Code:
{
SetRequirementColDfn(columnDfn, "Delivery tax code", 90, SbmDbDfn.ColumnIdx.TaxCode_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_DeliveryTaxcode, prefixRequirement_DeliveryTaxcode);
break;
}
case SbmRequirement.Column.Trans_DeliveryTaxCode_Rate:
{
SetRequirementColDfn(columnDfn, "Delivery tax code", 90, SbmDbDfn.ColumnIdx.TaxCode_TaxRate, ColumnAlignment.Center, DataValue.DataType.Double, aliasRequirement_DeliveryTaxcode, prefixRequirement_DeliveryTaxcode);
break;
}
case SbmRequirement.Column.Trans_DeliveryAmountTax:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Delivery tax.amt", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Delivery tax.amt", 100, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryAmountTot:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Delivery tot.amt", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryAmountTot_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Delivery tot.amt", 100, SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_DeliveryNominalCode:
{
SetRequirementColDfn(columnDfn, "Delivery nominal", 90, SbmDbDfn.ColumnIdx.Transaction_DeliveryNominalCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_DeliveryDepartment:
{
SetRequirementColDfn(columnDfn, "Delivery dept", 90, SbmDbDfn.ColumnIdx.Transaction_Department, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
}
case SbmRequirement.Column.Trans_ReqntCount:
SetRequirementColDfn(columnDfn, "Reqs", 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.DataName = transReqntCount;
columnDfn.SortDataName = transReqntCount; // Will this work?
break;
//-------------------------------------------------------------------
// Transaction financials.
case SbmRequirement.Column.Trans_CurrencyId:
SetRequirementColDfn(columnDfn, "Currency #", 60, SbmDbDfn.ColumnIdx.Transaction_CurrencyId, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_Currency_Code:
SetRequirementColDfn(columnDfn, "Currency", 80, SbmDbDfn.ColumnIdx.Currency_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Currency, prefixRequirement_Currency);
break;
case SbmRequirement.Column.Trans_Currency_Symbol:
SetRequirementColDfn(columnDfn, "Currency", 80, SbmDbDfn.ColumnIdx.Currency_Symbol, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Currency, prefixRequirement_Currency);
break;
case SbmRequirement.Column.Trans_AmountEst:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (est)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountEst, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountEst_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (est)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountEst, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountMax:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (max)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountMax, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountMax_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (max)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountMax, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountNet:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (net)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountNet_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (net)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountNet, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountTax:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (tax)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountTax_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (tax)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountTax, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountTot:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (tot)", 80, SbmDbDfn.ColumnIdx.Transaction_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AmountTot_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Trans £ (tot)", 90, SbmDbDfn.ColumnIdx.Transaction_AmountTot, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_TimeEst:
SetRequirementColDfn(columnDfn, "Trans time (est)", 80, SbmDbDfn.ColumnIdx.Transaction_TimeEst, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_TimeAct:
SetRequirementColDfn(columnDfn, "Trans time (act)", 80, SbmDbDfn.ColumnIdx.Transaction_TimeAct, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_TimeTot:
SetRequirementColDfn(columnDfn, "Trans time (tot)", 80, SbmDbDfn.ColumnIdx.Transaction_TimeTot, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_Notes:
SetRequirementColDfn(columnDfn, "Trans Notes", 200, SbmDbDfn.ColumnIdx.Transaction_Notes, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_Flags:
SetRequirementColDfn(columnDfn, "Trans flags", 60, SbmDbDfn.ColumnIdx.Transaction_Flags, ColumnAlignment.Center, DataValue.DataType.Long, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_AllocationInd:
SetRequirementColDfn(columnDfn, "Trans alloc", 60, SbmDbDfn.ColumnIdx.Transaction_Flags, ColumnAlignment.Center, DataValue.DataType.TriState, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SbmRequirement.Column.Trans_AllocationInd_YP:
SetRequirementColDfn(columnDfn, "Trans alloc", 60, SbmDbDfn.ColumnIdx.Transaction_Flags, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_ReplacementOrder_Tick:
SetRequirementColDfn(columnDfn, "Replacement", 80, SbmDbDfn.ColumnIdx.Transaction_Flags, ColumnAlignment.Center, DataValue.DataType.Bool, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.BoolFormat = ColumnBoolFormat.Tick;
break;
case SbmRequirement.Column.Trans_ReplacementOrder_Y:
SetRequirementColDfn(columnDfn, "Replacement", 80, SbmDbDfn.ColumnIdx.Transaction_Flags, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_StatusDesc:
SetRequirementColDfn(columnDfn, "Trans Status", 50, SbmDbDfn.ColumnIdx.Transaction_Status, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_StatusInd:
SetRequirementColDfn(columnDfn, "Trans stat", 50, SbmDbDfn.ColumnIdx.Transaction_Status, ColumnAlignment.Center, DataValue.DataType.TriState, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SbmRequirement.Column.Trans_Status_OnHold_Tick:
SetRequirementColDfn(columnDfn, "Hold", 60, SbmDbDfn.ColumnIdx.Transaction_Status, ColumnAlignment.Center, DataValue.DataType.Bool, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.BoolFormat = ColumnBoolFormat.Tick;
break;
case SbmRequirement.Column.Trans_Status_OnHold_Cross:
SetRequirementColDfn(columnDfn, "Hold", 60, SbmDbDfn.ColumnIdx.Transaction_Status, ColumnAlignment.Center, DataValue.DataType.Bool, aliasRequirement_Transaction, prefixRequirement_Transaction);
columnDfn.BoolFormat = ColumnBoolFormat.Cross_Inv;
break;
case SbmRequirement.Column.Trans_Status_OnHold_Y:
SetRequirementColDfn(columnDfn, "Hold", 60, SbmDbDfn.ColumnIdx.Transaction_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
//-----------------------------------------------------------------
// Transaction cost.
case SbmRequirement.Column.Trans_CostLabourRateHour:
if (canViewSupplyFinancials)
SetRequirementColDfn(columnDfn, "Trans labour rate", 80, SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour, ColumnAlignment.Right, DataValue.DataType.Double);
break;
case SbmRequirement.Column.Trans_CostTotal:
if (canViewSupplyFinancials)
{
SetRequirementColDfn(columnDfn, "Trans cost", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.DataName = transCostTotal;
}
break;
case SbmRequirement.Column.Trans_CostTotal_Fmt:
if (canViewSupplyFinancials)
SetRequirementColDfn(columnDfn, "Trans cost", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
break;
case SbmRequirement.Column.Trans_AmountMargin:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Trans margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.Trans_AmountMargin_Fmt:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Trans margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.Trans_PercentMargin:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Trans % Margin", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.ShowZeroValues = true;
}
break;
case SbmRequirement.Column.Trans_PercentMargin_Fmt:
if (canViewSupplyFinancials && canViewSalesFinancials)
{
SetRequirementColDfn(columnDfn, "Trans % Margin", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.ShowZeroValues = true;
}
break;
//-----------------------------------------------------------------
// Target's primary address:
case SbmRequirement.Column.Trans_AssocTarget_Address:
SetRequirementColDfn(columnDfn, "Account address", 180, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_Name:
SetRequirementColDfn(columnDfn, "Name (acc)", 120, SbmDbDfn.ColumnIdx.Address_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_Line1:
SetRequirementColDfn(columnDfn, "Line 1 (acc)", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_Line2:
SetRequirementColDfn(columnDfn, "Line 2 (acc)", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_Line3:
SetRequirementColDfn(columnDfn, "Line 3 (acc)", 120, SbmDbDfn.ColumnIdx.Address_Line3, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_City:
SetRequirementColDfn(columnDfn, "City (acc)", 120, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_Province:
SetRequirementColDfn(columnDfn, "Province (acc)", 120, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
case SbmRequirement.Column.Trans_AssocTarget_Address_Postcode:
SetRequirementColDfn(columnDfn, "DescBrief (acc)", 90, SbmDbDfn.ColumnIdx.Address_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_AddressTarget, prefixRequirement_AddressTarget);
break;
//-----------------------------------------------------------------
// Delivery address:
case SbmRequirement.Column.Trans_DeliveryAddress:
SetRequirementColDfn(columnDfn, "Delivery address", 320, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Name:
SetRequirementColDfn(columnDfn, "Delivery name", 120, SbmDbDfn.ColumnIdx.Address_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Line1:
SetRequirementColDfn(columnDfn, "Line 1 (del)", 120, SbmDbDfn.ColumnIdx.Address_Line1, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Line2:
SetRequirementColDfn(columnDfn, "Line 2 (del)", 120, SbmDbDfn.ColumnIdx.Address_Line2, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Line3:
SetRequirementColDfn(columnDfn, "Line 3 (del)", 120, SbmDbDfn.ColumnIdx.Address_Line3, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_City:
SetRequirementColDfn(columnDfn, "City (del)", 120, SbmDbDfn.ColumnIdx.Address_City, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Province:
SetRequirementColDfn(columnDfn, "Province (del)", 120, SbmDbDfn.ColumnIdx.Address_Province, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Postcode:
SetRequirementColDfn(columnDfn, "DescBrief (del)", 90, SbmDbDfn.ColumnIdx.Address_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Phone:
SetRequirementColDfn(columnDfn, "Phone (del)", 120, SbmDbDfn.ColumnIdx.Address_Phone, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_DeliveryAddress_Email:
SetRequirementColDfn(columnDfn, "Email (del)", 200, SbmDbDfn.ColumnIdx.Address_Email, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_DeliveryAddress, prefixRequirement_DeliveryAddress);
break;
case SbmRequirement.Column.Trans_SourceTrans_Ref:
SetRequirementColDfn(columnDfn, "Source trans ref", 120, SbmDbDfn.ColumnIdx.Transaction_Ref, ColumnAlignment.Default, DataValue.DataType.String, aliasRequirement_SourceTransaction, prefixRequirement_SourceTransaction);
break;
//-----------------------------------------------------------------
// Unit of measure:
case SbmRequirement.Column.UomDesc:
SetRequirementColDfn(columnDfn, "Unit", 80, SbmDbDfn.ColumnIdx.UnitMeasure_Single, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_UnitOfMeasure, prefixRequirement_UnitOfMeasure);
break;
//-----------------------------------------------------------------
// Source requirement:
case SbmRequirement.Column.SourceReqnt_DescBrief:
SetRequirementColDfn(columnDfn, "Requirement", 120, SbmDbDfn.ColumnIdx.Requirement_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_SourceRequirement, prefixRequirement_SourceRequirement);
break;
case SbmRequirement.Column.SourceReqnt_JobNumber:
SetRequirementColDfn(columnDfn, "Job number", 80, SbmDbDfn.ColumnIdx.Requirement_JobNumber, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_SourceRequirement, prefixRequirement_SourceRequirement);
break;
case SbmRequirement.Column.SourceReqnt_TransRef:
SetRequirementColDfn(columnDfn, "Src Trans Ref", 80, SbmDbDfn.ColumnIdx.Transaction_Ref, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_SourceRequirementTransaction, prefixRequirement_SourceRequirementTransaction);
break;
case SbmRequirement.Column.SourceReqnt_TransRefExt:
SetRequirementColDfn(columnDfn, "Src Trans Ref Ext", 90, SbmDbDfn.ColumnIdx.Transaction_RefExt, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_SourceRequirementTransaction, prefixRequirement_SourceRequirementTransaction);
break;
// Order or source order info:
case SbmRequirement.Column.OrderItem_JobNumber:
SetRequirementColDfn(columnDfn, "Job number", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_SourceRequirement, prefixRequirement_SourceRequirement);
break;
//-----------------------------------------------------------------
// Commodity.
case SbmRequirement.Column.Cmd_DrawingNo:
SetRequirementColDfn(columnDfn, "Drawing", 90, SbmDbDfn.ColumnIdx.Commodity_DrawingNo, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_DrawingIssue:
SetRequirementColDfn(columnDfn, "Issue", 50, SbmDbDfn.ColumnIdx.Commodity_DrawingIssue, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_ImagePath:
case SbmRequirement.Column.Cmd_Image:
SetRequirementColDfn(columnDfn, "Image path", 120, SbmDbDfn.ColumnIdx.Commodity_ImagePath, ColumnAlignment.Default, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Category:
SetRequirementColDfn(columnDfn, "Category", 80, SbmDbDfn.ColumnIdx.Commodity_Category, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Location:
SetRequirementColDfn(columnDfn, "Location", 80, SbmDbDfn.ColumnIdx.Commodity_Location, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Department:
SetRequirementColDfn(columnDfn, "Department", 80, SbmDbDfn.ColumnIdx.Commodity_Department, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_CatalogRef:
SetRequirementColDfn(columnDfn, "Catalog ref", 90, SbmDbDfn.ColumnIdx.Commodity_CatalogRef, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Weight:
SetRequirementColDfn(columnDfn, "Weight", 80, SbmDbDfn.ColumnIdx.Commodity_Weight, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
columnDfn.NumDecimals = (byte)WeightDecimals;
break;
case SbmRequirement.Column.Cmd_WeightUnit:
SetRequirementColDfn(columnDfn, "Weight unit#", 80, SbmDbDfn.ColumnIdx.Commodity_UomIdWeight, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Weight_ValueUnits:
SetRequirementColDfn(columnDfn, "Weight", 90, SbmDbDfn.ColumnIdx.Commodity_Weight, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Length:
SetRequirementColDfn(columnDfn, "Length", 80, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Width:
break;
case SbmRequirement.Column.Cmd_Height:
break;
case SbmRequirement.Column.Cmd_LengthUnit:
SetRequirementColDfn(columnDfn, "Length unit#", 80, SbmDbDfn.ColumnIdx.Commodity_UomIdLength, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Length_ValueUnits:
SetRequirementColDfn(columnDfn, "Length", 90, SbmDbDfn.ColumnIdx.Commodity_Length, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Volume:
SetRequirementColDfn(columnDfn, "Volume", 80, SbmDbDfn.ColumnIdx.Commodity_Volume, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_VolumeUnit:
SetRequirementColDfn(columnDfn, "Volume unit#", 80, SbmDbDfn.ColumnIdx.Commodity_UomIdVolume, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Volume_ValueUnits:
SetRequirementColDfn(columnDfn, "Volume", 90, SbmDbDfn.ColumnIdx.Commodity_Volume, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Density:
SetRequirementColDfn(columnDfn, "Density", 80, SbmDbDfn.ColumnIdx.Commodity_Density, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_DensityUnit:
SetRequirementColDfn(columnDfn, "Density unit#", 80, SbmDbDfn.ColumnIdx.Commodity_UomIdDensity, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Density_ValueUnits:
SetRequirementColDfn(columnDfn, "Density", 90, SbmDbDfn.ColumnIdx.Commodity_Density, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_MinOrderQty:
SetRequirementColDfn(columnDfn, "Min order qty", 80, SbmDbDfn.ColumnIdx.Commodity_MinOrderQty, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_PackQtySale:
SetRequirementColDfn(columnDfn, "Pack qty - sale", 80, SbmDbDfn.ColumnIdx.Commodity_PackQty, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_BoxQuantity:
SetRequirementColDfn(columnDfn, "Box qty", 80, SbmDbDfn.ColumnIdx.Commodity_BoxQuantity, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_BoxUnit:
SetRequirementColDfn(columnDfn, "Box qtyunit#", 80, SbmDbDfn.ColumnIdx.Commodity_UomIdBox, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_BoxQuantity_ValueUnits:
SetRequirementColDfn(columnDfn, "Box qty", 90, SbmDbDfn.ColumnIdx.Commodity_BoxQuantity, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Dimensions:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_Dimensions, "Dimensions"), 100, SbmDbDfn.ColumnIdx.Commodity_Dimensions, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SpecSummary:
SetRequirementColDfn(columnDfn, "Spec. summary", 120, SbmDbDfn.ColumnIdx.Commodity_SpecSummary, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_ICNTariffCode:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, "ICN tariff"), 100, SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_RangeCode:
SetRequirementColDfn(columnDfn, "Range", 80, SbmDbDfn.ColumnIdx.Commodity_RangeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_RangeDesc:
SetRequirementColDfn(columnDfn, "Range", 100, SbmDbDfn.ColumnIdx.Commodity_RangeCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_ColourCode:
SetRequirementColDfn(columnDfn, "Colour", 80, SbmDbDfn.ColumnIdx.Commodity_ColourCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_ColourDesc:
SetRequirementColDfn(columnDfn, "Colour", 100, SbmDbDfn.ColumnIdx.Commodity_ColourCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SourceCode:
SetRequirementColDfn(columnDfn, "Source", 80, SbmDbDfn.ColumnIdx.Commodity_SourceCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SourceDesc:
SetRequirementColDfn(columnDfn, "Source", 100, SbmDbDfn.ColumnIdx.Commodity_SourceCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SupplyMethodCode:
SetRequirementColDfn(columnDfn, "Supply method", 80, SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SupplyMethodDesc:
SetRequirementColDfn(columnDfn, "Supply method", 100, SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_HandlingCode:
SetRequirementColDfn(columnDfn, "Handling", 80, SbmDbDfn.ColumnIdx.Commodity_HandlingCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_HandlingDesc:
SetRequirementColDfn(columnDfn, "Handling", 100, SbmDbDfn.ColumnIdx.Commodity_HandlingCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_DeliveryCode:
SetRequirementColDfn(columnDfn, "Delivery", 80, SbmDbDfn.ColumnIdx.Commodity_DeliveryCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_DeliveryDesc:
SetRequirementColDfn(columnDfn, "Delivery", 100, SbmDbDfn.ColumnIdx.Commodity_DeliveryCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_MaterialCode:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material"), 90, SbmDbDfn.ColumnIdx.Commodity_MaterialCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_MaterialDesc:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material"), 90, SbmDbDfn.ColumnIdx.Commodity_MaterialCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_FinishCode:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish"), 90, SbmDbDfn.ColumnIdx.Commodity_FinishCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_FinishDesc:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish"), 90, SbmDbDfn.ColumnIdx.Commodity_FinishCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_PromotionCode:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Cmd promo"), 80, SbmDbDfn.ColumnIdx.Commodity_PromotionCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_PromotionDesc:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Cmd promo"), 120, SbmDbDfn.ColumnIdx.Commodity_PromotionCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_Promotion_AltText:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Cmd promo alt"), 120, SbmDbDfn.ColumnIdx.Unknown);
break;
case SbmRequirement.Column.Cmd_CostPrice:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price"), 80, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_CostPrice_Fmt:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price"), 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
columnDfn.SortDataName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CostPrice, aliasRequirement_Commodity, false);
break;
case SbmRequirement.Column.Cmd_MaterialCost:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost"), 80, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_MaterialCost_Fmt:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost"), 90, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_CurrencyIdMaterial:
SetRequirementColDfn(columnDfn, "Material cost curr#", 90, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SalesPrice:
SetRequirementColDfn(columnDfn, "Sales price", 80, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_SalesPrice_Fmt:
SetRequirementColDfn(columnDfn, "Sales price", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
columnDfn.SortDataName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, aliasRequirement_Commodity, false);
break;
case SbmRequirement.Column.Cmd_RetailPrice:
SetRequirementColDfn(columnDfn, "Retail price", 80, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_RetailPrice_Fmt:
SetRequirementColDfn(columnDfn, "Retail price", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
columnDfn.SortDataName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_RetailPrice, aliasRequirement_Commodity, false);
break;
case SbmRequirement.Column.Cmd_CarriageCostIndicative:
SetRequirementColDfn(columnDfn, "Carriage cost (ind)", 90, SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_Commodity, prefixRequirement_Commodity);
break;
case SbmRequirement.Column.Cmd_CarriageCostIndicative_Fmt:
SetRequirementColDfn(columnDfn, "Carriage cost (ind)", 100, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_Commodity, prefixRequirement_Commodity);
columnDfn.SortDataName = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative, aliasRequirement_Commodity, false);
break;
//-----------------------------------------------------------------
// Customer's commodity details.
case SbmRequirement.Column.Cmd_Cust_ProductCode:
SetRequirementColDfn(columnDfn, "Customer product", 90, SbmDbDfn.ColumnIdx.CommodityCustomer_ProductCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer);
break;
case SbmRequirement.Column.Cmd_Cust_RetailPrice:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Customer retail", 80, SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer);
break;
case SbmRequirement.Column.Cmd_Cust_RetailPrice_Fmt:
if (canViewSalesFinancials)
SetRequirementColDfn(columnDfn, "Customer retail", 80, SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail, ColumnAlignment.Right, DataValue.DataType.String, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer);
break;
case SbmRequirement.Column.Cmd_Cust_CurrencyIdRetail:
SetRequirementColDfn(columnDfn, "Customer retail curr#", 60, SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer);
break;
case SbmRequirement.Column.Cmd_Cust_PromotionCode:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, "Cust promo"), 80, SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, ColumnAlignment.Center, DataValue.DataType.String, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer);
break;
case SbmRequirement.Column.Cmd_Cust_PromotionDesc:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, "Cust promo"), 120, SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_CommodityCustomer, prefixRequirement_CommodityCustomer);
break;
case SbmRequirement.Column.Cmd_Cust_Promotion_AltText:
SetRequirementColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode, "Cust promo alt"), 120, SbmDbDfn.ColumnIdx.Unknown);
break;
//-----------------------------------------------------------------
// Container items:
case SbmRequirement.Column.CntItm_Count:
SetRequirementColDfn(columnDfn, "Container items", 85, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.DataName = cntItmCount;
break;
case SbmRequirement.Column.CntItm_Quantity:
SetRequirementColDfn(columnDfn, "Qty (container)", 90, SbmDbDfn.ColumnIdx.ContainerItem_Quantity, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirment_ContainerItem, prefixRequirement_ContainerItem);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
//-----------------------------------------------------------------
case SbmRequirement.Column.NextProcessDesc:
SetRequirementColDfn(columnDfn, "Next process", 120, SbmDbDfn.ColumnIdx.Unknown);
columnDfn.DataName = prefixRequirement_Process + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Process_DescBrief);
break;
//-----------------------------------------------------------------
// Associated requirements:
case SbmRequirement.Column.AssocReqnt_Reqnt_Id:
SetRequirementColDfn(columnDfn, "AssocReqnt_Id", 90, SbmDbDfn.ColumnIdx.Requirement_Id, ColumnAlignment.Right, DataValue.DataType.Double, aliasAssociated_Requirement, prefixAssociated_Requirement);
break;
case SbmRequirement.Column.AssocReqnt_Reqnt_RefCount:
SetRequirementColDfn(columnDfn, "AssocReqnt_RefCount", 90, SbmDbDfn.ColumnIdx.Unknown);
columnDfn.DataName = assocReqntRefCount;
break;
case SbmRequirement.Column.AssocReqnt_Trans_Id:
SetRequirementColDfn(columnDfn, "AssocReqnt_TransId", 90, SbmDbDfn.ColumnIdx.Transaction_Id, ColumnAlignment.Right, DataValue.DataType.Double, aliasAssociated_Requirement_Transaction, prefixAssociated_Requirement_Transaction);
break;
case SbmRequirement.Column.AssocReqnt_Trans_Type:
SetRequirementColDfn(columnDfn, "AssocReqnt_Trans_Type", 90, SbmDbDfn.ColumnIdx.Transaction_Type, ColumnAlignment.Right, DataValue.DataType.Double, aliasAssociated_Requirement_Transaction, prefixAssociated_Requirement_Transaction);
break;
case SbmRequirement.Column.AssocReqnt_Trans_Ref:
SetRequirementColDfn(columnDfn, "AssocReqnt_Trans_Ref", 100, SbmDbDfn.ColumnIdx.Transaction_Ref, ColumnAlignment.Center, DataValue.DataType.String, aliasAssociated_Requirement_Transaction, prefixAssociated_Requirement_Transaction);
break;
case SbmRequirement.Column.AssocReqnt_Trans_AffTarget_Name:
SetRequirementColDfn(columnDfn, "AssocReqnt_Trans_AffTarget_Name", 140, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasAssociated_Requirement_Transaction_AffiliateTarget, prefixAssociated_Requirement_Transaction_AffiliateTarget);
break;
case SbmRequirement.Column.AssocReqnt_Reqnt_AmountNet:
SetRequirementColDfn(columnDfn, "AssocReqnt_AmountNet", 90, SbmDbDfn.ColumnIdx.Requirement_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double, aliasAssociated_Requirement, prefixAssociated_Requirement);
break;
case SbmRequirement.Column.AssocReqnt_ItemLink_DataContent:
SetRequirementColDfn(columnDfn, "AssocReqnt_ItemLink_DataContent", 160, SbmDbDfn.ColumnIdx.ItemLink_DataContent, ColumnAlignment.Left, DataValue.DataType.String, aliasAssociated_ItemLink, prefixAssociated_ItemLink);
break;
//-----------------------------------------------------------------
// Time records:
case SbmRequirement.Column.ConstTime_Id:
SetRequirementColDfn(columnDfn, "ConstTime_Id", 90, SbmDbDfn.ColumnIdx.Constituent_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasRequirment_ConstituentTime, prefixRequirement_ConstituentTime);
break;
case SbmRequirement.Column.ConstTime_Quantity:
SetRequirementColDfn(columnDfn, "ConstTime_Quantity", 90, SbmDbDfn.ColumnIdx.Constituent_Quantity, ColumnAlignment.Right, DataValue.DataType.Double, aliasRequirment_ConstituentTime, prefixRequirement_ConstituentTime);
break;
case SbmRequirement.Column.ConstTime_AffTarget_Name:
SetRequirementColDfn(columnDfn, "ConstTime_AffTarget_Name", 90, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirment_ConstituentTime_AffiliateTarget, prefixRequirement_ConstituentTime_AffiliateTarget);
break;
//-----------------------------------------------------------------
// Stock levels:
case SbmRequirement.Column.Stock_Current: // Current stock level.
SetRequirementColDfn(columnDfn, "Stock (curr)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.DataName = reqStockCurrent;
break;
case SbmRequirement.Column.Stock_BySalesLocation01:
SetRequirementColDfn(columnDfn, "Stock @ 1", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.DataName = reqStockSalesLoc01;
break;
case SbmRequirement.Column.Stock_BySalesLocation02:
SetRequirementColDfn(columnDfn, "Stock @ 2", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.DataName = reqStockSalesLoc02;
break;
case SbmRequirement.Column.Stock_BySalesLocation03:
SetRequirementColDfn(columnDfn, "Stock @ 3", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.DataName = reqStockSalesLoc03;
break;
case SbmRequirement.Column.Stock_DueImminently:
SetRequirementColDfn(columnDfn, "Stock (due im.)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.DataName = reqStockDueImmin;
break;
case SbmRequirement.Column.Stock_Allocated: // Allocated stock.
SetRequirementColDfn(columnDfn, "Stock (alloc)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
columnDfn.DataName = reqStockAllocated;
break;
case SbmRequirement.Column.Stock_Available: // Available stock (current - allocated).
SetRequirementColDfn(columnDfn, "Stock (avail)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
//columnDfn.DataName = kpcReqStockAvailable);
break;
case SbmRequirement.Column.Stock_Available_MinZero: // Available stock with minimum value of zero (current - allocated).
SetRequirementColDfn(columnDfn, "Stock (avail)", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
break;
// Common properties.
case SbmRequirement.Column.Notes:
SetRequirementColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.Requirement_Notes);
break;
case SbmRequirement.Column.Flag:
SetRequirementColDfn(columnDfn, "Flags", 40, SbmDbDfn.ColumnIdx.Requirement_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmRequirement.Column.Status:
SetRequirementColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Requirement_Status, ColumnAlignment.Center);
break;
case SbmRequirement.Column.Status_Desc:
SetRequirementColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Requirement_Status);
break;
case SbmRequirement.Column.Status_Ind:
SetRequirementColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Requirement_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SbmRequirement.Column.CreateOn_Date:
SetRequirementColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.Requirement_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
columnDfn.ReadOnly = true;
break;
case SbmRequirement.Column.UpdateOn_Date:
SetRequirementColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.Requirement_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yy";
columnDfn.ReadOnly = true;
break;
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Query filter.
public override List<string> GetRequirementQueryFilter(SbmRequirement.Params prm)
{
List<String> filter = new List<String>();
String tableAlias = StringUtil.OnEmpty(prm.TableAlias, aliasRequirement);
//---------------------------------------------------------------
// Validate the parameters.
#if DEBUG
if (!SysId.IsValid(AffiliateId_Owner) && !SysId.IsValid(prm.AssociationId) && !SysId.IsValid(prm.CommodityId) && !SysId.IsValid(prm.TransactionRequirementSourceId) && !prm.TransactionIdsIncluded.HasValidIds() && !prm.RequirementIdsIncluded.HasValidIds() && !prm.RequirementIdsSource.HasValidIds())
SaLogger.Trace("\t### " + GetType().Name + ".GetRequirementQueryFilter - Owner/association/transaction not specified.");
#endif
//---------------------------------------------------------------
// Affiliate Owner - only need to be filtered if no significant Ids specified.
bool filterByOwner = !SysId.IsValid(prm.AssociationId) && !SysId.IsValid(prm.CommodityId) && !SysId.IsValid(prm.TransactionRequirementSourceId) && !prm.TransactionIdsIncluded.HasValidIds() && !prm.RequirementIdsIncluded.HasValidIds() && !prm.RequirementIdsSource.HasValidIds();
if (filterByOwner)
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AffIdOwner, tableAlias, false) + "=" + SysId.ToString(AffiliateId_Owner));
//---------------------------------------------------------------
// Association Details.
// Association Id.
String colRequirement_AssocId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AssocId, tableAlias, false);
if (SysId.IsValid(prm.AssociationId))
filter.Add(colRequirement_AssocId + "=" + prm.AssociationId.ToString());
// Association coding.
String assocFilter = DbQuery.FormatForCondition(prm.AssociationPartial);
String accountManagerCode = DbQuery.FormatForCondition(prm.AccountManagerCode);
String accountHandlerCode = DbQuery.FormatForCondition(prm.AccountHandlerCode);
if (!StringUtil.IsEmpty(assocFilter) || !StringUtil.IsEmpty(accountManagerCode) || !StringUtil.IsEmpty(accountHandlerCode))
{
String tableAlias_Assoc = "aReqAssFlt";
String tableAlias_AssocTarget = "aReqAssTgtFlt";
String colAssociation_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, tableAlias_Assoc, false);
DbQuery qryAssoc = new DbQuery(Database.DbmsType);
qryAssoc.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), tableAlias_Assoc);
qryAssoc.Columns.Add(colAssociation_Id);
qryAssoc.Filters.Add(colAssociation_Id + "=" + colRequirement_AssocId);
// Are the target contact details required.
bool requireAffiliate = StringUtil.IsEmpty(assocFilter);
if (requireAffiliate)
{
String colAffiliate_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, tableAlias_AssocTarget, false);
String colAssociation_AffIdTarget = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, tableAlias_Assoc, false);
qryAssoc.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), tableAlias_AssocTarget);
qryAssoc.Filters.Add(colAffiliate_Id + "=" + colAssociation_AffIdTarget);
}
// Target name.
if (StringUtil.IsEmpty(assocFilter))
{
// The association filter will match to either the association code or affiliate name.
String colAssociation_Code = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Code, tableAlias_Assoc, false);
String colAffiliate_Name = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, tableAlias_AssocTarget, false);
List<String> filterAssoc = new List<String>();
filterAssoc.Add(DbQuery.FormatFn_Left(colAssociation_Code, prm.AssociationPartial.Length) + "='" + assocFilter + "'");
filterAssoc.Add(DbQuery.FormatFn_Left(colAffiliate_Name, prm.AssociationPartial.Length) + "='" + assocFilter + "'");
qryAssoc.Filters.Add(filterAssoc.Concat(" OR ", "(", ")"));
}
// Account Manager.
if (!StringUtil.IsEmpty(accountManagerCode))
{
String colAssociation_AccountManagerCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, tableAlias_Assoc, false);
qryAssoc.Filters.Add(colAssociation_AccountManagerCode + "='" + accountManagerCode + "'");
}
// Account Handler.
if (!StringUtil.IsEmpty(accountHandlerCode))
{
String colAssociation_AccountHandlerCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, tableAlias_Assoc, false);
qryAssoc.Filters.Add(colAssociation_AccountHandlerCode + "='" + accountHandlerCode + "'");
}
// Add this Association sub-query to the filter.
filter.Add("EXISTS(" + qryAssoc.BuildQuery() + ")");
}
//---------------------------------------------------------------
// Transaction filter.
String colRequirement_TransId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, tableAlias, false);
if (prm.TransactionIdsIncluded.HasValidIds())
filter.Add(colRequirement_TransId + " IN(" + prm.TransactionIdsIncluded.Concat(",") + ")");
if (prm.TransactionIdsExcluded.HasValidIds())
filter.Add(colRequirement_TransId + " NOT IN(" + prm.TransactionIdsExcluded.Concat(",") + ")");
// Transaction parameters.
SbmTransaction.Params prmTrans = new SbmTransaction.Params();
prmTrans.TableAlias = StringUtil.OnEmpty(prm.AliasTransaction, "ReqTra");
prmTrans.IncludeDefaultFilter = false;
prmTrans.TransactionType = prm.TransactionType;
prmTrans.LocationIdStock = prm.TransactionLocationIdStock;
prmTrans.StatusCat = prm.TransactionStatusCat;
prmTrans.TransRefPartial = prm.TransactionRefPartial;
prmTrans.TransRefExtPartial = prm.TransactionRefExtPartial;
prmTrans.TransDescBriefPartial = prm.TransactionDescBriefPartial;
prmTrans.RaisedFrom = prm.TransactionRaisedFrom;
prmTrans.RaisedTo = prm.TransactionRaisedTo;
prmTrans.RequiredFrom = prm.TransactionRequiredFrom;
prmTrans.RequiredTo = prm.TransactionRequiredTo;
prmTrans.AmountNetLt = prm.TransactionAmountNetLt;
prmTrans.AmountNetGt = prm.TransactionAmountNetGt;
prmTrans.ActiveOn = prm.TransactionActiveOn;
prmTrans.ActiveFrom = prm.TransactionActiveFrom;
prmTrans.ActiveTo = prm.TransactionActiveTo;
prmTrans.ForceFullResults = true;
List<String> transactionFilters = TransactionMgr.GetTransactionQueryFilter(prmTrans);
if (transactionFilters.Count > 0)
{
prmTrans.ForceFullResults = true;
if (StringUtil.IsEmpty(prm.AliasTransaction))
{
// Transaction table not joined in main query - use a sub query.
DbQuery qryTrans = new DbQuery(Database.DbmsType);
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), prmTrans.TableAlias);
qryTrans.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, prmTrans.TableAlias, false));
qryTrans.Filters.AddRange(transactionFilters);
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, tableAlias, false) + " In(" + qryTrans.BuildQuery() + ")");
}
else
// Transaction table is joined in main query and can be filtered directly.
filter.AddRange(transactionFilters);
}
//---------------------------------------------------------------
// Requirement Details:
// IncludeIds & ExcludeIds.
String includedIds = prm.RequirementIdsIncluded.Concat(",");
String colRequirement_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, tableAlias);
if (!StringUtil.IsEmpty(includedIds))
filter.Add(colRequirement_Id + " IN (" + includedIds + ")");
String excludedIds = prm.RequirementIdsExcluded.Concat(",");
if (!StringUtil.IsEmpty(excludedIds))
filter.Add(colRequirement_Id + " NOT IN (" + excludedIds + ")");
// Source Requirement.
String colRequirement_ReqntIdSource = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, tableAlias, false);
if (prm.RequirementIdsSource.HasValidIds())
filter.Add(colRequirement_ReqntIdSource + " IN (" + prm.RequirementIdsSource.Concat(",") + ")");
// Source Requirment Transaction.
if (SysId.IsValid(prm.TransactionRequirementSourceId))
{
String tableAlias_ReqntSource = "ReqSrcFlt";
String colRequirementId_ReqntSource = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, tableAlias_ReqntSource, false);
DbQuery qryTrans = new DbQuery(Database.DbmsType);
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), tableAlias_ReqntSource);
qryTrans.Columns.Add(colRequirementId_ReqntSource);
qryTrans.Filters.Add(colRequirementId_ReqntSource + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, tableAlias, false));
if (SysId.IsValid(prm.TransactionRequirementSourceId))
qryTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, tableAlias_ReqntSource, false) + "=" + prm.TransactionRequirementSourceId.ToString());
// Add this transaction sub-query to the filter.
filter.Add("EXISTS(" + qryTrans.BuildQuery() + ")");
}
// Requirement DescBrief.
String reqntDescBrief = DbQuery.FormatForCondition(prm.RequirementDescBrief);
String Requirement_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_DescBrief, tableAlias, false);
if (!reqntDescBrief.IsEmpty())
filter.Add(DbQuery.FormatFn_Left(Requirement_DescBrief, reqntDescBrief.Length) + "='" + reqntDescBrief + "'");
// Promotion Code.
if (!StringUtil.IsEmpty(prm.RequirementPromotionCode))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_PromotionCode, tableAlias, false) + "='" + DbQuery.FormatForCondition(prm.RequirementPromotionCode) + "'");
//---------------------------------------------------------------
// Commodity Details)
// Id.
if (SysId.IsValid(prm.CommodityId))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, tableAlias, false) + "=" + prm.CommodityId.ToString());
// Product Code.
if (!prm.RequirementProductCodeFull.IsEmpty() || !prm.RequirementProductCodePartial.IsEmpty())
{
String reqntProductCodeFull = DbQuery.FormatForCondition(prm.RequirementProductCodeFull);
String reqntProductCodePartial = DbQuery.FormatForCondition(prm.RequirementProductCodePartial);
String colRequirement_ProductCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, tableAlias);
if (!reqntProductCodeFull.IsEmpty())
{
filter.Add(colRequirement_ProductCode + "='" + reqntProductCodeFull + "'");
}
else if (!reqntProductCodePartial.IsEmpty())
{
if (SessionConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityPartialCodeFilter))
filter.Add(colRequirement_ProductCode + " LIKE '%" + DbQuery.FormatForLike(reqntProductCodePartial) + "%'");
else filter.Add(DbQuery.FormatFn_Left(colRequirement_ProductCode, prm.RequirementProductCodePartial.Length) + "='" + reqntProductCodePartial + "'");
}
}
//---------------------------------------------------------------
// Associated items which used ItemLink & ItemType
if (!StringUtil.IsEmpty(prm.AssocItemProductCodeFull) || SysId.IsValid(prm.CmdIdAssocItem))
{
// Query item links with this requirement as the parent where the child requirement item refers to the specified commodity.
String tableAlias_ItemLink = "aReqItmLink";
String colItemLink_ItemIdTo = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdTo, tableAlias_ItemLink, false);
String colItemLink_ItemIdFrom = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom, tableAlias_ItemLink, false);
String colItemLink_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_Type, tableAlias_ItemLink, false);
String colItemLink_ItemTypeFrom = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeFrom, tableAlias_ItemLink, false);
String colItemLink_ItemTypeTo = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeTo, tableAlias_ItemLink, false);
DbQuery qryLink = new DbQuery(Database.DbmsType);
qryLink.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink), tableAlias_ItemLink);
String tableAlias_ItemLinkReqnt = "aReqItmLinkReqnt";
qryLink.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), tableAlias_ItemLinkReqnt);
qryLink.Columns.Add(colItemLink_ItemIdFrom);
qryLink.Filters.Add(colItemLink_Type + "=" + ((int)Sbm.ItemLinkType.Requirement_AssociatedItem).ToString());
qryLink.Filters.Add(colItemLink_ItemTypeFrom + "=" + ((int)Sbm.ItemType.Requirement).ToString());
qryLink.Filters.Add(colItemLink_ItemTypeTo + "=" + ((int)Sbm.ItemType.Requirement).ToString());
qryLink.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, tableAlias_ItemLinkReqnt, false) + "=" + colItemLink_ItemIdTo);
if (SysId.IsValid(prm.CmdIdAssocItem))
qryLink.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, tableAlias_ItemLinkReqnt, false) + "=" + prm.CmdIdAssocItem.ToString());
if (!StringUtil.IsEmpty(prm.AssocItemProductCodeFull))
qryLink.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, tableAlias_ItemLinkReqnt, false) + "='" + DbQuery.FormatForCondition(prm.AssocItemProductCodeFull) + "'");
// Add this linked requirement sub-query to the filter.
filter.Add(colRequirement_Id + " IN (" + qryLink.BuildQuery() + ")");
}
//------------------------------------------------------------------
// Project Task Code.
if (!StringUtil.IsEmpty(prm.RequirementProjectTaskCodeFull) || !StringUtil.IsEmpty(prm.RequirementProjectTaskCodePartial))
{
String colRequirement_ProductCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, tableAlias, false);
if (!StringUtil.IsEmpty(prm.RequirementProjectTaskCodeFull))
filter.Add(colRequirement_ProductCode + "='" + DbQuery.FormatForCondition(prm.RequirementProjectTaskCodeFull) + "'");
else if (!StringUtil.IsEmpty(prm.RequirementProjectTaskCodePartial))
{
String reqntProjectTaskCodePartial = DbQuery.FormatForCondition(prm.RequirementProjectTaskCodePartial);
filter.Add(DbQuery.FormatFn_Left(colRequirement_ProductCode, prm.RequirementProjectTaskCodePartial.Length) + "='" + reqntProjectTaskCodePartial + "'");
}
// Force the transaction type of 'Project'.
if (prm.TransactionType != Sbm.TransactionType.Project)
{
String tableAlias_TransactionProject = "ReqTraProj";
String colTransaction_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, tableAlias_TransactionProject, false);
String colTransaction_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, tableAlias_TransactionProject, false);
DbQuery qryTrans = new DbQuery(Database.DbmsType);
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), tableAlias_TransactionProject);
qryTrans.Columns.Add(colTransaction_Id);
qryTrans.Filters.Add(colTransaction_Id + "=" + colRequirement_TransId);
qryTrans.Filters.Add(colTransaction_Type + "=" + Sbm.TransactionType.Project);
filter.Add("EXISTS(" + qryTrans.BuildQuery() + ")");
}
}
//---------------------------------------------------------------
// Job Number.
if (!StringUtil.IsEmpty(prm.RequirementJobNumberFull) || !StringUtil.IsEmpty(prm.RequirementJobNumberPartial))
{
String colRequirement_JobNumber = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_JobNumber, tableAlias, false);
if (!StringUtil.IsEmpty(prm.RequirementJobNumberFull))
filter.Add(colRequirement_JobNumber + "='" + DbQuery.FormatForCondition(prm.RequirementJobNumberFull) + "'");
else if (!StringUtil.IsEmpty(prm.RequirementJobNumberPartial))
filter.Add(DbQuery.FormatFn_Left(colRequirement_JobNumber, prm.RequirementJobNumberPartial.Length) + "='" + DbQuery.FormatForCondition(prm.RequirementJobNumberPartial) + "'");
}
//---------------------------------------------------------------
// Asset Id.
if (SysId.IsValid(prm.AssetId))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AssetId, tableAlias, false) + "=" + prm.AssetId.ToString());
/* Asset Serial.
prm.ReqntAssetSerialFull;
prm.ReqntAssetSerialPartial;*/
//---------------------------------------------------------------
// Required date.
if (DateUtil.IsValid(prm.RequirementRequiredFrom))
{
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Required, tableAlias, false) + ">=" + DbQuery.FormatForCondition(prm.RequirementRequiredFrom.ToString()));
}
if (DateUtil.IsValid(prm.RequirementRequiredTo))
{
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Required, tableAlias, false) + "<" + DbQuery.FormatForCondition(prm.RequirementRequiredTo.ToLongDateString() + 1));
}
//---------------------------------------------------------------
// Status category.
if (prm.StatusCat == SbmRequirement.StatusCat.NotDeleted)
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status, tableAlias, false) + "<>'" + StatusDeleted + "'");
else if (prm.StatusCat == SbmRequirement.StatusCat.NotCancelled)
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status, tableAlias, false) + "<>'" + StatusCancelled + "'");
else if (!StringUtil.IsEmpty(RequirementStatusCats.GetCodeForType(prm.StatusCat)))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_StatusCat, tableAlias, false) + "='" + RequirementStatusCats.GetCodeForType(prm.StatusCat) + "'");
//---------------------------------------------------------------
// Commodity material and finish.
if (!StringUtil.IsEmpty(prm.CmdMaterialCode) || !StringUtil.IsEmpty(prm.CmdFinishCode))
{
String tableAlias_Commodity = "ReqntCmdFlt";
String colCommodity_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, tableAlias_Commodity, false);
String colRequirement_CommodityId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, tableAlias, false);
DbQuery qryCmd = new DbQuery(Database.DbmsType);
qryCmd.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), tableAlias_Commodity);
qryCmd.Columns.Add(colCommodity_Id);
qryCmd.Filters.Add(colCommodity_Id + "=" + colRequirement_CommodityId);
// Commodity Material.
if (!StringUtil.IsEmpty(prm.CmdMaterialCode))
qryCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_MaterialCode, tableAlias_Commodity, false) + "='" + DbQuery.FormatForCondition(prm.CmdMaterialCode) + "'");
// Commodity Finish.
if (!StringUtil.IsEmpty(prm.CmdFinishCode))
qryCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_FinishCode, tableAlias_Commodity, false) + "='" + DbQuery.FormatForCondition(prm.CmdFinishCode) + "'");
// Add this Commodity sub-query to the filter.
filter.Add("EXISTS(" + qryCmd.BuildQuery() + ")");
}
//------------------------------------------------------------------------
// Common properties.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Notes, tableAlias) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
//-------------------------------------------------------------------
// Sort columns.
public List<String> GetRequirementSortColumns(SbmRequirement.Params prm)
{
String tableAlias = StringUtil.OnEmpty(prm.TableAlias, aliasRequirement);
// Sort sequence.
List<String> sortColumnCodes = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Requirement columns in case of conflict.
String sortCol = String.Empty;
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.Requirement)
{
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, tableAlias);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnCodes.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnCodes.RemoveBlanks();
if (sortColumnCodes.IsEmpty())
{
// Default sort columns:
sortColumnCodes.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, tableAlias) + " ASC");
sortColumnCodes.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Type, tableAlias) + " ASC");
sortColumnCodes.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Seq, tableAlias) + " ASC");
}
return sortColumnCodes;
}
//-------------------------------------------------------------------
// Requirement count.
private long GetRequirementCount(String filter)
{
ClearErrorState();
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement) + " As " + aliasRequirement, filter);
}
public override long GetRequirementCount(SbmRequirement.Params prm)
{
ClearErrorState();
return GetRequirementCount(GetRequirementQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Requirement list.
public override List<SbmRequirement> GetRequirementList(SbmRequirement.Params prm)
{
ClearErrorState();
List<SbmRequirement> requirements = new List<SbmRequirement>();
DbQuery qry = new DbQuery(Database.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirement);
Requirement_Db dbRequirement = new Requirement_Db(DbInfo);
qry.Columns.AddRange(dbRequirement.ExistingColumnNames);
qry.Filters.AddRange(GetRequirementQueryFilter(prm));
qry.OrderBy.AddRange(GetRequirementSortColumns(prm));
// Query data.
using (var dbConnection = Database.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbRequirement = new Requirement_Db(DbInfo);
dbRequirement.PopulateFrom(dbDataReader);
requirements.Add(CreateRequirement(dbRequirement));
}
}
}
catch (Exception exc)
{
SetErrorState(Msg_DatabaseQueryException);
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return requirements;
}
public override List<SbmRequirement> GetRequirementsForTransaction(SysId transactionId, SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.NotDeleted)
{
if (!SysId.IsValid(transactionId)) return new List<SbmRequirement>();
SbmRequirement.Params prmRequirement = new SbmRequirement.Params();
prmRequirement.TransactionIdsIncluded.Add(transactionId);
prmRequirement.StatusCat = requirementStatusCat;
return GetRequirementList(prmRequirement);
}
//-------------------------------------------------------------------
// Requirement query execution.
public override DbResultSet ExecuteRequirementQuery(List<ColumnDfn> columns, SbmRequirement.Params prm)
{
ClearErrorState();
//------------------------------------------------------------------
// Construct build database query.
DbQuery query = new DbQuery(Database.DbmsType);
bool canViewSupplyFinancials = UserCanViewCommoditySupplyFinancials();
bool canViewSalesFinancials = UserCanViewCommoditySalesFinancials();
// Columns required.
bool requirementPromotionReq = columns.HasId(SbmRequirement.Column.PromotionCode) || columns.HasId(SbmRequirement.Column.PromotionDesc) || columns.HasId(SbmRequirement.Column.Promotion_AltText);
bool commodityPromotionReq = columns.HasId(SbmRequirement.Column.Cmd_PromotionCode) || columns.HasId(SbmRequirement.Column.Cmd_PromotionDesc) || columns.HasId(SbmRequirement.Column.Cmd_Promotion_AltText);
bool customerPromotionReq = columns.HasId(SbmRequirement.Column.Cmd_Cust_PromotionCode) || columns.HasId(SbmRequirement.Column.Cmd_Cust_PromotionDesc) || columns.HasId(SbmRequirement.Column.Cmd_Cust_Promotion_AltText);
//------------------------------------------------------------------
// Requirement Properties - add columns as defined in query list.
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirement);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Seq)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Seq, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Required) || columns.HasId(SbmRequirement.Column.RequiredTime) || columns.HasId(SbmRequirement.Column.Required_Fmt))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Required, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Started) || columns.HasId(SbmRequirement.Column.StartedTime) || columns.HasId(SbmRequirement.Column.Started_Day))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Started, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Completed) || columns.HasId(SbmRequirement.Column.CompletedTime))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Completed, aliasRequirement));
if ((columns.HasId(SbmRequirement.Column.JobNumber) || columns.HasId(SbmRequirement.Column.OrderItem_JobNumber)) && ColumnExists(SbmDbDfn.ColumnIdx.Requirement_JobNumber))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_JobNumber, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.CommodityId)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.ProductCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.DescBrief)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_DescBrief, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.DescOutline)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_DescOutline, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.DescDetail)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_DescDetail, aliasRequirement));
if (requirementPromotionReq || commodityPromotionReq || customerPromotionReq)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_PromotionCode, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.NominalCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_NominalCode, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Quantity) || columns.HasId(SbmRequirement.Column.AmountUnitNet))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.QuantityProd)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_QuantityProd, aliasRequirement));
if (canViewSalesFinancials)
{
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountUnit, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.AmountAct) || columns.HasId(SbmRequirement.Column.AmountAct_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountAct, aliasRequirement));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountNet, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.TaxCodeId)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TaxCodeId, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.TaxRate)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TaxRate, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.AmountTax) || columns.HasId(SbmRequirement.Column.AmountTax_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountTax));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountTot, aliasRequirement));
}
// Common Properties
if (columns.HasId(SbmRequirement.Column.Notes))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Notes, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Flag))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Flags, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Status) || columns.HasId(SbmRequirement.Column.Status_Desc) || columns.HasId(SbmRequirement.Column.Status_Ind))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.CreateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CreateOn, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.UpdateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_UpdateOn, aliasRequirement));
//------------------------------------------------------------------
// Requirement timing.
bool requiresReqColTimeEst =
(columns.HasId(SbmRequirement.Column.TimeEst) ||
columns.HasId(SbmRequirement.Column.TimeEstMins) ||
columns.HasId(SbmRequirement.Column.TimeEstWithMins) ||
columns.HasId(SbmRequirement.Column.TimeEstUnit) ||
columns.HasId(SbmRequirement.Column.TimeEstUnitMins) ||
columns.HasId(SbmRequirement.Column.TimeEstUnitWithMins));
bool requiresReqColTimeAct =
(columns.HasId(SbmRequirement.Column.TimeAct) ||
columns.HasId(SbmRequirement.Column.TimeActMins) ||
columns.HasId(SbmRequirement.Column.TimeActWithMins) ||
columns.HasId(SbmRequirement.Column.TimeActUnit) ||
columns.HasId(SbmRequirement.Column.TimeActUnitMins) ||
columns.HasId(SbmRequirement.Column.TimeActUnitWithMins));
bool requiresReqColTimeTot =
(columns.HasId(SbmRequirement.Column.TimeTot) ||
columns.HasId(SbmRequirement.Column.TimeTotMins) ||
columns.HasId(SbmRequirement.Column.TimeTotWithMins));
if (requiresReqColTimeEst) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TimeEst, aliasRequirement));
if (requiresReqColTimeAct) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TimeAct, aliasRequirement));
if (requiresReqColTimeTot) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TimeTot, aliasRequirement));
// Job costing.
if (CostColumnsAreAvailable() && canViewSupplyFinancials)
{
if (columns.HasId(SbmRequirement.Column.CostTotal) || columns.HasId(SbmRequirement.Column.CostTotal_Fmt) || columns.HasId(SbmRequirement.Column.AmountMargin) || columns.HasId(SbmRequirement.Column.AmountMargin_Fmt) || columns.HasId(SbmRequirement.Column.PercentMargin) || columns.HasId(SbmRequirement.Column.PercentMargin_Fmt))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CostTotal, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.CostCalculated))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CostCalculated, aliasRequirement));
}
//------------------------------------------------------------------
// Owner.
bool hasOwnerCols = false;
if (!hasOwnerCols) hasOwnerCols = columns.HasId(SbmRequirement.Column.Owner_Name);
if (hasOwnerCols)
{
// Join to the Owner affiliate.
DbQueryJoin joinAffOwner = new DbQueryJoin(DbJoinType.LeftOuter);
joinAffOwner.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasRequirement_AffiliateOwner);
joinAffOwner.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasRequirement_AffiliateOwner) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AffIdOwner, aliasRequirement));
query.Joins.Add(joinAffOwner);
// Add the affiliate columns.
List<SbmDbDfn.ColumnIdx> affiliateCols = new List<SbmDbDfn.ColumnIdx>();
affiliateCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_AffiliateOwner), prefixTransaction_AffiliateOwner + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Association Details.
bool hasAssocCols = false;
bool hasAssocTargetCols = false;
if (!hasAssocCols) hasAssocCols = columns.HasId(SbmRequirement.Column.Assoc_Code);
if (!hasAssocCols) hasAssocCols = (columns.HasId(SbmRequirement.Column.Assoc_AccountManagerCode) || columns.HasId(SbmRequirement.Column.Assoc_AccountManagerDesc));
if (!hasAssocCols) hasAssocCols = (columns.HasId(SbmRequirement.Column.Assoc_AccountHandlerCode) || columns.HasId(SbmRequirement.Column.Assoc_AccountHandlerDesc));
if (!hasAssocTargetCols) hasAssocTargetCols = columns.HasId(SbmRequirement.Column.Assoc_Target_Name);
if (!hasAssocTargetCols) hasAssocTargetCols = columns.HasId(SbmRequirement.Column.Assoc_Target_PhoneMain);
if (!hasAssocTargetCols) hasAssocTargetCols = columns.HasId(SbmRequirement.Column.Assoc_Target_PhoneAlt);
bool hasTgtAddrCols = false;
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_Name);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_Line1);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_Line2);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_Line3);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_City);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_Province);
if (!hasTgtAddrCols) hasTgtAddrCols = columns.HasId(SbmRequirement.Column.Trans_AssocTarget_Address_Postcode);
if (hasAssocCols || hasAssocTargetCols || hasTgtAddrCols)
{
// Join to the Association table.
DbQueryJoin joinAssoc = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssoc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasRequirement_Association);
joinAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasRequirement_Association, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AssocId, aliasRequirement));
query.Joins.Add(joinAssoc);
// Add the association columns.
List<SbmDbDfn.ColumnIdx> associationCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId(SbmRequirement.Column.Assoc_Code)) associationCols.Add(SbmDbDfn.ColumnIdx.Association_Code);
if (columns.HasId(SbmRequirement.Column.Assoc_AccountManagerCode) || columns.HasId(SbmRequirement.Column.Assoc_AccountManagerDesc))
associationCols.Add(SbmDbDfn.ColumnIdx.Association_AccountManagerCode);
if (columns.HasId(SbmRequirement.Column.Assoc_AccountHandlerCode) || columns.HasId(SbmRequirement.Column.Assoc_AccountHandlerDesc))
associationCols.Add(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode);
foreach (SbmDbDfn.ColumnIdx dbColumn in associationCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_Association), prefixRequirement_Association + SbmDbDfn.GetColumnName(dbColumn, false));
if (hasAssocTargetCols || hasTgtAddrCols)
{
// Target name is required.
DbQueryJoin joinAssocTarget = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssocTarget.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasRequirement_AssAffTarget);
joinAssocTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasRequirement_AssAffTarget, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasRequirement_Association, false));
query.Joins.Add(joinAssocTarget);
// Add the affiliate columns.
List<SbmDbDfn.ColumnIdx> assaffTargeCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId(SbmRequirement.Column.Assoc_Target_Name)) assaffTargeCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
if (columns.HasId(SbmRequirement.Column.Assoc_Target_PhoneMain)) assaffTargeCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain);
if (columns.HasId(SbmRequirement.Column.Assoc_Target_PhoneAlt)) assaffTargeCols.Add(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt);
foreach (SbmDbDfn.ColumnIdx dbColumn in assaffTargeCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_AssAffTarget), prefixRequirement_AssAffTarget + SbmDbDfn.GetColumnName(dbColumn, false));
// Target address.
if (hasTgtAddrCols)
{
// Join to the target affiliate - NB Use an alias to avoid clashing with the owner affiliate.
DbQueryJoin joinAddr = new DbQueryJoin(DbJoinType.LeftOuter);
joinAddr.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasRequirement_AddressTarget);
joinAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasRequirement_AddressTarget, false) + "=" + ((int)Sbm.ItemType.Affiliate).ToString());
joinAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasRequirement_AddressTarget, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasRequirement_AssAffTarget, false));
joinAddr.Filters.Add(DbQuery.BuildBitMappedFilter(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Flags, aliasRequirement_AddressTarget, false), SbmAddress.Flag_Primary, true));
query.Joins.Add(joinAddr);
// Add the address columns.
List<SbmDbDfn.ColumnIdx> addressTargetCols = new List<SbmDbDfn.ColumnIdx>();
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_City);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
addressTargetCols.Add(SbmDbDfn.ColumnIdx.Address_DescBrief);
foreach (SbmDbDfn.ColumnIdx dbColumn in addressTargetCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_AddressTarget), prefixRequirement_AddressTarget + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
}
//------------------------------------------------------------------
// Transaction Details.
prm.AliasTransaction = "";
bool hasTransCols = columns.HasId(SbmRequirement.Column.Trans_TypeDesc);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Ref);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_RefExt);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DescBrief);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_ContactName);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Likelihood);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Raised);
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_Required) || columns.HasId(SbmRequirement.Column.Required_Fmt));
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_InProgress);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Closed);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_ContactAreaCode) || columns.HasId(SbmRequirement.Column.Trans_ContactArea);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_AllocationInd) || columns.HasId(SbmRequirement.Column.Trans_AllocationInd_YP);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_BoxCount);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DeliveryStatusCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryStatus);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DeliveryTypeCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryType);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DeliveryMethodCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryMethod);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DeliveryCourierCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryCourier);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DeliveryBookInCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryBookIn);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_StockPickerCode) || columns.HasId(SbmRequirement.Column.Trans_StockPicker);
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountNet) || columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_DeliveryTaxCodeId) || columns.HasId(SbmRequirement.Column.Trans_DeliveryTaxCode_Code) || columns.HasId(SbmRequirement.Column.Trans_DeliveryTaxCode_Rate));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTax) || columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTot) || columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTot_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_DeliveryNominalCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryDepartment));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_CurrencyId) || columns.HasId(SbmRequirement.Column.Trans_Currency_Code) || columns.HasId(SbmRequirement.Column.Trans_Currency_Symbol));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_AmountEst) || columns.HasId(SbmRequirement.Column.Trans_AmountEst_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_AmountMax) || columns.HasId(SbmRequirement.Column.Trans_AmountMax_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_AmountNet) || columns.HasId(SbmRequirement.Column.Trans_AmountNet_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_AmountTax) || columns.HasId(SbmRequirement.Column.Trans_AmountTax_Fmt));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_AmountTot) || columns.HasId(SbmRequirement.Column.Trans_AmountTot_Fmt));
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_TimeEst);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_TimeAct);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_TimeTot);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_CostLabourRateHour);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Notes);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Flags);
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_AllocationInd) || columns.HasId(SbmRequirement.Column.Trans_AllocationInd_YP));
if (!hasTransCols) hasTransCols = (columns.HasId(SbmRequirement.Column.Trans_ReplacementOrder_Tick) || columns.HasId(SbmRequirement.Column.Trans_ReplacementOrder_Y));
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_StatusDesc) || columns.HasId(SbmRequirement.Column.Trans_StatusInd);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Status_OnHold_Tick) || columns.HasId(SbmRequirement.Column.Trans_Status_OnHold_Cross) || columns.HasId(SbmRequirement.Column.Trans_Status_OnHold_Y);
// Source Transaction fields.
bool hasSourceTransCols = columns.HasId(SbmRequirement.Column.Trans_SourceTrans_Ref);
// Formatted currency fields - require transaction currency Id.
bool hasFormattedCurrencyFields = (columns.HasId(SbmRequirement.Column.AmountUnit_Fmt) || columns.HasId(SbmRequirement.Column.AmountAct_Fmt));
if (!hasFormattedCurrencyFields) hasFormattedCurrencyFields = (columns.HasId(SbmRequirement.Column.AmountUnitNet_Fmt) || columns.HasId(SbmRequirement.Column.AmountNet_Fmt));
if (!hasFormattedCurrencyFields) hasFormattedCurrencyFields = (columns.HasId(SbmRequirement.Column.AmountTax_Fmt) || columns.HasId(SbmRequirement.Column.AmountTot_Fmt));
if (!hasFormattedCurrencyFields) hasFormattedCurrencyFields = (columns.HasId(SbmRequirement.Column.CostTotal_Fmt) || columns.HasId(SbmRequirement.Column.AmountMargin_Fmt));
if (!hasFormattedCurrencyFields) hasFormattedCurrencyFields = (columns.HasId(SbmRequirement.Column.Trans_CostTotal_Fmt) || columns.HasId(SbmRequirement.Column.Trans_AmountMargin_Fmt));
bool hasTransCostCols = (columns.HasId(SbmRequirement.Column.Trans_CostTotal) || columns.HasId(SbmRequirement.Column.Trans_CostTotal_Fmt));
if (!hasTransCostCols) hasTransCostCols = (columns.HasId(SbmRequirement.Column.Trans_AmountMargin) || columns.HasId(SbmRequirement.Column.Trans_AmountMargin_Fmt));
if (!hasTransCostCols) hasTransCostCols = (columns.HasId(SbmRequirement.Column.Trans_PercentMargin) || columns.HasId(SbmRequirement.Column.Trans_PercentMargin_Fmt));
if (hasTransCols || hasSourceTransCols || hasFormattedCurrencyFields)
{
// So that requirement filter uses the joined transaction table rather than a sub query.
prm.AliasTransaction = aliasRequirement_Transaction;
// Join to the Transaction table.
DbQueryJoin joinTrans = new DbQueryJoin(DbJoinType.LeftOuter);
joinTrans.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasRequirement_Transaction);
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasRequirement_Transaction, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement));
query.Joins.Add(joinTrans);
// Add the transaction columns.
List<SbmDbDfn.ColumnIdx> transactionCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId(SbmRequirement.Column.TransId)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Id);
if (columns.HasId(SbmRequirement.Column.Trans_TypeDesc)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Type);
if (columns.HasId(SbmRequirement.Column.Trans_Ref)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Ref);
if (columns.HasId(SbmRequirement.Column.Trans_RefExt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_RefExt);
if (columns.HasId(SbmRequirement.Column.Trans_DescBrief)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DescBrief);
if (columns.HasId(SbmRequirement.Column.Trans_ContactName)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_ContactName);
if (columns.HasId(SbmRequirement.Column.Trans_Likelihood)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Likelihood);
if (columns.HasId(SbmRequirement.Column.Trans_Raised)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Raised);
if (columns.HasId(SbmRequirement.Column.Trans_Required) || columns.HasId(SbmRequirement.Column.Required_Fmt))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Required);
if (columns.HasId(SbmRequirement.Column.Trans_InProgress)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_InProgress);
if (columns.HasId(SbmRequirement.Column.Trans_Closed)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Closed);
if (columns.HasId(SbmRequirement.Column.Trans_ContactAreaCode) || columns.HasId(SbmRequirement.Column.Trans_ContactArea))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_ContactAreaCode);
if (columns.HasId(SbmRequirement.Column.Trans_BoxCount)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_BoxCount);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryStatusCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryStatus))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryStatusCode);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryTypeCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryType))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryTypeCode);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryMethodCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryMethod))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryMethodCode);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryCourierCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryCourier))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryCourierCode);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryBookInCode) || columns.HasId(SbmRequirement.Column.Trans_DeliveryBookIn))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryBookInCode);
if (columns.HasId(SbmRequirement.Column.Trans_StockPickerCode) || columns.HasId(SbmRequirement.Column.Trans_StockPicker))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_StockPickerCode);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryNominalCode)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryNominalCode);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryDepartment)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryDepartment);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryTaxCodeId)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TaxCodeIdDelivery);
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_CurrencyId); // May be required for formatted requirement columns (or transaction currency columns).
if (canViewSalesFinancials)
{
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountNet) || columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountNet);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTax) || columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTax);
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTot) || columns.HasId(SbmRequirement.Column.Trans_DeliveryAmountTot_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DeliveryAmountTot);
if (columns.HasId(SbmRequirement.Column.Trans_AmountEst) || columns.HasId(SbmRequirement.Column.Trans_AmountEst_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_AmountEst);
if (columns.HasId(SbmRequirement.Column.Trans_AmountMax) || columns.HasId(SbmRequirement.Column.Trans_AmountMax_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_AmountMax);
if (columns.HasId(SbmRequirement.Column.Trans_AmountNet) || columns.HasId(SbmRequirement.Column.Trans_AmountNet_Fmt) || hasTransCostCols)
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_AmountNet);
if (columns.HasId(SbmRequirement.Column.Trans_AmountTax) || columns.HasId(SbmRequirement.Column.Trans_AmountTax_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_AmountTax);
if (columns.HasId(SbmRequirement.Column.Trans_AmountTot) || columns.HasId(SbmRequirement.Column.Trans_AmountTot_Fmt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_AmountTot);
}
if (columns.HasId(SbmRequirement.Column.Trans_TimeEst)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TimeEst);
if (columns.HasId(SbmRequirement.Column.Trans_TimeAct)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TimeAct);
if (columns.HasId(SbmRequirement.Column.Trans_TimeTot)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_TimeTot);
if (canViewSupplyFinancials && columns.HasId(SbmRequirement.Column.Trans_CostLabourRateHour))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour);
if (columns.HasId(SbmRequirement.Column.Trans_Notes)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Notes);
if (columns.HasId(SbmRequirement.Column.Trans_Flags) || columns.HasId(SbmRequirement.Column.Trans_AllocationInd) || columns.HasId(SbmRequirement.Column.Trans_AllocationInd_YP) || columns.HasId(SbmRequirement.Column.Trans_ReplacementOrder_Tick) || columns.HasId(SbmRequirement.Column.Trans_ReplacementOrder_Y))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Flags);
if (columns.HasId(SbmRequirement.Column.Trans_StatusDesc) || columns.HasId(SbmRequirement.Column.Trans_StatusInd) || columns.HasId(SbmRequirement.Column.Trans_Status_OnHold_Tick) || columns.HasId(SbmRequirement.Column.Trans_Status_OnHold_Cross) || columns.HasId(SbmRequirement.Column.Trans_Status_OnHold_Y))
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Status);
foreach (SbmDbDfn.ColumnIdx dbColumn in transactionCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_Transaction), prefixRequirement_Transaction + SbmDbDfn.GetColumnName(dbColumn, false));
//------------------------------------------------------------------
// Source transaction.
if (hasSourceTransCols)
{
// Join to the source transaction table.
DbQueryJoin joinSrcTra = new DbQueryJoin(DbJoinType.LeftOuter);
joinSrcTra.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasRequirement_SourceTransaction);
joinSrcTra.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasRequirement_SourceTransaction, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_TransIdSource, aliasRequirement_Transaction, false));
query.Joins.Add(joinSrcTra);
// Add the SourceTransaction columns.
List<SbmDbDfn.ColumnIdx> sourcreTransactionCols = new List<SbmDbDfn.ColumnIdx>();
sourcreTransactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Id);
sourcreTransactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Ref);
foreach (SbmDbDfn.ColumnIdx dbColumn in sourcreTransactionCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_SourceTransaction), prefixRequirement_SourceTransaction + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Delivery taxcode.
if (columns.HasId(SbmRequirement.Column.Trans_DeliveryTaxCode_Code) || columns.HasId(SbmRequirement.Column.Trans_DeliveryTaxCode_Rate))
{
// Join to the Taxcode table.
DbQueryJoin joinDelTxc = new DbQueryJoin(DbJoinType.LeftOuter);
joinDelTxc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.TaxCode), aliasRequirement_DeliveryTaxcode);
joinDelTxc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Id, aliasRequirement_DeliveryTaxcode, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_TaxCodeId, aliasRequirement_Transaction, false));
query.Joins.Add(joinDelTxc);
// Add the Taxcode columns.
List<SbmDbDfn.ColumnIdx> deliveryTaxcodeCols = new List<SbmDbDfn.ColumnIdx>();
deliveryTaxcodeCols.Add(SbmDbDfn.ColumnIdx.TaxCode_Code);
deliveryTaxcodeCols.Add(SbmDbDfn.ColumnIdx.TaxCode_TaxRate);
foreach (SbmDbDfn.ColumnIdx dbColumn in deliveryTaxcodeCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_DeliveryTaxcode), prefixRequirement_DeliveryTaxcode + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Currency.
if (columns.HasId(SbmRequirement.Column.Trans_Currency_Code) || columns.HasId(SbmRequirement.Column.Trans_Currency_Symbol))
{
// Join to the Currency table.
DbQueryJoin joinCurr = new DbQueryJoin(DbJoinType.LeftOuter);
joinCurr.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Currency), aliasRequirement_Currency);
joinCurr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Currency_Id, aliasRequirement_Currency, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_CurrencyId, aliasRequirement_Transaction, false));
query.Joins.Add(joinCurr);
// Add the Currency columns.
List<SbmDbDfn.ColumnIdx> currencyCols = new List<SbmDbDfn.ColumnIdx>();
currencyCols.Add(SbmDbDfn.ColumnIdx.Currency_Code);
currencyCols.Add(SbmDbDfn.ColumnIdx.Currency_Symbol);
foreach (SbmDbDfn.ColumnIdx dbColumn in currencyCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_Currency), prefixRequirement_Currency + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
//------------------------------------------------------------------
// Transaction cost.
if (hasTransCostCols && canViewSupplyFinancials)
{
// Build sub query to calculate the total cost total across all items.
String aliasRequirement_RequirementCost = "ReqCst";
String colTransCostTotal = "TraReqCount";
DbQuery qryReqntCost = new DbQuery(Database.DbmsType);
qryReqntCost.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirement_RequirementCost));
qryReqntCost.Columns.Add("Sum(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CostTotal, aliasRequirement_RequirementCost, false) + ")");
qryReqntCost.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement_RequirementCost, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement));
query.Columns.Add("(" + qryReqntCost.BuildQuery() + ")", colTransCostTotal);
}
//------------------------------------------------------------------
// Delivery address.
bool hasTransDelAddr = false;
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Name);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Line1);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Line2);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Line3);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_City);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Province);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Postcode);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Phone);
if (!hasTransDelAddr) hasTransDelAddr = columns.HasId(SbmRequirement.Column.Trans_DeliveryAddress_Email);
if (hasTransDelAddr)
{
// Join to the address table.
DbQueryJoin joinDelAddr = new DbQueryJoin(DbJoinType.LeftOuter);
joinDelAddr.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasRequirement_DeliveryAddress);
joinDelAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type, aliasRequirement_DeliveryAddress, false) + "=" + Sbm.AddressType.Delivery.ToString());
joinDelAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasRequirement_DeliveryAddress, false) + "=" + ((int)Sbm.ItemType.Transaction).ToString());
joinDelAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemId, aliasRequirement_DeliveryAddress, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement));
query.Joins.Add(joinDelAddr);
// Add the address columns.
List<SbmDbDfn.ColumnIdx> deliveryAddressCols = new List<SbmDbDfn.ColumnIdx>();
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Name);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Line1);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Line2);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Line3);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_City);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Province);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_DescBrief);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Phone);
deliveryAddressCols.Add(SbmDbDfn.ColumnIdx.Address_Email);
foreach (SbmDbDfn.ColumnIdx dbColumn in deliveryAddressCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_DeliveryAddress), prefixRequirement_DeliveryAddress + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Requirement Details.
// Source requirement.
bool hasSrcReqntCols = false;
bool hasSrcReqntTransCols = false;
if (!hasSrcReqntCols) hasSrcReqntCols = columns.HasId(SbmRequirement.Column.SourceReqnt_DescBrief);
if (!hasSrcReqntCols) hasSrcReqntCols = columns.HasId(SbmRequirement.Column.SourceReqnt_JobNumber);
if (!hasSrcReqntCols) hasSrcReqntCols = columns.HasId(SbmRequirement.Column.OrderItem_JobNumber);
if (!hasSrcReqntTransCols) hasSrcReqntTransCols = columns.HasId(SbmRequirement.Column.SourceReqnt_TransRef);
if (!hasSrcReqntTransCols) hasSrcReqntTransCols = columns.HasId(SbmRequirement.Column.SourceReqnt_TransRefExt);
if (hasSrcReqntCols || hasSrcReqntTransCols)
{
// Join to the requirement table.
DbQueryJoin joinSrcReqnt = new DbQueryJoin(DbJoinType.LeftOuter);
joinSrcReqnt.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirement_SourceRequirement);
joinSrcReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement_SourceRequirement, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, aliasRequirement));
query.Joins.Add(joinSrcReqnt);
// Add the requirement columns.
List<SbmDbDfn.ColumnIdx> requirementCols = new List<SbmDbDfn.ColumnIdx>();
requirementCols.Add(SbmDbDfn.ColumnIdx.Requirement_Id);
if (columns.HasId(SbmRequirement.Column.SourceReqnt_DescBrief))
requirementCols.Add(SbmDbDfn.ColumnIdx.Requirement_DescBrief);
if (columns.HasId(SbmRequirement.Column.SourceReqnt_JobNumber) || columns.HasId(SbmRequirement.Column.OrderItem_JobNumber))
requirementCols.Add(SbmDbDfn.ColumnIdx.Requirement_JobNumber);
foreach (SbmDbDfn.ColumnIdx dbColumn in requirementCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_SourceRequirement), prefixRequirement_SourceRequirement + SbmDbDfn.GetColumnName(dbColumn, false));
// Source requirement transaction.
if (hasSrcReqntTransCols)
{
// Join to the source requirement's transaction.
DbQueryJoin joinSrcReqntTrans = new DbQueryJoin(DbJoinType.LeftOuter);
joinSrcReqntTrans.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasRequirement_SourceRequirementTransaction);
joinSrcReqntTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasRequirement_SourceRequirementTransaction, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement_SourceRequirement, false));
query.Joins.Add(joinSrcReqntTrans);
// Add the requirement columns.
List<SbmDbDfn.ColumnIdx> sourceRequirementCols = new List<SbmDbDfn.ColumnIdx>();
//sourceRequirementCols.Add(SbmDbDfn.ColumnIdx.Transaction_Id);
if (columns.HasId(SbmRequirement.Column.SourceReqnt_TransRef)) sourceRequirementCols.Add(SbmDbDfn.ColumnIdx.Transaction_Ref);
if (columns.HasId(SbmRequirement.Column.SourceReqnt_TransRefExt)) sourceRequirementCols.Add(SbmDbDfn.ColumnIdx.Transaction_RefExt);
foreach (SbmDbDfn.ColumnIdx dbColumn in sourceRequirementCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_SourceRequirementTransaction), prefixRequirement_SourceRequirementTransaction + SbmDbDfn.GetColumnName(dbColumn, false));
}
}
//------------------------------------------------------------------
// Unit of measure.
bool hasUomCols = false;
if (!hasUomCols) hasUomCols = columns.HasId(SbmRequirement.Column.UomDesc);
if (hasUomCols)
{
// Join to the Unit Of Measure table.
DbQueryJoin joinUom = new DbQueryJoin(DbJoinType.LeftOuter);
joinUom.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.UnitMeasure), aliasRequirement_UnitOfMeasure);
joinUom.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.UnitMeasure_Id, aliasRequirement_UnitOfMeasure, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_UomId, aliasRequirement));
query.Joins.Add(joinUom);
// Add the UOM columns.
List<SbmDbDfn.ColumnIdx> uomCols = new List<SbmDbDfn.ColumnIdx>();
uomCols.Add(SbmDbDfn.ColumnIdx.UnitMeasure_Abbr);
uomCols.Add(SbmDbDfn.ColumnIdx.UnitMeasure_Single);
uomCols.Add(SbmDbDfn.ColumnIdx.UnitMeasure_Multiple);
foreach (SbmDbDfn.ColumnIdx dbColumn in uomCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_UnitOfMeasure), prefixRequirement_UnitOfMeasure + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Tax code.
bool hasTxcCols = false;
if (!hasTxcCols) hasTxcCols = columns.HasId(SbmRequirement.Column.TaxCode_Code);
if (hasTxcCols)
{
// Join to the Tax Code table.
DbQueryJoin joinTxc = new DbQueryJoin(DbJoinType.LeftOuter);
joinTxc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.TaxCode), aliasRequirement_Taxcode);
joinTxc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Id, aliasRequirement_Taxcode, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TaxCodeId, aliasRequirement));
query.Joins.Add(joinTxc);
// Add the Txc columns.
List<SbmDbDfn.ColumnIdx> taxcodeCols = new List<SbmDbDfn.ColumnIdx>();
taxcodeCols.Add(SbmDbDfn.ColumnIdx.TaxCode_Code);
//taxcodeCols.Add(SbmDbDfn.ColumnIdx.TaxCode_CodeAlt1);
//taxcodeCols.Add(SbmDbDfn.ColumnIdx.TaxCode_CodeAlt2);
//taxcodeCols.Add(SbmDbDfn.ColumnIdx.TaxCode_TaxRate);
foreach (SbmDbDfn.ColumnIdx dbColumn in taxcodeCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_Taxcode), prefixRequirement_Taxcode + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Commodity.
bool hasColCmdDrawingNo = columns.HasId(SbmRequirement.Column.Cmd_DrawingNo);
bool hasColCmdDrawingIssue = columns.HasId(SbmRequirement.Column.Cmd_DrawingIssue);
bool hasColCmdImagePath = columns.HasId(SbmRequirement.Column.Cmd_ImagePath) || columns.HasId(SbmRequirement.Column.Cmd_Image);
bool hasColCmdCategory = columns.HasId(SbmRequirement.Column.Cmd_Category);
bool hasColCmdLocation = columns.HasId(SbmRequirement.Column.Cmd_Location);
bool hasColCmdDepartment = columns.HasId(SbmRequirement.Column.Cmd_Department);
bool hasColCmdCatalogRef = columns.HasId(SbmRequirement.Column.Cmd_CatalogRef);
bool hasColCmdWeight = (columns.HasId(SbmRequirement.Column.Cmd_Weight) || columns.HasId(SbmRequirement.Column.Cmd_WeightUnit) || columns.HasId(SbmRequirement.Column.Cmd_Weight_ValueUnits));
bool hasColCmdLength = (columns.HasId(SbmRequirement.Column.Cmd_Length) || columns.HasId(SbmRequirement.Column.Cmd_Width) || columns.HasId(SbmRequirement.Column.Cmd_Height) || columns.HasId(SbmRequirement.Column.Cmd_LengthUnit) || columns.HasId(SbmRequirement.Column.Cmd_Length_ValueUnits));
bool hasColCmdVolume = (columns.HasId(SbmRequirement.Column.Cmd_Volume) || columns.HasId(SbmRequirement.Column.Cmd_VolumeUnit) || columns.HasId(SbmRequirement.Column.Cmd_Volume_ValueUnits));
bool hasColCmdDensity = (columns.HasId(SbmRequirement.Column.Cmd_Density) || columns.HasId(SbmRequirement.Column.Cmd_DensityUnit) || columns.HasId(SbmRequirement.Column.Cmd_Density_ValueUnits));
bool hasColCmdMinOrderQty = columns.HasId(SbmRequirement.Column.Cmd_MinOrderQty);
bool hasColCmdPackQtySale = columns.HasId(SbmRequirement.Column.Cmd_PackQtySale);
bool hasColCmdBoxQuantity = (columns.HasId(SbmRequirement.Column.Cmd_BoxQuantity) || columns.HasId(SbmRequirement.Column.Cmd_BoxUnit) || columns.HasId(SbmRequirement.Column.Cmd_BoxQuantity_ValueUnits));
bool hasColCmdDimensions = columns.HasId(SbmRequirement.Column.Cmd_Dimensions);
bool hasColCmdSpecSummary = columns.HasId(SbmRequirement.Column.Cmd_SpecSummary);
bool hasColCmdIcnTariff = columns.HasId(SbmRequirement.Column.Cmd_ICNTariffCode);
bool hasColCmdRange = (columns.HasId(SbmRequirement.Column.Cmd_RangeCode) || columns.HasId(SbmRequirement.Column.Cmd_RangeDesc));
bool hasColCmdColour = (columns.HasId(SbmRequirement.Column.Cmd_ColourCode) || columns.HasId(SbmRequirement.Column.Cmd_ColourDesc));
bool hasColCmdSource = (columns.HasId(SbmRequirement.Column.Cmd_SourceCode) || columns.HasId(SbmRequirement.Column.Cmd_SourceDesc));
bool hasColCmdSupplyMethod = (columns.HasId(SbmRequirement.Column.Cmd_SupplyMethodCode) || columns.HasId(SbmRequirement.Column.Cmd_SupplyMethodDesc));
bool hasColCmdHandling = (columns.HasId(SbmRequirement.Column.Cmd_HandlingCode) || columns.HasId(SbmRequirement.Column.Cmd_HandlingDesc));
bool hasColCmdDelivery = (columns.HasId(SbmRequirement.Column.Cmd_DeliveryCode) || columns.HasId(SbmRequirement.Column.Cmd_DeliveryDesc));
bool hasColCmdMaterial = (columns.HasId(SbmRequirement.Column.Cmd_MaterialCode) || columns.HasId(SbmRequirement.Column.Cmd_MaterialDesc));
bool hasColCmdFinish = (columns.HasId(SbmRequirement.Column.Cmd_FinishCode) || columns.HasId(SbmRequirement.Column.Cmd_FinishDesc));
bool hasColCmdPromo = (requirementPromotionReq || commodityPromotionReq);
bool hasColCmdCostPrice = columns.HasId(SbmRequirement.Column.Cmd_CostPrice) || columns.HasId(SbmRequirement.Column.Cmd_CostPrice_Fmt);
bool hasColCmdMaterialCost = (columns.HasId(SbmRequirement.Column.Cmd_MaterialCost) || columns.HasId(SbmRequirement.Column.Cmd_MaterialCost_Fmt) || columns.HasId(SbmRequirement.Column.Cmd_CurrencyIdMaterial));
bool hasColCmdSalesPrice = (columns.HasId(SbmRequirement.Column.Cmd_SalesPrice) || columns.HasId(SbmRequirement.Column.Cmd_SalesPrice_Fmt) || columns.HasId(SbmRequirement.Column.PercentDiscountBySalesPrice));
bool hasColCmdRetailPrice = (columns.HasId(SbmRequirement.Column.Cmd_RetailPrice) || columns.HasId(SbmRequirement.Column.Cmd_RetailPrice_Fmt) || columns.HasId(SbmRequirement.Column.PercentDiscountByRetailPrice));
bool hasColCmdCarriageCostInd = (columns.HasId(SbmRequirement.Column.Cmd_CarriageCostIndicative) || columns.HasId(SbmRequirement.Column.Cmd_CarriageCostIndicative_Fmt));
bool hasCmdCols =
(hasColCmdDrawingNo || hasColCmdDrawingIssue ||
hasColCmdImagePath || hasColCmdCategory || hasColCmdLocation || hasColCmdDepartment || hasColCmdCatalogRef ||
hasColCmdWeight || hasColCmdLength || hasColCmdVolume || hasColCmdDensity || hasColCmdMinOrderQty || hasColCmdPackQtySale || hasColCmdBoxQuantity ||
hasColCmdDimensions || hasColCmdSpecSummary || hasColCmdIcnTariff ||
hasColCmdRange || hasColCmdColour || hasColCmdSource || hasColCmdSupplyMethod || hasColCmdHandling || hasColCmdDelivery ||
hasColCmdMaterial || hasColCmdFinish || hasColCmdPromo ||
hasColCmdCostPrice || hasColCmdMaterialCost || hasColCmdSalesPrice || hasColCmdRetailPrice || hasColCmdCarriageCostInd);
if (hasCmdCols)
{
// Join to the Commodity table.
DbQueryJoin joinCmd = new DbQueryJoin(DbJoinType.LeftOuter);
joinCmd.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasRequirement_Commodity);
joinCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasRequirement_Commodity, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
query.Joins.Add(joinCmd);
// Add the columns.
List<SbmDbDfn.ColumnIdx> commodityCols = new List<SbmDbDfn.ColumnIdx>();
if (hasColCmdDrawingNo) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_DrawingNo);
if (hasColCmdDrawingIssue) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue);
if (hasColCmdImagePath) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_ImagePath);
if (hasColCmdCategory) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Category);
if (hasColCmdLocation) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Location);
if (hasColCmdDepartment) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Department);
if (hasColCmdCatalogRef) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_CatalogRef);
if (hasColCmdWeight) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Weight);
if (hasColCmdWeight) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_UomIdWeight);
if (hasColCmdLength) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Length);
if (hasColCmdLength) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_UomIdLength);
if (hasColCmdVolume) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Volume);
if (hasColCmdVolume) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_UomIdVolume);
if (hasColCmdDensity) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Density);
if (hasColCmdDensity) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_UomIdDensity);
if (hasColCmdMinOrderQty) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_MinOrderQty);
if (hasColCmdPackQtySale) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_PackQty);
if (hasColCmdBoxQuantity) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_BoxQuantity);
if (hasColCmdBoxQuantity) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_UomIdBox);
if (hasColCmdDimensions) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Dimensions);
if (hasColCmdSpecSummary) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_SpecSummary);
if (hasColCmdIcnTariff) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode);
if (hasColCmdRange) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_RangeCode);
if (hasColCmdColour) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_ColourCode);
if (hasColCmdSource) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_SourceCode);
if (hasColCmdSupplyMethod) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_SupplyMethodCode);
if (hasColCmdHandling) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_HandlingCode);
if (hasColCmdDelivery) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_DeliveryCode);
if (hasColCmdMaterial) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_MaterialCode);
if (hasColCmdFinish) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_FinishCode);
if (hasColCmdPromo) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_PromotionCode);
if (hasColCmdCostPrice) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_CostPrice);
if (hasColCmdMaterialCost) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_MaterialCost);
if (hasColCmdMaterialCost) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial);
if (hasColCmdSalesPrice) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_SalesPrice);
if (hasColCmdRetailPrice) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_RetailPrice);
if (hasColCmdCarriageCostInd) commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative);
foreach (SbmDbDfn.ColumnIdx dbColumn in commodityCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_Commodity), prefixRequirement_Commodity + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Customer commodity details.
bool hasCmdCustCols = false;
if (!hasCmdCustCols) hasCmdCustCols = columns.HasId(SbmRequirement.Column.Cmd_Cust_ProductCode);
if (!hasCmdCustCols) hasCmdCustCols = (columns.HasId(SbmRequirement.Column.Cmd_Cust_RetailPrice) || columns.HasId(SbmRequirement.Column.Cmd_Cust_RetailPrice_Fmt) || columns.HasId(SbmRequirement.Column.Cmd_Cust_CurrencyIdRetail));
if (!hasCmdCustCols) hasCmdCustCols = (requirementPromotionReq || commodityPromotionReq || customerPromotionReq);
if (!hasCmdCustCols) hasCmdCustCols = (columns.HasId(SbmRequirement.Column.PromotionCode) || columns.HasId(SbmRequirement.Column.PromotionDesc) || columns.HasId(SbmRequirement.Column.Promotion_AltText));
if (hasCmdCustCols)
{
// Join to the Commodity Customer table.
DbQueryJoin joinCmdCust = new DbQueryJoin(DbJoinType.LeftOuter);
joinCmdCust.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer), aliasRequirement_CommodityCustomer);
joinCmdCust.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId, aliasRequirement_CommodityCustomer, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
joinCmdCust.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommodityCustomer_AssocIdCustomer, aliasRequirement_CommodityCustomer, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AssocId, aliasRequirement));
query.Joins.Add(joinCmdCust);
// Add the columns.
List<SbmDbDfn.ColumnIdx> commodityCustomerCols = new List<SbmDbDfn.ColumnIdx>();
commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_ProductCode);
if (canViewSalesFinancials)
commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_AmountRetail);
commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_CurrencyIdRetail);
commodityCustomerCols.Add(SbmDbDfn.ColumnIdx.CommodityCustomer_PromotionCode);
foreach (SbmDbDfn.ColumnIdx dbColumn in commodityCustomerCols)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_CommodityCustomer), prefixRequirement_CommodityCustomer + SbmDbDfn.GetColumnName(dbColumn, false));
}
//------------------------------------------------------------------
// Processes.
bool hasProcCols = false;
if (!hasProcCols) hasProcCols = columns.HasId(SbmRequirement.Column.NextProcessDesc);
if (hasProcCols)
{
// Want the description of the next process in sequence for this
// requirement where the status is awaiting. Requirement processes
// are held as constituents of type 'Process'.
//------------------------------------------------------------------
// Join to the Constituent table.
DbQueryJoin joinConstProc = new DbQueryJoin(DbJoinType.LeftOuter);
joinConstProc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), aliasRequirment_ConstProc);
joinConstProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Type, aliasRequirment_ConstProc, false) + "=" + Sbm.ConstituentType.Process.ToString());
joinConstProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ReqntId, aliasRequirment_ConstProc, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
joinConstProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status, aliasRequirment_ConstProc, false) + "='" + StatusAwaiting + "'");
// Store the join against the main query.
query.Joins.Add(joinConstProc);
//------------------------------------------------------------------
// Sub Filter to identify matching constituent with lowest sequence number,
// or null if no matching links found.
DbQuery qryConstProcSeq = new DbQuery(Database.DbmsType);
String aliasRequirement_ConstituentProcessSeq = "aReqConstProcSeq";
qryConstProcSeq.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), aliasRequirement_ConstituentProcessSeq);
qryConstProcSeq.Columns.Add("MIN(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Seq, aliasRequirement_ConstituentProcessSeq, false) + ")");
qryConstProcSeq.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Type, aliasRequirement_ConstituentProcessSeq, false) + "=" + Sbm.ConstituentType.Process.ToString());
qryConstProcSeq.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ReqntId, aliasRequirement_ConstituentProcessSeq, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
qryConstProcSeq.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status, aliasRequirement_ConstituentProcessSeq, false) + "='" + StatusAwaiting + "'");
String filterLinkSeq1 = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Seq, aliasRequirment_ConstProc, false) + "=(" + qryConstProcSeq.BuildQuery() + ")";
String filterLinkSeq2 = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Seq, aliasRequirment_ConstProc, false) + " IS null";
query.Filters.Add(filterLinkSeq1 + " OR " + filterLinkSeq2);
//------------------------------------------------------------------
// Add the link columns.
List<SbmDbDfn.ColumnIdx> slColLinkProc = new List<SbmDbDfn.ColumnIdx>();
slColLinkProc.Add(SbmDbDfn.ColumnIdx.Constituent_ProcessId);
slColLinkProc.Add(SbmDbDfn.ColumnIdx.Constituent_Seq);
slColLinkProc.Add(SbmDbDfn.ColumnIdx.Constituent_Status);
foreach (SbmDbDfn.ColumnIdx dbColumn in slColLinkProc)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirment_ConstProc), prefixRequirement_LinkProcess + SbmDbDfn.GetColumnName(dbColumn, false));
//------------------------------------------------------------------
// Join to the Process table.
DbQueryJoin joinProc = new DbQueryJoin(DbJoinType.LeftOuter);
joinProc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Process), aliasRequirement_Process);
joinProc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Id, aliasRequirement_Process, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ProcessId, aliasRequirment_ConstProc, false));
query.Joins.Add(joinProc);
// Add the process columns.
List<SbmDbDfn.ColumnIdx> slColProc = new List<SbmDbDfn.ColumnIdx>();
slColProc.Add(SbmDbDfn.ColumnIdx.Process_DescBrief);
slColProc.Add(SbmDbDfn.ColumnIdx.Process_Status);
foreach (SbmDbDfn.ColumnIdx dbColumn in slColProc)
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasRequirement_Process), prefixRequirement_Process + SbmDbDfn.GetColumnName(dbColumn, false));
//------------------------------------------------------------------
}
// Container items.
bool hasCol_CntItmCount = columns.HasId(SbmRequirement.Column.CntItm_Count);
bool hasCol_CntItmQuantity = columns.HasId(SbmRequirement.Column.CntItm_Quantity);
if (hasCol_CntItmCount || hasCol_CntItmQuantity)
{
// Container Item filter.
List<String> filters = new List<String>();
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemTypeSource, aliasRequirment_ContainerItem, false) + "=" + ((int)Sbm.ItemType.Requirement).ToString());
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemIdSource, aliasRequirment_ContainerItem, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
// Container Item query.
DbQuery qryCntItm = new DbQuery(Database.DbmsType);
String colCntItmCount = "CntItmCount";
qryCntItm.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem), aliasRequirment_ContainerItem));
qryCntItm.Filters.AddRange(filters);
if (hasCol_CntItmCount)
{
qryCntItm.Columns.Clear();
qryCntItm.Columns.Add("COUNT(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, aliasRequirment_ContainerItem, false) + ")");
query.Columns.Add("(" + qryCntItm.BuildQuery() + ")", colCntItmCount);
}
if (hasCol_CntItmQuantity)
{
qryCntItm.Columns.Clear();
qryCntItm.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Quantity, aliasRequirment_ContainerItem, false) + ")");
query.Columns.Add("(" + qryCntItm.BuildQuery() + ")", prefixRequirement_ContainerItem + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_Quantity));
}
}
//------------------------------------------------------------------
// Associated requirements.
bool bQueryAssocReqnt = (
columns.HasId(SbmRequirement.Column.AssocReqnt_ItemLink_DataContent) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Reqnt_RefCount) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Reqnt_Id) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Reqnt_AmountNet) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Trans_Id) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Trans_Type) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Trans_Ref) ||
columns.HasId(SbmRequirement.Column.AssocReqnt_Trans_AffTarget_Name));
if (bQueryAssocReqnt)
{
//------------------------------------------------------------------
// Joins to identify associated requirements.
// 1. ItemLink on 'To item' = This Requirement
// 2. Requirement
// 3. Transaction [reference etc]
// 4. Association
// 5. Target Affiliate [target name etc]
//------------------------------------------------------------------
// Join to the Item Link via 'To Item = Requirement'.
DbQueryJoin joinItmLnk = new DbQueryJoin(DbJoinType.LeftOuter);
joinItmLnk.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink), aliasAssociated_ItemLink);
joinItmLnk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_Type, aliasAssociated_ItemLink, false) + "=" + Sbm.ItemLinkType.Requirement_AssociatedItem.ToString());
joinItmLnk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeFrom, aliasAssociated_ItemLink, false) + "=" + ((int)Sbm.ItemType.Requirement).ToString());
joinItmLnk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeTo, aliasAssociated_ItemLink, false) + "=" + ((int)Sbm.ItemType.Requirement).ToString());
joinItmLnk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdTo, aliasAssociated_ItemLink, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
query.Joins.Add(joinItmLnk);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_DataContent, aliasAssociated_ItemLink, false), prefixAssociated_ItemLink + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_DataContent, false));
//------------------------------------------------------------------
// Join to the associated Requirement.
DbQueryJoin joinAssReq = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssReq.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasAssociated_Requirement);
joinAssReq.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasAssociated_Requirement, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom, aliasAssociated_ItemLink, false));
query.Joins.Add(joinAssReq);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasAssociated_Requirement, false), prefixAssociated_Requirement + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_Id, false));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasAssociated_Requirement, false), prefixAssociated_Requirement + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_TransId, false));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountNet, aliasAssociated_Requirement, false), prefixAssociated_Requirement + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_AmountNet, false));
//------------------------------------------------------------------
if (columns.HasId(SbmRequirement.Column.AssocReqnt_Reqnt_RefCount))
{
// Return the number of references for each associated requirement.
// ie. the total number of requirements associated with the target requirement.
DbQuery qryAssocReqntRefCount = new DbQuery(Database.DbmsType);
String colAssocReqntRefCount = "AssReqRefCount";
qryAssocReqntRefCount.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ItemLink));
qryAssocReqntRefCount.Columns.Add("Count(1)");
qryAssocReqntRefCount.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_Type, false) + "=" + Sbm.ItemLinkType.Requirement_AssociatedItem.ToString());
qryAssocReqntRefCount.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeFrom, false) + "=" + ((int)Sbm.ItemType.Requirement).ToString());
qryAssocReqntRefCount.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_ItemTypeTo, false) + "=" + ((int)Sbm.ItemType.Requirement).ToString());
qryAssocReqntRefCount.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom, aliasAssociated_ItemLink, false));
query.Columns.Add("(" + qryAssocReqntRefCount.BuildQuery() + ")", colAssocReqntRefCount);
}
//------------------------------------------------------------------
// Join to the associated Requirement Transaction.
DbQueryJoin joinAssReqTra = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssReqTra.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasAssociated_Requirement_Transaction);
joinAssReqTra.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasAssociated_Requirement_Transaction, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasAssociated_Requirement, false));
query.Joins.Add(joinAssReqTra);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasAssociated_Requirement_Transaction, false), prefixAssociated_Requirement_Transaction + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Id, false));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Ref, aliasAssociated_Requirement_Transaction, false), prefixAssociated_Requirement_Transaction + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Ref, false));
//------------------------------------------------------------------
// Join to the associated Requirement Transaction Association.
DbQueryJoin joinAssReqTraAssoc = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssReqTraAssoc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAssociated_Requirement_Transaction_Association);
joinAssReqTraAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociated_Requirement_Transaction_Association, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, aliasAssociated_Requirement_Transaction, false));
query.Joins.Add(joinAssReqTraAssoc);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasAssociated_Requirement_Transaction_Association, false), prefixAssociated_Requirement_Transaction_Association + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Association_Id, false));
//------------------------------------------------------------------
// Join to the associated Requirement Transaction Association.
DbQueryJoin joinAssReqTraAffTgt = new DbQueryJoin(DbJoinType.LeftOuter);
joinAssReqTraAffTgt.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasAssociated_Requirement_Transaction_AffiliateTarget);
joinAssReqTraAffTgt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAssociated_Requirement_Transaction_AffiliateTarget, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasAssociated_Requirement_Transaction_Association, false));
query.Joins.Add(joinAssReqTraAffTgt);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasAssociated_Requirement_Transaction_AffiliateTarget, false), prefixAssociated_Requirement_Transaction_AffiliateTarget + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Name, false));
//------------------------------------------------------------------
}
//------------------------------------------------------------------
// Time records.
bool bQueryTomeRecords = columns.HasId(SbmRequirement.Column.ConstTime_Id) || columns.HasId(SbmRequirement.Column.ConstTime_Quantity) || columns.HasId(SbmRequirement.Column.ConstTime_AffTarget_Name);
if (bQueryTomeRecords)
{
//------------------------------------------------------------------
// Joins to query time by technician: (1) Constituent & (2)Affiliate
//------------------------------------------------------------------
// 'Time' Constituents.
DbQueryJoin joinConst = new DbQueryJoin(DbJoinType.LeftOuter);
joinConst.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), aliasRequirment_ConstituentTime);
joinConst.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Type, aliasRequirment_ConstituentTime, false) + "=" + Sbm.ConstituentType.TimeRecord.ToString());
joinConst.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ReqntId, aliasRequirment_ConstituentTime, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
joinConst.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status, aliasRequirment_ConstituentTime, false) + "<>'" + StatusCancelled + "'");
query.Joins.Add(joinConst);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Id, aliasRequirment_ConstituentTime, false), prefixRequirement_ConstituentTime + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Id, false));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Quantity, aliasRequirment_ConstituentTime, false), prefixRequirement_ConstituentTime + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Quantity, false));
//------------------------------------------------------------------
// Join to the Target Affiliate.
DbQueryJoin joinAffTgt = new DbQueryJoin(DbJoinType.LeftOuter);
joinAffTgt.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasRequirment_ConstituentTime_AffiliateTarget);
joinAffTgt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasRequirment_ConstituentTime_AffiliateTarget, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget, aliasRequirment_ConstituentTime, false));
query.Joins.Add(joinAffTgt);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasRequirment_ConstituentTime_AffiliateTarget, false), prefixRequirement_ConstituentTime_AffiliateTarget + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Name, false));
//------------------------------------------------------------------
}
//------------------------------------------------------------------
// Any columns or sub queries that require 'Aggregate' columns (Count, Max etc) should follow. qry.lGroupBy = qry.lColumn.Values(); Slows down query immensely.
//------------------------------------------------------------------
// Transaction requirement count.
if (columns.HasId(SbmRequirement.Column.Trans_ReqntCount))
{
// Get the total number of requirements for this requirement's transaction.
// AWH 15-Jun-05. Replaced to vastly improve performance, but is it compatible with other databases.
// Perform the COUNT directly using a SELECT in the column list.
// example.
// (Select Count(TblReqTraReqCount.Id) from Requirement AS TblReqTraReqCount
// WHERE ((TblReqTraReqCount.TransId)=(Requirement.TransId))) AS Req_Count
String aliasReqntTrans_RequirementCount = "taTraReqCount";
String colTransReqntCount = "TraReqCount";
DbQuery qryReqntCount = new DbQuery(Database.DbmsType);
qryReqntCount.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasReqntTrans_RequirementCount));
qryReqntCount.Columns.Add("COUNT(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasReqntTrans_RequirementCount, false) + ")");
qryReqntCount.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasReqntTrans_RequirementCount, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement));
query.Columns.Add("(" + qryReqntCount.BuildQuery() + ")", colTransReqntCount);
}
// Total requirement quantity.
if (columns.HasId(SbmRequirement.Column.Quantity_TotalByCommodity))
{
// Get the total quantity for this commodity.
String aliasReqntTrans_CommodityQuantity = "taRetCmdQty";
String colQuantityTotalByCmd = "QtyTotalByCmd";
DbQuery qryCmdQty = new DbQuery(Database.DbmsType);
qryCmdQty.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasReqntTrans_CommodityQuantity));
qryCmdQty.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity, aliasReqntTrans_CommodityQuantity, false) + ")");
qryCmdQty.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasReqntTrans_CommodityQuantity, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
query.Columns.Add("(" + qryCmdQty.BuildQuery() + ")", colQuantityTotalByCmd);
}
//------------------------------------------------------------------
// Quantity dispatched.
if (columns.HasId(SbmRequirement.Column.QuantityDispatched))
{
DbQuery qryReqntDisp = new DbQuery(Database.DbmsType);
qryReqntDisp.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirment_SourceRequirementDispatched);
qryReqntDisp.Columns.Add("Sum(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity, aliasRequirment_SourceRequirementDispatched, false) + ")");
qryReqntDisp.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, aliasRequirment_SourceRequirementDispatched, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
qryReqntDisp.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status, aliasRequirment_SourceRequirementDispatched, false) + "<>'" + StatusCancelled + "'");
// Requirement must belong to a transaction of type 'Dispatch Note'.
String aliasRequirement_TransactionDispatached = "aReqTransDisp";
String colQuantityDispatch = "QtyDisp";
DbQueryJoin joinTrans = new DbQueryJoin(DbJoinType.Inner);
joinTrans.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasRequirement_TransactionDispatached);
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasRequirement_TransactionDispatached, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirment_SourceRequirementDispatched, false));
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasRequirement_TransactionDispatached, false) + "=" + Sbm.TransactionType.SalesDispatch.ToString());
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasRequirement_TransactionDispatached, false) + "<>'" + StatusCancelled + "'");
qryReqntDisp.Joins.Add(joinTrans);
// Build column definions on sub-query.
query.Columns.Add("(" + qryReqntDisp.BuildQuery() + ")", colQuantityDispatch);
}
//------------------------------------------------------------------
// Quantity Invoiced.
if (columns.HasId(SbmRequirement.Column.QuantityInvoiced))
{
// Supported invoice transaction types.
List<String> transTypeInvoices = new List<string>();
transTypeInvoices.Add(Sbm.TransactionType.ProformaSalesInvoice.ToString());
transTypeInvoices.Add(Sbm.TransactionType.SalesInvoice.ToString());
transTypeInvoices.Add(Sbm.TransactionType.ProformaPurchaseInvoice.ToString());
transTypeInvoices.Add(Sbm.TransactionType.PurchaseInvoice.ToString());
// Construct sub query to identify associated requirements that belong to invoices that haven't been invoiced.
DbQuery qryReqntInv = new DbQuery(Database.DbmsType);
qryReqntInv.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirment_SourceRequirementInvoice);
qryReqntInv.Columns.Add("Sum(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Quantity, aliasRequirment_SourceRequirementInvoice, false) + ")");
qryReqntInv.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, aliasRequirment_SourceRequirementInvoice, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
qryReqntInv.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Status, aliasRequirment_SourceRequirementInvoice, false) + "<>'" + StatusCancelled + "'");
// Requirement must belong to a transaction of type Sales or Purchase 'Invoice' (including proforma).
String aliasRequirement_TransactionInvoice = "TblTransInv";
String colQuantityInvoice = "QtyInv";
DbQueryJoin joinTrans = new DbQueryJoin(DbJoinType.Inner);
joinTrans.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasRequirement_TransactionInvoice);
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasRequirement_TransactionInvoice, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirment_SourceRequirementInvoice, false));
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasRequirement_TransactionInvoice, false) + " IN (" + transTypeInvoices.Concat(",") + ")");
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasRequirement_TransactionInvoice, false) + "<>'" + StatusCancelled + "'");
qryReqntInv.Joins.Add(joinTrans);
// Build column definions on sub-query.
query.Columns.Add("(" + qryReqntInv.BuildQuery() + ")", colQuantityInvoice);
}
//------------------------------------------------------------------
// Stock.
bool hasStockCol_Current = columns.HasId(SbmRequirement.Column.Stock_Current);
bool hasStockCol_DueImminent = columns.HasId(SbmRequirement.Column.Stock_DueImminently);
bool hasStockCol_Allocated = columns.HasId(SbmRequirement.Column.Stock_Allocated);
bool hasStockCol_Available = columns.HasId(SbmRequirement.Column.Stock_Available);
if (!hasStockCol_Available)
hasStockCol_Available = columns.HasId(SbmRequirement.Column.Stock_Available_MinZero);
if (hasStockCol_Current || hasStockCol_Allocated || hasStockCol_Available)
{
// Sales stock locations.
String locationStockIds = GetLocationIds_Sales().Concat(",");
if (locationStockIds.IsEmpty()) locationStockIds = "0";
//------------------------------------------------------------------
// Stock levels (current level).
String aliasRequirement_StockLevel = "aReqStkLvl";
DbQuery qryStk = new DbQuery(Database.DbmsType);
qryStk.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasRequirement_StockLevel);
qryStk.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Quantity, aliasRequirement_StockLevel, false) + ")");
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasRequirement_StockLevel, false) + "=" + Sbm.StockLevelType.CurrentLevel.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasRequirement_StockLevel, false) + " IN (" + locationStockIds + ")");
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasRequirement_StockLevel, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasRequirement_StockLevel, false) + "='" + StatusCurrent + "'");
//------------------------------------------------------------------
// Stock movements (allocations).
String aliasRequirement_Movement = "aReqMov";
DbQuery qryMov = new DbQuery(Database.DbmsType);
qryMov.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), aliasRequirement_Movement);
qryMov.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Quantity, aliasRequirement_Movement, false) + ")");
qryMov.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Type, aliasRequirement_Movement, false) + "=" + Sbm.MovementType.SalesAllocation.ToString());
qryMov.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_LocationIdFrom, aliasRequirement_Movement, false) + " IN (" + locationStockIds + ")");
qryMov.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemType, aliasRequirement_Movement, false) + "=" + ((int)Sbm.ItemType.Commodity).ToString());
qryMov.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasRequirement_Movement, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
qryMov.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Status, aliasRequirement_Movement, false) + "='" + StatusAwaiting + "'");
String colReqStockCurrent = "StkCurr";
if (hasStockCol_Current || hasStockCol_Available)
query.Columns.Add("(" + qryStk.BuildQuery() + ")", colReqStockCurrent);
String colReqStockAllocated = "StkAlloc";
if (hasStockCol_Allocated || hasStockCol_Available)
query.Columns.Add("(" + qryMov.BuildQuery() + ")", colReqStockAllocated);
/* Available stock is now calculated on the query results (see SapRequirementMgr::GetDataValue).
String colReqStockAvailable = "StkAvail";
if (hasStockCol_Available)
query.Columns.Add("("+qryStk.BuildQuery()+")-("+qryMov.BuildQuery()+")", colReqStockAvailable);*/
}
//------------------------------------------------------------------
// Stock level by sales location.
if (columns.HasId(SbmRequirement.Column.Stock_BySalesLocation01) && SysId.IsValid(prm.SalesLocationIdStock01))
{
// Stock level @ Sales Location 1.
String aliasRequirement_StockSalesLocation01 = "aReqStkSalLoc01";
String colReqStockSalesLoc01 = "StkSalLoc01";
DbQuery qryStk = new DbQuery(Database.DbmsType);
qryStk.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasRequirement_StockSalesLocation01);
qryStk.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Quantity, aliasRequirement_StockSalesLocation01, false) + ")");
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasRequirement_StockSalesLocation01, false) + "=" + Sbm.StockLevelType.CurrentLevel.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasRequirement_StockSalesLocation01, false) + "=" + prm.SalesLocationIdStock01.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasRequirement_StockSalesLocation01, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasRequirement_StockSalesLocation01, false) + "='" + StatusCurrent + "'");
query.Columns.Add("(" + qryStk.BuildQuery() + ")", colReqStockSalesLoc01);
}
//------------------------------------------------------------------
if (columns.HasId(SbmRequirement.Column.Stock_BySalesLocation02) && SysId.IsValid(prm.SalesLocationIdStock02))
{
// Stock level @ Sales Location 2.
String aliasRequirement_StockSalesLocation02 = "aReqStkSalLoc02";
String colReqStockSalesLoc02 = "StkSalLoc02";
DbQuery qryStk = new DbQuery(Database.DbmsType);
qryStk.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasRequirement_StockSalesLocation02);
qryStk.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Quantity, aliasRequirement_StockSalesLocation02, false) + ")");
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasRequirement_StockSalesLocation02, false) + "=" + Sbm.StockLevelType.CurrentLevel.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasRequirement_StockSalesLocation02, false) + "=" + prm.SalesLocationIdStock02.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasRequirement_StockSalesLocation02, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasRequirement_StockSalesLocation02, false) + "='" + StatusCurrent + "'");
query.Columns.Add("(" + qryStk.BuildQuery() + ")", colReqStockSalesLoc02);
}
//------------------------------------------------------------------
if (columns.HasId(SbmRequirement.Column.Stock_BySalesLocation03) && SysId.IsValid(prm.SalesLocationIdStock03))
{
// Stock level @ Sales Location 3.
String aliasRequirement_StockSalesLocation03 = "aReqStkSalLoc03";
String colReqStockSalesLoc03 = "StkSalLoc03";
DbQuery qryStk = new DbQuery(Database.DbmsType);
qryStk.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel), aliasRequirement_StockSalesLocation03);
qryStk.Columns.Add("SUM(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Quantity, aliasRequirement_StockSalesLocation03, false) + ")");
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Type, aliasRequirement_StockSalesLocation03, false) + "=" + Sbm.StockLevelType.CurrentLevel.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_LocationId, aliasRequirement_StockSalesLocation03, false) + "=" + prm.SalesLocationIdStock03.ToString());
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_CommodityId, aliasRequirement_StockSalesLocation03, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement));
qryStk.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.StockLevel_Status, aliasRequirement_StockSalesLocation03, false) + "='" + StatusCurrent + "'");
query.Columns.Add("(" + qryStk.BuildQuery() + ")", colReqStockSalesLoc03);
}
//------------------------------------------------------------------
// Imminent stock.
if (hasStockCol_DueImminent && Internals.GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption.ImminentStock))
{
SbmCommodityMgr_Dbas commodityMgr = null; // NB Must be 'ODBC' version to access query logic.
SbmCommodityMgr_Dbas.PlannedStockMovements_Params prmPSM = new SbmCommodityMgr_Dbas.PlannedStockMovements_Params();
prmPSM.excludeAwaitingContainers = !Internals.GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption.AwaitingContainersInImminentStock);
int weeksImminentStock = Math.Max(0, Math.Min(12, Internals.GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodWeeks.ImminentStockDue, 0)));
prmPSM.latest = DateTime.Today.StartOfWorkingWeek().AddDays(weeksImminentStock * 7);
prmPSM.commodityIdCol = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasRequirement);
query.Columns.Add(commodityMgr.BuildPlannedStockMovementsQuery(prmPSM), reqStockDueImmin);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetRequirementQueryFilter(prm));
if (prm.RequirementIdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetRequirementSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(Database, query.BuildQuery());
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
//-------------------------------------------------------------------
}
//=======================================================================
}