995 lines
51 KiB
C#
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)Internals.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)Internals.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)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Requirement_DescBrief), true))
|
|
{
|
|
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.DescIntro != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescIntro, "introduction", (long)Internals.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)Internals.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)Internals.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)Internals.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)Internals.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)Internals.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)Internals.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;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
} |