636 lines
32 KiB
C#
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.GetDatabase(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;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
} |