Control - Repository initialisation.

This commit is contained in:
Andy Howard
2025-01-09 16:30:52 +00:00
parent d015470f58
commit 4a72043f00
103 changed files with 4324 additions and 469 deletions
@@ -191,6 +191,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles
// Register Security Rights.
public override void RegisterSecurityRights()
{
// Reset.
ClearRegisteredSecurityRights();
//---------------------------------------------------------------
// Register data item types. [Not used - to demonstrate option]
RegisterDataItemType((short)Sbm.ItemType.Commodity, "Commodity");
@@ -416,6 +416,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
filter.Add(searchFilter.Concat(" OR ", "(", ")"));
}
}
// Common Properties.
// Notes.
@@ -610,6 +610,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (!StringUtil.IsEmpty(prm.NamePartial))
filter.Add(colAffiliate_Name + " LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%' OR " + colAffiliate_FirstName + " LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%' OR " + colAffiliate_LastName + " LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%'");
// First Name.
if (!StringUtil.IsEmpty(prm.FirstName))
filter.Add(colAffiliate_FirstName + "='" + DbQuery.FormatForCondition(prm.FirstName) + "'");
// Last Name.
if (!StringUtil.IsEmpty(prm.LastName))
filter.Add(colAffiliate_LastName + "='" + DbQuery.FormatForCondition(prm.LastName) + "'");
// Partial Email.
if (!StringUtil.IsEmpty(prm.EmailPartial))
filter.Add(colAffiliate_Email + " LIKE '%" + DbQuery.FormatForLike(prm.EmailPartial) + "%'");
@@ -732,8 +732,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
// Performance of querying requirements for transaction(s) within movement query is very poor - eg. ItemIdSource in (Select Id From Requirement Where TransactionId in (1,2,3)).
// Get list of requirement Ids first and then explicitly query against these in the movement query.
SbmTransaction.Params prmTrans = new SbmTransaction.Params();
prmTrans.IdsIncluded = prm.ItemIdSource;
List<SysId> requirementId = TransactionMgr.GetRequirementByIds(prmTrans);
prmTrans.IdsIncluded.UnionWith(prm.ItemIdSource);
List<SysId> requirementId = TransactionMgr.GetRequirementIds(prmTrans);
// Movements can be matched: either directly to one of the transactions or to any of their associated requirements.
List<String> filtersTrans = new List<String>();
@@ -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);
@@ -31,7 +31,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils
// Open database.
// NB Must be ODBC connection - especially to retrieve index columns.
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
config.connectionString = connectionString;
config.ConnectionString = connectionString;
SacsDatabase database = SacsDatabaseConsole.OpenOdbcDatabase(config);
// Generate database definition.
@@ -37,7 +37,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils
// Open database.
// NB Must be ODBC connection - especially to retrieve index columns.
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
config.connectionString = connectionString;
config.ConnectionString = connectionString;
SacsDatabase database = SacsDatabaseConsole.OpenOdbcDatabase(config);
// Generate database definition.