From d7dc5f8fbcb5d945efaa607f4a009a86c943e840 Mon Sep 17 00:00:00 2001 From: Andy Howard Date: Wed, 19 Feb 2025 16:01:05 +0000 Subject: [PATCH] 3.0.1.1 Portal tidy. --- SaBusMgrStandardBase/Base/App/Sbm-Version.cs | 3 +- SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs | 2 + .../Mgr/SbmAccountMgr_Association-Util.cs | 10 +- SaBusMgrStandardBase/Base/Mgr/SbmCoreMgr.cs | 2 +- .../Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs | 4 +- .../Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs | 49 +++++- .../SbmAccountMgr_Dbas-Association-Utils.cs | 140 +++++++++------- .../Mgr/SbmCommodityMgr_Dbas-Commodity.cs | 12 +- .../Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs | 4 +- .../Mgr/SbmProcessMgr_Dbas-ItemProcess.cs | 4 +- .../Mgr/SbmTransactionMgr_Dbas-Constituent.cs | 8 +- ...bmTransactionMgr_Dbas-Transaction-Utils.cs | 2 +- .../Dbas/Mgr/SbmTransactionMgr_Dbas.cs | 2 +- .../wwwroot/js/sbc-ins-rep-db.js | 2 +- .../wwwroot/js/sbc-ins-rep-init.js | 2 +- .../wwwroot/js/sbc-ins-rep-sch.js | 2 +- .../Portal/Components/SbmModel_Portal.cs | 4 +- .../Consoles/SbmDemoInstanceConsole_Portal.cs | 2 +- .../Controllers/Codes/CodeController-Ajax.cs | 10 +- .../Contacts/AssociationController-Ajax.cs | 2 +- .../Contacts/ContactController-Ajax.cs | 74 ++++++--- .../TransactionController-Ajax.cs | 16 +- .../Portal/Models/Codes/Model_Code.cs | 8 +- .../Models/Contacts/Model_Association.cs | 51 ++++-- .../Models/Contacts/Model_Contact-Config.cs | 3 +- .../Models/Transactions/Model_Transaction.cs | 26 ++- .../Panel-AssociationDialog.cshtml | 2 +- .../Views/Codes/Code/Index.cshtml | 4 +- .../Contact/Panel-ContactMaintain.cshtml | 2 + .../Views/Shared/_Layout.cshtml | 2 +- .../wwwroot/css/sbm-cols.css | 13 ++ .../wwwroot/js/sbm-asset-cat.js | 2 +- .../wwwroot/js/sbm-asset.js | 2 +- .../wwwroot/js/sbm-assoc.js | 31 +++- .../wwwroot/js/sbm-cmd.js | 4 +- .../wwwroot/js/sbm-cod-typ.js | 3 +- .../wwwroot/js/sbm-cod.js | 24 ++- .../wwwroot/js/sbm-contact.js | 65 ++++---- .../wwwroot/js/sbm-main.js | 12 +- .../wwwroot/js/sbm-security.js | 2 +- .../wwwroot/js/sbm-trn.js | 154 +++++++++--------- 41 files changed, 481 insertions(+), 285 deletions(-) diff --git a/SaBusMgrStandardBase/Base/App/Sbm-Version.cs b/SaBusMgrStandardBase/Base/App/Sbm-Version.cs index 28f8868..e1334f4 100644 --- a/SaBusMgrStandardBase/Base/App/Sbm-Version.cs +++ b/SaBusMgrStandardBase/Base/App/Sbm-Version.cs @@ -15,7 +15,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- public static class Version { - private static String version { get; } = "3.0.1.0"; + private static String version { get; } = "3.0.1.1"; // Retrieve version. public static String GetFullVersion() { return version; } public static String GetAppVersion() @@ -38,6 +38,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App // Version history. //------------------------------------------------------------------- // 3.0.1 19-Feb-25 Portal Transactions. + // 3.0.1.1 19-Feb-25 Portal tidy. //------------------------------------------------------------------- // 3.0.0 Jul-2021 Initial demo test version. // 02-Feb-25 Initial live deployment. diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs b/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs index 1c2dc66..55e4732 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs @@ -55,6 +55,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus GroupMembers, AssociationOwner_Count, AssociationTarget_Count, + IsCustomer, + IsSupplier, // Common properties. Notes, Flag, diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Association-Util.cs b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Association-Util.cs index ce7362c..a6b6640 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Association-Util.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Association-Util.cs @@ -5,6 +5,7 @@ using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; +using static Sarand.BusinessMgr.Net.Standard.Base.App.Sbm; namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { @@ -35,10 +36,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr //------------------------------------------------------------------- // Association Targets. - public abstract List GetMemberTargetIds(SysId affiliateIdOwner); - public abstract List GetCustomerTargetIds(List affiliateIdsInclude, List affiliateIdsExclude); - public abstract List GetCustomerAssocIdsForTargets(List affiliateIdsTarget); - public abstract List GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, List affiliateIdsTarget); + public abstract HashSet GetMemberTargetIds(SysId affiliateIdOwner); + public abstract HashSet GetCustomerTargetIds(HashSet affiliateIdsInclude, HashSet affiliateIdsExclude); + public abstract HashSet GetCustomerAssocIdsForTargets(HashSet affiliateIdsTarget); + public abstract HashSet GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, HashSet affiliateIdsTarget); + public abstract HashSet GetAssociationTypesForTarget(SysId affiliateIdTarget); //------------------------------------------------------------------- // Associated data. diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmCoreMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmCoreMgr.cs index abe9b7c..ccc96fa 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmCoreMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmCoreMgr.cs @@ -188,7 +188,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr // Session. protected ISbmUserOrganisationContext UserContext { get; } protected SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } - public SysId AffiliateId_Owner { get { return UserContext.OrganisationAffiliateId; } } + protected SysId AffiliateId_Owner { get { return UserContext.OrganisationAffiliateId; } } protected SbmAccountsConsole AccountsDfn { get { return Internals.AccountsConsole; } } protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } } // User security profile. diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs index 8a2cb74..7496e99 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs @@ -58,9 +58,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Filters.Add(colAddress_Id + "<>" + addressPrimaryId.ToString()); qry.Filters.Add(GetPrimaryAddressFilter(true, aliasAddress)); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); SbmAddress address = GetAddressById(new SysId((int)values.GetValue(colAddress_Id).AsLong())); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs index 1dff48a..ca13f5b 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs @@ -484,12 +484,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr //------------------------------------------------------------------- // Column definitions. - private static readonly String aliasAffiliate = "aAffil"; - private static readonly String aliasAffiliate_AddPrim = "Aff_AddPrim"; - private static readonly String prefixAffiliate_AddPrim = aliasAffiliate_AddPrim + "_"; - private static readonly String colNameAffiliate_GroupMembers = "GroupMembers"; - private static readonly String colNameAffiliate_AssociationOwnerCount = "AssocOwnerCount"; - private static readonly String colNameAffiliate_AssociationTargetCount = "AssocTargetCount"; + private const String aliasAffiliate = "aAffil"; + private const String aliasAffiliate_AddPrim = "Aff_AddPrim"; + private const String prefixAffiliate_AddPrim = aliasAffiliate_AddPrim + "_"; + private const String colNameAffiliate_GroupMembers = "GroupMembers"; + private const String colNameAffiliate_AssociationOwnerCount = "AssocOwnerCount"; + private const String colNameAffiliate_AssociationTargetCount = "AssocTargetCount"; + private const String colNameAffiliate_IsCustomer = "AffilIsCust"; + private const String colNameAffiliate_IsSupplier = "AffilIsSupp"; // Column definition population. private void SetAffiliateColDfn @@ -630,6 +632,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetAffiliateColDfn(columnDfn, "Target Assocs", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.DataName = colNameAffiliate_AssociationTargetCount; break; + case SbmAffiliate.Column.IsCustomer: + SetAffiliateColDfn(columnDfn, "Customer", 60, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center); + columnDfn.DataName = colNameAffiliate_IsCustomer; + break; + case SbmAffiliate.Column.IsSupplier: + SetAffiliateColDfn(columnDfn, "Supplier", 60, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center); + columnDfn.DataName = colNameAffiliate_IsSupplier; + break; //----------------------------------------------------------------- // Common properties. @@ -1217,6 +1227,33 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr query.Columns.Add("(" + qryAssocs.BuildQuery() + ")", colNameAffiliate_AssociationTargetCount); } + if (columns.HasId(SbmAffiliate.Column.IsCustomer)) + { + // Check if Target is Customer. + String aliasIsCustomer = "AffIsCust"; + DbQuery qryIsCust = new DbQuery(Database.DbmsType); + qryIsCust.Tables.Add((SbmDbDfn.TableIdx.Association).ToString(), aliasIsCustomer); + qryIsCust.Columns.Add($"Count(*)"); + qryIsCust.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasIsCustomer)}={SysId.ToLong(AffiliateId_Owner)}"); + qryIsCust.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasIsCustomer)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate)}"); + qryIsCust.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasIsCustomer)}={(int)Sbm.AssociationType.Customer}"); + qryIsCust.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasIsCustomer)}!='{StatusDeleted}'"); + query.Columns.Add($"({qryIsCust.BuildQuery()})", colNameAffiliate_IsCustomer); + } + if (columns.HasId(SbmAffiliate.Column.IsSupplier)) + { + // Check if Target is Supplier. + String aliasIsSupplier = "AffIsSupp"; + DbQuery qryIsSupp = new DbQuery(Database.DbmsType); + qryIsSupp.Tables.Add((SbmDbDfn.TableIdx.Association).ToString(), aliasIsSupplier); + qryIsSupp.Columns.Add($"Count(*)"); + qryIsSupp.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner, aliasIsSupplier)}={SysId.ToLong(AffiliateId_Owner)}"); + qryIsSupp.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasIsSupplier)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasAffiliate)}"); + qryIsSupp.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type, aliasIsSupplier)}={(int)Sbm.AssociationType.Supplier}"); + qryIsSupp.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Status, aliasIsSupplier)}!='{StatusDeleted}'"); + query.Columns.Add($"({qryIsSupp.BuildQuery()})", colNameAffiliate_IsSupplier); + } + //--------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetAffiliateQueryFilter(prm)); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association-Utils.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association-Utils.cs index dd9d86b..fef934f 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association-Utils.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association-Utils.cs @@ -1,5 +1,6 @@ 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.CodeTypes; using Sarand.Net.Standard.Base.Core; @@ -9,6 +10,7 @@ using Sarand.Net.Standard.Dbas.Data; using System; using System.Collections.Generic; using System.Linq; +using static Sarand.BusinessMgr.Net.Standard.Base.App.Sbm; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { @@ -42,7 +44,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + AffiliateId_Owner.ToString()); using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); types.Add((Sbm.AssociationType)values.GetValue(colAssociation_Type).AsLong()); @@ -68,7 +70,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Filters.AddRange(GetAssociationQueryFilter(prmAssociation)); using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); SysId affiliteIdOwner = new SysId(values.GetValue(colAffIdOwner).AsLong()); @@ -79,110 +81,124 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr return affiliateIdsOwner; } - public override List GetMemberTargetIds(SysId affiliateIdOwner) + public override HashSet GetMemberTargetIds(SysId affiliateIdOwner) { - List affiliateIncludeIds = new List(); - List affiliateExcludeIds = new List(); + HashSet affiliateIncludeIds = new HashSet(); + HashSet affiliateExcludeIds = new HashSet(); return GetTargetIds(affiliateIdOwner, Sbm.AssociationType.Member, affiliateIncludeIds, affiliateExcludeIds); } - public override List GetCustomerTargetIds(List affiliateIncludeIds, List affiliateExcludeIds) + public override HashSet GetCustomerTargetIds(HashSet affiliateIncludeIds, HashSet affiliateExcludeIds) { return GetTargetIds(AffiliateId_Owner, Sbm.AssociationType.Customer, affiliateIncludeIds, affiliateExcludeIds); } - public List GetTargetIds(SysId affiliateIdOwner, Sbm.AssociationType associationType, List affiliateIncludeIds, List affiliateExcludeIds) + public HashSet GetTargetIds(SysId affiliateIdOwner, Sbm.AssociationType associationType, HashSet affiliateIncludeIds, HashSet affiliateExcludeIds) { - List affiliateIdsTarget = new List(); + HashSet affiliateIdsTarget = new HashSet(); if (Database == null) return affiliateIdsTarget; - bool validConfig = true; if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1) { -#if _DEBUG - SATRACE("SapAssociationMgr_Odbc::GetTargetIds Invalid owner or association type.\n"); -#endif - validConfig = false; + SaLogger.Debug($"{SysUtil.Fn} Invalid owner or association type."); + return affiliateIdsTarget; } else if (associationType == Sbm.AssociationType.Customer || associationType == Sbm.AssociationType.Supplier) { if (affiliateIdOwner != AffiliateId_Owner) { -#if _DEBUG - SATRACE("SapAssociationMgr_Odbc::GetTargetIds Invalid customer/supplier owner.\n"); -#endif - validConfig = false; + SaLogger.Debug($"{SysUtil.Fn} Invalid customer/supplier owner."); + return affiliateIdsTarget; } } - if (validConfig) - { - String colAffiliateIdTarget = "AffIdTgt"; - DbQuery qry = new DbQuery(Database.DbmsType); - qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)); - qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget), colAffiliateIdTarget); - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + affiliateIdOwner.ToString()); - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type) + "=" + ((int)associationType).ToString()); - if (affiliateIncludeIds.Count > 0) - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " IN(" + affiliateIncludeIds.Concat(",") + ")"); - if (affiliateExcludeIds.Count > 0) - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " NOT IN(" + affiliateExcludeIds.Concat(",") + ")"); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + String colAffiliateIdTarget = "AffIdTgt"; + DbQuery qry = new DbQuery(Database.DbmsType); + qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)); + qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget), colAffiliateIdTarget); + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + affiliateIdOwner.ToString()); + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type) + "=" + ((int)associationType).ToString()); + if (affiliateIncludeIds.Count > 0) + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " IN(" + affiliateIncludeIds.Concat(",") + ")"); + if (affiliateExcludeIds.Count > 0) + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " NOT IN(" + affiliateExcludeIds.Concat(",") + ")"); + + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) + { + while (dbResultSet != null && dbResultSet.NextRecord()) { - if (dbResultSet != null && dbResultSet.NextRecord()) - { - NamedValue.Map values = dbResultSet.GetRecordValues(); - affiliateIdsTarget.Add(new SysId(StringUtil.ToInt(values.GetValue(colAffiliateIdTarget)))); - } + NamedValue.Map values = dbResultSet.GetRecordValues(); + affiliateIdsTarget.Add(new SysId(StringUtil.ToInt(values.GetValue(colAffiliateIdTarget)))); } } return affiliateIdsTarget; } - public override List GetCustomerAssocIdsForTargets(List affiliateIdsTarget) + public override HashSet GetCustomerAssocIdsForTargets(HashSet affiliateIdsTarget) { return GetAssocIdsForTargets(AffiliateId_Owner, Sbm.AssociationType.Customer, affiliateIdsTarget); } - public override List GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, List affiliateIdsTarget) + public override HashSet GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, HashSet affiliateIdsTarget) { - List associations = new List(); + HashSet associations = new HashSet(); if (Database == null) return associations; - bool validConfig = true; if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1) { -#if _DEBUG - SATRACE("SapAssociationMgr_Odbc::GetAssocIdsForTargets Invalid owner or association type.\n"); -#endif - validConfig = false; + SaLogger.Debug($"{SysUtil.Fn} Invalid owner or association type."); + return associations; } else if (associationType == Sbm.AssociationType.Customer || associationType == Sbm.AssociationType.Supplier) { if (affiliateIdOwner != AffiliateId_Owner) { -#if _DEBUG - SATRACE("SapAssociationMgr_Odbc::GetAssocIdsForTargets Invalid customer/supplier owner.\n"); -#endif - validConfig = false; + SaLogger.Debug($"{SysUtil.Fn} Invalid customer/supplier owner."); + return associations; } } - if (validConfig) - { - String colAssociationId = "AssocId"; - DbQuery qry = new DbQuery(Database.DbmsType); - qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)); - qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id), colAssociationId); - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + affiliateIdOwner.ToString()); - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type) + "=" + ((int)associationType).ToString()); - qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " IN " + affiliateIdsTarget.Concat(",")); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + String colAssociationId = "AssocId"; + DbQuery qry = new DbQuery(Database.DbmsType); + qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)); + qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id), colAssociationId); + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner) + "=" + affiliateIdOwner.ToString()); + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type) + "=" + ((int)associationType).ToString()); + qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget) + " IN " + affiliateIdsTarget.Concat(",")); + + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) + { + while (dbResultSet != null && dbResultSet.NextRecord()) { - if (dbResultSet != null && dbResultSet.NextRecord()) - { - NamedValue.Map values = dbResultSet.GetRecordValues(); - associations.Add(new SysId(StringUtil.ToInt(values.GetValue(colAssociationId)))); - } + NamedValue.Map values = dbResultSet.GetRecordValues(); + associations.Add(new SysId(StringUtil.ToInt(values.GetValue(colAssociationId)))); } } return associations; } + public override HashSet GetAssociationTypesForTarget(SysId affiliateIdTarget) + { + HashSet associationTypes = new HashSet(); + if (Database == null) return associationTypes; + if (!SysId.IsValid(affiliateIdTarget)) + { + SaLogger.Debug($"{SysUtil.Fn} Invalid target."); + return associationTypes; + } + + String colAssociationType = "AssocType"; + DbQuery qry = new DbQuery(Database.DbmsType); + qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association)); + qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Type), colAssociationType); + qry.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdOwner)}={SysId.ToLong(AffiliateId_Owner)}"); + qry.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget)}={SysId.ToLong(affiliateIdTarget)}"); + + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) + { + while (dbResultSet != null && dbResultSet.NextRecord()) + { + NamedValue.Map values = dbResultSet.GetRecordValues(); + associationTypes.Add((Sbm.AssociationType)(values.GetLong(colAssociationType))); + } + } + return associationTypes; + } + //------------------------------------------------------------------- // Associated data. public override bool AssociationHasTransactions(SysId associationId) diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs index 6c38645..6a11277 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs @@ -54,9 +54,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity)); qry.Columns.Add("DISTINCT " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type)); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner) + "=" + AffiliateId_Owner.ToString()); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); types.Add((Sbm.CommodityType)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_Type)).AsLong()); @@ -75,7 +75,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity)); qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Type), colType); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id) + "=" + commodityId.ToString()); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { if (dbResultSet != null && dbResultSet.NextRecord()) { @@ -97,7 +97,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity)); qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CostPrice), colCostPrice); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id) + "=" + commodityId.ToString()); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { if (dbResultSet != null && dbResultSet.NextRecord()) { @@ -125,9 +125,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_CommodityIdSalesProj, aliasCommodity) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommodityTemplate)); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodityTemplate) + "=" + AffiliateId_Owner.ToString()); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_AffIdOwner, aliasCommodity) + "=" + AffiliateId_Owner.ToString()); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); commodities.Add(new SysIdString(new SysId((int)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_Id)).AsLong()), diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs index 4d700a7..ba348be 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs @@ -111,9 +111,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Tables.Add(TableName_PortfolioItem); qry.Columns.Add("DISTINCT " + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.PortfolioItem_Type)); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.PortfolioItem_AffIdOwner) + "=" + AffiliateId_Owner.ToString()); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); types.Add((Sbm.PortfolioItemType)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.PortfolioItem_Type)).AsLong()); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs index 87e3842..4ed0483 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs @@ -174,9 +174,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr #endif // Filter the 'To' item to match the process. - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs index a05544a..52ac523 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs @@ -67,7 +67,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qryTrans.Columns.Add(colTransaction_Id); using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qryTrans.ToString())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); SysId transactionId = new SysId((int)values.GetValue(colTransaction_Id).AsLong()); @@ -82,7 +82,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qryReqnt.Columns.Add(colRequirement_Id); using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qryReqnt.ToString())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); SysId transactionId = new SysId((int)values.GetValue(colRequirement_Id).AsLong()); @@ -214,9 +214,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget)); qry.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_UomId)); // Retrieve results. - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { - if (dbResultSet != null && dbResultSet.NextRecord()) + while (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); DateTime effective = values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Effective, false)).AsDate(); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction-Utils.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction-Utils.cs index 99847c3..c29dc33 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction-Utils.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction-Utils.cs @@ -128,7 +128,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Id) + "=" + transactionId.ToString()); qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_CostLabourRateHour) + " IS NOT null"); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { if (dbResultSet != null && dbResultSet.NextRecord()) { diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs index 2d245f6..bd982e9 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs @@ -99,7 +99,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr qry.Joins.Add(joinReqnt); // Execute the query. if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Query: " + qry.BuildQuery()); - using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString())) + using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { while (!HasErrorState() && dbResultSet != null && dbResultSet.NextRecord()) { diff --git a/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-db.js b/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-db.js index d87d273..8ec6f9d 100644 --- a/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-db.js +++ b/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-db.js @@ -93,7 +93,7 @@ //-------------------------------------------------------------- $(function () { - let env = cd.env.init = { data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} }; + let env = cd.env.init = { mode: { search: 1 }, data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} }; env.$pnl.items = $('.sbc-panel.Tables'); env.$pnl.header = env.$pnl.items.find('.sbc-panel-header'); diff --git a/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-init.js b/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-init.js index c379bbe..927a10c 100644 --- a/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-init.js +++ b/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-init.js @@ -82,7 +82,7 @@ //-------------------------------------------------------------- $(function () { - let env = ir.env.init = { data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} }; + let env = ir.env.init = { mode: { search: 1 }, data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} }; env.$pnl.init = $('.sbc-panel.RepositoryInit'); env.$frm.itemId = env.$pnl.init.find('.RepositoryIdForm'); diff --git a/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-sch.js b/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-sch.js index d71ba8d..10795cd 100644 --- a/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-sch.js +++ b/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-sch.js @@ -103,7 +103,7 @@ //-------------------------------------------------------------- $(function () { - let env = { data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} }; + let env = { mode: { search: 1 }, data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} }; env.$pnl.items = $('.sbc-panel.Schema'); env.$pnl.header = env.$pnl.items.find('.sbc-panel-header'); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Components/SbmModel_Portal.cs b/SaBusinessMgrCoreWebPortal/Portal/Components/SbmModel_Portal.cs index 8c7b247..e9140f7 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Components/SbmModel_Portal.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Components/SbmModel_Portal.cs @@ -8,6 +8,7 @@ using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.BusinessMgr.Web.Portal.App; using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Diary; @@ -58,7 +59,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Components //------------------------------------------------------------------- // Properties. protected SbmSessionData_Portal SessionData_Portal { get { return SessionData_Web as SbmSessionData_Portal; } } - public string OrganisationName { get { return SessionData_Portal?.Organisation?.DisplayName ?? ""; } } + public SysId GetAffiliateIdOwner() { return SessionData_Portal?.OrganisationAffiliateId; } + public string GetOrganisationName() { return SessionData_Portal?.Organisation?.DisplayName ?? ""; } protected override SbmInstanceSchemaConsole InstanceSchemaConsole { get { return Internals.InstanceSchemaConsole; } } //------------------------------------------------------------------- diff --git a/SaBusinessMgrCoreWebPortal/Portal/Consoles/SbmDemoInstanceConsole_Portal.cs b/SaBusinessMgrCoreWebPortal/Portal/Consoles/SbmDemoInstanceConsole_Portal.cs index af82c97..7303db7 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Consoles/SbmDemoInstanceConsole_Portal.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Consoles/SbmDemoInstanceConsole_Portal.cs @@ -429,7 +429,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Consoles { int transactionCount = 0; DateTime raisedOn = DateTime.Today; - for (int i = 0; i < SacsRandomHelper.GetInt32(6, 24); i++) + for (int i = 0; i < SacsRandomHelper.GetInt32(12, 24); i++) { // Prepare transaction data. transactionCount++; diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Codes/CodeController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Codes/CodeController-Ajax.cs index a2e8e26..50646b9 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Codes/CodeController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Codes/CodeController-Ajax.cs @@ -33,6 +33,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Codes private class CodeItemData : CodeListData { public String CodeTypeId { get; set; } + public String CodeTypeCode { get; set; } public ushort? Sequence { get; set; } public String DataValue { get; set; } } @@ -50,6 +51,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Codes { PopulateCodeResponseListData(model, data, codeType, code); data.CodeTypeId = SysId.ToString(code.CodeTypeId); + data.CodeTypeCode = codeType.Code; if (code.Sequence > 0) data.Sequence = code.Sequence; data.DataValue = code.DataValue; @@ -64,7 +66,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Codes // Construction. public AjaxResponse_CodeList(SbmModel_Portal model) : base(model) { } // Reference data. - public List CodeTypes { get; } = new List(); + public List CodeTypes { get; } = new List(); public List Statuses { get; } = new List(); public List StatusesCreate { get; } = new List(); public String StatusCodeDefault { get; set; } @@ -90,7 +92,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Codes SaCodeType.Params prmCodeType = new SaCodeType.Params(); prmCodeType.StatusCat = SaCodeType.StatusCat.NotDeleted; foreach (SaCodeType codeType in CodeTypeConsole.GetCodeTypeList(prmCodeType)) - responseData.CodeTypes.Add(new AjaxResponse_Data.ItemIdName(codeType.Id, codeType.Name)); + responseData.CodeTypes.Add(new AjaxResponse_Data.ItemCodeDesc(codeType.Code, codeType.Name)); // Reference data - statuses. foreach (SaStatus status in SaCode.ValidStatuses) @@ -272,11 +274,11 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Codes } else { - codeType = CodeTypeConsole.GetCodeTypeById(SysId.ToSysId(model.Code.CodeTypeId)); + codeType = CodeTypeConsole.GetCodeTypeByCode(model.Code.CodeTypeCode); disposables.Add(codeType); if (codeType == null) { - SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Code Type for new Code. Id: '" + model.Code.CodeTypeId + "'"); + SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Code Type for new Code. Code: '" + model.Code.CodeTypeCode + "'"); return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); } } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/AssociationController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/AssociationController-Ajax.cs index 10cef81..40ae837 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/AssociationController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/AssociationController-Ajax.cs @@ -385,7 +385,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"])); } // New item. - association = AccountMgr.CreateAssociation(SessionData_Portal.Organisation.AffiliateId, associationType, SysId.ToSysId(model.Association.ContactIdTarget)); + association = AccountMgr.CreateAssociation(SessionData_Portal.Organisation.AffiliateId, associationType, SysId.ToSysId(model.Association.TargetId)); disposables.Add(association); } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/ContactController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/ContactController-Ajax.cs index aca51d6..327e695 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/ContactController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Contacts/ContactController-Ajax.cs @@ -28,9 +28,12 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts private class AffiliateListData : AjaxResponse_Data.ItemData_Base { // Item properties with specific handling. + public bool? IsOwner { get; set; } public String Name { get; set; } // Affiliate properties for list with specific handling. public long? AssociationCount { get; set; } + public bool? IsCust { get; set; } + public bool? IsSupp { get; set; } // Field values. public AjaxResponse_Data.FieldValuesData Field { get; } = new AjaxResponse_Data.FieldValuesData(); } @@ -43,7 +46,14 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts private void PopulateAffiliateResponseListData(Model_Contact model, SbmAffiliate affiliate, AffiliateListData data) { data.Id = SysId.ToString(affiliate.Id); + if (affiliate.Id.Equals(model.GetAffiliateIdOwner())) data.IsOwner = true; + // Associations. data.AssociationCount = AccountMgr.GetAffiliateTargetAssociationCount(affiliate.Id, Sbm.AssociationType.NotInternal); + HashSet associationTypes = AccountMgr.GetAssociationTypesForTarget(affiliate.Id); + if (associationTypes.Contains(Sbm.AssociationType.Customer)) + data.IsCust = true; + if (associationTypes.Contains(Sbm.AssociationType.Supplier)) + data.IsSupp = true; } private void PopulateAffiliateResponseItemData(Model_Contact model, SbmAffiliate affiliate, AffiliateItemData data) { @@ -105,17 +115,22 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts { // Construction. public AjaxResponse_ContactConfig(SbmModel_Portal model) : base(model) { } - // Configuration. - public Model_Contact.ListConfigData Config { get; } = new Model_Contact.ListConfigData(); - public Model_Contact.ItemConfigData ConfigInd { get; } = new Model_Contact.ItemConfigData(); - public Model_Contact.ItemConfigData ConfigOrg { get; } = new Model_Contact.ItemConfigData(); - public Model_Contact.ItemConfigData ConfigGrp { get; } = new Model_Contact.ItemConfigData(); - // Reference data. - public List OrganisationTypes { get; } = new List(); - public List Titles { get; } = new List(); - public List Salutations { get; } = new List(); - public List Statuses { get; } = new List(); - public String DefaultStatusCode { get; set; } + // Configuration data - object copied directly to env.datain script. + public class ConfigData + { + // Configurations. + public Model_Contact.ListConfigData CfgList { get; } = new Model_Contact.ListConfigData(); + public Model_Contact.ItemConfigData CfgInd { get; } = new Model_Contact.ItemConfigData(); + public Model_Contact.ItemConfigData CfgOrg { get; } = new Model_Contact.ItemConfigData(); + public Model_Contact.ItemConfigData CfgGrp { get; } = new Model_Contact.ItemConfigData(); + // Reference data. + public List OrganisationTypes { get; } = new List(); + public List Titles { get; } = new List(); + public List Salutations { get; } = new List(); + public List Statuses { get; } = new List(); + public String DefaultStatusCode { get; set; } + } + public ConfigData Data { get; set; } = new ConfigData(); } // Ajax request. [HttpPost] @@ -141,28 +156,28 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts private void PopulateContactConfig(Model_Contact model, AjaxResponse_ContactConfig responseData) { // Configuration. - model.PopulateListConfig(responseData.Config); - model.PopulateItemConfig(responseData.ConfigInd, null, Sbm.AffiliateType.Individual); - model.PopulateItemConfig(responseData.ConfigOrg, null, Sbm.AffiliateType.Commercial); - model.PopulateItemConfig(responseData.ConfigGrp, null, Sbm.AffiliateType.ContactGroup); + model.PopulateListConfig(responseData.Data.CfgList); + model.PopulateItemConfig(responseData.Data.CfgInd, null, Sbm.AffiliateType.Individual); + model.PopulateItemConfig(responseData.Data.CfgOrg, null, Sbm.AffiliateType.Commercial); + model.PopulateItemConfig(responseData.Data.CfgGrp, null, Sbm.AffiliateType.ContactGroup); // Reference data - Organisation types. foreach (TypeCodeDesc affiliateType in GetSystemCodes(Sbm.SystemCode.AffiliateType).Where(item => item.Type != (short)Sbm.AffiliateType.Individual && item.Type != (short)Sbm.AffiliateType.ContactGroup)) - responseData.OrganisationTypes.Add(new AjaxResponse_Data.ItemCodeDesc(affiliateType.Code, affiliateType.Desc)); + responseData.Data.OrganisationTypes.Add(new AjaxResponse_Data.ItemCodeDesc(affiliateType.Code, affiliateType.Desc)); // Reference data - titles. - responseData.Titles.Add(new AjaxResponse_Data.ItemCodeDesc("", "")); + responseData.Data.Titles.Add(new AjaxResponse_Data.ItemCodeDesc("", "")); foreach (SaCode title in CodeTypeConsole.GetCodesForCodeType(SbmSystem.GetCodeTypeCode(Sbm.ApplCodeType.ContactTitle))) - responseData.Titles.Add(new AjaxResponse_Data.ItemCodeDesc(title.Code, title.Description)); + responseData.Data.Titles.Add(new AjaxResponse_Data.ItemCodeDesc(title.Code, title.Description)); // Reference data - salutation. - responseData.Salutations.Add(new AjaxResponse_Data.ItemCodeDesc("", "")); - responseData.Salutations.Add(new AjaxResponse_Data.ItemCodeDesc("Dear", "Dear")); + responseData.Data.Salutations.Add(new AjaxResponse_Data.ItemCodeDesc("", "")); + responseData.Data.Salutations.Add(new AjaxResponse_Data.ItemCodeDesc("Dear", "Dear")); // Reference data - statuses. foreach (SaStatus status in SbmAffiliate.ValidStatuses.FindAll(item => item != SaStatus.Deleted)) - responseData.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); - responseData.DefaultStatusCode = SacsSystem.GetStatusCode(SbmAffiliate.DefaultStatus); + responseData.Data.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status))); + responseData.Data.DefaultStatusCode = SacsSystem.GetStatusCode(SbmAffiliate.DefaultStatus); } //------------------------------------------------------------------- @@ -231,6 +246,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts ColumnDfn colPhoneDirect = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.PhoneDirect); ColumnDfn colEmail = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Email); ColumnDfn colAssocTargetCount = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.AssociationTarget_Count); + ColumnDfn colIsCustomer = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.IsCustomer); + ColumnDfn colIsSupplier = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.IsSupplier); ColumnDfn colNotes = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Notes); ColumnDfn colStatus = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.Status); ColumnDfn colCreatedOn = AccountMgr.GetAffiliateColumnDfn(SbmAffiliate.Column.CreateOn_Date); @@ -238,14 +255,15 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts List columns = new List() { colId, colName, colAffiliateType, - colAddress, colContact, colPhoneMain, colPhoneAlt, colPhoneMobile, colPhoneDirect, colEmail, colAssocTargetCount, + colAddress, colContact, colPhoneMain, colPhoneAlt, colPhoneMobile, colPhoneDirect, colEmail, + colAssocTargetCount, colIsCustomer, colIsSupplier, colNotes, colStatus, colCreatedOn, colUpdatedOn }; - if (responseData.Config.Column.Hide.Contains($"{Model_Contact.ItemField.Address}")) + if (responseData.Data.CfgList.Column.Hide.Contains($"{Model_Contact.ItemField.Address}")) columns.Remove(colAddress); - if (responseData.Config.Column.Hide.Contains($"{Model_Contact.ItemField.Email}")) + if (responseData.Data.CfgList.Column.Hide.Contains($"{Model_Contact.ItemField.Email}")) columns.Remove(colEmail); - if (responseData.Config.Column.Hide.Contains($"{Model_Contact.ItemField.Associations}")) + if (responseData.Data.CfgList.Column.Hide.Contains($"{Model_Contact.ItemField.Associations}")) columns.Remove(colAssocTargetCount); // Sort Columns. @@ -265,6 +283,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts Name = values.GetString(colName.DataName), StatusCode = values.GetString(colStatus.DataName), }; + if (SysId.ToLong(model.GetAffiliateIdOwner()) == StringUtil.ToLong(affiliateData.Id)) affiliateData.IsOwner = true; affiliateData.Field.Value.Add($"{Model_Contact.ItemField.Name}", affiliateData.Name); affiliateData.Field.Value.Add($"{Model_Contact.ItemField.Type}", Internals.AffiliateTypeCodes.GetDescForType(affiliateType)); affiliateData.Field.Value.Add($"{Model_Contact.ItemField.Address}", StringUtil.NullOnBlank(AccountMgr.GetAffiliateDataValue(colAddress, values).AsString())); @@ -275,9 +294,12 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Contacts affiliateData.Field.Value.Add($"{Model_Contact.ItemField.Status}", SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))); affiliateData.Field.Value.Add($"{Model_Contact.ItemField.CreatedOn}", Localiser.FormatDate(values.GetDate(colCreatedOn.DataName))); affiliateData.Field.Value.Add($"{Model_Contact.ItemField.UpdatedOn}", Localiser.FormatDate(values.GetDate(colUpdatedOn.DataName))); + // Associations. long assocCount = values.GetLong(colAssocTargetCount.DataName); if (assocCount > 0) affiliateData.AssociationCount = assocCount; + if (values.GetLong(colIsCustomer.DataName) > 0) affiliateData.IsCust = true; + if (values.GetLong(colIsSupplier.DataName) > 0) affiliateData.IsSupp = true; // Cleanse item values. affiliateData.Field.Value.RemoveAll(item => StringUtil.IsBlank(item.Value)); responseData.Contacts.Add(affiliateData); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs index 1e0f322..ebd2807 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Controllers/Transactions/TransactionController-Ajax.cs @@ -173,6 +173,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions public bool? TransactionsForAssociation { get; set; } } public ModeData Mode { get; set; } + /// Status Cats to refresh caption with transaction count. + public List StatusCats { get; set; } // Transaction list. public List Transactions { get; } = new List(); } @@ -209,6 +211,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions else responseData.Mode.Search = true; + // Status Cats. + responseData.StatusCats = model.GetTransactionStatusCats(model.GetFilterTransactionType()).Select(item => new AjaxResponse_Data.ItemCodeDesc(item.Code, item.Desc)).ToList(); + // Item filter. SbmTransaction.Params prmTransaction = new SbmTransaction.Params(); prmTransaction.Search = model.Filter.Search; @@ -357,13 +362,21 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions //------------------------------------------------------------------- // Store Transaction ajax request. //------------------------------------------------------------------- + private class AjaxResponse_StoreTransaction : AjaxResponse_Transaction + { + // Construction. + public AjaxResponse_StoreTransaction(SbmModel_Portal model) : base(model) { } + /// Status Cats to refresh caption with transaction count. + public List StatusCats { get; set; } + } + //------------------------------------------------------------------- [HttpPost] [Route("Transaction/Ajax/Store")] [Route("Transaction/Ajax/StoreItem")] public IActionResult Ajax_StoreItem(Model_Transaction model) { String messageTitle = Localiser["label.transaction"]; - AjaxResponse_Transaction responseData = new AjaxResponse_Transaction(model); + AjaxResponse_StoreTransaction responseData = new AjaxResponse_StoreTransaction(model); // Validate session and referrer. if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); @@ -476,6 +489,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions PopulateTransactionResponseItemData(model, transaction, responseData.transaction); // Complete response. + responseData.StatusCats = model.GetTransactionStatusCats(transaction.TransactionType).Select(item => new AjaxResponse_Data.ItemCodeDesc(item.Code, item.Desc)).ToList(); responseData.Success = true; return Json(responseData); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Codes/Model_Code.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Codes/Model_Code.cs index 8a6a9f5..6004359 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Models/Codes/Model_Code.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Codes/Model_Code.cs @@ -59,7 +59,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Codes { public String Exists { get; set; } public String Id { get; set; } - public String CodeTypeId { get; set; } + public String CodeTypeCode { get; set; } public String Code { get; set; } public String Description { get; set; } public String Sequence { get; set; } @@ -80,12 +80,12 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Codes { // Code Type. - if (Code.CodeTypeId != null) + if (Code.CodeTypeCode != null) { String controlName = "CodeType"; - if (StringUtil.IsBlank(Code.CodeTypeId)) + if (StringUtil.IsBlank(Code.CodeTypeCode)) responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); - else if (!CodeTypeConsole.CodeTypeExistsById(SysId.ToSysId(Code.CodeTypeId))) + else if (!CodeTypeConsole.CodeTypeExistsByCode(Code.CodeTypeCode)) responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]); } diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Association.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Association.cs index 861524d..fd8ac63 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Association.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Association.cs @@ -3,6 +3,7 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.BusinessMgr.Web.Portal.Components; using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; using System; @@ -58,7 +59,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts public string Exists { get; set; } public string Id { get; set; } public string ContactIdOwner { get; set; } - public string ContactIdTarget { get; set; } + public string TargetId { get; set; } public string Type { get; set; } public string Code { get; set; } public string ReferenceExt { get; set; } @@ -122,19 +123,41 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts public bool ValidateAssociationData(Sacs.Web.Components.SaController.AjaxResponse_Data responseData) { //--------------------------------------------------------------- + SysId associationId = SysId.ToSysId(Association.Id); + bool associationExists = StringUtil.ToBool(Association.Exists); // Association Type. if (Association.Type != null) { - String controlName = "AssociationType"; - if (StringUtil.IsBlank(Association.Type)) + String controlName = GetFieldName(ItemField.Type); + if (StringUtil.IsBlank(Association.Type) || GetAssociationType() <= 0) responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); } + // Target. + if (Association.TargetId != null) + { + String controlName = GetFieldName(ItemField.Target); + SysId affiliateIdTarget = SysId.ToSysId(Association.TargetId); + if (!SysId.IsValid(affiliateIdTarget) && !associationExists) + responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); + else if (SysId.IsValid(affiliateIdTarget) && !associationExists && GetAssociationType() > 0) + { + // Ensure that the Association does not already exist. + SbmAssociation.Params prmAssociation = new SbmAssociation.Params(); + prmAssociation.IdsIncluded.AddId(associationId); + prmAssociation.AffiliateIdTarget = affiliateIdTarget; + prmAssociation.AssociationType = GetAssociationType(); + prmAssociation.StatusCat = SbmAssociation.StatusCat.Any; + if (AccountMgr.GetAssociationCount(prmAssociation) > 0) + responseData.SetControlError(controlName, Localiser["msg.validation.duplicate.value"]); + } + } + // Code. if (Association.Code != null) { - String controlName = "AssociationCode"; + String controlName = GetFieldName(ItemField.Code); Association.Code = Association.Code.ToUpperInvariant(); responseData.SetControlValue(controlName, Association.Code); if (StringUtil.GetLength(Association.Code) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Code)) @@ -144,7 +167,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // External Reference. if (Association.ReferenceExt != null) { - String controlName = "AssociationReferenceExt"; + String controlName = GetFieldName(ItemField.ReferenceExt); Association.ReferenceExt = Association.ReferenceExt.ToUpperInvariant(); responseData.SetControlValue(controlName, Association.ReferenceExt); if (StringUtil.GetLength(Association.ReferenceExt) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_ExtRef)) @@ -154,7 +177,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Location. if (Association.Location != null) { - String controlName = "AssociationLocation"; + String controlName = GetFieldName(ItemField.Location); responseData.SetControlValue(controlName, Association.Location); if (StringUtil.GetLength(Association.Location) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Location)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Location)]); @@ -163,7 +186,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Role. if (Association.Role != null) { - String controlName = "AssociationRole"; + String controlName = GetFieldName(ItemField.Role); responseData.SetControlValue(controlName, Association.Role); if (StringUtil.GetLength(Association.Role) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Role)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Role)]); @@ -172,7 +195,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Phone Main. if (Association.PhoneMain != null) { - String controlName = "AssociationPhoneMain"; + String controlName = GetFieldName(ItemField.PhoneMain); responseData.SetControlValue(controlName, Association.PhoneMain); if (StringUtil.GetLength(Association.PhoneMain) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_PhoneMain)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_PhoneMain)]); @@ -181,7 +204,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Email. if (Association.Email != null) { - String controlName = "AssociationEmail"; + String controlName = GetFieldName(ItemField.Email); responseData.SetControlValue(controlName, Association.Email); if (StringUtil.GetLength(Association.Email) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Email)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Email)]); @@ -190,7 +213,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Group. if (Association.Group != null) { - String controlName = "AssociationGroup"; + String controlName = GetFieldName(ItemField.Group); responseData.SetControlValue(controlName, Association.Group); if (StringUtil.GetLength(Association.Group) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Group)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Group)]); @@ -199,7 +222,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Description. if (Association.DescDetail != null) { - String controlName = "AssociationDescDetail"; + String controlName = GetFieldName(ItemField.DescDetail); responseData.SetControlValue(controlName, Association.DescDetail); if (StringUtil.GetLength(Association.DescDetail) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_DescDetail)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_DescDetail)]); @@ -208,7 +231,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Default Nominal Code. if (Association.NominalCodeDefault != null) { - String controlName = "AssociationNominalCodeDefault"; + String controlName = GetFieldName(ItemField.DefaultNominalCode); responseData.SetControlValue(controlName, Association.NominalCodeDefault); if (StringUtil.GetLength(Association.NominalCodeDefault) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode)]); @@ -272,7 +295,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // Notes. if (Association.Notes != null) { - String controlName = "AssociationNotes"; + String controlName = GetFieldName(ItemField.Notes); responseData.SetControlValue(controlName, Association.Notes); if (StringUtil.GetLength(Association.Notes) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Notes)) responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Association_Notes)]); @@ -281,7 +304,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts // status. if (Association.StatusCode != null) { - String controlName = "AssociationStatusCode"; + String controlName = GetFieldName(ItemField.Status); if (StringUtil.IsBlank(Association.StatusCode)) responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); else if (!SbmAssociation.ValidStatuses.Contains(GetAssociationStatus())) diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Contact-Config.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Contact-Config.cs index 08aa9ac..68261b2 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Contact-Config.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Contacts/Model_Contact-Config.cs @@ -115,7 +115,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts { ViewMode viewMode = GetFilterMode(); - bool modeIsMaintain= viewMode == ViewMode.Maintain; + bool modeIsMaintain = viewMode == ViewMode.Maintain; bool modeIsSearch = viewMode == ViewMode.Search; Sbm.AffiliateType affiliateType = GetFilterContactType(); @@ -247,6 +247,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Contacts bool importedFromAccounts = Internals.AccountsConsole.ItemIsImportedFromAccounts(affiliateItemId); bool showNotes = true; + //--------------------------------------------------------------- // Id. if (SbmSystem.DebugMode) config.Field.Readonly.Add($"{ItemField.Id}"); diff --git a/SaBusinessMgrCoreWebPortal/Portal/Models/Transactions/Model_Transaction.cs b/SaBusinessMgrCoreWebPortal/Portal/Models/Transactions/Model_Transaction.cs index b2009c3..b277ecc 100644 --- a/SaBusinessMgrCoreWebPortal/Portal/Models/Transactions/Model_Transaction.cs +++ b/SaBusinessMgrCoreWebPortal/Portal/Models/Transactions/Model_Transaction.cs @@ -2,6 +2,7 @@ using Sarand.BusinessMgr.Net.Core.Web.App; using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control; using Sarand.BusinessMgr.Web.Portal.Components; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; @@ -69,10 +70,33 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions return (SbmTransaction.StatusCat)Internals.GetSystemCodes(Sbm.SystemCode.TransactionStatusCat).GetTypeForCode(Filter.StatusCat); } + //------------------------------------------------------------------- + /// Transaction Status Cats with transaction count for selected entries. + public List GetTransactionStatusCats(Sbm.TransactionType transactionType) + { + List statusCats = new List(); + foreach (TypeCodeDesc statusCat in SbmTransaction.GetTransactionStatusCats(GetFilterTransactionType())) + { + SbmTransaction.StatusCat transactionStatusCat = (SbmTransaction.StatusCat)statusCat.Type; + String statusCatDesc = statusCat.Desc; + if (transactionType > 0 && (transactionStatusCat == SbmTransaction.StatusCat.Pending || transactionStatusCat == SbmTransaction.StatusCat.Open)) + { + SbmTransaction.Params prmTransaction = new SbmTransaction.Params(); + prmTransaction.TransactionType = transactionType; + prmTransaction.StatusCat = transactionStatusCat; + long transactionCount = TransactionMgr.GetTransactionCount(prmTransaction); + if (transactionCount > 0) + statusCatDesc += $" [{transactionCount}]"; + } + statusCats.Add(new TypeCodeDesc(statusCat.Type, statusCat.Code, statusCatDesc)); + } + return statusCats; + } + /// Transaction Status Cats for filter dropdown. public IEnumerable GetTransactionStatusCatsForFilterDropdown() { - return new SelectList(SbmTransaction.GetTransactionStatusCats(GetFilterTransactionType()), "Code", "Desc"); + return new SelectList(GetTransactionStatusCats(GetFilterTransactionType()), "Code", "Desc"); } //------------------------------------------------------------------- diff --git a/SaBusinessMgrCoreWebPortal/Views/Association/Panel-AssociationDialog.cshtml b/SaBusinessMgrCoreWebPortal/Views/Association/Panel-AssociationDialog.cshtml index 2eed162..a03a161 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Association/Panel-AssociationDialog.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Association/Panel-AssociationDialog.cshtml @@ -103,7 +103,7 @@
- +
diff --git a/SaBusinessMgrCoreWebPortal/Views/Codes/Code/Index.cshtml b/SaBusinessMgrCoreWebPortal/Views/Codes/Code/Index.cshtml index e7308e8..178f588 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Codes/Code/Index.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Codes/Code/Index.cshtml @@ -131,7 +131,7 @@
- +
@@ -151,7 +151,7 @@
- @Html.TextBoxFor(model => model.Code.Code, new { @id = "ifCodeCode", @class = "CodeCode sbm-input upper", @maxlength = 3 }) + @Html.TextBoxFor(model => model.Code.Code, new { @id = "ifCodeCode", @class = "CodeCode sbm-input upper", @maxlength = Model.GetControlMaxLength(SaCodeTypeDbDfn.ColumnIdx.SaCode_Code) })
diff --git a/SaBusinessMgrCoreWebPortal/Views/Contact/Panel-ContactMaintain.cshtml b/SaBusinessMgrCoreWebPortal/Views/Contact/Panel-ContactMaintain.cshtml index 445c9d7..cac8487 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Contact/Panel-ContactMaintain.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Contact/Panel-ContactMaintain.cshtml @@ -14,6 +14,8 @@ sbm.lbl.createOrg = '@(Localiser.GetJavascriptText("caption.organisation.create"))'; sbm.lbl.createInd = '@(Localiser.GetJavascriptText("caption.individual.create"))'; sbm.lbl.createGrp = '@(Localiser.GetJavascriptText("caption.contact.group.create"))'; + sbm.lbl.createCust = '@(Localiser.GetJavascriptText("caption.customer.create"))'; + sbm.lbl.createSupp = '@(Localiser.GetJavascriptText("caption.supplier.create"))';
diff --git a/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml b/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml index 55af16c..fb8a7fa 100644 --- a/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml +++ b/SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml @@ -165,7 +165,7 @@