Associations

This commit is contained in:
Andy Howard
2024-12-04 15:30:59 +00:00
parent c8b5df5909
commit 30d0352f48
140 changed files with 5109 additions and 2879 deletions
@@ -51,8 +51,10 @@ namespace Sarand.BusinessMgr.Net.Core.Web.App
// Application components.
public abstract SbmAppConfig AppConfig { get; }
public abstract String SessionCookieName { get; }
// Session contexts - database connection etc.
public abstract List<ushort> GetSessionContextIdxs();
public abstract SbmSessionContext GetSessionContext(ushort index);
public abstract SbmSessionContext GetSessionContextByIndex(ushort index);
public abstract List<SbmSessionContext> GetSessionContexts();
// Configuration.
public IConfiguration Configuration { get; protected set; }
public IConfiguration SbmConfiguration { get; protected set; }
@@ -27,71 +27,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Helpers
public static SbmSessionContext GetSessionContext(ushort idx)
{
SbmApplication_Web app = SbmGlobals_Web.Application;
return app.GetSessionContext(idx);
}
//-------------------------------------------------------------------
// Session Contexts for User Email Address
//-------------------------------------------------------------------
/// <summary>
/// Identify the session context that corresponds with the BusinessMgr
/// database for the specified user by email address.
/// </summary>
public static List<ushort> GetSessionContextIdxsForContextUserEmail(String dbIdentifier, String emailAddress)
{
String alias_SecurityItem = "SecItm";
String alias_Affiliate = "Affil";
List<ushort> sessionContextIdxs = new List<ushort>();
if (StringUtil.IsEmpty(emailAddress)) return sessionContextIdxs;
if (SacsSystem.DebugMode) SaLogger.Info($"{SysUtil.Fn} Searching for database. Identifier: {dbIdentifier}. Email address: {emailAddress}");
// Get the session context indices defined by the application.
SbmApplication_Web app = SbmGlobals_Web.Application;
foreach (ushort sessionContextIdx in app.GetSessionContextIdxs())
{
// Retrieve the session context.
SbmSessionContext sessionContext = app.GetSessionContext(sessionContextIdx);
if (sessionContext == null)
{
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve SessionContext for idx: " + sessionContextIdx);
continue;
}
// Verify Db Identifier.
HashSet<string> dbIdentifiers = app.GetDbIdentifiers(sessionContext);
if (!dbIdentifiers.ContainsCI(dbIdentifier))
continue;
ISacsDatabase db = app.GetBusMgrDatabase(sessionContext);
if (db == null)
{
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Database for idx: " + sessionContextIdx);
continue;
}
if (SacsSystem.DebugMode) SaLogger.Info($"{SysUtil.Fn} Database: " + db.DatabaseName);
// Query to check for Security Item matching the email with associated Affiliate.
// NB This is done independently for each database in case there are different
// DBMSs involved with different value formatting or syntax rules.
DbQuery qry = new DbQuery(db.DbmsType);
qry.Tables.Add(SaSecurityDbDfn.GetTableName(SaSecurityDbDfn.TableIdx.SaSecItem), alias_SecurityItem);
qry.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem));
qry.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem));
qry.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_EmailAddress, alias_SecurityItem) + "='" + DbQuery.FormatForCondition(emailAddress) + "'");
// Join to the Affiliate table.
DbQueryJoin joinAffiliate = new DbQueryJoin(DbJoinType.FullOuter);
joinAffiliate.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), alias_Affiliate);
joinAffiliate.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UserId, alias_Affiliate) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem));
// Execute query.
using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.BuildQuery()))
{
if (resultSet != null && resultSet.NextRecord())
{
if (SacsSystem.DebugMode) SaLogger.Info($"{SysUtil.Fn} Database contains email: " + db.DatabaseName);
sessionContextIdxs.Add(sessionContextIdx);
}
}
}
return sessionContextIdxs;
return app.GetSessionContextByIndex(idx);
}
//-------------------------------------------------------------------
+8 -1
View File
@@ -286,7 +286,14 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Models
/// <summary>List of Association Types for dropdown.</summary>
public IEnumerable<SelectListItem> GetAssociationTypeCodesForSelect()
{
return new SelectList(GetCodesOfType(Sbm.SystemCode.AssociationType), "Code", "Desc");
List<TypeCodeDesc> associationTypes = GetCodesOfType(Sbm.SystemCode.AssociationType);
associationTypes.RemoveAll(item => item.Type == (short)Sbm.AssociationType.Internal);
foreach (Sbm.AssociationType associationType in EnumUtil.GetValues<Sbm.AssociationType>())
{
if (!SessionConsole.AllowAssociationType(associationType))
associationTypes.RemoveAll(item => item.Type == (short)associationType);
}
return new SelectList(associationTypes, "Code", "Desc");
}
/// <summary>List of Commodity Types for dropdown.</summary>