Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Requirement.cs
T

995 lines
51 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.ReferenceData;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
// Transaction manager - Requirements.
//=======================================================================
partial class SbmTransactionMgr
{
//-------------------------------------------------------------------
// Utilities.
public abstract SbmRequirement CloneRequirement(SbmRequirement requirementSource, bool copyAddDescs);
public abstract SbmRequirement.Data CloneRequirement(SbmRequirement.Data requirementSource, bool copyAddDescs);
public abstract bool CostColumnsAreAvailable();
public abstract bool SetTaxCode(SbmRequirement requirement, DateTime effective);
// Calculate the requirement's values.
public abstract bool CalculateTotal(SbmRequirement.Data requirement);
public bool CalculateTotal(SbmRequirement requirement)
{
SbmRequirement.Data data = requirement.GetData();
bool result = CalculateTotal(data);
requirement.SetData(data);
return result;
}
// Requirement associated quantities.
public abstract decimal GetRequirementQuantityDispatched(SysId requirementId, SysId transIdExclude);
public abstract decimal GetRequirementQuantityInvoiced(SysId requirementId, SysId transIdExclude);
//-------------------------------------------------------------------
// Associated data.
public abstract bool RequirementHasAssociatedRequirements(SysId requirementId);
public abstract bool RequirementHasConstituents(SysId requirementId, Sbm.ConstituentType constituentType);
public abstract bool RequirementHasStockMovements(SysId requirementId);
public abstract bool RequirementHasItemLinks(SysId requirementId);
public abstract bool ClearRequirementDependentData(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo);
public abstract bool ClearRequirementAssociatedRequirements(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Cost Estimates and Processes.
/// <summary>Store Cost estimates and Processes carried by requirement.<br?>Null lists are ignored. Empty lists clear previous details.</br></summary>
public bool CommitRequirementData(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo)
{
if (!CommitRequirementCostEstimates(requirement, dbUpdateInfo)) return false;
if (!CommitRequirementProcesses(requirement, dbUpdateInfo)) return false;
return true;
}
// Requirement Cost Estimates.
public abstract bool RequirementHasCostEstimates(SysId requirementId);
/// <summary>Retrieve the currently stored set of Cost Estimates for the Requirement.</summary>
public abstract List<SbmCostEstimate> GetRequirementCostEstimates(SysId requirementId);
/// <summary> Assign the currently stored set of Cost Estimates to the Requirement if not already done so (null list).</summary>
public bool PopulateRequirementCostEstimates(SbmRequirement requirement)
{
if (requirement.CostEstimates != null) return true;
requirement.CostEstimates = GetRequirementCostEstimates(requirement.Id);
return true;
}
/// <summary>Store the Requirement's Cost Estimates if previously populated/modified.<br?>Null lists are ignored. Empty lists clear previous details.</summary>
public abstract bool CommitRequirementCostEstimates(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo);
// Requirement Processes.
public abstract bool RequirementHasProcess(SysId requirementId);
/// <summary>Retrieve the currently stored set of Item Processes for the Requirement.</summary>
public abstract List<SbmItemProcess> GetRequirementProcesses(SysId requirementId);
/// <summary> Assign the currently stored set of Item Processes to the Requirement if not already done so (null list).</summary>
public bool PopulateRequirementProcesses(SbmRequirement requirement)
{
if (requirement.Processes != null) return true;
requirement.Processes = GetRequirementProcesses(requirement.Id);
return true;
}
/// <summary>Store the Requirement's Processes if previously populated/modified.<br?>Null lists are ignored. Empty lists clear previous details.</summary>
public abstract bool CommitRequirementProcesses(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Retrieve individual requirements.
//-------------------------------------------------------------------
// Exist requirements.
public bool RequirementExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SbmRequirement.Params prmRequirement = new SbmRequirement.Params();
prmRequirement.RequirementIdsIncluded.Add(id);
prmRequirement.StatusCat = SbmRequirement.StatusCat.Any;
return GetRequirementCount(prmRequirement) == 1;
}
public abstract bool RequirementsExistByParams(SbmRequirement.Params prmRequirement);
//-------------------------------------------------------------------
// Get requirements.
public abstract SbmRequirement GetRequirement(SbmRequirement.Params prm);
public SbmRequirement GetRequirementById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SbmRequirement.Params prmRequirement = new SbmRequirement.Params();
prmRequirement.RequirementIdsIncluded.Add(id);
prmRequirement.StatusCat = SbmRequirement.StatusCat.Any;
return GetRequirement(prmRequirement);
}
//-------------------------------------------------------------------
// Create assets.
public abstract SbmRequirement CreateRequirement(SysId assocId, SysId transId, Sbm.RequirementType requirementType);
//-------------------------------------------------------------------
// Validate asset data.
public bool IsValidRequirement(SbmRequirement requirement)
{
ClearErrorState();
if (requirement == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidRequirementData(requirement.GetData(), new SbmRequirement.ErrField());
}
public virtual bool IsValidRequirementData(SbmRequirement.Data data, SbmRequirement.ErrField errField)
{
ClearErrorState();
// Requirement properties.
if (errField.AffiliateIdOwner != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AffiliateIdOwner))
{
errField.AffiliateIdOwner = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid owner");
}
if (errField.AssociationId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AssociationId))
{
errField.AssociationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid association");
}
if (errField.TransactionId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.TransactionId))
{
errField.TransactionId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid transaction");
}
if (errField.RequirementType != SacsHierarchyItem.ValidValue.Ignore && (short)data.RequirementType < 1)
{
if ((int)data.RequirementType < 1)
{
errField.RequirementType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid type");
}
}
// NB Seq, ReqntIdSource, Required, Started, Completed is optional.
if (errField.JobNumber != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.JobNumber, "job number", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_JobNumber), true))
{
errField.JobNumber = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB AssIdSubcontract, CommodityId is optional.
if (errField.ProductCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ProductCode, "product code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_ProductCode), true))
{
errField.ProductCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB AssetId is optional.
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_DescBrief), true))
{
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescIntro != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescIntro, "introduction", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_DescIntro), true))
{
errField.DescIntro = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescOutline != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescOutline, "outline description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_DescOutline), true))
{
errField.DescOutline = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescDetail != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescDetail, "detailed description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_DescDetail), true))
{
errField.DescDetail = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB PromotionCode, Quantity, QuantityProd, UomId, Weight, UomIdWeight is optional.
if (errField.NominalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.NominalCode, "nominal code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_NominalCode), true))
{
errField.NominalCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.MaterialSourceCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.MaterialSourceCode, "material source", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_MaterialSourceCode), true))
{
errField.MaterialSourceCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB AmountUnit > LocationIdStock is optional.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_Notes), true))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmRequirement.RequirementStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// Requirement database interface.
public abstract bool InsertRequirement(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateRequirement(SbmRequirement requirement, DbUpdateInfo dbUpdateInfo);
public bool RequirementCanBeDeleted(SbmRequirement requirement, Sbm.TransactionType transactionType)
{
return RequirementCanBeDeleted(requirement.GetData(), transactionType);
}
public virtual bool RequirementCanBeDeleted(SbmRequirement.Data requirement, Sbm.TransactionType transactionType)
{
ClearErrorState();
if (requirement == null || !SysId.IsValid(requirement.Id)) return SetErrorState(ErrorMessage.ItemNotSpecified);
// Check for associated requirements - those whose ReqntIdSource points to this one:
if (RequirementHasAssociatedRequirements(requirement.Id)) return SetErrorState("item is referenced by other requirements");
// Check for constituents of various types:
if (RequirementHasConstituents(requirement.Id, Sbm.ConstituentType.TimeRecord)) return SetErrorState("item has time records");
if (RequirementHasConstituents(requirement.Id, Sbm.ConstituentType.Task)) return SetErrorState("item has tasks");
if (RequirementHasConstituents(requirement.Id, Sbm.ConstituentType.Expense)) return SetErrorState("item has expense details");
// Processes are removed when requirements is deleted:
//if (requirement.HasConstituents (eSapConType_Process)) return SetErrorState ("item has processes");
// Check that the status is not complete.
if (requirement.Status == SaStatus.Completed && SysId.IsValid(requirement.Id))
{
switch (transactionType)
{
case Sbm.TransactionType.Project:
case Sbm.TransactionType.SalesLead:
//case Sbm.TransactionType.SalesQuote:
//case Sbm.TransactionType.ProformaSalesOrder:
//case Sbm.TransactionType.SalesOrder:
case Sbm.TransactionType.SalesPO:
case Sbm.TransactionType.SalesDispatch:
case Sbm.TransactionType.ProformaSalesInvoice:
case Sbm.TransactionType.SalesInvoice:
//case Sbm.TransactionType.PurchaseQuote:
//case Sbm.TransactionType.ProformaPurchaseOrder:
//case Sbm.TransactionType.PurchaseOrder:
case Sbm.TransactionType.PurchaseSO:
case Sbm.TransactionType.PurchaseDelivery:
case Sbm.TransactionType.ProformaPurchaseInvoice:
case Sbm.TransactionType.PurchaseInvoice:
break;
default:
// Requirements for other transaction types must not be 'Completed'
return SetErrorState("status is completed");
}
}
// Stock movements.
// Sarand Apr-10: Stock items should not prohibit requirement from being deleted.
// They are cleared when the requirement itself is deleted.
//if (requirement.HasStockMovements()) return SetErrorState ("item has stock movements");
return true;
}
public abstract bool DeleteRequirement(SbmRequirement requirement, Sbm.TransactionType transactionType, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Requirement list.
public abstract ColumnDfn GetRequirementColumnDfn(SbmRequirement.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetRequirementQueryFilter(SbmRequirement.Params prm);
public abstract long GetRequirementCount(SbmRequirement.Params prm);
public abstract List<SbmRequirement> GetRequirementList(SbmRequirement.Params prm);
public abstract List<SbmRequirement> GetRequirementsForTransaction(SysId transactionId, SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.NotDeleted);
public abstract DbResultSet ExecuteRequirementQuery(List<ColumnDfn> columns, SbmRequirement.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public DataValue GetRequirementDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmRequirement.Column)column.Id)
{
//-----------------------------------------------------------
// Requirement Promotion.
/// <summary> Precedence: & Hence:
/// <para>P1 ~ Requirement promotion - If not 'Commodity' requirement promotion requested.</para>
/// <para>P2 ~ Customer promotion - In all cases. </para>
/// <para>P3 ~ Commodity promotion - If not 'Customer' requested.</para>
/// <para>H1 ~ Requirement promotion = Requirement, Customer or Commodity promotion</para>
/// <para>H2 ~ Commodity promotion = Customer or Commodity promotion</para>
/// <para>H3 ~ Customer promotion = Requirement or Customer promotion only</para>
/// </summary>
case SbmRequirement.Column.PromotionCode:
case SbmRequirement.Column.PromotionDesc:
case SbmRequirement.Column.Promotion_AltText:
case SbmRequirement.Column.Cmd_PromotionCode:
case SbmRequirement.Column.Cmd_PromotionDesc:
case SbmRequirement.Column.Cmd_Promotion_AltText:
case SbmRequirement.Column.Cmd_Cust_PromotionCode:
case SbmRequirement.Column.Cmd_Cust_PromotionDesc:
case SbmRequirement.Column.Cmd_Cust_Promotion_AltText:
{
String promotionCode = "";
bool reqntPromotion = (column.Id == (int)SbmRequirement.Column.PromotionCode || column.Id == (int)SbmRequirement.Column.PromotionDesc || column.Id == (int)SbmRequirement.Column.Promotion_AltText);
bool cmdPromotion = (column.Id == (int)SbmRequirement.Column.Cmd_PromotionCode || column.Id == (int)SbmRequirement.Column.Cmd_PromotionDesc || column.Id == (int)SbmRequirement.Column.Cmd_Promotion_AltText);
bool custPromotion = (column.Id == (int)SbmRequirement.Column.Cmd_Cust_PromotionCode || column.Id == (int)SbmRequirement.Column.Cmd_Cust_PromotionDesc || column.Id == (int)SbmRequirement.Column.Cmd_Cust_Promotion_AltText);
// Only use the requirement promotion code if 'Requirement' or 'Customer' promotion information requested.
if (StringUtil.IsEmpty(promotionCode) && (reqntPromotion || custPromotion))
promotionCode = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.PromotionCode).DataName).ToString();
// Check whether customer has a prommotion.
if (StringUtil.IsEmpty(promotionCode))
promotionCode = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_Cust_PromotionCode).DataName).ToString();
// Use the commodity promotion if 'Requirement' or 'Commodity' promotion information requested.
if (StringUtil.IsEmpty(promotionCode) && (reqntPromotion || cmdPromotion))
promotionCode = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_PromotionCode).DataName).ToString();
// Clear promotion if 'None' specified.
SbmRequirement requirement = null;
if (promotionCode == requirement.GetPromotionCodeNONE()) promotionCode.IsEmpty();
// Populate the requested data value.
if (column.Id == (int)SbmRequirement.Column.PromotionCode || column.Id == (int)SbmRequirement.Column.Cmd_PromotionCode || column.Id == (int)SbmRequirement.Column.Cmd_Cust_PromotionCode)
value = new DataValue(promotionCode);
else
{
// Retrieve promotion description.
String promotionDesc = GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityPromotion, promotionCode);
if (StringUtil.IsEmpty(promotionDesc)) promotionDesc = promotionCode;
if (column.Id == (int)SbmRequirement.Column.PromotionDesc || column.Id == (int)SbmRequirement.Column.Cmd_PromotionDesc || column.Id == (int)SbmRequirement.Column.Cmd_Cust_PromotionDesc)
value = new DataValue(promotionDesc);
else if ((column.Id == (int)SbmRequirement.Column.Promotion_AltText || column.Id == (int)SbmRequirement.Column.Cmd_Promotion_AltText || column.Id == (int)SbmRequirement.Column.Cmd_Cust_Promotion_AltText))
{
// Alternative text - only populated if promotion description is blank.
if (StringUtil.IsEmpty(promotionDesc))
value = new DataValue(SessionConsole.GetOwnerOption_Value(Sbm.OrgOption_Value.AlternativePromotionText));
else value = new DataValue("");
}
}
break;
}
//-----------------------------------------------------------
// Association Coding.
case SbmRequirement.Column.Assoc_AccountManagerDesc:
{
String accountManagerCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountManager, accountManagerCode));
break;
}
case SbmRequirement.Column.Assoc_AccountHandlerDesc:
{
String accountHandlerCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountHandler, accountHandlerCode));
break;
}
//-----------------------------------------------------------
// Transaction Coding.
case SbmRequirement.Column.Trans_ContactArea:
{
String contactAreaCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactArea, contactAreaCode));
break;
}
case SbmRequirement.Column.Trans_DeliveryStatus:
{
String deliveryStatusCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryStatus, deliveryStatusCode));
break;
}
case SbmRequirement.Column.Trans_DeliveryType:
{
String deliveryTypeCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryType, deliveryTypeCode));
break;
}
case SbmRequirement.Column.Trans_DeliveryMethod:
{
String deliveryMethodCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryMethod, deliveryMethodCode));
break;
}
case SbmRequirement.Column.Trans_DeliveryCourier:
{
String deliveryCourierCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryCourier, deliveryCourierCode));
break;
}
case SbmRequirement.Column.Trans_DeliveryBookIn:
{
String deliveryBookInCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryBookIn, deliveryBookInCode));
break;
}
case SbmRequirement.Column.Trans_StockPicker:
{
String stockPickerCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.StockPicker, stockPickerCode));
break;
}
// Target Address.
case SbmRequirement.Column.Trans_AssocTarget_Address:
{
List<String> addresses = new List<String>()
{
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_Name).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_Line1).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_Line2).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_Line3).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_City).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_Province).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AssocTarget_Address_Postcode).DataName).ToString(),
};
value = new DataValue(addresses.Concat(", ", null, null, true, true).Replace(" ,", ",").Trim(',').Trim());
break;
}
// Delivery Address.
case SbmRequirement.Column.Trans_DeliveryAddress:
{
List<String> addresses = new List<String>()
{
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_Name).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_Line1).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_Line2).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_Line3).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_City).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_Province).DataName).ToString(),
values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAddress_Postcode).DataName).ToString(),
};
value = new DataValue(addresses.Concat(", ", null, null, true, true).Replace(" ,", ",").Trim(',').Trim());
break;
}
//-----------------------------------------------------------
// Reqnt-Trans Delivery TaxCode.
case SbmRequirement.Column.Trans_DeliveryTaxCode_Code:
case SbmRequirement.Column.Trans_DeliveryTaxCode_Rate:
break;
// Reqnt-Trans DeliveryAmounts Format.
case SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt:
case SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt:
case SbmRequirement.Column.Trans_DeliveryAmountTot_Fmt:
// Reqnt-Trans Amounts.
case SbmRequirement.Column.Trans_AmountEst_Fmt:
case SbmRequirement.Column.Trans_AmountMax_Fmt:
case SbmRequirement.Column.Trans_AmountNet_Fmt:
case SbmRequirement.Column.Trans_AmountTax_Fmt:
case SbmRequirement.Column.Trans_AmountTot_Fmt:
// Requirement Amounts.
case SbmRequirement.Column.AmountUnit_Fmt:
case SbmRequirement.Column.AmountAct_Fmt:
case SbmRequirement.Column.AmountUnitNet_Fmt:
case SbmRequirement.Column.AmountNet_Fmt:
case SbmRequirement.Column.AmountTax_Fmt:
case SbmRequirement.Column.AmountTot_Fmt:
{
String valAmount = "";
ColumnDfn colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Unknown);
switch (column.Id)
{
case (int)SbmRequirement.Column.Trans_DeliveryAmountNet_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAmountNet); break;
case (int)SbmRequirement.Column.Trans_DeliveryAmountTax_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAmountTax); break;
case (int)SbmRequirement.Column.Trans_DeliveryAmountTot_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_DeliveryAmountTot); break;
case (int)SbmRequirement.Column.Trans_AmountEst_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_AmountEst); break;
case (int)SbmRequirement.Column.Trans_AmountMax_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_AmountMax); break;
case (int)SbmRequirement.Column.Trans_AmountNet_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_AmountNet); break;
case (int)SbmRequirement.Column.Trans_AmountTax_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_AmountTax); break;
case (int)SbmRequirement.Column.Trans_AmountTot_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.Trans_AmountTot); break;
case (int)SbmRequirement.Column.AmountUnit_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.AmountUnit); break;
case (int)SbmRequirement.Column.AmountAct_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.AmountAct); break;
case (int)SbmRequirement.Column.AmountUnitNet_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.AmountUnitNet); break;
case (int)SbmRequirement.Column.AmountNet_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.AmountNet); break;
case (int)SbmRequirement.Column.AmountTax_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.AmountTax); break;
case (int)SbmRequirement.Column.AmountTot_Fmt: colAmount = GetRequirementColumnDfn(SbmRequirement.Column.AmountTot); break;
}
double amount = values.GetValue(colAmount.DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
SysId currencyId = new SysId(StringUtil.ToInt(values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_CurrencyId).DataName).ToString()));
valAmount = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetCurrency(currencyId);
if (currency == null) currency = GetDefaultCurrency();
if (currency != null) currency.FormatAmount((decimal)amount);
}
value = new DataValue(valAmount);
break;
}
//-----------------------------------------------------------
// Transaction Cost & Margin.
case SbmRequirement.Column.Trans_CostTotal_Fmt:
case SbmRequirement.Column.Trans_AmountMargin:
case SbmRequirement.Column.Trans_AmountMargin_Fmt:
case SbmRequirement.Column.Trans_PercentMargin:
case SbmRequirement.Column.Trans_PercentMargin_Fmt:
{
double amount = 0.0f;
double costTotal = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_CostTotal).DataName).ToNumeric();
SysId currencyId = new SysId(StringUtil.ToInt(values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_CurrencyId).DataName).ToString()));
SaCurrency currency = GetCurrency(currencyId);
if (currency == null) currency = GetDefaultCurrency();
// Calculate the relevant amount.
if (column.Id == (int)SbmRequirement.Column.Trans_CostTotal_Fmt)
{
amount = costTotal;
}
else
{
// Calculate the Margin.
double amountNet = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_AmountNet).DataName).ToNumeric();
if (column.Id == (int)SbmRequirement.Column.Trans_AmountMargin || column.Id == (int)SbmRequirement.Column.Trans_AmountMargin_Fmt)
amount = amountNet - costTotal;
else if (column.Id == (int)SbmRequirement.Column.Trans_PercentMargin || column.Id == (int)SbmRequirement.Column.Trans_PercentMargin_Fmt)
amount = (amountNet > 0.0) ? (amountNet - costTotal) / amountNet * 100.0f : 0.0f;
}
// Format the result.
if (column.Id == (int)SbmRequirement.Column.Trans_CostTotal)
{
}
else if (column.Id == (int)SbmRequirement.Column.Trans_AmountMargin || column.Id == (int)SbmRequirement.Column.Trans_PercentMargin)
{
// Numeric value.
value = new DataValue(amount);
}
else if (column.Id == (int)SbmRequirement.Column.Trans_PercentMargin_Fmt)
{
// Percentage.
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
value = new DataValue(StringUtil.FormatNumeric((decimal)amount, 2, 0, ',') + "%");
}
else
{
// Format the amount.
String valFmtAmount = "";
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
valFmtAmount = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
if (currency != null) valFmtAmount = currency.FormatAmount((decimal)amount);
}
value = new DataValue(valFmtAmount);
}
break;
}
//-----------------------------------------------------------
// Transaction Flags (Allocation & Replacement).
case SbmRequirement.Column.Trans_AllocationInd:
case SbmRequirement.Column.Trans_AllocationInd_YP:
{
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
String statusCode = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_StatusDesc).DataName).ToString();
SaStatus saStatus = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmRequirement.Column.Trans_AllocationInd)
{
DataValue.TriStateType triState = DataValue.TriStateType.Unknown;
if (saStatus == SaStatus.Cancelled)
triState = DataValue.TriStateType.Red;
else if (SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_FullAllocation))
triState = DataValue.TriStateType.Green;
else if (SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_PartialAllocation))
triState = DataValue.TriStateType.Amber;
value = new DataValue(triState);
}
else if (column.Id == (int)SbmRequirement.Column.Trans_AllocationInd_YP)
{
if (saStatus == SaStatus.Cancelled)
value = new DataValue();
else if (SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_FullAllocation))
value = new DataValue("Y");
else if (SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_PartialAllocation))
value = new DataValue("P");
}
break;
}
case SbmRequirement.Column.Trans_ReplacementOrder_Tick:
case SbmRequirement.Column.Trans_ReplacementOrder_Y:
{
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
bool replacementOrder = SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_ReplacementOrder);
if (column.Id == (int)SbmRequirement.Column.Trans_ReplacementOrder_Tick) value = new DataValue(replacementOrder);
else if (column.Id == (int)SbmRequirement.Column.Trans_ReplacementOrder_Y) value = new DataValue(replacementOrder ? "Y" : "");
break;
}
//-----------------------------------------------------------
// Transaction Status.
case SbmRequirement.Column.Trans_StatusDesc:
case SbmRequirement.Column.Trans_StatusInd:
{
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
if (column.Id == (int)SbmRequirement.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SbmAssociation.Column.Status_Ind)
value = new DataValue(SbmTransaction.GetStatusTriState(status));
break;
}
case SbmRequirement.Column.Trans_Status_OnHold_Tick:
case SbmRequirement.Column.Trans_Status_OnHold_Cross:
case SbmRequirement.Column.Trans_Status_OnHold_Y:
{
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
bool onHold = (status == SaStatus.OnHold);
if (column.Id == (int)SbmRequirement.Column.Trans_Status_OnHold_Tick) value = new DataValue(onHold);
else if (column.Id == (int)SbmRequirement.Column.Trans_Status_OnHold_Cross) value = new DataValue(onHold);
else if (column.Id == (int)SbmRequirement.Column.Trans_Status_OnHold_Y) value = new DataValue(onHold ? "Y" : "");
break;
}
//-----------------------------------------------------------
// Required Date.
case SbmRequirement.Column.Required_Fmt:
{
// Check whether date is defaulted to transaction.
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
bool requiredDateDefaulted = SacsHierarchyItem.GetFlag(flags, SbmRequirement.Flag_RequiredDateDefaulted);
// Retrieve required date:
DateTime required = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Required).DataName).AsDate();
if (!DateUtil.IsValid(required) && requiredDateDefaulted) required = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_Required).DataName).AsDate();
String valRequired = DateUtil.Format(required, column.DateFormat);
if (!StringUtil.IsEmpty(valRequired) && requiredDateDefaulted) valRequired = "[" + valRequired + "]";
value = new DataValue(valRequired);
break;
}
// Started Day.
case SbmRequirement.Column.Started_Day:
{
DateTime started = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Started).DataName).AsDate();
value = new DataValue(started.DayOfWeek.ToString());
break;
}
//-----------------------------------------------------------
// Allocation Indicators.
case SbmRequirement.Column.Allocation_Ind:
case SbmRequirement.Column.AllocationInd_YP:
{
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
if (column.Id == (int)SbmRequirement.Column.Allocation_Ind)
{
DataValue.TriStateType allocationTriState = DataValue.TriStateType.Unknown;
if (SacsHierarchyItem.GetFlag(flags, SbmRequirement.Flag_FullAllocation))
allocationTriState = DataValue.TriStateType.Green;
else if (SacsHierarchyItem.GetFlag(flags, SbmRequirement.Flag_PartialAllocation))
allocationTriState = DataValue.TriStateType.Amber;
value = new DataValue(allocationTriState);
}
else if (column.Id == (int)SbmRequirement.Column.AllocationInd_YP)
{
if (SacsHierarchyItem.GetFlag(flags, SbmRequirement.Flag_FullAllocation))
value = new DataValue("Y");
else if (SacsHierarchyItem.GetFlag(flags, SbmRequirement.Flag_PartialAllocation))
value = new DataValue("P");
}
break;
}
//-----------------------------------------------------------
// Amount fields.
case SbmRequirement.Column.AmountUnitNet:
{
double quantity = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Quantity).DataName).AsDouble();
double amountNet = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.AmountNet).DataName).AsDouble();
double amount = quantity > 0 ? amountNet / quantity : 0.0;
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues) value = new DataValue(StringUtil.FormatNumeric(amount, 2, 0, ','));
break;
}
// Discounts.
case SbmRequirement.Column.PercentDiscountBySalesPrice:
{
double quantity = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Quantity).DataName).AsDouble();
double amountNet = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.AmountNet).DataName).AsDouble();
double cmdSalesPrice = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_SalesPrice).DataName).AsDouble();
if (Math.Abs(quantity) > 0.001 && Math.Abs(amountNet) > 0.001 && Math.Abs(cmdSalesPrice) > 0.001)
{
value = new DataValue((cmdSalesPrice - (amountNet / quantity)) / cmdSalesPrice * 100.0);
}
break;
}
case SbmRequirement.Column.PercentDiscountByRetailPrice:
{
double quantity = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Quantity).DataName).AsDouble();
double amountTot = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.AmountTot).DataName).AsDouble();
double cmdRetailPrice = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_RetailPrice).DataName).AsDouble();
if (Math.Abs(quantity) > 0.001 && Math.Abs(amountTot) > 0.001 && Math.Abs(cmdRetailPrice) > 0.001)
{
value = new DataValue((cmdRetailPrice - (amountTot / quantity)) / cmdRetailPrice * 100.0);
}
break;
}
//-----------------------------------------------------------
// Display Estimated Time.
case SbmRequirement.Column.TimeEst:
case SbmRequirement.Column.TimeEstMins:
case SbmRequirement.Column.TimeEstWithMins:
{
double timeEst = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.TimeEst).DataName).AsDouble();
if (column.Id == (int)SbmRequirement.Column.TimeEst)
value = new DataValue(column.FormatValue(new DataValue(timeEst)));
else if (column.Id == (int)SbmRequirement.Column.TimeEstMins)
value = new DataValue(column.FormatValue(new DataValue(timeEst * 60.0f)));
else if (column.Id == (int)SbmRequirement.Column.TimeEstWithMins)
value = new DataValue(StringUtil.FormatNumeric(timeEst, 2) + "[" + (timeEst * 60.0f).ToString().ToLong() + "m]");
break;
}
// Calculate Estimate Time Unit.
case SbmRequirement.Column.TimeEstUnit:
case SbmRequirement.Column.TimeEstUnitMins:
case SbmRequirement.Column.TimeEstUnitWithMins:
{
double timeEst = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.TimeEst).DataName).AsDouble();
double quantity = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Quantity).DataName).AsDouble();
double quantityProd = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.QuantityProd).DataName).AsDouble();
double quantityCalc = quantityProd > 0.0f ? quantityProd : quantity;
double unitTimeEst = quantityCalc != 0.0f ? timeEst / quantityCalc : 0.0f;
if (column.Id == (int)SbmRequirement.Column.TimeEstUnit)
value = new DataValue(column.FormatValue(new DataValue(unitTimeEst)));
else if (column.Id == (int)SbmRequirement.Column.TimeEstUnitMins)
value = new DataValue(column.FormatValue(new DataValue(unitTimeEst * 60.0f)));
else if (column.Id == (int)SbmRequirement.Column.TimeEstUnitWithMins)
value = new DataValue(StringUtil.FormatNumeric(unitTimeEst, 2) + " [" + (unitTimeEst * 60.0f).ToString().ToLong() + "m]");
break;
}
// Display Actual Time.
case SbmRequirement.Column.TimeAct:
case SbmRequirement.Column.TimeActMins:
case SbmRequirement.Column.TimeActWithMins:
{
double timeAct = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.TimeAct).DataName).AsDouble();
if (column.Id == (int)SbmRequirement.Column.TimeAct)
value = new DataValue(column.FormatValue(new DataValue(timeAct)));
else if (column.Id == (int)SbmRequirement.Column.TimeActMins)
value = new DataValue(column.FormatValue(new DataValue(timeAct * 60.0f)));
else if (column.Id == (int)SbmRequirement.Column.TimeActWithMins)
value = new DataValue(StringUtil.FormatNumeric(timeAct, 2) + " [" + (timeAct * 60.0f).ToString().ToLong() + "m]");
break;
}
// Calculate Actual Time Unit.
case SbmRequirement.Column.TimeActUnit:
case SbmRequirement.Column.TimeActUnitMins:
case SbmRequirement.Column.TimeActUnitWithMins:
{
double timeAct = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.TimeAct).DataName).AsDouble();
double quantity = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Quantity).DataName).AsDouble();
double quantityProd = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.QuantityProd).DataName).AsDouble();
double quantityCalc = quantityProd > 0.0f ? quantityProd : quantity;
double unitTimeAct = quantityCalc != 0.0 ? timeAct / quantityCalc : 0.0;
if (column.Id == (int)SbmRequirement.Column.TimeActUnit)
value = new DataValue(column.FormatValue(new DataValue(unitTimeAct)));
else if (column.Id == (int)SbmRequirement.Column.TimeActUnitMins)
value = new DataValue(column.FormatValue(new DataValue(unitTimeAct * 60.0f)));
else if (column.Id == (int)SbmRequirement.Column.TimeActUnitWithMins)
value = new DataValue(StringUtil.FormatNumeric(unitTimeAct, 2) + " [" + (unitTimeAct * 60.0f).ToString().ToLong() + "m]");
break;
}
//-----------------------------------------------------------
// Job costing.
case SbmRequirement.Column.CostTotal_Fmt:
case SbmRequirement.Column.AmountMargin:
case SbmRequirement.Column.AmountMargin_Fmt:
case SbmRequirement.Column.PercentMargin:
case SbmRequirement.Column.PercentMargin_Fmt:
{
double amount = 0.0f;
double costTotal = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.CostTotal).DataName).ToNumeric();
SysId currencyId = new SysId(StringUtil.ToInt(values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Trans_CurrencyId).DataName).ToString()));
SaCurrency currency = GetCurrency(currencyId);
if (currency == null) currency = GetDefaultCurrency();
// Calculate the relevant amount.
if (column.Id == (int)SbmRequirement.Column.CostTotal_Fmt)
{
amount = costTotal;
}
else
{
// Calculate the Margin.
double amountNet = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.AmountNet).DataName).ToNumeric();
if (column.Id == (int)SbmRequirement.Column.AmountMargin || column.Id == (int)SbmRequirement.Column.AmountMargin_Fmt)
amount = amountNet - costTotal;
else if (column.Id == (int)SbmRequirement.Column.PercentMargin || column.Id == (int)SbmRequirement.Column.PercentMargin_Fmt)
amount = (amountNet > 0.0) ? (amountNet - costTotal) / amountNet * 100.0f : 0.0f;
}
// Format the result.
if (column.Id == (int)SbmRequirement.Column.CostTotal || column.Id == (int)SbmRequirement.Column.AmountMargin || column.Id == (int)SbmRequirement.Column.PercentMargin)
value = new DataValue(new DataValue(amount));// Numeric value.
else if (column.Id == (int)SbmRequirement.Column.PercentMargin_Fmt)
{
// Percentage.
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
value = new DataValue(StringUtil.FormatNumeric((decimal)amount, 2, 0, ',') + "%");
}
else
{
// Format the amount:
String fmt = "";
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
fmt = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
if (currency != null) fmt = currency.FormatAmount((decimal)amount);
}
value = new DataValue(fmt);
}
break;
}
// Research&Develompent.
case SbmRequirement.Column.ResearchDevelopment_YN:
case SbmRequirement.Column.ResearchDevelopment_YBlank:
{
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
bool RandD = SacsHierarchyItem.GetFlag(flags, SbmRequirement.Flag_ResearchDevelopment);
if (column.Id == (int)SbmRequirement.Column.ResearchDevelopment_YN)
value = new DataValue(RandD ? "Y" : "N");
if (column.Id == (int)SbmRequirement.Column.ResearchDevelopment_YBlank)
value = new DataValue(RandD ? "Y" : "");
break;
}
//-----------------------------------------------------------
// Requirement Notes.
case SbmRequirement.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Requirement Status.
case SbmRequirement.Column.Status_Desc:
case SbmRequirement.Column.Status_Ind:
{
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
if (column.Id == (int)SbmRequirement.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SbmRequirement.Column.Status_Ind)
value = new DataValue(SbmRequirement.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
// Order or source order info.
case SbmRequirement.Column.OrderItem_JobNumber:
{
String orderInfo = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.JobNumber).DataName).ToString();
if (StringUtil.IsEmpty(orderInfo))
orderInfo = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.SourceReqnt_JobNumber).DataName).ToString();
value = new DataValue(orderInfo);
break;
}
//-----------------------------------------------------------
// Commodity Codings.
case SbmRequirement.Column.Cmd_MaterialDesc:
{
String commodityMaterialCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityMaterial, commodityMaterialCode));
break;
}
case SbmRequirement.Column.Cmd_FinishDesc:
{
String commodityFinishCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.CommodityFinish, commodityFinishCode));
break;
}
//-----------------------------------------------------------
// Requirement Formatted Currency Value.
case SbmRequirement.Column.Cmd_CostPrice_Fmt:
{
String cmdCostPrice = "";
double amount = values.GetValue(column.DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
cmdCostPrice = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetDefaultCurrency();
if (currency != null) cmdCostPrice = currency.FormatAmount((decimal)amount);
}
value = new DataValue(cmdCostPrice);
break;
}
case SbmRequirement.Column.Cmd_MaterialCost_Fmt:
{
String cmdMaterialCost = "";
double amount = values.GetValue(column.DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
cmdMaterialCost = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetCurrency(new SysId(StringUtil.ToInt(values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_CurrencyIdMaterial).DataName).ToString())));
if (currency == null) currency = GetDefaultCurrency();
if (currency != null) cmdMaterialCost = currency.FormatAmount((decimal)amount);
}
value = new DataValue(cmdMaterialCost);
break;
}
case SbmRequirement.Column.Cmd_SalesPrice_Fmt:
{
String cmdSalesPrice = "";
double amount = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_SalesPrice).DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
cmdSalesPrice = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetDefaultCurrency();
if (currency != null) cmdSalesPrice = currency.FormatAmount((decimal)amount);
}
value = new DataValue(cmdSalesPrice);
break;
}
case SbmRequirement.Column.Cmd_RetailPrice_Fmt:
{
String cmdRetailPrice = "";
double amount = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_RetailPrice).DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
cmdRetailPrice = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetDefaultCurrency();
if (currency != null) cmdRetailPrice = currency.FormatAmount((decimal)amount);
}
value = new DataValue(cmdRetailPrice);
break;
}
case SbmRequirement.Column.Cmd_CarriageCostIndicative_Fmt:
{
String cmdCarriageCost = "";
double amount = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_CarriageCostIndicative).DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
cmdCarriageCost = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetDefaultCurrency();
if (currency != null) cmdCarriageCost = currency.FormatAmount((decimal)amount);
}
value = new DataValue(cmdCarriageCost);
break;
}
case SbmRequirement.Column.Cmd_Cust_RetailPrice_Fmt:
{
String cmdCust_RetailPrice = "";
double amount = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_Cust_RetailPrice).DataName).ToNumeric();
if (Math.Abs(amount) > 0.001 || column.ShowZeroValues)
{
cmdCust_RetailPrice = StringUtil.FormatNumeric((decimal)amount, 2, 0, ',');
SaCurrency currency = GetCurrency(new SysId(StringUtil.ToInt(values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Cmd_Cust_CurrencyIdRetail).DataName).ToString())));
if (currency == null) currency = GetDefaultCurrency();
if (currency != null) cmdCust_RetailPrice = currency.FormatAmount((decimal)amount);
}
value = new DataValue(cmdCust_RetailPrice);
break;
}
// Available stock.
case SbmRequirement.Column.Stock_Available:
case SbmRequirement.Column.Stock_Available_MinZero:
{
double stockCurrent = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Stock_Current).DataName).ToNumeric();
double stockAllocated = values.GetValue(GetRequirementColumnDfn(SbmRequirement.Column.Stock_Allocated).DataName).ToNumeric();
double stockAvailable = stockCurrent - stockAllocated;
if (column.Id == (int)SbmRequirement.Column.Stock_Available_MinZero && stockAvailable < 0.0)
stockAvailable = 0.0;
value = new DataValue(stockAvailable);
break;
}
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}