3.0.1.2 Requirements & tidy

This commit is contained in:
Andy Howard
2025-02-26 18:42:52 +00:00
parent d7dc5f8fbc
commit 80b085cf29
79 changed files with 2472 additions and 594 deletions
@@ -739,14 +739,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
String searchValue = DbQuery.FormatForLike(StringUtil.TrimAll(rawSearchValue));
if (StringUtil.IsEmpty(searchValue)) continue;
List<String> searchValueFilter = new List<string>();
searchValueFilter.Add(colAffiliate_Name + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_FirstName + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_LastName + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_PhoneMain + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_PhoneAlt + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_Website + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_Email + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add(colAffiliate_Notes + " LIKE '%" + searchValue + "%'");
searchValueFilter.Add($"{colAffiliate_Name} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_FirstName} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_LastName} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_PhoneMain} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_PhoneAlt} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_Website} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_Email} LIKE '%{searchValue}%'");
searchValueFilter.Add($"{colAffiliate_Notes} LIKE '%{searchValue}%'");
searchFilter.Add(searchValueFilter.Concat(" OR ", "(", ")"));
}
if (searchFilter.Any()) filter.AddRange(searchFilter);
@@ -755,7 +755,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//---------------------------------------------------------------
// Name.
if (!StringUtil.IsEmpty(prm.Name))
filter.Add(colAffiliate_Name + "='" + DbQuery.FormatForCondition(prm.Name) + "'");
filter.Add(colAffiliate_Name + " ='" + DbQuery.FormatForCondition(prm.Name) + "'");
// Partial Name with FirstName & LastName.
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) + "%'");
@@ -853,42 +853,37 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (SysId.IsValid(prm.AffiliateIdAssocOwner))
{
// Restrict to affiliates that are the target of an association with the specified owner.
subFilter = colAffiliate_Id + "=" + colAssociation_AffTarget + " AND " + colAssociation_AffOwner + "=" + prm.AffiliateIdAssocOwner.ToString();
subFilter = $"{colAffiliate_Id}={colAssociation_AffTarget} AND {colAssociation_AffOwner}={SysId.ToInt(prm.AffiliateIdAssocOwner)}";
}
else if (SysId.IsValid(prm.AffiliateIdAssocTarget))
{
// Restrict to affiliates that are the owner of an association with the specified target.
subFilter = colAffiliate_Id + "=" + colAssociation_AffOwner + " AND " + colAssociation_AffTarget + "=" + prm.AffiliateIdAssocTarget.ToString();
subFilter = $"{colAffiliate_Id}={colAssociation_AffOwner} AND {colAssociation_AffTarget}={SysId.ToInt(prm.AffiliateIdAssocTarget)}";
}
else if (prm.AssociationType > 0)
{
// Restrict to affiliates that have an association of the specified type.
subFilter = colAffiliate_Id + "=" + colAssociation_AffOwner + " OR " + colAffiliate_Id + "=" + colAssociation_AffTarget;
}
else if (prm.AssociationTypeExclude > 0)
else if (prm.AssociationType > 0 || prm.AssociationTypeExclude > 0)
{
// Restrict to affiliates that don't have an association of the specified type.
subFilter = colAffiliate_Id + "=" + colAssociation_AffOwner + " OR " + colAffiliate_Id + "=" + colAssociation_AffTarget;
subFilter = $"({colAffiliate_Id}={colAssociation_AffOwner} OR {colAffiliate_Id}={colAssociation_AffTarget})";
}
// Restrict to associations of the specified type.
if (prm.AssociationType > 0)
subFilter += " AND " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffAssocRef) + "=" + ((int)prm.AssociationType).ToString();
subFilter += $" AND {SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffAssocRef)}={(int)prm.AssociationType}";
// Exclude associations of the specified type:
if (prm.AssociationTypeExclude > 0)
subFilter += " AND " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffAssocRef) + "<>" + prm.AssociationTypeExclude.ToString();
subFilter += $" AND {SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasAffAssocRef)}<>{(int)prm.AssociationTypeExclude}";
// Should these associations also be retricted to those that are 'supervisory':
if (prm.TargetSupervised != SbmAffiliate.Params.Supervised.Any)
{
bool superMatch = prm.TargetSupervised == SbmAffiliate.Params.Supervised.Yes;
subFilter += " AND " + GetFlagFilter(SbmAssociation.Flag_Supervised, superMatch, aliasAffAssocRef);
subFilter += $" AND {GetFlagFilter(SbmAssociation.Flag_Supervised, superMatch, aliasAffAssocRef)}";
}
DbQuery qryAssociationTarget = new DbQuery(Database.DbmsType);
qryAssociationTarget.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasAffAssocRef);
qryAssociationTarget.Columns.Add(colAssociation_Id);
qryAssociationTarget.Filters.Add(subFilter);
if (!DateUtil.IsValid(prm.AssociationEffectiveOn))
if (DateUtil.IsValid(prm.AssociationEffectiveOn))
{
// NB 'Association.Terminated' column is a long value (not a date).
String colAssociation_Terminated = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Terminated, aliasAffAssocRef);
@@ -16,6 +16,7 @@ using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text.RegularExpressions;
using System.Transactions;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
@@ -775,6 +776,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
requirement.QuantityProd = (decimal)dbRequirement._QuantityProd;
requirement.UomId = new SysId(dbRequirement._UomId ?? 0);
requirement.MaterialSourceCode = dbRequirement._MaterialSourceCode;
requirement.AmountUnit = (decimal)dbRequirement._AmountUnit;
requirement.AmountAct = (decimal)dbRequirement._AmountAct;
requirement.AmountDisc = (decimal)dbRequirement._AmountDisc;
requirement.AmountNet = (decimal)dbRequirement._AmountNet;
requirement.TaxCodeId = new SysId(dbRequirement._TaxCodeId ?? 0);
requirement.TaxRate = (decimal)dbRequirement._TaxRate;
@@ -910,7 +914,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
case SbmRequirement.Column.TransId:
SetRequirementColDfn(columnDfn, "Trans Id", 80, SbmDbDfn.ColumnIdx.Requirement_TransId, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SbmRequirement.Column.Seq:
case SbmRequirement.Column.Type:
SetRequirementColDfn(columnDfn, "Type", 50, SbmDbDfn.ColumnIdx.Requirement_Type, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SbmRequirement.Column.Sequence:
SetRequirementColDfn(columnDfn, "Seq", 50, SbmDbDfn.ColumnIdx.Requirement_Seq, ColumnAlignment.Right, DataValue.DataType.String);
break;
case SbmRequirement.Column.Started:
@@ -1215,6 +1222,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
break;
//-----------------------------------------------------------------
// Transaction details.
case SbmRequirement.Column.Trans_Type:
SetRequirementColDfn(columnDfn, "Trans type", 70, SbmDbDfn.ColumnIdx.Transaction_Type, ColumnAlignment.Center, DataValue.DataType.Long, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
case SbmRequirement.Column.Trans_TypeDesc:
SetRequirementColDfn(columnDfn, "Trans type", 70, SbmDbDfn.ColumnIdx.Transaction_Type, ColumnAlignment.Left, DataValue.DataType.String, aliasRequirement_Transaction, prefixRequirement_Transaction);
break;
@@ -1934,15 +1944,33 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//---------------------------------------------------------------
// Validate the parameters.
#if DEBUG
if (!SysId.IsValid(AffiliateId_Owner) && !SysId.IsValid(prm.AssociationId) && !SysId.IsValid(prm.CommodityId) && !SysId.IsValid(prm.TransactionRequirementSourceId) && !prm.TransactionIdsIncluded.HasValidIds() && !prm.RequirementIdsIncluded.HasValidIds() && !prm.RequirementIdsSource.HasValidIds())
SaLogger.Trace("\t### " + GetType().Name + ".GetRequirementQueryFilter - Owner/association/transaction not specified.");
if (!SysId.IsValid(AffiliateId_Owner) && !SysId.IsValid(prm.AssociationId) && !SysId.IsValid(prm.CommodityId) && !SysId.IsValid(prm.TransactionRequirementSourceId) && !prm.TransactionIdsIncluded.HasValidIds() && !prm.IdsIncluded.HasValidIds() && !prm.RequirementIdsSource.HasValidIds())
SaLogger.Debug($"{SysUtil.Fn} ### Owner/association/transaction not specified.");
#endif
//---------------------------------------------------------------
// Affiliate Owner - only need to be filtered if no significant Ids specified.
bool filterByOwner = !SysId.IsValid(prm.AssociationId) && !SysId.IsValid(prm.CommodityId) && !SysId.IsValid(prm.TransactionRequirementSourceId) && !prm.TransactionIdsIncluded.HasValidIds() && !prm.RequirementIdsIncluded.HasValidIds() && !prm.RequirementIdsSource.HasValidIds();
bool filterByOwner =
!SysId.IsValid(prm.AssociationId) && !SysId.IsValid(prm.CommodityId) &&
!SysId.IsValid(prm.TransactionRequirementSourceId) && !prm.TransactionIdsIncluded.HasValidIds() &&
!prm.IdsIncluded.HasValidIds() && !prm.RequirementIdsSource.HasValidIds();
if (filterByOwner)
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AffIdOwner, tableAlias, false) + "=" + SysId.ToString(AffiliateId_Owner));
filter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AffIdOwner, tableAlias, false)}={SysId.ToLong(AffiliateId_Owner)}");
//---------------------------------------------------------------
// Requirement.
// Requirement Id.
String colRequirement_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, tableAlias);
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{colRequirement_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{colRequirement_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Source Requirement.
String colRequirement_ReqntIdSource = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, tableAlias, false);
if (prm.RequirementIdsSource.HasValidIds())
filter.Add($"{colRequirement_ReqntIdSource} IN ({prm.RequirementIdsSource.Concat(",")})");
//---------------------------------------------------------------
// Association Details.
@@ -2048,20 +2076,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
}
//---------------------------------------------------------------
// Requirement Details:
// IncludeIds & ExcludeIds.
String includedIds = prm.RequirementIdsIncluded.Concat(",");
String colRequirement_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, tableAlias);
if (!StringUtil.IsEmpty(includedIds))
filter.Add(colRequirement_Id + " IN (" + includedIds + ")");
String excludedIds = prm.RequirementIdsExcluded.Concat(",");
if (!StringUtil.IsEmpty(excludedIds))
filter.Add(colRequirement_Id + " NOT IN (" + excludedIds + ")");
// Source Requirement.
String colRequirement_ReqntIdSource = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ReqntIdSource, tableAlias, false);
if (prm.RequirementIdsSource.HasValidIds())
filter.Add(colRequirement_ReqntIdSource + " IN (" + prm.RequirementIdsSource.Concat(",") + ")");
// Source Requirment Transaction.
if (SysId.IsValid(prm.TransactionRequirementSourceId))
@@ -2078,15 +2092,45 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
filter.Add("EXISTS(" + qryTrans.BuildQuery() + ")");
}
String colRequirement_JobNumber = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_JobNumber, tableAlias, false);
String colRequirement_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_DescBrief, tableAlias, false);
String colRequirement_ProductCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, tableAlias, false);
String colRequirement_Notes = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Notes, tableAlias, false);
// Generic 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($"{colRequirement_JobNumber} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colRequirement_DescBrief} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colRequirement_ProductCode} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colRequirement_Notes} LIKE '%{searchForLike}%'");
if (!StringUtil.IsBlank(prm.AliasTransaction))
{
searchFilter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Ref, prm.AliasTransaction)} LIKE '%{searchForLike}%'");
}
if (!StringUtil.IsBlank(prm.AliasCommodity))
{
searchFilter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Code, prm.AliasCommodity)} LIKE '%{searchForLike}%'");
searchFilter.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_DescBrief, prm.AliasCommodity)} LIKE '%{searchForLike}%'");
}
if (searchFilter.Any())
filter.Add(searchFilter.Concat(" OR ", "(", ")"));
}
}
// Requirement DescBrief.
String reqntDescBrief = DbQuery.FormatForCondition(prm.RequirementDescBrief);
String Requirement_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_DescBrief, tableAlias, false);
String reqntDescBrief = DbQuery.FormatForCondition(prm.DescBrief);
if (!reqntDescBrief.IsEmpty())
filter.Add(DbQuery.FormatFn_Left(Requirement_DescBrief, reqntDescBrief.Length) + "='" + reqntDescBrief + "'");
filter.Add(DbQuery.FormatFn_Left(colRequirement_DescBrief, reqntDescBrief.Length) + "='" + reqntDescBrief + "'");
// Promotion Code.
if (!StringUtil.IsEmpty(prm.RequirementPromotionCode))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_PromotionCode, tableAlias, false) + "='" + DbQuery.FormatForCondition(prm.RequirementPromotionCode) + "'");
if (!StringUtil.IsEmpty(prm.PromotionCode))
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_PromotionCode, tableAlias, false) + "='" + DbQuery.FormatForCondition(prm.PromotionCode) + "'");
//---------------------------------------------------------------
@@ -2096,11 +2140,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, tableAlias, false) + "=" + prm.CommodityId.ToString());
// Product Code.
if (!prm.RequirementProductCodeFull.IsEmpty() || !prm.RequirementProductCodePartial.IsEmpty())
if (!prm.ProductCodeFull.IsEmpty() || !prm.ProductCodePartial.IsEmpty())
{
String reqntProductCodeFull = DbQuery.FormatForCondition(prm.RequirementProductCodeFull);
String reqntProductCodePartial = DbQuery.FormatForCondition(prm.RequirementProductCodePartial);
String colRequirement_ProductCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, tableAlias);
String reqntProductCodeFull = DbQuery.FormatForCondition(prm.ProductCodeFull);
String reqntProductCodePartial = DbQuery.FormatForCondition(prm.ProductCodePartial);
if (!reqntProductCodeFull.IsEmpty())
{
filter.Add(colRequirement_ProductCode + "='" + reqntProductCodeFull + "'");
@@ -2109,7 +2152,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
if (SessionConsole != null && AllowConfigOption(Sbm.ConfigOption.CommodityPartialCodeFilter))
filter.Add(colRequirement_ProductCode + " LIKE '%" + DbQuery.FormatForLike(reqntProductCodePartial) + "%'");
else filter.Add(DbQuery.FormatFn_Left(colRequirement_ProductCode, prm.RequirementProductCodePartial.Length) + "='" + reqntProductCodePartial + "'");
else filter.Add(DbQuery.FormatFn_Left(colRequirement_ProductCode, prm.ProductCodePartial.Length) + "='" + reqntProductCodePartial + "'");
}
}
@@ -2143,15 +2186,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//------------------------------------------------------------------
// Project Task Code.
if (!StringUtil.IsEmpty(prm.RequirementProjectTaskCodeFull) || !StringUtil.IsEmpty(prm.RequirementProjectTaskCodePartial))
if (!StringUtil.IsEmpty(prm.ProjectTaskCodeFull) || !StringUtil.IsEmpty(prm.ProjectTaskCodePartial))
{
String colRequirement_ProductCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_ProductCode, tableAlias, false);
if (!StringUtil.IsEmpty(prm.RequirementProjectTaskCodeFull))
filter.Add(colRequirement_ProductCode + "='" + DbQuery.FormatForCondition(prm.RequirementProjectTaskCodeFull) + "'");
else if (!StringUtil.IsEmpty(prm.RequirementProjectTaskCodePartial))
if (!StringUtil.IsEmpty(prm.ProjectTaskCodeFull))
filter.Add(colRequirement_ProductCode + "='" + DbQuery.FormatForCondition(prm.ProjectTaskCodeFull) + "'");
else if (!StringUtil.IsEmpty(prm.ProjectTaskCodePartial))
{
String reqntProjectTaskCodePartial = DbQuery.FormatForCondition(prm.RequirementProjectTaskCodePartial);
filter.Add(DbQuery.FormatFn_Left(colRequirement_ProductCode, prm.RequirementProjectTaskCodePartial.Length) + "='" + reqntProjectTaskCodePartial + "'");
String reqntProjectTaskCodePartial = DbQuery.FormatForCondition(prm.ProjectTaskCodePartial);
filter.Add(DbQuery.FormatFn_Left(colRequirement_ProductCode, prm.ProjectTaskCodePartial.Length) + "='" + reqntProjectTaskCodePartial + "'");
}
// Force the transaction type of 'Project'.
if (prm.TransactionType != Sbm.TransactionType.Project)
@@ -2170,13 +2212,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
//---------------------------------------------------------------
// Job Number.
if (!StringUtil.IsEmpty(prm.RequirementJobNumberFull) || !StringUtil.IsEmpty(prm.RequirementJobNumberPartial))
if (!StringUtil.IsEmpty(prm.JobNumberFull) || !StringUtil.IsEmpty(prm.JobNumberPartial))
{
String colRequirement_JobNumber = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_JobNumber, tableAlias, false);
if (!StringUtil.IsEmpty(prm.RequirementJobNumberFull))
filter.Add(colRequirement_JobNumber + "='" + DbQuery.FormatForCondition(prm.RequirementJobNumberFull) + "'");
else if (!StringUtil.IsEmpty(prm.RequirementJobNumberPartial))
filter.Add(DbQuery.FormatFn_Left(colRequirement_JobNumber, prm.RequirementJobNumberPartial.Length) + "='" + DbQuery.FormatForCondition(prm.RequirementJobNumberPartial) + "'");
if (!StringUtil.IsEmpty(prm.JobNumberFull))
filter.Add($"{colRequirement_JobNumber}='{DbQuery.FormatForCondition(prm.JobNumberFull)}'");
else if (!StringUtil.IsEmpty(prm.JobNumberPartial))
filter.Add($"{colRequirement_JobNumber} Like '{DbQuery.FormatForLike(prm.JobNumberPartial)}'");
}
@@ -2358,7 +2399,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasRequirement);
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasRequirement));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Seq)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Seq, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Type))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Type, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Sequence))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Seq, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Required) || columns.HasId(SbmRequirement.Column.RequiredTime) || columns.HasId(SbmRequirement.Column.Required_Fmt))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Required, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.Started) || columns.HasId(SbmRequirement.Column.StartedTime) || columns.HasId(SbmRequirement.Column.Started_Day))
@@ -2385,7 +2429,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountNet, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.TaxCodeId)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TaxCodeId, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.TaxRate)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TaxRate, aliasRequirement));
if (columns.HasId(SbmRequirement.Column.AmountTax) || columns.HasId(SbmRequirement.Column.AmountTax_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountTax));
if (columns.HasId(SbmRequirement.Column.AmountTax) || columns.HasId(SbmRequirement.Column.AmountTax_Fmt)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountTax, aliasRequirement));
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_AmountTot, aliasRequirement));
}
// Common Properties
@@ -2529,6 +2573,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
// Transaction Details.
prm.AliasTransaction = "";
bool hasTransCols = columns.HasId(SbmRequirement.Column.Trans_TypeDesc);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Type);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_Ref);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_RefExt);
if (!hasTransCols) hasTransCols = columns.HasId(SbmRequirement.Column.Trans_DescBrief);
@@ -2591,7 +2636,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
// Add the transaction columns.
List<SbmDbDfn.ColumnIdx> transactionCols = new List<SbmDbDfn.ColumnIdx>();
if (columns.HasId(SbmRequirement.Column.TransId)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Id);
if (columns.HasId(SbmRequirement.Column.Trans_TypeDesc)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Type);
if (columns.HasId(SbmRequirement.Column.Trans_Type) || columns.HasId(SbmRequirement.Column.Trans_TypeDesc)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Type);
if (columns.HasId(SbmRequirement.Column.Trans_Ref)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Ref);
if (columns.HasId(SbmRequirement.Column.Trans_RefExt)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_RefExt);
if (columns.HasId(SbmRequirement.Column.Trans_DescBrief)) transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DescBrief);
@@ -3335,7 +3380,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
// Populate filter.
query.Filters.AddRange(GetRequirementQueryFilter(prm));
if (prm.RequirementIdsIncluded.Count != 1)
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetRequirementSortColumns(prm))
@@ -69,16 +69,43 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
return detailsAreReadOnly;
}
//-------------------------------------------------------------------
// Transaction properties.
public override Sbm.TransactionType GetTransactionType(SysId transactionId)
{
if (SysId.IsValid(transactionId))
{
// Construct the query.
String colType = "TransType";
DbQuery qry = new DbQuery(Database.DbmsType);
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction));
qry.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Type), colType);
qry.Filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Id)}={SysId.ToLong(transactionId)}");
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery()))
{
if (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
return (Sbm.TransactionType)values.GetLong(colType);
}
}
}
return Sbm.TransactionType.Unknown;
}
//-------------------------------------------------------------------
public override bool RefreshTransactionTotals(SbmTransaction transaction, IEnumerable<SbmRequirement> requirements)
{
// Recalculate the amounts stored against the transaction in line with the list of requirements.
ClearErrorState();
if (transaction == null) return SetErrorState(ErrorMessage.InvalidStatus);
if (transaction == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
if (requirements == null) requirements = new List<SbmRequirement>();
// Total weight.
decimal totalWeight = requirements.GetTotalWeight(Internals.GetDefaultUnitOfMeasureByCategory(SaUomCategory.Weight)?.Id);
transaction.Weight = totalWeight;
SysId uomIdWeight = transaction.UomIdWeight;
if (!SysId.IsValid(uomIdWeight))
uomIdWeight = Internals.GetDefaultUnitOfMeasureByCategory(SaUomCategory.Weight)?.Id;
transaction.Weight = requirements.GetTotalWeight(uomIdWeight);
// Set the allocation status:
transaction.ClearAllocationStatus();
@@ -136,17 +136,17 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
}
// Any requirements left in the 'Not Updated' list must be new.
foreach (SbmRequirement requirementNotUpdate in requirementsNotUpdated)
foreach (SbmRequirement requirementNotUpdated in requirementsNotUpdated)
{
if (requirementNotUpdate != null)
if (requirementNotUpdated != null)
{
if (!SysId.IsValid(requirementNotUpdate.Id))
if (!SysId.IsValid(requirementNotUpdated.Id))
{
// Requirement does not yet exist - create it:
if (InsertRequirement(requirementNotUpdate, dbUpdateInfo))
if (InsertRequirement(requirementNotUpdated, dbUpdateInfo))
{
if (!CommitRequirementData(requirementNotUpdate, dbUpdateInfo))
SetErrorState("Failed to update requirement's data: " + requirementNotUpdate.ErrorStateMessage);
if (!CommitRequirementData(requirementNotUpdated, dbUpdateInfo))
SetErrorState("Failed to update requirement's data: " + requirementNotUpdated.ErrorStateMessage);
}
else SetErrorState("Failed to create requirement: " + ErrorStateMessage);
}
@@ -178,7 +178,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
requirements = GetRequirementsForTransaction(transaction.Id);
}
// Refresh totals.
if (transaction.RefreshTotals(requirements))
if (RefreshTransactionTotals(transaction, requirements))
UpdateTransaction(transaction, dbUpdateInfo);
else SetErrorState(transaction.ErrorStateMessage);
}
@@ -217,7 +217,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
if (requirementsAssociation.Count > 0)
{
RefreshAssociatedData(transactionAssociation, null, dbUpdateInfo);
transactionAssociation.RefreshTotals(requirementsAssociation);
TransactionMgr.RefreshTransactionTotals(transactionAssociation, requirementsAssociation);
UpdateTransaction(transactionAssociation, dbUpdateInfo);
requirementsAssociation.Clear();
}