Saxonite 1.2.10.4

This commit is contained in:
2023-02-07 08:46:58 +00:00
parent c5f8b43087
commit aa2f350a35
11 changed files with 447 additions and 49 deletions
@@ -61,7 +61,7 @@ namespace Saxonite.Net.Core.Web.Online.App
public static SaxApplication_Online AppInstance { get; private set; }
public override ISacsDatabase GetDatabase(SaxSessionContext sessionContext, Sax.Database databaseType)
{
return sessionContexts.GetValue(sessionContext.Index, null)?.Databases.GetValue(databaseType, null);
return sessionContexts.GetValue(sessionContext.Index, null)?.Databases.GetValue(databaseType, null) ?? null;
}
public override String SessionCookieName { get { return Sax.Config.Online.Session.Cookie.Name; } }
// Configuration.
@@ -117,18 +117,10 @@ namespace Saxonite.Net.Core.Web.Online.App
SaLogger.LogFolder = LoggingRootFolder;
LogApplicationStart(fn);
// Configure database connection.
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
config.location = AppConfig.Databases.Core.Location;
config.user = AppConfig.Databases.Core.User;
config.pword = AppConfig.Databases.Core.Password;
SacsDatabase coreDatabase = SacsDatabaseConsole.OpenOdbcDatabase(config);
if (coreDatabase.HasErrorState())
SaLogger.Warn(fn + " Database initialisation error: " + coreDatabase.ErrorStateMessage);
// Session context - only one context available/necessary (for now).
SessionContextData_Online sessionContextData = new SessionContextData_Online(new SaxSessionContext_Web(100, Sax.Application.Online));
sessionContextData.Databases.Add(Sax.Database.Core, coreDatabase);
ConfigureDatabaseConnection(sessionContextData, Sax.Database.Core);
ConfigureDatabaseConnection(sessionContextData, Sax.Database.Support);
sessionContexts.Add(sessionContextData.SessionContext.Index, sessionContextData);
SessionContext = sessionContextData.SessionContext;
@@ -141,6 +133,23 @@ namespace Saxonite.Net.Core.Web.Online.App
}
}
//-------------------------------------------------------------------
private void ConfigureDatabaseConnection(SessionContextData_Online sessionContextData, Sax.Database databaseInstance)
{
String fn = GetType().Name + ".ConfigureDatabaseConnection";
// Configure database connection.
SaxAppConfig.DatabaseConfig databaseConfig = AppConfig.Databases.Databases.GetValue(databaseInstance, new SaxAppConfig.DatabaseConfig());
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
config.location = databaseConfig.Location;
config.user = databaseConfig.User;
config.pword = databaseConfig.Password;
SacsDatabase database = SacsDatabaseConsole.OpenOdbcDatabase(config);
if (database.HasErrorState())
SaLogger.Warn(fn + " " + databaseInstance.ToString() + " Database initialisation error: " + database.ErrorStateMessage);
sessionContextData.Databases.Add(databaseInstance, database);
}
//-------------------------------------------------------------------
}
//=======================================================================
@@ -32,28 +32,34 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
private class UserReportResponseListData : AjaxResponse_Data.ItemData_Base
{
// Account Id only populated while account names are being queried, then nulled.
public long? UserAccountId { get; set; }
public SysId UserAccountId { get; set; }
public String UserDisplayName { get; set; }
public String ReportType { get; set; }
public String ReportTypeDesc { get; set; }
public String ReportTitle { get; set; }
public String RecordedOn { get; set; }
public String RecordedOnDisp { get; set; }
public bool? OwnReport { get; set; }
}
private class UserReportResponseItemData : UserReportResponseListData
{
public String ReportType { get; set; }
public String Report { get; set; }
public String RecordedOnForm { get; set; }
}
private void PopulateUserReportResponseListData(Model_Support model, SaxUserReport userReport, SaxUserAccount userAccount, UserReportResponseListData data)
{
data.Id = model.EncryptId(userReport.Id);
data.UserDisplayName = userAccount.GetDisplayName();
data.ReportType = Localiser.GetUserReportTypeCaption(userReport.ReportType);
data.ReportTypeDesc = Localiser.GetUserReportTypeCaption(userReport.ReportType);
data.ReportTitle = userReport.Title;
data.RecordedOn = model.FormatDateForDisplay(userReport.RecordedOn);
data.RecordedOnDisp = model.FormatDateForDisplay(userReport.RecordedOn);
data.OwnReport = userAccount.Id.Equals(SessionUserAccountId) ? (bool?)true : null;
}
private void PopulateUserReportResponseItemData(Model_Support model, SaxUserReport userReport, SaxUserAccount userAccount, UserReportResponseItemData data)
{
PopulateUserReportResponseListData(model, userReport, userAccount, data);
data.ReportType = UserReportTypeCodes.GetCodeForType(userReport.ReportType);
data.Report = userReport.Report;
data.RecordedOnForm = model.FormatDateForForm(userReport.RecordedOn);
data.CreatedOnFmt = model.FormatDateForDisplay(userReport.CreateStamp.On);
data.StatusCode = userReport.StatusCode;
data.StatusDesc = userReport.StatusDesc;
@@ -86,6 +92,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
RefreshModel(model);
// Reference data - Report types.
responseData.ReportTypes.Add(new AjaxResponse_Data.ItemCodeDesc());
List<Sax.UserReportType> validReportTypes = new List<Sax.UserReportType>(EnumUtil.GetValues<Sax.UserReportType>());
foreach (TypeCodeDesc reportType in UserReportTypeCodes)
{
@@ -116,6 +123,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Sort columns.
prmUserReport.SortColumns.Add(colRecordedOn);
prmUserReport.SortColumns.Last().SortAscending = false;
prmUserReport.SortColumns.Add(colId);
prmUserReport.SortColumns.Last().SortAscending = false;
// User account details must be queried separately - different database!
HashSet<SysId> userAccountIds = new HashSet<SysId>();
@@ -132,10 +142,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
UserReportResponseListData userReportData = new UserReportResponseListData()
{
Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))),
UserAccountId = SysId.ToLong(userAccountId),
ReportType = values.GetString(colReportType.DataName),
UserAccountId = userAccountId,
ReportTypeDesc = Localiser.GetUserReportTypeCaption(reportType),
ReportTitle = values.GetString(colReportTitle.DataName),
RecordedOn = model.FormatDateForDisplay(values.GetDate(colRecordedOn.DataName)),
RecordedOnDisp = model.FormatDateForDisplay(values.GetDate(colRecordedOn.DataName)),
OwnReport = userAccountId.Equals(SessionUserAccountId) ? (bool?)true : null,
StatusCode = values.GetString(colStatus.DataName),
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
};
@@ -159,7 +170,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
prmUserAccount.IdsIncluded.AddRange(userAccountIds);
prmUserAccount.StatusCat = SaxUserAccount.StatusCat.Any;
// Query user accounts and populate properties to report list.
using (DbResultSet resultSet = AccountMgr.ExecuteUserAccountQuery(columns, prmUserAccount))
using (DbResultSet resultSet = AccountMgr.ExecuteUserAccountQuery(userAccountCols, prmUserAccount))
{
while (resultSet != null && resultSet.HasRows && resultSet.NextRecord())
{
@@ -317,6 +328,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
{
userReport = SupportMgr.CreateUserReport(userAccountId);
disposableItems.Add(userReport);
userReport.RecordedOn = DateTime.Today;
}
// Populate item properties.
@@ -30,6 +30,7 @@ namespace Saxonite.Net.Core.Web.Online.Models
{
public String Id { get; set; }
public String Exists { get; set; }
public String UserAccountId { get; set; }
public String ReportType { get; set; }
public String Title { get; set; }
public String Report { get; set; }
@@ -49,8 +50,16 @@ namespace Saxonite.Net.Core.Web.Online.Models
public bool ValidateUserReportData(SaxController_Base.AjaxResponse_Data responseData)
{
// Report Type.
String controlName = "UserReportType";
if (UserReport.ReportType != null)
{
if (StringUtil.IsEmpty(UserReport.ReportType))
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
}
// Report Title.
String controlName = "UserReportTitle";
controlName = "UserReportTitle";
if (UserReport.Title != null)
{
responseData.SetControlValue(controlName, UserReport.Title);