Associations
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user