|
|
|
@@ -14,6 +14,7 @@ using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data.Common;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
{
|
|
|
|
@@ -429,7 +430,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
return prmTransaction;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override List<SysId> GetRequirementByIds(SbmTransaction.Params prmTrans)
|
|
|
|
|
public override List<SysId> GetRequirementIds(SbmTransaction.Params prmTrans)
|
|
|
|
|
{
|
|
|
|
|
ClearErrorState();
|
|
|
|
|
List<SysId> ids = new List<SysId>();
|
|
|
|
@@ -1270,15 +1271,86 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
// Column names.
|
|
|
|
|
String colTransaction_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, tableAlias);
|
|
|
|
|
String colTransaction_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, tableAlias);
|
|
|
|
|
String colTransaction_Ref = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Ref, tableAlias);
|
|
|
|
|
String colTransaction_RefInt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_RefInt, tableAlias);
|
|
|
|
|
String colTransaction_RefExt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_RefExt, tableAlias);
|
|
|
|
|
String colTransaction_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DescBrief, tableAlias);
|
|
|
|
|
String colTransaction_StatusCat = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_StatusCat, tableAlias);
|
|
|
|
|
String colTransaction_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, tableAlias);
|
|
|
|
|
String colTransaction_Notes = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Notes, tableAlias);
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Transaction Id.
|
|
|
|
|
if (prm.IdsIncluded.HasValidIds())
|
|
|
|
|
filter.Add(colTransaction_Id + " IN (" + prm.IdsIncluded.Concat(",") + ")");
|
|
|
|
|
filter.Add($"{colTransaction_Id} IN ({prm.IdsIncluded.Concat(",")})");
|
|
|
|
|
if (prm.IdsExcluded.HasValidIds())
|
|
|
|
|
filter.Add(colTransaction_Id + " NOT IN (" + prm.IdsExcluded.Concat(",") + ")");
|
|
|
|
|
filter.Add($"{colTransaction_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Transaction search.
|
|
|
|
|
if (!StringUtil.IsBlank(prm.Search))
|
|
|
|
|
{
|
|
|
|
|
foreach (String search in Regex.Split(prm.Search, "[\\s,;\\-+]+"))
|
|
|
|
|
{
|
|
|
|
|
if (StringUtil.IsBlank(search)) continue;
|
|
|
|
|
String searchForLike = DbQuery.FormatForLike(search, true);
|
|
|
|
|
List<String> searchFilter = new List<string>();
|
|
|
|
|
searchFilter.Add($"{colTransaction_Ref} LIKE '%{searchForLike}%'");
|
|
|
|
|
searchFilter.Add($"{colTransaction_RefExt} LIKE '%{searchForLike}%'");
|
|
|
|
|
searchFilter.Add($"{colTransaction_DescBrief} LIKE '%{searchForLike}%'");
|
|
|
|
|
if (!StringUtil.IsBlank(prm.TableAlias_AffiliateTarget))
|
|
|
|
|
{
|
|
|
|
|
searchFilter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, prm.TableAlias_AffiliateTarget)} LIKE '%{searchForLike}%'");
|
|
|
|
|
}
|
|
|
|
|
if (searchFilter.Any())
|
|
|
|
|
filter.Add(searchFilter.Concat(" OR ", "(", ")"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Restrict transactions to the current owner if required.
|
|
|
|
|
if (SysId.IsValid(AffiliateId_Owner))
|
|
|
|
|
{
|
|
|
|
|
// Only need to filter on owner if no association specified, no transaction Ids and no source transaction id.
|
|
|
|
|
if (!SysId.IsValid(prm.AssociationId) && !prm.IdsIncluded.HasValidIds() && !SysId.IsValid(prm.TransIdSource))
|
|
|
|
|
filter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AffIdOwner, tableAlias)}={SysId.ToLong(AffiliateId_Owner)}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Association Id.
|
|
|
|
|
String colTransaction_AssocId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, tableAlias);
|
|
|
|
|
if (SysId.IsValid(prm.AssociationId))
|
|
|
|
|
filter.Add($"{colTransaction_AssocId}={SysId.ToLong(prm.AssociationId)}");
|
|
|
|
|
|
|
|
|
|
// Transaction Type.
|
|
|
|
|
if (prm.TransactionType > 0)
|
|
|
|
|
filter.Add($"{colTransaction_Type}={(int)prm.TransactionType}");
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Transaction Reference.
|
|
|
|
|
if (!StringUtil.IsEmpty(prm.TransRefFull))
|
|
|
|
|
{
|
|
|
|
|
String filterTransRef = $"{colTransaction_Ref}='{DbQuery.FormatForCondition(prm.TransRefFull)})'";
|
|
|
|
|
if (prm.TransRefFull.IsNumeric() && prm.TransRefFull.ToLong() >= 1)
|
|
|
|
|
filterTransRef += $" OR {colTransaction_RefInt}={prm.TransRefFull}";
|
|
|
|
|
filter.Add(filterTransRef);
|
|
|
|
|
}
|
|
|
|
|
else if (!StringUtil.IsEmpty(prm.TransRefPartial))
|
|
|
|
|
{
|
|
|
|
|
String filterTranRefPartial = $"{colTransaction_Ref} Like '%{DbQuery.FormatForLike(prm.TransRefPartial)}%'";
|
|
|
|
|
if (prm.TransRefPartial.IsNumeric() && prm.TransRefPartial.ToLong() >= 1)
|
|
|
|
|
filterTranRefPartial += $" OR {colTransaction_RefInt}={prm.TransRefPartial.ToLong()}";
|
|
|
|
|
filter.Add(filterTranRefPartial);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Transaction External reference.
|
|
|
|
|
if (!StringUtil.IsEmpty(prm.TransRefExtFull))
|
|
|
|
|
filter.Add($"{colTransaction_RefExt}='{DbQuery.FormatForCondition(prm.TransRefExtFull)}'");
|
|
|
|
|
else if (!StringUtil.IsEmpty(prm.TransRefExtPartial))
|
|
|
|
|
filter.Add($"{colTransaction_RefExt} Like '%{DbQuery.FormatForLike(prm.TransRefExtPartial)}%'");
|
|
|
|
|
|
|
|
|
|
// Transaction DescBrief.
|
|
|
|
|
String sTransDescBrief = DbQuery.FormatForLike(prm.TransDescBriefPartial);
|
|
|
|
|
if (!StringUtil.IsEmpty(prm.TransDescBriefPartial))
|
|
|
|
|
filter.Add($"{colTransaction_DescBrief} LIKE '%{DbQuery.FormatForLike(prm.TransDescBriefPartial)}%'");
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Transaction Source.
|
|
|
|
@@ -1396,9 +1468,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Transaction Type.
|
|
|
|
|
if (prm.TransactionType > 0)
|
|
|
|
|
filter.Add(colTransaction_Type + "=" + ((int)prm.TransactionType).ToString());
|
|
|
|
|
|
|
|
|
|
// Location Id Stock.
|
|
|
|
|
if (SysId.IsValid(prm.LocationIdStock))
|
|
|
|
@@ -1416,51 +1485,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
else if (!StringUtil.IsEmpty(TransactionStatusCats.GetCodeForType(prm.StatusCat)))
|
|
|
|
|
filter.Add(colTransaction_StatusCat + "='" + TransactionStatusCats.GetCodeForType(prm.StatusCat) + "'");
|
|
|
|
|
|
|
|
|
|
// Restrict transactions to the current owner if required.
|
|
|
|
|
if (SysId.IsValid(AffiliateId_Owner))
|
|
|
|
|
{
|
|
|
|
|
// Only need to filter on owner if no association specified, no transaction Ids and no source transaction id.
|
|
|
|
|
if (!SysId.IsValid(prm.AssocId) && !prm.IdsIncluded.HasValidIds() && !SysId.IsValid(prm.TransIdSource))
|
|
|
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AffIdOwner, tableAlias) + "=" + SysId.ToString(AffiliateId_Owner));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Transaction Reference.
|
|
|
|
|
String colTransaction_Ref = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Ref, tableAlias);
|
|
|
|
|
String colTransaction_RefInt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_RefInt, tableAlias);
|
|
|
|
|
if (!StringUtil.IsEmpty(prm.TransRefFull))
|
|
|
|
|
{
|
|
|
|
|
String filterTransRef = colTransaction_Ref + "='" + DbQuery.FormatForCondition(prm.TransRefFull) + "'";
|
|
|
|
|
if (prm.TransRefFull.IsNumeric() && prm.TransRefFull.ToLong() >= 1)
|
|
|
|
|
filterTransRef += " OR " + colTransaction_RefInt + "=" + prm.TransRefFull;
|
|
|
|
|
filter.Add(filterTransRef);
|
|
|
|
|
}
|
|
|
|
|
else if (!StringUtil.IsEmpty(prm.TransRefPartial))
|
|
|
|
|
{
|
|
|
|
|
//String sFilter (DbQuery.FormatFn_Left(sColRef,prm.sTransRefPartial.Len())+"='"+sTransRefPartial+"'");
|
|
|
|
|
String filterTranRefPartial = colTransaction_Ref + " Like '%" + DbQuery.FormatForLike(prm.TransRefPartial) + "%'";
|
|
|
|
|
if (prm.TransRefPartial.IsNumeric() && prm.TransRefPartial.ToLong() >= 1)
|
|
|
|
|
filterTranRefPartial += " OR " + colTransaction_RefInt + "=" + prm.TransRefPartial;
|
|
|
|
|
filter.Add(filterTranRefPartial);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Transaction External reference.
|
|
|
|
|
String colTransaction_RefExt = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_RefExt, tableAlias);
|
|
|
|
|
if (!StringUtil.IsEmpty(prm.TransRefExtFull))
|
|
|
|
|
filter.Add(colTransaction_RefExt + "='" + DbQuery.FormatForCondition(prm.TransRefExtFull) + "'");
|
|
|
|
|
else if (!StringUtil.IsEmpty(prm.TransRefExtPartial))
|
|
|
|
|
{
|
|
|
|
|
//filter.Add(DbQuery.FormatFn_Left(sColRefExt,prm.TransRefExtPartial.Len())+"='"+TransRefExtPartial+"'");
|
|
|
|
|
filter.Add(colTransaction_RefExt + " Like '%" + DbQuery.FormatForLike(prm.TransRefExtPartial) + "%'");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Transaction DescBrief.
|
|
|
|
|
String sTransDescBrief = DbQuery.FormatForLike(prm.TransDescBriefPartial);
|
|
|
|
|
String colTransaction_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_DescBrief, tableAlias);
|
|
|
|
|
if (!StringUtil.IsEmpty(prm.TransDescBriefPartial))
|
|
|
|
|
//filter.Add(DbQuery.FormatFn_Left(sColDescBrief,prm.sTransDescBriefPartial.Len())+"='"+sTransDescBrief+"'");
|
|
|
|
|
filter.Add(colTransaction_DescBrief + " LIKE '%" + DbQuery.FormatForLike(prm.TransDescBriefPartial) + "%'");
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Raised date.
|
|
|
|
|
if (DateUtil.IsValid(prm.RaisedFrom))
|
|
|
|
@@ -1542,12 +1566,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
// Association Id.
|
|
|
|
|
String colTransaction_AssocId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, tableAlias);
|
|
|
|
|
if (SysId.IsValid(prm.AssocId))
|
|
|
|
|
filter.Add(colTransaction_AssocId + "=" + prm.AssocId.ToString());
|
|
|
|
|
|
|
|
|
|
// Association Target.
|
|
|
|
|
|
|
|
|
|
String assocFilter = DbQuery.FormatForCondition(prm.AssocPartial);
|
|
|
|
|
String defaultNominalCodeFull = DbQuery.FormatForCondition(prm.DefaultNominalCodeFull);
|
|
|
|
|
String defaultNominalCodePartial = DbQuery.FormatForLike(prm.DefaultNominalCodePartial);
|
|
|
|
@@ -1854,8 +1874,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
if (hasAssocCols || hasOwnerAffCols || hasTgtAffCols || hasTgtAddrCols)
|
|
|
|
|
{
|
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
//Association.
|
|
|
|
|
// Join to the Association.
|
|
|
|
|
prm.TableAlias_Association = aliasTransaction_Association;
|
|
|
|
|
DbQueryJoin joinAssoc = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
|
|
|
joinAssoc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasTransaction_Association);
|
|
|
|
|
joinAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasTransaction_Association, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_AssocId, aliasTransaction));
|
|
|
|
@@ -1874,7 +1894,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
// Owner Affiliate.
|
|
|
|
|
if (hasOwnerAffCols)
|
|
|
|
|
{
|
|
|
|
|
// Join to the Owner affiliate.
|
|
|
|
|
// Join to the Owner Affiliate.
|
|
|
|
|
prm.TableAlias_AffiliateOwner = aliasTransaction_AffiliateOwner;
|
|
|
|
|
DbQueryJoin joinAffOwner = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
|
|
|
joinAffOwner.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasTransaction_AffiliateOwner);
|
|
|
|
|
joinAffOwner.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasTransaction_AffiliateOwner, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasTransaction_Association, false));
|
|
|
|
@@ -1889,7 +1910,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
// Target Affiliate.
|
|
|
|
|
if (hasTgtAffCols || hasTgtAddrCols)
|
|
|
|
|
{
|
|
|
|
|
// Join to the target affiliate.
|
|
|
|
|
// Join to the Target Affiliate.
|
|
|
|
|
prm.TableAlias_AffiliateTarget = aliasTransaction_AffiliateTarget;
|
|
|
|
|
DbQueryJoin joinAffTarget = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
|
|
|
joinAffTarget.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasTransaction_AffiliateTarget);
|
|
|
|
|
joinAffTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasTransaction_AffiliateTarget, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasTransaction_Association, false));
|
|
|
|
@@ -1905,7 +1927,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
// Target Address.
|
|
|
|
|
if (hasTgtAddrCols)
|
|
|
|
|
{
|
|
|
|
|
// Join to the target affiliate - NB Use an alias to avoid clashing with the owner affiliate.
|
|
|
|
|
// Join to the Primary Target Address.
|
|
|
|
|
prm.TableAlias_AddressTarget = aliasTransaction_AddressTarget;
|
|
|
|
|
DbQueryJoin joinAddr = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
|
|
|
joinAddr.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasTransaction_AddressTarget);
|
|
|
|
|
joinAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_ItemType, aliasTransaction_AddressTarget, false) + "=" + Sbm.ItemType.Affiliate.ToString());
|
|
|
|
@@ -1935,7 +1958,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
|
|
|
bool hasColDelAddr_Email = columns.HasId((int)SbmTransaction.Column.DeliveryAddress_Email);
|
|
|
|
|
if (hasColDeliveryAddress || hasColDelAddr_Line1 || hasColDelAddr_Postcode || hasColDelAddr_Phone || hasColDelAddr_Email)
|
|
|
|
|
{
|
|
|
|
|
// Join to the address table.
|
|
|
|
|
// Join to the Delivery Address.
|
|
|
|
|
prm.TableAlias_AddressDelivery = aliasTransaction_DeliveryAddress;
|
|
|
|
|
DbQueryJoin joinDelAddr = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
|
|
|
joinDelAddr.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Address), aliasTransaction_DeliveryAddress);
|
|
|
|
|
joinDelAddr.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Address_Type, aliasTransaction_DeliveryAddress, false) + "=" + Sbm.AddressType.Delivery);
|
|
|
|
|