Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Transaction.cs
T
2021-07-08 20:50:46 +01:00

636 lines
32 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
{
//=======================================================================
partial class SbmTransactionMgr
{
//*******************************************************************
// T r a n s a c t i o n s
//*******************************************************************
// Data members.
private static long maxTranNotesLength = -1;
//-------------------------------------------------------------------
// Utilities.
public abstract decimal GetTransCostLabourRateHourDefault();
public abstract decimal GetTransCostLabourRateHour(SysId transactionId);
public abstract bool DeliveryFinancialsAreAvailable();
public abstract bool ChangeTransactionsAssociation(SbmTransaction transaction, SysId assocId);
public abstract bool RefreshAssociatedData(SbmTransaction transaction, List<SbmRequirement.Data> requirements = null);
public abstract bool RefreshAssociatedTransactions(SbmTransaction transaction, List<SbmRequirement.Data> requirements = null);
//-------------------------------------------------------------------
// Has transactions.
public abstract bool TransactionIsReferencedByOtherTransactions(SysId transactionId/*, Sbm.TransactionStatusCat transactionStatusCat)*/);
public abstract bool TransactionHasRequirements(SysId transId, SbmRequirement.StatusCat requirementStatusCat);
public abstract bool TransactionHasConstituents(SysId transId, SbmConstituent.StatusCat constituentStatusCat);
public abstract bool TransactionHasContainerItems(SysId transactionId);
public abstract bool TransactionHasStockMovements(SysId transactionId);
public abstract bool TransactionHasPendingStockMovements(SysId transactionId);
//-------------------------------------------------------------------
// Transaction exists.
public bool TransactionExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SbmTransaction.Params prmTransaction = new SbmTransaction.Params();
prmTransaction.IncludedIds.Add(id);
prmTransaction.StatusCat = SbmTransaction.StatusCat.Any;
return GetTransactionCount(prmTransaction) == 1;
}
public bool TransactionExistsByOwnerTypeRef(SysId affIdOwner, Sbm.TransactionType transactionType, String transactionRef)
{
if (!SysId.IsValid(affIdOwner) || (int)transactionType < 1 || StringUtil.IsEmpty(transactionRef)) return false;
SbmTransaction.Params prmTransaction = new SbmTransaction.Params();
prmTransaction.IncludedIds.Add(affIdOwner);
prmTransaction.TransactionType = transactionType;
prmTransaction.TransRefFull = transactionRef;
prmTransaction.StatusCat = SbmTransaction.StatusCat.Any;
return GetTransactionCount(prmTransaction) == 1;
}
//-------------------------------------------------------------------
// Get transaction.
public abstract SbmTransaction GetTransaction(SbmTransaction.Params prm);
public SbmTransaction GetTransactionById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SbmTransaction.Params prmTransaction = new SbmTransaction.Params();
prmTransaction.IncludedIds.Add(id);
prmTransaction.StatusCat = SbmTransaction.StatusCat.Any;
return GetTransaction(prmTransaction);
}
public abstract List<SysId> GetRequirementByIds(SbmTransaction.Params prmTrans);
public SbmTransaction GetTransactionByOwnerTypeRef(SysId affIdOwner, Sbm.TransactionType transactionType, String transRef)
{
SbmTransaction transaction = null;
if (!SysId.IsValid(affIdOwner) || transactionType > 0 || StringUtil.IsEmpty(transRef)) return transaction;
SbmTransaction.Params prmTransaction = new SbmTransaction.Params();
prmTransaction.IncludedIds.Add(affIdOwner);
prmTransaction.TransactionType = Sbm.TransactionType.Any;
prmTransaction.TransRefFull = transRef;
prmTransaction.StatusCat = SbmTransaction.StatusCat.Any;
return GetTransaction(prmTransaction);
}
//-------------------------------------------------------------------
// Create transactions.
public abstract SbmTransaction CreateTransaction(SysId associationId, Sbm.TransactionType transactionType);
//-------------------------------------------------------------------
// Validate transaction data.
public bool IsValidTransaction(SbmTransaction transaction)
{
ClearErrorState();
if (transaction == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
if (!IsValidTransactionData(transaction.GetData(), new SbmTransaction.ErrField())) return false;
// Transaction status category.
if (!IsValidValue(TransactionStatusCats.GetCodeForType(transaction.TransactionStatusCat), "status cat", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_StatusCat), true, true))
return false;
return true;
}
public virtual bool IsValidTransactionData(SbmTransaction.Data data, SbmTransaction.ErrField errField)
{
ClearErrorState();
// Transaction 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.TransactionType != SacsHierarchyItem.ValidValue.Ignore && (short)data.TransactionType < 1)
{
if ((int)data.TransactionType < 1)
{
errField.TransactionType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid type");
}
}
// NB Ref, RefInt is optional.
if (errField.RefExt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.RefExt, "external ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_RefExt)))
{
errField.RefExt = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.RaisedBy != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.RaisedBy, "raised by", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_RaisedBy)))
{
errField.RaisedBy = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB AffIdRaise, AssocIdOffice, TransIdSource is optional.
if (errField.ContactName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactName, "contact name", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_ContactName)))
{
errField.ContactName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Likelihood != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Likelihood, "likelihood", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_Likelihood)))
{
errField.Likelihood = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ReferCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ReferCode, "refer code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_ReferCode)))
{
errField.ReferCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ReferSource != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ReferSource, "refer source", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_ReferSource)))
{
errField.ReferSource = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB AffIdRefer > Closed is optional.
if (errField.Department != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Department, "department", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_Department)))
{
errField.Department = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "brief description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DescBrief)))
{
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescIntro != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescIntro, "introduction description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DescIntro)))
{
errField.DescIntro = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescOutline != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescOutline, "outline description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DescOutline)))
{
errField.DescOutline = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescDetail != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescDetail, "detail description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DescDetail)))
{
errField.DescDetail = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ContactAreaCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactAreaCode, "contact area", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_ContactAreaCode)))
{
errField.ContactAreaCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.ResponseCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ResponseCode, "response", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_ResponseCode)))
{
errField.ResponseCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB CurrencyId > UomIdWeight is optional.
if (errField.BoxCount != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.BoxCount, "box count", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_BoxCount)))
{
errField.BoxCount = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryStatusCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryStatusCode, "delivery status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryStatusCode)))
{
errField.DeliveryStatusCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryTypeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryTypeCode, "delivery type", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryTypeCode)))
{
errField.DeliveryTypeCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryMethodCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryMethodCode, "delivery method", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryMethodCode)))
{
errField.DeliveryMethodCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryCourierCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryCourierCode, "delivery courier", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryCourierCode)))
{
errField.DeliveryCourierCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryBookInCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryBookInCode, "delivery book-in", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryBookInCode)))
{
errField.DeliveryBookInCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.StockPickerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.StockPickerCode, "stock picker", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_StockPickerCode)))
{
errField.StockPickerCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryRef != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryRef, "delivery ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryRef)))
{
errField.DeliveryRef = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryComment != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryComment, "delivery comment", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryComment)))
{
errField.DeliveryComment = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB DeliveryAmountNet, TaxCodeIdDelivery, DeliveryAmountTax, DeliveryAmountTot is optional.
if (errField.DeliveryDepartment != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryDepartment, "delivery department", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryDepartment)))
{
errField.DeliveryDepartment = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DeliveryNominalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryNominalCode, " delivery nominal code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_DeliveryNominalCode)))
{
errField.DeliveryNominalCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Establish notes length for validation.
if (maxTranNotesLength < 1)
{
// Standard notes length:
maxTranNotesLength = (int)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_Notes);
// Check if this database allows longer notes:
ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(SessionContext);
if (db != null)
{
DbDfnTable tableDfn = db.GetTableDfn(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction, false));
DbDfnColumn columnDfn = tableDfn.Columns.Find(item => item.Name.EqualsCI(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Notes, false)));
if (columnDfn != null) maxTranNotesLength = Math.Max(maxTranNotesLength, columnDfn.Size);
}
}
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", maxTranNotesLength))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmTransaction.GetTransactionStatuses(data.TransactionType).Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
// Populate and validate dates.
SbmTransaction.StatusCat transactionStatusCat = SbmTransaction.GetCategoryForStatus(data.Status);
if (transactionStatusCat == SbmTransaction.StatusCat.Open || transactionStatusCat == SbmTransaction.StatusCat.Closed)
{
if (!DateUtil.IsValid(data.InProgress))
data.InProgress = DateTime.Today;
}
if (transactionStatusCat == SbmTransaction.StatusCat.Closed)
{
if (!DateUtil.IsValid(data.Closed))
data.Closed = DateTime.Today;
}
// Populate reference if not already done.
if (StringUtil.IsEmpty(data.Ref) && ConfigConsole.TransactionAssignRefMethod(UserContext, data.TransactionType) != SbmConfigConsole.AssignTransRefMethod.Manual)
{
// Retrieve the next available transaction reference.
String sRef = ConfigConsole.GetTransactionCreateRef(UserContext, data.AffiliateIdOwner, data.AssociationId, data.TransactionType); ; ;
// Check that another transaction doesn't already exist with this reference.
SbmTransaction transRef = GetTransactionByOwnerTypeRef(data.AffiliateIdOwner, data.TransactionType, sRef);
if (transRef == null)
data.Ref = sRef;
else
{
String tranTypeDesc = TransactionTypes.GetDescForType(data.TransactionType);
if (StringUtil.IsEmpty(tranTypeDesc)) tranTypeDesc = "Transaction";
SetErrorState("Another " + tranTypeDesc + " already exists with this reference.");
}
if (HasErrorState()) return false;
}
if (errField.Ref != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Ref, "Ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_Ref), true))
{
errField.Ref = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
return true;
}
//-------------------------------------------------------------------
// Transaction database interface.
public abstract bool InsertTransaction(SbmTransaction transaction, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateTransaction(SbmTransaction transaction, DbUpdateInfo dbUpdateInfo);
public virtual bool TransactionCanBeDeleted(SbmTransaction transaction)
{
ClearErrorState();
return true;
}
public abstract bool DeleteTransaction(SbmTransaction transaction, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Transaction list.
public abstract ColumnDfn GetTransactionColumnDfn(SbmTransaction.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetTransactionQueryFilter(SbmTransaction.Params prm);
public abstract long GetTransactionCount(SbmTransaction.Params prm);
public abstract List<SbmTransaction> GetTransactionList(SbmTransaction.Params prm);
public abstract DbResultSet ExecuteTransactionQuery(List<ColumnDfn> columns, SbmTransaction.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 GetTransactionDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmTransaction.Column)column.Id)
{
//--------------------------------------------------------------------- -
// Transaction TypeDesc.
case SbmTransaction.Column.Type_Desc:
{
Sbm.TransactionType transactionType = (Sbm.TransactionType)values.GetValue(column.DataName).AsLong();
value = new DataValue(TransactionTypes.GetDescForType(transactionType, ((int)transactionType).ToString()));
break;
}
//Transaction Likelihood.
case SbmTransaction.Column.Likelihood:
{
long likelihood = StringUtil.ToLong(values.GetValue(column.DataName).ToString());
if (likelihood >= 0 && likelihood <= 100)
value = new DataValue();
break;
}
//--------------------------------------------------------------------- -
// Association Codings.
case SbmTransaction.Column.Assoc_AccountManagerDesc:
{
String accountManagerCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountManager, accountManagerCode));
break;
}
case SbmTransaction.Column.Assoc_AccountHandlerDesc:
{
String accountHandlerCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountHandler, accountHandlerCode));
break;
}
// Transaction Codings.
case SbmTransaction.Column.ContactArea:
{
String contactAreaCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactArea, contactAreaCode));
break;
}
case SbmTransaction.Column.DeliveryStatus:
{
String deliveryStatusCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryStatus, deliveryStatusCode));
break;
}
case SbmTransaction.Column.DeliveryType:
{
String deliveryTypeCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryType, deliveryTypeCode));
break;
}
case SbmTransaction.Column.DeliveryMethod:
{
String deliveryMethodCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryMethod, deliveryMethodCode));
break;
}
case SbmTransaction.Column.DeliveryCourier:
{
String deliveryCourierCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryCourier, deliveryCourierCode));
break;
}
case SbmTransaction.Column.DeliveryBookIn:
{
String deliveryBookInCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryBookIn, deliveryBookInCode));
break;
}
case SbmTransaction.Column.StockPicker:
{
String stockPickerCode = values.GetValue(column.DataName).ToString();
value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.StockPicker, stockPickerCode));
break;
}
//--------------------------------------------------------------------- -
// Transaction DeliveryAmount & Amount.
case SbmTransaction.Column.DeliveryAmountNet_Fmt:
case SbmTransaction.Column.DeliveryAmountTax_Fmt:
case SbmTransaction.Column.DeliveryAmountTot_Fmt:
case SbmTransaction.Column.AmountEst_Fmt:
case SbmTransaction.Column.AmountMax_Fmt:
case SbmTransaction.Column.AmountNet_Fmt:
case SbmTransaction.Column.AmountTax_Fmt:
case SbmTransaction.Column.AmountTot_Fmt:
{
String valAmount = "";
ColumnDfn colAmount = GetTransactionColumnDfn(SbmTransaction.Column.Unknown);
switch (column.Id)
{
case (int)SbmTransaction.Column.DeliveryAmountNet_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAmountNet); break;
case (int)SbmTransaction.Column.DeliveryAmountTax_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAmountTax); break;
case (int)SbmTransaction.Column.DeliveryAmountTot_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAmountTot); break;
case (int)SbmTransaction.Column.AmountEst_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.AmountEst); break;
case (int)SbmTransaction.Column.AmountMax_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.AmountMax); break;
case (int)SbmTransaction.Column.AmountNet_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.AmountNet); break;
case (int)SbmTransaction.Column.AmountTax_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.Column.AmountTax); break;
case (int)SbmTransaction.Column.AmountTot_Fmt: colAmount = GetTransactionColumnDfn(SbmTransaction.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(GetTransactionColumnDfn(SbmTransaction.Column.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 and margin.
case SbmTransaction.Column.CostTotal_Fmt:
case SbmTransaction.Column.AmountMargin:
case SbmTransaction.Column.AmountMargin_Fmt:
case SbmTransaction.Column.PercentMargin:
case SbmTransaction.Column.PercentMargin_Fmt:
{
double amount = 0.0f;
double costTotal = values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.CostTotal).DataName).ToNumeric();
SysId currencyId = new SysId(StringUtil.ToInt(values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.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(GetTransactionColumnDfn(SbmTransaction.Column.AmountNet).DataName).ToNumeric();
if (column.Id == (int)SbmTransaction.Column.AmountMargin || column.Id == (int)SbmTransaction.Column.AmountMargin_Fmt)
amount = amountNet - costTotal;
else if (column.Id == (int)SbmRequirement.Column.Trans_PercentMargin || column.Id == (int)SbmTransaction.Column.PercentMargin_Fmt)
amount = (amountNet > 0.0) ? (amountNet - costTotal) / amountNet * 100.0f : 0.0f;
}
// Format the result.
if (column.Id == (int)SbmTransaction.Column.CostTotal || column.Id == (int)SbmTransaction.Column.AmountMargin || column.Id == (int)SbmTransaction.Column.PercentMargin)
{
// Numeric value:
value = new DataValue(amount);
}
else if (column.Id == (int)SbmTransaction.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 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 Notes.
case SbmTransaction.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Transaction Flags (Allocation & Replacement).
case SbmTransaction.Column.AllocationInd:
case SbmTransaction.Column.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)SbmTransaction.Column.AllocationInd)
{
DataValue.TriStateType allocationTriState = DataValue.TriStateType.Unknown;
if (saStatus == SaStatus.Cancelled)
allocationTriState = DataValue.TriStateType.Red;
else if (SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_FullAllocation))
allocationTriState = DataValue.TriStateType.Green;
else if (SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_PartialAllocation))
allocationTriState = DataValue.TriStateType.Amber;
value = new DataValue(new DataValue(allocationTriState));
}
else if (column.Id == (int)SbmTransaction.Column.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 SbmTransaction.Column.ReplacementOrder_Tick:
case SbmTransaction.Column.ReplacementOrder_Y:
{
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
bool replacementOrder = SacsHierarchyItem.GetFlag(flags, SbmTransaction.Flag_ReplacementOrder);
if (column.Id == (int)SbmTransaction.Column.ReplacementOrder_Tick) value = new DataValue(replacementOrder);
else if (column.Id == (int)SbmTransaction.Column.ReplacementOrder_Y) value = new DataValue(replacementOrder ? "Y" : "");
break;
}
// Transaction Status.
case SbmTransaction.Column.Status_Desc:
case SbmTransaction.Column.Status_Ind:
{
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
if (column.Id == (int)SbmTransaction.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SbmTransaction.Column.Status_Ind)
value = new DataValue(SbmTransaction.GetStatusTriState(status));
break;
}
case SbmTransaction.Column.Status_OnHold_Tick:
case SbmTransaction.Column.Status_OnHold_Cross:
case SbmTransaction.Column.Status_OnHold_Y:
{
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
bool onHold = (status == SaStatus.OnHold);
if (column.Id == (int)SbmTransaction.Column.Status_OnHold_Tick) value = new DataValue(onHold);
else if (column.Id == (int)SbmTransaction.Column.Status_OnHold_Cross) value = new DataValue(onHold);
else if (column.Id == (int)SbmTransaction.Column.Status_OnHold_Y) value = new DataValue(onHold ? "Y" : "");
break;
}
//---------------------------------------------------------------------
// Target Address.
case SbmTransaction.Column.AssocTarget_Address:
{
List<String> addresses = new List<String>()
{
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_Name).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_Line1).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_Line2).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_Line3).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_City).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_Province).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.AssocTarget_Address_Postcode).DataName).ToString(),
};
value = new DataValue(addresses.Concat(", ", null, null, true, true).Replace(" ,", ",").Trim(',').Trim());
break;
}
// Delivery Address.
case SbmTransaction.Column.DeliveryAddress:
{
List<String> addresses = new List<String>()
{
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_Name).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_Line1).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_Line2).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_Line3).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_City).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_Province).DataName).ToString(),
values.GetValue(GetTransactionColumnDfn(SbmTransaction.Column.DeliveryAddress_Postcode).DataName).ToString(),
};
value = new DataValue(addresses.Concat(", ", null, null, true, true).Replace(" ,", ",").Trim(',').Trim());
break;
}
//---------------------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}