v1.2.4
This commit is contained in:
@@ -92,10 +92,12 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
|
||||
|
||||
// Filter.
|
||||
SaxActivityIndex.Params prmActivityIndex = new SaxActivityIndex.Params();
|
||||
prmActivityIndex.SportIdsIncluded.AddRange(context.SportIds);
|
||||
prmActivityIndex.RegionIdsIncluded.AddRange(context.RegionIds);
|
||||
prmActivityIndex.UserAccountIdsOwnerIncluded.AddRange(context.UserAccountIdsOwner);
|
||||
prmActivityIndex.OrganisationIdsOwnerIncluded.AddRange(context.OrganisationIdsOwner);
|
||||
prmActivityIndex.SportRegionIdsIncluded.AddRange(context.SportRegionIdsIncluded);
|
||||
prmActivityIndex.EffectiveFrom = context.EffectiveFrom;
|
||||
prmActivityIndex.EffectiveTo = context.EffectiveTo;
|
||||
prmActivityIndex.NotExpiredOn = context.NotExpiredOn;
|
||||
prmActivityIndex.Alias_ActivityIndex = alias_ActivityIndex;
|
||||
prmActivityIndex.ResultsPaging.PageNo = 1;
|
||||
prmActivityIndex.ResultsPaging.PageLength = 100;
|
||||
@@ -389,14 +391,18 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
|
||||
IndexEntryData indexEntrydata = indexEntryDataList.Find(item => item.MatchesIds(indexEntry));
|
||||
if (indexEntrydata != null)
|
||||
{
|
||||
// Match found - if the effective date differs, update it.
|
||||
if (!indexEntry.EffectiveOn.Equals(indexEntrydata.EffectiveOn))
|
||||
{
|
||||
// Match found - update properties.
|
||||
indexEntry.UserAccountIdOwner = indexEntrydata.UserAccountIdOwner;
|
||||
indexEntry.OrganisationIdOwner = indexEntrydata.OrganisationIdOwner;
|
||||
indexEntry.EffectiveOn = indexEntrydata.EffectiveOn;
|
||||
indexEntry.ExpiresOn = indexEntrydata.ExpiresOn;
|
||||
if (indexEntry.Changed)
|
||||
{
|
||||
if (Internals.ActivityMgr.UpdateActivityIndex(indexEntry, dbUpdateInfo))
|
||||
stats.EntriesUpdated++;
|
||||
else SaLogger.Warn(fn + " Failed to update Activity Index - " + Internals.ActivityMgr.ErrorStateMessage);
|
||||
}
|
||||
|
||||
// Remove the entry from the 'required' list.
|
||||
// Entries remaining in this list will be created.
|
||||
indexEntryDataList.Remove(indexEntrydata);
|
||||
@@ -412,7 +418,11 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
|
||||
// The remaining required Index entries will be created.
|
||||
foreach (IndexEntryData indexEntry in indexEntryDataList)
|
||||
{
|
||||
SaxActivityIndex itemIndexEntry = Internals.ActivityMgr.CreateActivityIndex(indexEntry.ItemId, indexEntry.SportId, indexEntry.RegionId, indexEntry.EffectiveOn);
|
||||
SaxActivityIndex itemIndexEntry = Internals.ActivityMgr.CreateActivityIndex(indexEntry.ItemId, indexEntry.SportId, indexEntry.RegionId);
|
||||
itemIndexEntry.UserAccountIdOwner = indexEntry.UserAccountIdOwner;
|
||||
itemIndexEntry.OrganisationIdOwner = indexEntry.OrganisationIdOwner;
|
||||
itemIndexEntry.EffectiveOn = indexEntry.EffectiveOn;
|
||||
itemIndexEntry.ExpiresOn = indexEntry.ExpiresOn;
|
||||
if (Internals.ActivityMgr.InsertActivityIndex(itemIndexEntry, dbUpdateInfo))
|
||||
stats.EntriesInserted++;
|
||||
else SaLogger.Warn(fn + " Failed to insert Activity Index - " + Internals.ActivityMgr.ErrorStateMessage);
|
||||
@@ -439,6 +449,7 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
|
||||
" And " + SaxDbDfn_Core.GetColumnName(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId) + "=" + itemId.Id.ToLong();
|
||||
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
|
||||
int recordsDeleted = db.ExecuteDelete(tableName, filter);
|
||||
if (recordsDeleted > 0)
|
||||
SaLogger.Info(fn + " Records deleted: " + recordsDeleted + ". Filter: " + filter, true);
|
||||
return true;
|
||||
}
|
||||
@@ -447,10 +458,10 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
|
||||
// User Activities
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>
|
||||
/// Record listing of activties by user - those populated to the application page.
|
||||
/// Record listing of activities by user - those populated to the application page.
|
||||
/// <para>- Activities not previously listed are added to the user's list.</para>
|
||||
/// <para>- Activities previously listed are updated in the user's list.</para>
|
||||
/// <para>- User Activties no longer listed are flagged as 'Not currently listed'.</para>
|
||||
/// <para>- User Activities no longer listed are flagged as 'Not currently listed'.</para>
|
||||
/// </summary>
|
||||
public override bool RecordUserActivitiesListed(SysId userAccountId, List<ItemId> activityItemIds, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
|
||||
@@ -36,6 +36,8 @@ namespace Saxonite.Net.Core.Web.Base.Middleware
|
||||
//-------------------------------------------------------------------
|
||||
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
|
||||
{
|
||||
// NoOp task to avoid compiler warning.
|
||||
await Task.Yield();
|
||||
Context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
|
||||
return AuthenticateResult.NoResult();
|
||||
}
|
||||
|
||||
@@ -241,6 +241,10 @@ namespace Saxonite.Net.Core.Web.Base.Models
|
||||
//case SaxDbDfn.ColumnIdx.UserAccount_Postcode:
|
||||
//case SaxDbDfn.ColumnIdx.ItemAddress_Postcode:
|
||||
// return Math.Min(maxLength, 16);
|
||||
case SaxDbDfn_Core.ColumnIdx.Article_Headline:
|
||||
return Math.Min(maxLength, 2000);
|
||||
case SaxDbDfn_Core.ColumnIdx.Article_Summary:
|
||||
return Math.Min(maxLength, 1000);
|
||||
}
|
||||
return maxLength;
|
||||
}
|
||||
@@ -288,7 +292,14 @@ namespace Saxonite.Net.Core.Web.Base.Models
|
||||
}
|
||||
public DateTime ParseDateFromForm(String value)
|
||||
{
|
||||
return DateUtil.ParseExact(value, "dd-MMM-yyyy", SessionCulture);
|
||||
DateTime date = DateUtil.ParseExact(value, "dd-MMM-yyyy", SessionCulture);
|
||||
if (!date.IsValid())
|
||||
date = DateUtil.ParseExact(value, "dd-MMM-yyyy", CultureInfo.CurrentUICulture);
|
||||
if (!date.IsValid())
|
||||
date = DateUtil.ParseExact(value, "dd-MMM-yyyy", CultureInfo.CurrentCulture);
|
||||
if (!date.IsValid())
|
||||
date = DateUtil.ParseExact(value, "dd-MMM-yyyy", CultureInfo.InvariantCulture);
|
||||
return date;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
@@ -60,13 +60,17 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
if (!ValidUserSession)
|
||||
return GetAjaxResult_InvalidSession(responseData);
|
||||
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
|
||||
{
|
||||
|
||||
// Core Database connection.
|
||||
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
|
||||
|
||||
// Database table row counts.
|
||||
Dictionary<String, int> tableRowCounts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||
String query =
|
||||
"SELECT QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.name) AS[TableName], SUM(sPTN.Rows) AS[RowCount] " +
|
||||
"SELECT QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.name) As [TableName], SUM(sPTN.Rows) As [RowCount] " +
|
||||
"FROM sys.objects AS sOBJ " +
|
||||
"INNER JOIN sys.partitions AS sPTN ON sOBJ.object_id = sPTN.object_id " +
|
||||
"WHERE sOBJ.type = 'U' AND sOBJ.is_ms_shipped = 0x0 AND index_id< 2 /*Index Id: 0:Heap,1:Clustered*/ " +
|
||||
@@ -84,7 +88,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
foreach (DbDfnTable tableDfn in tableDfns.OrderBy(item => item.Name))
|
||||
{
|
||||
// Filter by table name.
|
||||
if (!StringUtil.IsEmpty(model.DatabaseFilter.Table) && !tableDfn.Name.ContainsCI(model.DatabaseFilter.Table))
|
||||
if (!StringUtil.IsEmpty(model.DatabaseFilter.Search) && !tableDfn.Name.ContainsCI(model.DatabaseFilter.Search))
|
||||
continue;
|
||||
|
||||
DatabaseTableData tableData = new DatabaseTableData();
|
||||
@@ -99,6 +103,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
|
||||
responseData.Tables.Add(tableData);
|
||||
}
|
||||
}
|
||||
|
||||
// Complete response.
|
||||
responseData.Success = true;
|
||||
@@ -127,9 +132,9 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
//-------------------------------------------------------------------
|
||||
[HttpPost]
|
||||
[Route("System/Ajax/ValidateDatabaseSchema")]
|
||||
public IActionResult Ajax_ValidateDatabaseSchema(Model_Sport model)
|
||||
public IActionResult Ajax_ValidateDatabaseSchema(Model_System model)
|
||||
{
|
||||
String fn = GetType().Name + ".Ajax_GetDatabaseTables";
|
||||
String fn = GetType().Name + ".Ajax_ValidateDatabaseSchema";
|
||||
String messageTitle = Localiser["system.caption.database"];
|
||||
AjaxResponse_ValidateDatabaseSchema responseData = new AjaxResponse_ValidateDatabaseSchema(model);
|
||||
|
||||
@@ -137,6 +142,10 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
if (!ValidUserSession)
|
||||
return GetAjaxResult_InvalidSession(responseData);
|
||||
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
|
||||
{
|
||||
|
||||
// Core Database connection.
|
||||
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
|
||||
|
||||
@@ -174,6 +183,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
};
|
||||
responseData.Items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
// Complete response.
|
||||
responseData.Success = true;
|
||||
@@ -193,6 +203,194 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Database Table ajax request.
|
||||
//-------------------------------------------------------------------
|
||||
private class AjaxResponseData_Table
|
||||
{
|
||||
public AjaxResponseData_Table(DbDfnTable tableDfn)
|
||||
{
|
||||
Schema = tableDfn.Schema;
|
||||
Name = tableDfn.Name;
|
||||
if (!StringUtil.IsEmpty(tableDfn.Remarks))
|
||||
Remarks = tableDfn.Remarks;
|
||||
foreach (DbDfnColumn columnDfn in tableDfn.Columns)
|
||||
Columns.Add(new AjaxResponseData_Column(columnDfn));
|
||||
foreach (DbDfnIndex indexDfn in tableDfn.Indices)
|
||||
Indices.Add(new AjaxResponseData_Index(indexDfn));
|
||||
}
|
||||
public String Schema { get; }
|
||||
public String Name { get; }
|
||||
public String QualifiedName { get { return (!StringUtil.IsEmpty(Schema) ? Schema + "." : "") + Name; } }
|
||||
public String QuotedQualifiedName { get { return (!StringUtil.IsEmpty(Schema) ? "[" + Schema + "]." : "") + "[" + Name + "]"; } }
|
||||
public String Remarks { get; set; } = String.Empty;
|
||||
public List<AjaxResponse_Data.ItemLabelValue> Properties { get; } = new List<AjaxResponse_Data.ItemLabelValue>();
|
||||
public List<AjaxResponseData_Column> Columns { get; } = new List<AjaxResponseData_Column>();
|
||||
public List<AjaxResponseData_Index> Indices { get; } = new List<AjaxResponseData_Index>();
|
||||
}
|
||||
private class AjaxResponseData_Column
|
||||
{
|
||||
public int Pos { get; }
|
||||
public String Name { get; }
|
||||
public String Format { get; }
|
||||
public String DataTypeName { get; }
|
||||
public short? DataTypeNative { get; }
|
||||
public String DataTypeNameNative { get; }
|
||||
public bool? IsIdentity { get; }
|
||||
public long? Size { get; }
|
||||
public long? BufferLen { get; }
|
||||
public short? DecimalDigits { get; }
|
||||
public bool? Nullable { get; }
|
||||
public bool? IsNullable { get; }
|
||||
public String Remarks { get; }
|
||||
public AjaxResponseData_Column(DbDfnColumn columnDfn)
|
||||
{
|
||||
Pos = columnDfn.Pos;
|
||||
Name = columnDfn.Name;
|
||||
Format = columnDfn.GetFormat();
|
||||
if (!StringUtil.IsEmpty(columnDfn.DataTypeName))
|
||||
DataTypeName = columnDfn.DataTypeName;
|
||||
if (columnDfn.DataTypeNative > 0)
|
||||
DataTypeNative = columnDfn.DataTypeNative;
|
||||
if (!StringUtil.IsEmpty(columnDfn.DataTypeNameNative))
|
||||
DataTypeNameNative = columnDfn.DataTypeNameNative;
|
||||
if (columnDfn.IsIdentity)
|
||||
IsIdentity = columnDfn.IsIdentity;
|
||||
if (columnDfn.Size > 0)
|
||||
Size = columnDfn.Size;
|
||||
if (columnDfn.BufferLen > 0)
|
||||
BufferLen = columnDfn.BufferLen;
|
||||
if (columnDfn.DecimalDigits > 0)
|
||||
DecimalDigits = columnDfn.DecimalDigits;
|
||||
if (columnDfn.Nullable == DbColumnNullable.Nullable)
|
||||
Nullable = true;
|
||||
if (columnDfn.IsNullable)
|
||||
IsNullable = columnDfn.IsNullable;
|
||||
if (!StringUtil.IsEmpty(columnDfn.Remarks))
|
||||
Remarks = columnDfn.Remarks;
|
||||
}
|
||||
}
|
||||
private class AjaxResponseData_Index
|
||||
{
|
||||
public String Name { get; }
|
||||
public int? IndexType { get; }
|
||||
public bool? Unique { get; }
|
||||
public bool? Primary { get; }
|
||||
public bool? Clustered { get; }
|
||||
public bool? Nullable { get; }
|
||||
public int? Pages { get; }
|
||||
public int? UniqueValues { get; }
|
||||
public List<AjaxResponseData_IndexColumn> Columns { get; } = new List<AjaxResponseData_IndexColumn>();
|
||||
public AjaxResponseData_Index(DbDfnIndex indexDfn)
|
||||
{
|
||||
Name = indexDfn.Name;
|
||||
if (indexDfn.IndexType > 0)
|
||||
IndexType = indexDfn.IndexType;
|
||||
if (indexDfn.Unique)
|
||||
Unique = indexDfn.Unique;
|
||||
if (indexDfn.Primary)
|
||||
Primary = indexDfn.Primary;
|
||||
if (indexDfn.Clustered)
|
||||
Clustered = indexDfn.Clustered;
|
||||
if (indexDfn.Nullable)
|
||||
Nullable = indexDfn.Nullable;
|
||||
if (indexDfn.Pages > 0)
|
||||
Pages = indexDfn.Pages;
|
||||
if (indexDfn.UniqueValues > 0)
|
||||
UniqueValues = indexDfn.UniqueValues;
|
||||
foreach (DbDfnIndexColumn indexColumnDfn in indexDfn.Columns)
|
||||
Columns.Add(new AjaxResponseData_IndexColumn(indexColumnDfn));
|
||||
}
|
||||
}
|
||||
private class AjaxResponseData_IndexColumn
|
||||
{
|
||||
public short Seq { get; }
|
||||
public String Name { get; }
|
||||
public bool? Desc { get; }
|
||||
public AjaxResponseData_IndexColumn(DbDfnIndexColumn indexColumnDfn)
|
||||
{
|
||||
Seq = indexColumnDfn.Seq;
|
||||
Name = indexColumnDfn.Name;
|
||||
if (!indexColumnDfn.Ascend)
|
||||
Desc = true;
|
||||
}
|
||||
}
|
||||
private class AjaxResponse_DatabaseTable : AjaxResponse_Data
|
||||
{
|
||||
// Construction.
|
||||
public AjaxResponse_DatabaseTable(SaxModel_Admin model) : base(model) { }
|
||||
// Database table.
|
||||
public String PopupTitle { get; set; }
|
||||
public AjaxResponseData_Table Table { get; set; }
|
||||
}
|
||||
//-------------------------------------------------------------------
|
||||
[HttpPost]
|
||||
[Route("System/Ajax/GetDatabaseTable")]
|
||||
public IActionResult Ajax_GetDatabaseTable(Model_System model)
|
||||
{
|
||||
String fn = GetType().Name + ".Ajax_GetDatabaseTable";
|
||||
String messageTitle = Localiser["system.caption.database"];
|
||||
AjaxResponse_DatabaseTable responseData = new AjaxResponse_DatabaseTable(model);
|
||||
|
||||
// Validate session.
|
||||
if (!ValidUserSession)
|
||||
return GetAjaxResult_InvalidSession(responseData);
|
||||
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
|
||||
{
|
||||
|
||||
// Parameters.
|
||||
if (StringUtil.IsEmpty(model.DatabaseTable.Name))
|
||||
return Json(responseData.SetMessage(messageTitle, "Table name must be supplied."));
|
||||
|
||||
// Core Database connection.
|
||||
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
|
||||
|
||||
// Table definition.
|
||||
DbDfnTable tableDfn = db.GetTableDfn(model.DatabaseTable.Name, true);
|
||||
if (tableDfn == null)
|
||||
return Json(responseData.SetMessage(messageTitle, "Invalid Table name supplied."));
|
||||
|
||||
// Populate table response.
|
||||
responseData.Table = new AjaxResponseData_Table(tableDfn);
|
||||
responseData.PopupTitle = Localiser["label.table"] + ": " + tableDfn.Name;
|
||||
|
||||
// Database sizing.
|
||||
String query = "Exec sp_SpaceUsed [" + tableDfn.QualifiedName + "];";
|
||||
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, query))
|
||||
{
|
||||
if (dbResultSet != null && dbResultSet.NextRecord())
|
||||
{
|
||||
// Row count.
|
||||
long rows = StringUtil.ToLong(dbResultSet.GetRecordValues().GetValue("rows").ToString());
|
||||
if (rows > 0)
|
||||
responseData.Table.Properties.Add(new AjaxResponse_Data.ItemLabelValue() { Label = "Rows", Value = rows.ToString() });
|
||||
// Reserved space.
|
||||
String reserved = dbResultSet.GetRecordValues().GetValue("reserved").AsString();
|
||||
if (!StringUtil.IsEmpty(reserved))
|
||||
responseData.Table.Properties.Add(new AjaxResponse_Data.ItemLabelValue() { Label = "Reserved", Value = reserved });
|
||||
// Data space.
|
||||
String data = dbResultSet.GetRecordValues().GetValue("data").AsString();
|
||||
if (!StringUtil.IsEmpty(data))
|
||||
responseData.Table.Properties.Add(new AjaxResponse_Data.ItemLabelValue() { Label = "Data", Value = data });
|
||||
// Index space.
|
||||
String index = dbResultSet.GetRecordValues().GetValue("index_size").AsString();
|
||||
if (!StringUtil.IsEmpty(index))
|
||||
responseData.Table.Properties.Add(new AjaxResponse_Data.ItemLabelValue() { Label = "Indices", Value = index });
|
||||
// Unused space.
|
||||
String unused = dbResultSet.GetRecordValues().GetValue("unused").AsString();
|
||||
if (!StringUtil.IsEmpty(unused))
|
||||
responseData.Table.Properties.Add(new AjaxResponse_Data.ItemLabelValue() { Label = "Unused", Value = unused });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Complete response.
|
||||
responseData.Success = true;
|
||||
return Json(responseData);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
|
||||
//-------------------------------------------------------------------
|
||||
[HttpPost]
|
||||
[Route("System/Ajax/GetLogFileList")]
|
||||
public IActionResult Ajax_GetLogFileList(Model_Sport model)
|
||||
public IActionResult Ajax_GetLogFileList(Model_System model)
|
||||
{
|
||||
String fn = GetType().Name + ".Ajax_GetLogFileList";
|
||||
String messageTitle = Localiser["system.caption.logs"];
|
||||
|
||||
@@ -37,6 +37,7 @@ namespace Saxonite.Net.Core.Web.Admin.Models
|
||||
//-------------------------------------------------------------------
|
||||
// Sport properties.
|
||||
public String SportId { get; set; }
|
||||
public String SportIdParent { get; set; }
|
||||
public String SportName { get; set; }
|
||||
public String SportSpecialityLabelCode { get; set; }
|
||||
public Sax.SportSpecialityLabel SportSpecialityLabel { get { return (Sax.SportSpecialityLabel)SportSpecialityLabelCodes.GetTypeForCode(SportSpecialityLabelCode); } }
|
||||
@@ -49,6 +50,22 @@ namespace Saxonite.Net.Core.Web.Admin.Models
|
||||
// Sport.
|
||||
public bool ValidateSportData(SaxController_Base.AjaxResponse_Data responseData)
|
||||
{
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
|
||||
{
|
||||
|
||||
// Parent sport.
|
||||
SysId sportIdParent = SportIdParent.ToSysId();
|
||||
if (SportIdParent != null && SysId.IsValid(sportIdParent))
|
||||
{
|
||||
SaxSport sport = ReferenceMgr.GetSportById(SportIdParent.ToSysId());
|
||||
disposableItems.Add(sport);
|
||||
if (sport == null)
|
||||
responseData.SetControlError(nameof(SportIdParent), Localiser["msg.validation.invalid.value"]);
|
||||
else if (SysId.IsValid(sport.SportIdParent))
|
||||
responseData.SetControlError(nameof(SportIdParent), Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Sport name.
|
||||
if (SportName != null)
|
||||
{
|
||||
@@ -90,6 +107,7 @@ namespace Saxonite.Net.Core.Web.Admin.Models
|
||||
responseData.SetControlError(nameof(SportStatus), Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
}
|
||||
return !responseData.HasControlErrors();
|
||||
}
|
||||
|
||||
|
||||
@@ -24,9 +24,14 @@ namespace Saxonite.Net.Core.Web.Admin.Models
|
||||
// Database page properties.
|
||||
public class DatabaseFilterData
|
||||
{
|
||||
public String Table { get; set; }
|
||||
public String Search { get; set; }
|
||||
}
|
||||
public DatabaseFilterData DatabaseFilter { get; } = new DatabaseFilterData();
|
||||
public class DatabaseTableData
|
||||
{
|
||||
public String Name { get; set; }
|
||||
}
|
||||
public DatabaseTableData DatabaseTable { get; } = new DatabaseTableData();
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Logs page properties.
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="home.msg.no.items.awaiting.activation" xml:space="preserve">
|
||||
<value>No items are awaiting activation</value>
|
||||
</data>
|
||||
<data name="info.char.available" xml:space="preserve">
|
||||
<value>[1 char available]</value>
|
||||
</data>
|
||||
<data name="info.chars.available" xml:space="preserve">
|
||||
<value>[{0} chars available]</value>
|
||||
</data>
|
||||
<data name="label.accounts" xml:space="preserve">
|
||||
<value>Accounts</value>
|
||||
</data>
|
||||
@@ -174,12 +180,6 @@
|
||||
<data name="label.category" xml:space="preserve">
|
||||
<value>Category</value>
|
||||
</data>
|
||||
<data name="label.characters.count" xml:space="preserve">
|
||||
<value>{0} characters</value>
|
||||
</data>
|
||||
<data name="label.characters.one" xml:space="preserve">
|
||||
<value>1 character</value>
|
||||
</data>
|
||||
<data name="label.clear" xml:space="preserve">
|
||||
<value>Clear</value>
|
||||
</data>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
}
|
||||
|
||||
@* Scripts *@
|
||||
<script>
|
||||
<script>
|
||||
var sax = sax || { page: {}, mdl: {}, url: {}, links: {}, form: {}, data: {}, ajax: {}, msg: {}, lbl: {}, dlg: { title: {}, btn: {} }, $frm: {}, $dlg: {}, $pnl: {}, session: {}, kli: {} };
|
||||
sax.url.base = '@Model.RedirectLocation.Base';
|
||||
sax.url.home = '@Model.RedirectLocation.Home';
|
||||
@@ -70,8 +70,8 @@
|
||||
sax.dlg.btn.ok = '@Localiser["label.ok"]';
|
||||
sax.dlg.btn.close = '@Localiser["label.close"]';
|
||||
sax.dlg.btn.cancel = '@Localiser["label.cancel"]';
|
||||
sax.lbl.availableCharacter = '@Localiser.GetJavascriptText("label.characters.one")';
|
||||
sax.lbl.availableCharacters = '@Localiser.GetJavascriptText("label.characters.count", "{0}")';
|
||||
sax.lbl.charAvailable = '@Localiser.GetJavascriptText("info.char.available")';
|
||||
sax.lbl.charsAvailable = '@Localiser.GetJavascriptText("info.chars.available", "{0}")';
|
||||
sax.lbl.noneSelected = '@Localiser.GetJavascriptText("label.selected.none")';
|
||||
sax.lbl.numberSelected = '@Localiser.GetJavascriptText("label.selected.count", "{0}")';
|
||||
sax.msg.signOutConfirm = '@Localiser.GetJavascriptText("security.msg.signout.confirm")';
|
||||
@@ -84,7 +84,7 @@
|
||||
sax.kli.active = @keepLoggedIn;
|
||||
sax.kli.interval = @(Sax.Config.Admin.Session.Cookie.KeepLoggedInTimeoutMillis);
|
||||
sax.debugMode = @debug;
|
||||
</script>
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
ViewData["Title"] = "System - Database";
|
||||
}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="container-fluid DatabaseTables">
|
||||
|
||||
<div class="sax-panel-filter">
|
||||
<div class="sax-header row">
|
||||
@@ -14,11 +14,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sax-content">
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDatabaseFilter", @class = "sax-form", @onSubmit = "return false;" }))
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDbTableFilter", @class = "sax-form", @onSubmit = "return false;" }))
|
||||
{
|
||||
<div class="row">
|
||||
<div class="col-sm-5 sax-label text-left text-sm-right">@Localiser["label.search"]</div>
|
||||
<div class="col-sm-7">@Html.TextBoxFor(model => model.DatabaseFilter.Table, new { @id = "ifFilterDatabaseTable", @class = "FilterDatabaseTable", @maxlength = "32" })</div>
|
||||
<div class="col-sm-7">@Html.TextBoxFor(model => model.DatabaseFilter.Search, new { @id = "ifFilterDatabaseTable", @class = "FilterDatabaseTable", @maxlength = "32" })</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
@@ -51,3 +51,75 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDbTableName", @onSubmit = "return false;" }))
|
||||
{
|
||||
@Html.HiddenFor(model => model.DatabaseTable.Name, new { @class = "DatabaseTableName" })
|
||||
}
|
||||
|
||||
<style>
|
||||
#dlgDbTable tr.sax-heading td
|
||||
{
|
||||
color:#808080;
|
||||
border-bottom: 1px solid #808080;
|
||||
}
|
||||
</style>
|
||||
<div id="dlgDbTable" class="sax-panel-item-template">
|
||||
<div class="">
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDbTable", @onSubmit = "return false;" }))
|
||||
{
|
||||
@Html.HiddenFor(model => model.DatabaseTable.Name, new { @class = "DatabaseTableName" })
|
||||
}
|
||||
<table>
|
||||
<tr>
|
||||
<td class="right pt2 pr8">Properties:</td>
|
||||
<td>
|
||||
<table class="TableProperties">
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right pt2 pr8">Columns:</td>
|
||||
<td>
|
||||
<table class="TableColumns">
|
||||
<tr class="sax-heading">
|
||||
<td class="right pl8 pr8">Pos</td>
|
||||
<td class="pl8 pr8">Name</td>
|
||||
<td class="center">Format</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right pt2 pr8">Indices:</td>
|
||||
<td>
|
||||
<table class="TableIndices">
|
||||
<tr class="sax-heading">
|
||||
<td class="pl8 pr8">Name</td>
|
||||
<td class="center pl8 pr8">Unique</td>
|
||||
<td class="pl8 pr8">Columns</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="sax-panel-item-template">
|
||||
<table>
|
||||
<tr class="TableProperty">
|
||||
<td class="sax-label Label right pl8 pr8"></td>
|
||||
<td class="Value pl8 pr8"></td>
|
||||
</tr>
|
||||
<tr class="TableColumn">
|
||||
<td class="Pos right pl8 pr8"></td>
|
||||
<td class="Name pl8 pr8"></td>
|
||||
<td class="Format center pl8 pr8"></td>
|
||||
</tr>
|
||||
<tr class="TableIndex">
|
||||
<td class="Name pl8 pr16"></td>
|
||||
<td class="Unique center"></td>
|
||||
<td class="Columns pl8 pr8"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -103,24 +103,34 @@
|
||||
if (ctrl == null || ctrl.value == null) return;
|
||||
if (ctrl.value.length > len) ctrl.value = ctrl.value.substring(0, len);
|
||||
}
|
||||
sax.setAvailableCharsLabel = function ($if, max, $lbl)
|
||||
sax.setAvailableCharsInfo = function ($if, max, $info)
|
||||
{
|
||||
var avail = Math.max(0, max - $if.val().length);
|
||||
$lbl.text(avail == 1 ? sax.lbl.availableCharacter : sax.lbl.availableCharacters.replace(/\{0\}/g, avail));
|
||||
}
|
||||
sax.setCharsAvailableLabel = function ($if, max)
|
||||
let info = '';
|
||||
if (max > 0)
|
||||
{
|
||||
var avail = Math.max(0, max - $if.val().length);
|
||||
$('.sax-select-chars-available', $if.closest('.sax-form-control')).text(avail == 1 ? sax.lbl.availableCharacter : sax.lbl.availableCharacters.replace(/\{0\}/g, avail));
|
||||
let avail = Math.max(0, max - $if.val().length);
|
||||
info = (avail == 1 ? sax.lbl.charAvailable : sax.lbl.charsAvailable.replace(/\{0\}/g, avail));
|
||||
}
|
||||
sax.setItemsSelectedLabel = function ($sel)
|
||||
($info || $('.sax-info', $if.closest('.sax-form-control'))).text(info);
|
||||
}
|
||||
sax.setItemsSelectedInfo = function ($sel, $info)
|
||||
{
|
||||
var sel = $(':selected', $sel).length;
|
||||
$('.sax-select-items-selected', $sel.closest('.sax-form-control')).text(sel == 0 ? sax.lbl.noneSelected : sax.lbl.numberSelected.replace(/\{0\}/g, sel));
|
||||
($info || $('.sax-info', $sel.closest('.sax-form-control'))).text(sel == 0 ? sax.lbl.noneSelected : sax.lbl.numberSelected.replace(/\{0\}/g, sel));
|
||||
}
|
||||
sax.initCalendars = function (sel)
|
||||
sax.initCalendars = function (sel, opt)
|
||||
{
|
||||
return $(sel).datepicker();
|
||||
return $(sel).datepicker(opt || {});
|
||||
}
|
||||
sax.allowClearCalendar = function (sel)
|
||||
{
|
||||
$(sel).datepicker().on('keyup', function (e)
|
||||
{
|
||||
if (e.keyCode == 8 || e.keyCode == 46)
|
||||
{
|
||||
$(this).datepicker('setDate', null);
|
||||
}
|
||||
});
|
||||
}
|
||||
sax.refreshPaging = function (response, context, refreshFn)
|
||||
{
|
||||
|
||||
@@ -5,94 +5,159 @@
|
||||
(function (win, doc, undef)
|
||||
{
|
||||
"use strict";
|
||||
let sd = sax.sysDb = { $pnl: {}, $frm: {}, $dlg: {} };
|
||||
let $pnl = sd.$pnl; let $frm = sd.$frm; let $dlg = sd.$dlg;
|
||||
sax.itemIdPrefix = 'Itm_';
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.refreshResults = function (delay)
|
||||
sd.refreshResults = function (delay)
|
||||
{
|
||||
var $results = $('.sax-panel-results');
|
||||
if (!sax.awaitingRefreshResponse)
|
||||
{
|
||||
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
|
||||
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
|
||||
var $items = $('.sax-panel-item-list', $pnl.results).fadeOut(200).empty();
|
||||
var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
|
||||
}
|
||||
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'System/Ajax/GetDatabaseTables', formId: 'frmDatabaseFilter', callbackFn: sax.doRefreshResults };
|
||||
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'System/Ajax/GetDatabaseTables', formId: 'frmDbTableFilter', callbackFn: sd.doRefreshResults };
|
||||
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
|
||||
sax.awaitingRefreshResponse = true;
|
||||
}
|
||||
sax.doRefreshResults = function (response)
|
||||
sd.doRefreshResults = function (response)
|
||||
{
|
||||
//sax.debug('doRefreshResults', response);
|
||||
delete sax.awaitingRefreshResponse;
|
||||
sax.refreshControlValues(response.controlValues);
|
||||
var $results = $('.sax-panel-results');
|
||||
var $msgs = $('.sax-panel-messages', $results).hide().empty();
|
||||
var $items = $('.sax-panel-item-list', $results).hide().empty();
|
||||
var $tmpl = $('.sax-panel-item-template .sax-panel-item.DatabaseTable', $results);
|
||||
var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty();
|
||||
var $items = $('.sax-panel-item-list', $pnl.results).hide().empty();
|
||||
if (!response.success) return;
|
||||
// Items.
|
||||
var items = response.tables;
|
||||
if (!items.length)
|
||||
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
|
||||
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
|
||||
{
|
||||
let item = items[itemIdx];
|
||||
let $item = $tmpl.clone();
|
||||
sax.populateItem($item, item);
|
||||
$items.append($item);
|
||||
}
|
||||
$items.append(sd.populateItem(sd.getTableTemplate(), items[itemIdx]));
|
||||
$items.fadeIn(50);
|
||||
}
|
||||
sax.populateItem = function ($item, item)
|
||||
sd.populateItem = function ($item, item)
|
||||
{
|
||||
if (!item) return;
|
||||
if (!item) return $item;
|
||||
$item.prop('id', sax.itemIdPrefix + item.id);
|
||||
$('.TableName', $item).text(item.qualifiedName);
|
||||
$('.RowCount', $item).text(item.rowCount);
|
||||
$('.ColumnCount', $item).text(item.columnCount);
|
||||
$('.IndexCount', $item).text(item.indexCount);
|
||||
$('.sax-caption .sax-action, .sax-actions .sax-action.sax-item-view', $item).off('click').on('click', function () { sax.viewItem(item.id) })
|
||||
$item.off('dblclick').on('dblclick', function () { sax.updateItem(item.id) })
|
||||
$('.sax-caption .sax-action, .sax-actions .sax-action.sax-item-view', $item).off('click').on('click', function () { sd.viewItem(item) })
|
||||
$item.off('dblclick').on('dblclick', function () { sax.viewItem(item) })
|
||||
$('.sax-panel-results .sax-panel-messages').hide().empty();
|
||||
return $item;
|
||||
}
|
||||
sd.getTableTemplate = function ()
|
||||
{
|
||||
return $('.sax-panel-item-template .sax-panel-item.DatabaseTable', $pnl.results).clone();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.viewItem = function (id)
|
||||
sd.viewItem = function (item)
|
||||
{
|
||||
$('.DatabaseTableName', sax.$frm.dbTableName).val(id);
|
||||
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'System/Ajax/GetDatabaseTable', formId: 'frmDatabaseTableName', callbackFn: sax.onViewItem };
|
||||
//sax.debug('viewItem', item.tableName, $frm.tableName, $('.DatabaseTableName', $frm.tableName))
|
||||
$('.DatabaseTableName', $frm.tableName).val(item.tableName);
|
||||
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'System/Ajax/GetDatabaseTable', formId: 'frmDbTableName', callbackFn: sd.onViewItem };
|
||||
sax.doAjaxRequest(sax.ajax.updateItem, 50);
|
||||
}
|
||||
sax.onViewItem = function (response)
|
||||
sd.onViewItem = function (response)
|
||||
{
|
||||
//sax.debug('onViewItem', response);
|
||||
let $frm = sax.$frm.dbTable;
|
||||
$('input[type="text"],textarea,select', $frm).val('');
|
||||
sd.clearItem();
|
||||
if (!response.success) return;
|
||||
let item = response.table;
|
||||
$('.DatabaseTableName', $frm).val(item.name);
|
||||
let $frmT = $frm.table;
|
||||
$('.DatabaseTableName', $frmT).val(item.name);
|
||||
// Properties.
|
||||
let prts = item.properties;
|
||||
let $prts = $('.TableProperties', $dlg.table);
|
||||
$('tr:not(.sax-heading)', $prts).remove();
|
||||
for (let prtIdx = 0; prtIdx < prts.length; prtIdx++)
|
||||
{
|
||||
let prt = prts[prtIdx];
|
||||
let $prt = sd.getTablePropertyTemplate();
|
||||
$('.Label', $prt).text(prt.label);
|
||||
$('.Value', $prt).text(prt.value);
|
||||
$prts.append($prt);
|
||||
}
|
||||
// Columns.
|
||||
let cols = item.columns;
|
||||
let $cols = $('.TableColumns', $dlg.table);
|
||||
$('tr:not(.sax-heading)', $cols).remove();
|
||||
for (let colIdx = 0; colIdx < cols.length; colIdx++)
|
||||
{
|
||||
let col = cols[colIdx];
|
||||
let $col = sd.getTableColumnTemplate();
|
||||
$('.Pos', $col).text(col.pos);
|
||||
$('.Name', $col).text(col.name);
|
||||
$('.Format', $col).text(col.format);
|
||||
$cols.append($col);
|
||||
}
|
||||
// Indices.
|
||||
let idxs = item.indices;
|
||||
let $idxs = $('.TableIndices', $dlg.table);
|
||||
$('tr:not(.sax-heading)', $idxs).remove();
|
||||
for (let idxIdx = 0; idxIdx < idxs.length; idxIdx++)
|
||||
{
|
||||
let idx = idxs[idxIdx];
|
||||
let $idx = sd.getTableIndexTemplate();
|
||||
$('.Name', $idx).text(idx.name);
|
||||
for (const col of idx.columns)
|
||||
$('.Columns', $idx).append($('<div>').text(col.name));
|
||||
$('.Unique', $idx).text(idx.unique?'Yes':'');
|
||||
$idxs.append($idx);
|
||||
}
|
||||
// Display table details.
|
||||
$dlg.table.dialog('option', 'title', response.popupTitle || "Table: " + item.name);
|
||||
sax.openDialog($dlg.table, 600, 600);
|
||||
}
|
||||
sd.clearItem = function ()
|
||||
{
|
||||
let $frmT = $frm.table;
|
||||
$('input[type="text"],textarea,select', $frmT).val('');
|
||||
sax.clearControlErrors();
|
||||
sax.$dlg.dbTable.dialog('option', 'title', sax.dlg.title.viewDatabaseTable);
|
||||
sax.openDialog(sax.$dlg.dbTable, 600, 600);
|
||||
}
|
||||
sd.getTablePropertyTemplate = function ()
|
||||
{
|
||||
return sd.getTableRowTemplate('TableProperty');
|
||||
}
|
||||
sd.getTableColumnTemplate = function ()
|
||||
{
|
||||
return sd.getTableRowTemplate('TableColumn');
|
||||
}
|
||||
sd.getTableIndexTemplate = function ()
|
||||
{
|
||||
return sd.getTableRowTemplate('TableIndex');
|
||||
}
|
||||
sd.getTableRowTemplate = function (name)
|
||||
{
|
||||
return $('.sax-panel-item-template .'+name, $dlg.table).clone();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
$(function ()
|
||||
{
|
||||
$('.sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
|
||||
$pnl.tables = $('.DatabaseTables');
|
||||
$pnl.filter = $('.sax-panel-filter', $pnl.tables);
|
||||
$pnl.results = $('.sax-panel-results', $pnl.tables);
|
||||
|
||||
$pnl.filter.on('click', '.sax-action.sax-results-refresh', function () { sd.refreshResults(); });
|
||||
$('.sax-input').on('input', function () { sax.clearControlError(this); });
|
||||
|
||||
sax.$frm.filter = $('#frmDatabaseFilter');
|
||||
$('.FilterDatabaseTable', sax.$frm.filter).on('input', function () { sax.refreshResults(250); });
|
||||
sax.$frm.dbTableName = $('#frmDatabaseTableName');
|
||||
sax.$frm.dbTable = $('#frmDatabaseTable');
|
||||
$frm.filter = $('#frmDbTableFilter');
|
||||
$('.FilterDatabaseTable', $frm.filter).on('input', function () { sd.refreshResults(250); });
|
||||
$frm.tableName = $('#frmDbTableName');
|
||||
$frm.table = $('#frmDbTable');
|
||||
|
||||
var opt = sax.dlgOpts();
|
||||
opt.buttons[sax.dlg.btn.ok] = function () { sax.storeItem(); };
|
||||
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
|
||||
sax.$dlg.dbTable = $('#dlgDatabaseTable').dialog(opt);
|
||||
//opt.buttons[sax.dlg.btn.ok] = function () { sax.storeItem(); };
|
||||
opt.buttons[sax.dlg.btn.close] = function () { $(this).dialog('close'); };
|
||||
$dlg.table = $('#dlgDbTable').dialog(opt);
|
||||
|
||||
setTimeout(sax.refreshResults, 250);
|
||||
setTimeout(sd.refreshResults, 250);
|
||||
});
|
||||
|
||||
}(window, window.document));
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
//--------------------------------------------------------------
|
||||
sax.userEmails = function (item)
|
||||
{
|
||||
sax.debug('userEmails', item);
|
||||
//sax.debug('userEmails', item);
|
||||
let frm = $frm.emailsl
|
||||
$('.UserId', frm).val(item.id);
|
||||
$('.UserEmailAddress', frm).val(item.emailAddress);
|
||||
|
||||
@@ -213,6 +213,12 @@
|
||||
<data name="home.organisation.request.para2" xml:space="preserve">
|
||||
<value>Sign-up now with a few details and we'll let you know when you can login and get going.</value>
|
||||
</data>
|
||||
<data name="info.char.available" xml:space="preserve">
|
||||
<value>[1 char available]</value>
|
||||
</data>
|
||||
<data name="info.chars.available" xml:space="preserve">
|
||||
<value>[{0} chars available]</value>
|
||||
</data>
|
||||
<data name="label.about" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
@@ -249,12 +255,6 @@
|
||||
<data name="label.category" xml:space="preserve">
|
||||
<value>Category</value>
|
||||
</data>
|
||||
<data name="label.characters.count" xml:space="preserve">
|
||||
<value>{0} characters</value>
|
||||
</data>
|
||||
<data name="label.characters.one" xml:space="preserve">
|
||||
<value>1 character</value>
|
||||
</data>
|
||||
<data name="label.clear" xml:space="preserve">
|
||||
<value>Clear</value>
|
||||
</data>
|
||||
|
||||
@@ -109,7 +109,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
{
|
||||
Organisation = model.GetOrganisationName(organisationEvent.OrganisationId);
|
||||
EventAt = DateUtil.Format(organisationEvent.EventAt, "d-MMM-yy");
|
||||
if (organisationEvent.EventAt.Hour>0 || organisationEvent.EventAt.Minute > 0)
|
||||
if (organisationEvent.EventAt.Hour > 0 || organisationEvent.EventAt.Minute > 0)
|
||||
EventAt += DateUtil.Format(organisationEvent.EventAt, " HH:ss");
|
||||
Summary = organisationEvent.Summary;
|
||||
Details = organisationEvent.Details;
|
||||
@@ -118,7 +118,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
PublishedOnFmt = model.Localiser.FormatDate(organisationEvent.PublishedAt);
|
||||
}
|
||||
public String Organisation { get; set; }
|
||||
public String EventAt{ get; set; }
|
||||
public String EventAt { get; set; }
|
||||
public String Summary { get; set; }
|
||||
public String Details { get; set; }
|
||||
public String Sport { get; set; }
|
||||
@@ -172,18 +172,23 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
// User context.
|
||||
SysId userAccountId = UserAccountId;
|
||||
SaxActivityConsole.IndexContext indexContext = new SaxActivityConsole.IndexContext(userAccountId);
|
||||
if (SysId.IsValid(userAccountId))
|
||||
indexContext.UserAccountIdsOwner.Add(userAccountId);
|
||||
SysId organisationId = model.DecryptId(model.Filter.OrganisationId);
|
||||
if (SysId.IsValid(organisationId))
|
||||
indexContext.OrganisationIdsOwner.Add(organisationId);
|
||||
|
||||
// Period.
|
||||
indexContext.EffectiveTo = DateTime.Today;
|
||||
|
||||
// Regions.
|
||||
// Sport and region combinations.
|
||||
foreach (SysId sportId in sessionData.Profile.Sports.Select(item => item.SportId))
|
||||
{
|
||||
if (SysId.IsValid(sessionData.User.RegionIdProvince))
|
||||
indexContext.RegionIds.Add(sessionData.User.RegionIdProvince);
|
||||
indexContext.SportRegionIdsIncluded.Add(new SaxActivityIndex.SportRegionIds(sportId, sessionData.User.RegionIdProvince));
|
||||
else if (SysId.IsValid(sessionData.User.RegionIdCountry))
|
||||
indexContext.RegionIds.Add(sessionData.User.RegionIdCountry);
|
||||
|
||||
// Sports.
|
||||
indexContext.SportIds.AddRange(sessionData.Profile.Sports.Select(item => item.SportId));
|
||||
indexContext.SportRegionIdsIncluded.Add(new SaxActivityIndex.SportRegionIds(sportId, sessionData.User.RegionIdCountry));
|
||||
}
|
||||
|
||||
// Populate activities.
|
||||
List<ItemId> activityItemIds = new List<ItemId>();
|
||||
|
||||
@@ -50,18 +50,14 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Article data.
|
||||
private class ArticleData_List
|
||||
private class ArticleData_List : AjaxResponse_Data.ItemData_Base
|
||||
{
|
||||
public String Id { get; set; }
|
||||
public String OrganisationId { get; set; }
|
||||
public String Headline { get; set; }
|
||||
public String Summary { get; set; }
|
||||
public String RegionCaptionPrimary { get; set; }
|
||||
public String SportCaptionPrimary { get; set; }
|
||||
public String PublishedOnFmt { get; set; }
|
||||
public String CreatedOnFmt { get; set; }
|
||||
public String StatusCode { get; set; }
|
||||
public String StatusDesc { get; set; }
|
||||
}
|
||||
private class ArticleData_Full : ArticleData_List
|
||||
{
|
||||
@@ -75,7 +71,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
}
|
||||
private void PopulateArticleResponseData(Model_Article model, SaxArticle article, ArticleData_List data)
|
||||
{
|
||||
data.Id = SysId.ToString(article.Id);
|
||||
data.Id = model.EncryptId(article.Id);
|
||||
data.OrganisationId = SysId.ToString(article.OrganisationId);
|
||||
data.Headline = article.Headline;
|
||||
data.Summary = article.Summary;
|
||||
@@ -245,8 +241,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
NamedValue.Map values = resultSet.GetRecordValues();
|
||||
ArticleData_List articleData = new ArticleData_List()
|
||||
{
|
||||
Id = values.GetString(colId.DataName),
|
||||
OrganisationId = values.GetString(colOrganisationId.DataName),
|
||||
Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))),
|
||||
OrganisationId = model.EncryptId(new SysId(values.GetLong(colOrganisationId.DataName))),
|
||||
Headline = values.GetString(colHeadline.DataName),
|
||||
Summary = values.GetString(colSummary.DataName),
|
||||
RegionCaptionPrimary = model.GetRegionCaption(values.GetString(colRegionIdPrimary.DataName).ToSysId()),
|
||||
@@ -586,6 +582,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
List<SaxItemImage> itemImages = ItemDataMgr.GetItemImageList(prmItemImage);
|
||||
|
||||
// If Article doesn't yet exist, create it now so that images can be assigned.
|
||||
bool articleCreated = false;
|
||||
if (!SysId.IsValid(article.Id))
|
||||
{
|
||||
if (!ActivityMgr.InsertArticle(article, DbUpdateInfo))
|
||||
@@ -593,6 +590,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
SaLogger.Warn(fn + " Failed to insert article: " + ActivityMgr.ErrorStateMessage);
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"]));
|
||||
}
|
||||
articleCreated = true;
|
||||
}
|
||||
|
||||
// Content.
|
||||
@@ -651,6 +649,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
SaLogger.Warn(fn + " Failed to update article [Id:" + SysId.ToString(article.Id) + "]: " + ActivityMgr.ErrorStateMessage);
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"]));
|
||||
}
|
||||
SaLogger.Info(fn + " Article " + (articleCreated ? "created" : "updated") + ". Id: " + article.Id.ToString() + ". User: " + SessionData.User.EmailAddress, true);
|
||||
|
||||
// Store Article Activity Index data.
|
||||
ActivityConsole.StoreActivityIndex(article, DbUpdateInfo);
|
||||
|
||||
@@ -404,6 +404,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
organisationEvent.Status = model.EventStatus;
|
||||
|
||||
// Store item.
|
||||
bool eventCreated = false;
|
||||
if (!SysId.IsValid(organisationEvent.Id))
|
||||
{
|
||||
if (!ActivityMgr.InsertOrganisationEvent(organisationEvent, DbUpdateInfo))
|
||||
@@ -411,6 +412,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
SaLogger.Warn(fn + " Failed to insert organisationEvent: " + ActivityMgr.ErrorStateMessage);
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"]));
|
||||
}
|
||||
eventCreated = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -420,6 +422,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"]));
|
||||
}
|
||||
}
|
||||
SaLogger.Info(fn + " Event " + (eventCreated ? "created" : "updated") + ". Id: " + organisationEvent.Id.ToString() + ". User: " + SessionData.User.EmailAddress + ". Organisation: " + organisation.Name, true);
|
||||
|
||||
// Store Event Activity Index data.
|
||||
ActivityConsole.StoreActivityIndex(organisationEvent, DbUpdateInfo);
|
||||
|
||||
@@ -385,6 +385,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
opportunity.Status = model.OpportunityStatus;
|
||||
|
||||
// Store item.
|
||||
bool opportunityCreated = false;
|
||||
if (!SysId.IsValid(opportunity.Id))
|
||||
{
|
||||
if (!ActivityMgr.InsertOrganisationOpportunity(opportunity, DbUpdateInfo))
|
||||
@@ -392,6 +393,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
SaLogger.Warn(fn + " Failed to insert opportunity: " + ActivityMgr.ErrorStateMessage);
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"]));
|
||||
}
|
||||
opportunityCreated = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -401,6 +403,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"]));
|
||||
}
|
||||
}
|
||||
SaLogger.Info(fn + " Opportunity " + (opportunityCreated ? "created" : "updated") + ". Id: " + opportunity.Id.ToString() + ". User: " + SessionData.User.EmailAddress + ". Organisation: " + organisation.Name, true);
|
||||
|
||||
// Store Opportunity Activity Index data.
|
||||
ActivityConsole.StoreActivityIndex(opportunity, DbUpdateInfo);
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace Saxonite.Net.Core.Web.Online.Models
|
||||
public class FilterData
|
||||
{
|
||||
public String Activity { get; set; }
|
||||
public String OrganisationId { get; set; }
|
||||
}
|
||||
public FilterData Filter { get; } = new FilterData();
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<div class="col-sm-8 row">
|
||||
@Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId", @class = "FilterOrganisationId" })
|
||||
<div class="col"><input type="text" id="ifFilterOrganisation" class="FilterOrganisation sax-input" readonly="readonly" value="@(Model.Filter.OrganisationCaption)" /></div>
|
||||
<div class="fixed"><button class="sax-button" onclick="sax.selectFilterOrganisation()">@Localiser["label.select"]</button></div>
|
||||
<div class="fixed"><button class="sax-button">@Localiser["label.select"]</button></div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
@Html.HiddenFor(model => model.ArticleExists, new { @id = "ifArticleExists", @class = "ArticleExists" })
|
||||
@Html.HiddenFor(model => model.ArticleOrganisationId, new { @id = "ifArticleOrganisationId", @class = "ArticleOrganisationId" })
|
||||
|
||||
<div class="sax-article ArticleHeader">
|
||||
<div class="sax-article ArticleHeader-xxx">
|
||||
|
||||
<div class="sax-article-panel sax-article-header">
|
||||
|
||||
@@ -49,8 +49,11 @@
|
||||
|
||||
@* Article headline *@
|
||||
<div class="sax-form-control ArticleHeadline">
|
||||
<div class="sax-label">
|
||||
<label for="ifArticleHeadline"><span>@Localiser["label.headline"]</span><span class="required"> *</span></label>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="sax-label"><label for="ifArticleHeadline"><span>@Localiser["label.headline"]</span><span class="required"> *</span></label></div>
|
||||
</div>
|
||||
<div class="fixed right"><div class="sax-info"></div></div>
|
||||
</div>
|
||||
<div class="sax-control">
|
||||
@Html.TextBoxFor(model => model.ArticleHeadline, new { @id = "ifArticleHeadline", @class = "ArticleHeadline sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Article_Headline) })
|
||||
@@ -60,8 +63,11 @@
|
||||
|
||||
@* Article summary *@
|
||||
<div class="sax-form-control ArticleSummary">
|
||||
<div class="sax-label">
|
||||
<label for="ifArticleSummary"><span>@Localiser["label.summary"]</span><span class="required"> *</span></label>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="sax-label"><label for="ifArticleSummary"><span>@Localiser["label.summary"]</span><span class="required"> *</span></label></div>
|
||||
</div>
|
||||
<div class="fixed right"><div class="sax-info"></div></div>
|
||||
</div>
|
||||
<div class="sax-control">
|
||||
@Html.TextAreaFor(model => model.ArticleSummary, new { @id = "ifArticleSummary", @class = "ArticleSummary sax-textarea", @rows = 6, @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Article_Summary) })
|
||||
@@ -81,7 +87,7 @@
|
||||
<div class="sax-control row">
|
||||
@Html.HiddenFor(model => model.ArticleSportId, new { @id = "ifArticleSportId", @class = "ArticleSportId" })
|
||||
<div class="col">@Html.TextBoxFor(model => model.ArticleSportCaption, new { @id = "ifArticleSportCaption", @class = "ArticleSportCaption sax-input", @readonly = "readonly", @onDblClick = "sax.selectSport()" }) </div>
|
||||
<div class="fixed"><button class="SelectSport sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px" onclick="sax.selectSport()">@Localiser["label.select"]</button></div>
|
||||
<div class="fixed"><button class="SelectSport sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
|
||||
</div>
|
||||
<div class="sax-message"></div>
|
||||
</div>
|
||||
@@ -100,7 +106,7 @@
|
||||
<div class="sax-control row">
|
||||
@Html.HiddenFor(model => model.ArticleRegionId, new { @id = "ifArticleRegionId", @class = "ArticleRegionId" })
|
||||
<div class="col">@Html.TextBoxFor(model => model.ArticleRegionCaption, new { @id = "ifArticleRegionCaption", @class = "ArticleRegionCaption sax-input", @readonly = "readonly", @onDblClick = "sax.selectRegion()" }) </div>
|
||||
<div class="fixed"><button class="SelectRegion sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px" onclick="sax.selectRegion()">@Localiser["label.select"]</button></div>
|
||||
<div class="fixed"><button class="SelectRegion sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
|
||||
</div>
|
||||
<div class="sax-message"></div>
|
||||
</div>
|
||||
|
||||
@@ -75,8 +75,8 @@
|
||||
sax.lbl.create='@Localiser.GetJavascriptText("label.create")';
|
||||
sax.lbl.add='@Localiser.GetJavascriptText("label.add")';
|
||||
sax.lbl.calendar='@Localiser.GetJavascriptText("label.calendar")';
|
||||
sax.lbl.availableCharacter = '@Localiser.GetJavascriptText("label.characters.one")';
|
||||
sax.lbl.availableCharacters = '@Localiser.GetJavascriptText("label.characters.count", "{0}")';
|
||||
sax.lbl.charAvailable = '@Localiser.GetJavascriptText("info.char.available")';
|
||||
sax.lbl.charsAvailable = '@Localiser.GetJavascriptText("info.chars.available", "{0}")';
|
||||
sax.lbl.noneSelected = '@Localiser.GetJavascriptText("label.selected.none")';
|
||||
sax.lbl.numberSelected = '@Localiser.GetJavascriptText("label.selected.count", "{0}")';
|
||||
sax.msg.itemRemoveConfirm = '@Localiser.GetJavascriptText("msg.confirm.item.remove")';
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
{
|
||||
}
|
||||
|
||||
/* Labels, values, notes */
|
||||
/* Info panel - Labels, values, info , notes */
|
||||
|
||||
.sax-panel-info .sax-label, .sax-panel-info .sax-value
|
||||
{
|
||||
@@ -153,6 +153,12 @@
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.sax-form .sax-form-control .sax-info
|
||||
{
|
||||
font-size: 0.8rem;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.sax-form .sax-form-control .sax-note
|
||||
{
|
||||
font-size: 0.9rem;
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
{
|
||||
var $select = $('.sax-control select.' + name, $section);
|
||||
$select.val(value).scrollTop(0);
|
||||
sax.setItemsSelectedLabel($select);
|
||||
sax.setItemsSelectedInfo($select);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
|
||||
@@ -7,26 +7,27 @@
|
||||
"use strict";
|
||||
sax.segIdPrefix = 'Seg_';
|
||||
sax.classFileDrag = 'sax-file-drag';
|
||||
let $pnl = sax.$pnl, $frm = sax.$frm;
|
||||
let am = sax.articleMgt = { data: {}, $pnl: {}, $frm: {}, $dlg: {} };
|
||||
let $pnl = am.$pnl, $frm = am.$frm, $dlg = am.$dlg;
|
||||
let ac = sax.articleContent = sax.articleContent || {};
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.refreshResults = function (delay)
|
||||
am.refreshResults = function (delay)
|
||||
{
|
||||
if (!sax.awaitingRefreshResponse)
|
||||
if (!am.awaitingRefreshResponse)
|
||||
{
|
||||
$('.sax-burger', $pnl.filter).hide();
|
||||
$('.sax-panel-item-list', $pnl.results).fadeOut(200).empty();
|
||||
$('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
|
||||
}
|
||||
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Article/Ajax/GetList', formId: 'frmArticleFilter', callbackFn: sax.doRefreshResults };
|
||||
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Article/Ajax/GetList', formId: 'frmArticleFilter', callbackFn: am.doRefreshResults };
|
||||
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
|
||||
sax.awaitingRefreshResponse = true;
|
||||
am.awaitingRefreshResponse = true;
|
||||
}
|
||||
sax.doRefreshResults = function (response)
|
||||
am.doRefreshResults = function (response)
|
||||
{
|
||||
//sax.debug('doRefreshResults', response);
|
||||
delete sax.awaitingRefreshResponse;
|
||||
delete am.awaitingRefreshResponse;
|
||||
sax.refreshControlValues(response.controlValues);
|
||||
var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty();
|
||||
var $items = $('.sax-panel-item-list', $pnl.results).hide().empty();
|
||||
@@ -34,25 +35,24 @@
|
||||
sax.data.articleOrganisations = response.organisations;
|
||||
sax.data.defaultSport = response.defaultSport;
|
||||
sax.data.defaultRegion = response.defaultRegion;
|
||||
sax.refreshPaging(response, '#frmArticleFilter', sax.refreshResults);
|
||||
sax.refreshPaging(response, '#frmArticleFilter', am.refreshResults);
|
||||
// Menu.
|
||||
let $mnu = $('.sax-burger ul.sax-dropdown-menu', $pnl.filter).empty();
|
||||
$mnu.append(sax.getFilterMenuOption(sax.lbl.refresh, function () { sax.refreshResults(); }, 'sax-refresh'));
|
||||
$mnu.append(sax.getFilterMenuOption(sax.lbl.add, function () { sax.createItem(); }, 'sax-add'));
|
||||
$mnu.append(am.getFilterMenuOption(sax.lbl.refresh, function () { am.refreshResults(); }, 'sax-refresh'));
|
||||
$mnu.append(am.getFilterMenuOption(sax.lbl.add, function () { am.createItem(); }, 'sax-add'));
|
||||
$('.sax-burger', $pnl.filter).toggle(!!$('.sax-dropdown-item', $mnu).length);
|
||||
// Items.
|
||||
var items = response.articles;
|
||||
if (!items.length)
|
||||
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
|
||||
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
|
||||
$items.append(sax.populateItem(sax.getItemTemplate(), items[itemIdx]));
|
||||
$items.append(am.populateItem(am.getItemTemplate(), items[itemIdx]));
|
||||
$items.fadeIn(50);
|
||||
}
|
||||
sax.populateItem = function ($item, item)
|
||||
am.populateItem = function ($item, item)
|
||||
{
|
||||
if (!item) return;
|
||||
$('.sax-panel-messages', $pnl.results).hide().empty();
|
||||
$item.prop('id', sax.getItemId(item.id));
|
||||
$('.ArticleHeadline', $item).text(item.headline);
|
||||
$('.ArticleSummary', $item).text(item.summary);
|
||||
$('.ArticleRegionCaption', $item).text(item.regionCaptionPrimary);
|
||||
@@ -65,8 +65,8 @@
|
||||
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
|
||||
if (!item.deleted)
|
||||
{
|
||||
let fnUpd = function () { sax.updateItem(item) };
|
||||
$mnu.append(sax.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
|
||||
let fnUpd = function () { am.updateItem(item, $item) };
|
||||
$mnu.append(am.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
|
||||
$('.sax-caption .sax-action', $item).off('click').on('click', fnUpd);
|
||||
}
|
||||
else $('.sax-caption .sax-action', $item).removeClass('sax-action');
|
||||
@@ -75,62 +75,59 @@
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.getItemId = function (id)
|
||||
{
|
||||
return 'Itm_' + id;
|
||||
}
|
||||
sax.getFilterDropdownTemplate = function ()
|
||||
am.getFilterDropdownTemplate = function ()
|
||||
{
|
||||
return $('.sax-panel-item-template .sax-dropdown-menu.Articles li.sax-dropdown-item', $pnl.filter).clone();
|
||||
}
|
||||
sax.getItemTemplate = function ()
|
||||
am.getItemTemplate = function ()
|
||||
{
|
||||
return $('.sax-panel-item-template .sax-panel-item.Article', $pnl.results).clone();
|
||||
}
|
||||
sax.getItemDropdownTemplate = function ()
|
||||
am.getItemDropdownTemplate = function ()
|
||||
{
|
||||
return $('.sax-panel-item-template .sax-dropdown-menu.Article li.sax-dropdown-item', $pnl.results).clone();
|
||||
}
|
||||
sax.getSegmentTemplate = function ()
|
||||
am.getSegmentTemplate = function ()
|
||||
{
|
||||
return $('.sax-panel-item-template .sax-panel-item.ArticleSegment', ac.$content).clone();
|
||||
}
|
||||
sax.getFilterMenuOption = function (lbl, fn, cls)
|
||||
am.getFilterMenuOption = function (lbl, fn, cls)
|
||||
{
|
||||
return sax.getMenuOption(sax.getFilterDropdownTemplate(), lbl, fn, cls);
|
||||
return am.getMenuOption(am.getFilterDropdownTemplate(), lbl, fn, cls);
|
||||
}
|
||||
sax.getItemMenuOption = function (lbl, fn, cls)
|
||||
am.getItemMenuOption = function (lbl, fn, cls)
|
||||
{
|
||||
return sax.getMenuOption(sax.getItemDropdownTemplate(), lbl, fn, cls);
|
||||
return am.getMenuOption(am.getItemDropdownTemplate(), lbl, fn, cls);
|
||||
}
|
||||
sax.getMenuOption = function ($opt, lbl, fn, cls)
|
||||
am.getMenuOption = function ($opt, lbl, fn, cls)
|
||||
{
|
||||
return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.selectFilterOrganisation = function ()
|
||||
am.selectFilterOrganisation = function ()
|
||||
{
|
||||
if (!sax.data.articleOrganisations || !sax.data.articleOrganisations.length) return;
|
||||
sax.showSelectOrganisation();
|
||||
am.showSelectOrganisation();
|
||||
}
|
||||
sax.showSelectOrganisation = function ()
|
||||
am.showSelectOrganisation = function ()
|
||||
{
|
||||
//sax.debug('sax.selectFilterOrganisation', sax.data.articleOrganisations);
|
||||
sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.articleOrganisations, fnCallback: sax.onOrganisationSelected });
|
||||
//sax.debug('am.selectFilterOrganisation', sax.data.articleOrganisations);
|
||||
sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.articleOrganisations, fnCallback: am.onOrganisationSelected });
|
||||
}
|
||||
sax.onOrganisationSelected = function (id, name)
|
||||
am.onOrganisationSelected = function (id, name)
|
||||
{
|
||||
//sax.debug('sax.onOrganisationSelected', id, name);
|
||||
//sax.debug('am.onOrganisationSelected', id, name);
|
||||
$('#frmArticleFilter #ifFilterOrganisationId, #frmArticle #ifArticleOrganisationId').val(id);
|
||||
$('#frmArticleFilter #ifFilterOrganisation').val(name);
|
||||
sax.refreshResults(50);
|
||||
am.refreshResults(50);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.createItem = function ()
|
||||
am.createItem = function ()
|
||||
{
|
||||
sax.clearItem();
|
||||
am.clearItem();
|
||||
delete am.data.item; delete am.data.$item;
|
||||
let $frmA = $frm.article;
|
||||
if (sax.data.defaultSport)
|
||||
{
|
||||
@@ -142,10 +139,10 @@
|
||||
$('#ifArticleRegionId', $frmA).val(sax.data.defaultRegion.id);
|
||||
$('#ifArticleRegionCaption', $frmA).val(sax.data.defaultRegion.name);
|
||||
}
|
||||
sax.populateArticleContent({});
|
||||
sax.openArticleDialog(sax.dlg.title.createArticle);
|
||||
am.populateArticleContent({});
|
||||
am.openArticleDialog(sax.dlg.title.createArticle);
|
||||
}
|
||||
sax.clearItem = function ()
|
||||
am.clearItem = function ()
|
||||
{
|
||||
let $frmF = $frm.filter;
|
||||
let $frmA = $frm.article;
|
||||
@@ -160,26 +157,30 @@
|
||||
$('.sax-input.sax-calendar.ArticlePublishOn', $frmA).datepicker('setDate', 'today');
|
||||
sax.clearControlErrors();
|
||||
}
|
||||
sax.openArticleDialog = function (title)
|
||||
am.openArticleDialog = function (title)
|
||||
{
|
||||
sax.clearControlErrors();
|
||||
sax.switchArticleHeader();
|
||||
sax.$dlg.article.dialog('option', 'title', title);
|
||||
sax.openDialog(sax.$dlg.article, 600, 800);
|
||||
am.switchArticleHeader();
|
||||
$dlg.article.dialog('option', 'title', title);
|
||||
sax.openDialog($dlg.article, 600, 800);
|
||||
$('.ArticleHeadline.sax-input', $frm.article).trigger("input");
|
||||
$('.ArticleSummary.sax-textarea', $frm.article).trigger("input");
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.updateItem = function (item)
|
||||
am.updateItem = function (item, $item)
|
||||
{
|
||||
am.clearItem();
|
||||
am.data.item = item; am.data.$item = $item;
|
||||
$('.ArticleId', $frm.articleId).val(item.id);
|
||||
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Article/Ajax/GetItem', formId: 'frmArticleId', callbackFn: sax.onUpdateItem };
|
||||
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Article/Ajax/GetItem', formId: 'frmArticleId', callbackFn: am.onUpdateItem };
|
||||
sax.doAjaxRequest(sax.ajax.updateItem, 50);
|
||||
}
|
||||
sax.onUpdateItem = function (response)
|
||||
am.onUpdateItem = function (response)
|
||||
{
|
||||
//sax.debug('onUpdateItem', response);
|
||||
sax.clearItem();
|
||||
if (!response.success) return;
|
||||
am.clearItem();
|
||||
let $frmA = $frm.article;
|
||||
let item = response.article;
|
||||
$('#ifArticleId', $frmA).val(item.id);
|
||||
@@ -197,48 +198,48 @@
|
||||
$('div.ArticlePublish', $frmA).toggle(!item.published || item.publishedInFuture);
|
||||
$('div.ArticlePublished', $frmA).toggle(!!item.published && !item.publishedInFuture);
|
||||
$('#cbArticleStatusCode', $frmA).val(item.statusCode);
|
||||
sax.populateArticleContent(item.content);
|
||||
sax.openArticleDialog(sax.dlg.title.updateArticle);
|
||||
am.populateArticleContent(item.content);
|
||||
am.openArticleDialog(sax.dlg.title.updateArticle);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.switchArticleHeader = function ()
|
||||
am.switchArticleHeader = function ()
|
||||
{
|
||||
$('.sax-article').removeClass('ArticleContent').addClass('ArticleHeader');
|
||||
}
|
||||
sax.switchArticleContent = function ()
|
||||
am.switchArticleContent = function ()
|
||||
{
|
||||
$('.sax-article').removeClass('ArticleHeader').addClass('ArticleContent');
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.selectSport = function ()
|
||||
am.selectArticleSport = function ()
|
||||
{
|
||||
sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#ifArticleSportId').val(), fnCallback: sax.onSelectSport })
|
||||
sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#ifArticleSportId').val(), fnCallback: am.onSelectArticleSport })
|
||||
}
|
||||
sax.onSelectSport = function (sport)
|
||||
am.onSelectArticleSport = function (sport)
|
||||
{
|
||||
sax.clearControlError($('#ifArticleSportId').val(sport.id));
|
||||
$('#ifArticleSportCaption').val(sport ? sport.name : '');
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.selectRegion = function ()
|
||||
am.selectArticleRegion = function ()
|
||||
{
|
||||
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifArticleRegionId').val(), fnCallback: sax.onSelectRegion })
|
||||
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifArticleRegionId').val(), fnCallback: am.onSelectArticleRegion })
|
||||
}
|
||||
sax.onSelectRegion = function (region)
|
||||
am.onSelectArticleRegion = function (region)
|
||||
{
|
||||
sax.clearControlError($('#ifArticleRegionId').val(region.id));
|
||||
$('#ifArticleRegionCaption').val(region ? region.name : '');
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.segmentId = function (idx)
|
||||
am.segmentId = function (idx)
|
||||
{
|
||||
return sax.segIdPrefix + idx;
|
||||
}
|
||||
sax.populateArticleContent = function (content)
|
||||
am.populateArticleContent = function (content)
|
||||
{
|
||||
//sax.debug('populateArticleContent', content);
|
||||
ac.$segList.empty();
|
||||
@@ -247,17 +248,17 @@
|
||||
let segments = content.segments || [];
|
||||
if (!segments.length) segments.push({ body: {} });
|
||||
for (let segIdx = 0; segIdx < segments.length; segIdx++)
|
||||
sax.addContentSegment(segments[segIdx]);
|
||||
am.addContentSegment(segments[segIdx]);
|
||||
}
|
||||
sax.addContentSegment = function (seg, idxAfter, idxBefore)
|
||||
am.addContentSegment = function (seg, idxAfter, idxBefore)
|
||||
{
|
||||
let idx = ++ac.segIdx;
|
||||
let segId = sax.segmentId(idx);
|
||||
let segId = am.segmentId(idx);
|
||||
if ($('.sax-panel-item.ArticleSegment', ac.$segList).length >= 6)
|
||||
{
|
||||
return;
|
||||
}
|
||||
let $seg = sax.getSegmentTemplate().prop('id', segId)
|
||||
let $seg = am.getSegmentTemplate().prop('id', segId)
|
||||
if (seg.body)
|
||||
{
|
||||
$('.sax-article-segment-body', $seg).html(seg.body.html);
|
||||
@@ -271,14 +272,14 @@
|
||||
$('.sax-article-segment-image', $seg).show().find('img').prop('src', seg.image.imageLink);
|
||||
$('.sax-action.sax-add-image', $seg).hide();
|
||||
}
|
||||
$('.sax-action.sax-add', $seg).on('click', function () { sax.addContentSegment({ body: {} }, idx); });
|
||||
$('.sax-action.sax-add-image', $seg).on('click', function () { sax.selectArticleImage(idx); });
|
||||
$('.sax-action.sax-up', $seg).on('click', function () { sax.moveUpContentSegment(idx); });
|
||||
$('.sax-action.sax-down', $seg).on('click', function () { sax.moveDownContentSegment(idx); });
|
||||
$('.sax-action.sax-delete', $seg).on('click', function () { sax.deleteContentSegment(idx); });
|
||||
$('.sax-action.sax-add', $seg).on('click', function () { am.addContentSegment({ body: {} }, idx); });
|
||||
$('.sax-action.sax-add-image', $seg).on('click', function () { am.selectArticleImage(idx); });
|
||||
$('.sax-action.sax-up', $seg).on('click', function () { am.moveUpContentSegment(idx); });
|
||||
$('.sax-action.sax-down', $seg).on('click', function () { am.moveDownContentSegment(idx); });
|
||||
$('.sax-action.sax-delete', $seg).on('click', function () { am.deleteContentSegment(idx); });
|
||||
|
||||
let $segAfter = $('#' + sax.segmentId(idxAfter));
|
||||
let $segBefore = $('#' + sax.segmentId(idxBefore));
|
||||
let $segAfter = $('#' + am.segmentId(idxAfter));
|
||||
let $segBefore = $('#' + am.segmentId(idxBefore));
|
||||
if ($segAfter.length) $seg.insertAfter($segAfter);
|
||||
else if ($segBefore.length) $seg.insertBefore($segBefore);
|
||||
else ac.$segList.append($seg);
|
||||
@@ -336,13 +337,13 @@
|
||||
.on("dragenter", function (evt) { $seg.dragCount++; sax.haltEvent(evt); })
|
||||
.on("dragover", function (evt) { sax.haltEvent(evt); if (!$seg.hasClass(sax.classFileDrag)) $seg.addClass(sax.classFileDrag); })
|
||||
.on("dragleave", function (evt) { $seg.dragCount--; sax.haltEvent(evt); if (!$seg.dragCount) $seg.removeClass(sax.classFileDrag); })
|
||||
.on("drop", function (evt) { sax.haltEvent(evt); $seg.removeClass(sax.classFileDrag); sax.onDropArticleImage(evt, idx, $seg); });
|
||||
.on("drop", function (evt) { sax.haltEvent(evt); $seg.removeClass(sax.classFileDrag); am.onDropArticleImage(evt, idx, $seg); });
|
||||
}
|
||||
}
|
||||
sax.moveUpContentSegment = function (idx)
|
||||
am.moveUpContentSegment = function (idx)
|
||||
{
|
||||
//sax.debug('moveUpContentSegment(' + idx + ')');
|
||||
let segId = sax.segmentId(idx);
|
||||
let segId = am.segmentId(idx);
|
||||
let $segPrev;
|
||||
$('.sax-panel-item.ArticleSegment', ac.$segList).detach().each(
|
||||
function (i, el)
|
||||
@@ -357,10 +358,10 @@
|
||||
$segPrev = $seg;
|
||||
});
|
||||
}
|
||||
sax.moveDownContentSegment = function (idx)
|
||||
am.moveDownContentSegment = function (idx)
|
||||
{
|
||||
//sax.debug('moveDownContentSegment(' + idx + ')');
|
||||
let segId = sax.segmentId(idx);
|
||||
let segId = am.segmentId(idx);
|
||||
let $segMove;
|
||||
let $segs = $('.sax-panel-item.ArticleSegment', ac.$segList).detach();
|
||||
$segs.each(
|
||||
@@ -377,37 +378,37 @@
|
||||
$segMove = null;
|
||||
});
|
||||
}
|
||||
sax.deleteContentSegment = function (idx)
|
||||
am.deleteContentSegment = function (idx)
|
||||
{
|
||||
//sax.debug('deleteContentSegment(' + idx + ')');
|
||||
if ($('.sax-panel-item.ArticleSegment', ac.$segList).length < 2) return;
|
||||
sax.confirmItemRemove(function () { $('#' + sax.segmentId(idx)).remove(); });
|
||||
sax.confirmItemRemove(function () { $('#' + am.segmentId(idx)).remove(); });
|
||||
}
|
||||
sax.selectArticleImage = function (idx)
|
||||
am.selectArticleImage = function (idx)
|
||||
{
|
||||
let $dlg = sax.$dlg.selectArticleImage.dialog('option', { title: sax.dlg.title.imageUpload });
|
||||
$('input.SegmentIdx', $dlg).val(idx);
|
||||
$('#ifArticleImage', $dlg).val('');
|
||||
sax.openDialog($dlg, 560, 240);
|
||||
let $dlgAI = $dlg.selectArticleImage.dialog('option', { title: sax.dlg.title.imageUpload });
|
||||
$('input.SegmentIdx', $dlgAI).val(idx);
|
||||
$('#ifArticleImage', $dlgAI).val('');
|
||||
sax.openDialog($dlgAI, 560, 240);
|
||||
}
|
||||
sax.uploadArticleImage = function ()
|
||||
am.uploadArticleImage = function ()
|
||||
{
|
||||
let $dlg = sax.$dlg.selectArticleImage;
|
||||
let $fileCtrl = $('#ifArticleImage', $dlg);
|
||||
let $dlgAI = $dlg.selectArticleImage;
|
||||
let $fileCtrl = $('#ifArticleImage', $dlgAI);
|
||||
if (!$fileCtrl.length || !$fileCtrl[0].files.length)
|
||||
return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileSelect);
|
||||
let file = $fileCtrl[0].files[0];
|
||||
sax.onDropArticleImageFile(file, $('input.SegmentIdx', $dlg).val(), $dlg);
|
||||
am.onDropArticleImageFile(file, $('input.SegmentIdx', $dlgAI).val(), $dlgAI);
|
||||
}
|
||||
sax.onDropArticleImage = function (evt, idx, $seg)
|
||||
am.onDropArticleImage = function (evt, idx, $seg)
|
||||
{
|
||||
//sax.debug('onDropArticleImage');
|
||||
let files = evt.originalEvent.dataTransfer.files;
|
||||
if (files.length < 1) return;
|
||||
if (files.length > 1) return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadImageSingle);
|
||||
sax.onDropArticleImageFile(files[0], idx, $('#frmArticle'));
|
||||
am.onDropArticleImageFile(files[0], idx, $('#frmArticle'));
|
||||
}
|
||||
sax.onDropArticleImageFile = function (file, idx, context)
|
||||
am.onDropArticleImageFile = function (file, idx, context)
|
||||
{
|
||||
//sax.debug('onDropArticleImageFile', file, context);
|
||||
ac.segIdxAddImage = idx;
|
||||
@@ -418,14 +419,14 @@
|
||||
sax.clearControlError();
|
||||
sax.data.contactImageUploadContext = context;
|
||||
|
||||
sax.ajax.uploadArticleImage = sax.ajax.uploadArticleImage || { url: sax.url.base + 'Article/Ajax/UploadImage', callbackFn: sax.handleArticleImageUploadResponse, noWaitIcon: true };
|
||||
sax.ajax.uploadArticleImage = sax.ajax.uploadArticleImage || { url: sax.url.base + 'Article/Ajax/UploadImage', callbackFn: am.handleArticleImageUploadResponse, noWaitIcon: true };
|
||||
sax.ajax.uploadArticleImage.formData = new FormData();
|
||||
sax.ajax.uploadArticleImage.formData.append("__RequestVerificationToken", $('#frmNavigate input[name="__RequestVerificationToken"]').val());
|
||||
sax.ajax.uploadArticleImage.formData.append("ArticleId", $('#ifArticleId', $frm.article).val());
|
||||
sax.ajax.uploadArticleImage.formData.append("ArticleImage", file);
|
||||
sax.doAjaxRequest(sax.ajax.uploadArticleImage, 50);
|
||||
}
|
||||
sax.handleArticleImageUploadResponse = function (response)
|
||||
am.handleArticleImageUploadResponse = function (response)
|
||||
{
|
||||
let context = sax.data.contactImageUploadContext;
|
||||
//sax.debug('handleArticleImageUploadResponse', response, context);
|
||||
@@ -435,33 +436,44 @@
|
||||
$('img.ArticleImageUploadProgress', context).hide();
|
||||
if (response.success && response.segment)
|
||||
{
|
||||
sax.addContentSegment(response.segment, 0, ac.segIdxAddImage);
|
||||
am.addContentSegment(response.segment, 0, ac.segIdxAddImage);
|
||||
delete ac.segIdxAddImage;
|
||||
sax.$dlg.selectArticleImage.dialog('close');
|
||||
$dlg.selectArticleImage.dialog('close');
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
sax.storeItem = function ()
|
||||
am.storeItem = function ()
|
||||
{
|
||||
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Article/Ajax/StoreItem', formId: 'frmArticle', callbackFn: sax.onStoreItem };
|
||||
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Article/Ajax/StoreItem', formId: 'frmArticle', callbackFn: am.onStoreItem };
|
||||
sax.doAjaxRequest(sax.ajax.storeItem, 50);
|
||||
}
|
||||
sax.onStoreItem = function (response)
|
||||
am.onStoreItem = function (response)
|
||||
{
|
||||
//sax.debug('onStoreItem', response);
|
||||
sax.refreshControlValues(response.controlValues);
|
||||
if (!response.success) return;
|
||||
sax.$dlg.article.dialog('close');
|
||||
if (!response.success)
|
||||
{
|
||||
if ($('.sax-article .sax-article-header .sax-form-control.sax-error').length) am.switchArticleHeader();
|
||||
return;
|
||||
}
|
||||
$dlg.article.dialog('close');
|
||||
|
||||
var item = response.article;
|
||||
var $item = $('#' + sax.getItemId(item.id));
|
||||
if (!$item.length)
|
||||
var $item = am.data.$item;
|
||||
if (!$item)
|
||||
{
|
||||
$item = sax.getItemTemplate();
|
||||
$item = am.getItemTemplate();
|
||||
$('.sax-panel-item-list', $pnl.results).prepend($item).show();
|
||||
}
|
||||
sax.populateItem($item, item)
|
||||
am.populateItem($item, item)
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
am.refreshControlInfo = function (ctrl)
|
||||
{
|
||||
let $ctrl = $(ctrl);
|
||||
sax.setAvailableCharsInfo($ctrl, $ctrl.prop('maxlength'));
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
@@ -471,33 +483,35 @@
|
||||
$pnl.results = $('.sax-panel-results');
|
||||
|
||||
$frm.filter = $('#frmArticleFilter');
|
||||
$('.sax-action.sax-item-create', $pnl.filter).on('click', function () { sax.createItem(); });
|
||||
$('.sax-action.sax-results-refresh', $pnl.filter).on('click', function () { sax.refreshResults(); });
|
||||
$('.ArticleFilter', $frm.filter).on('input', function () { sax.refreshResults(250); }).on('keypress', function (event)
|
||||
$frm.filter.on('click', '.OrganisationFilter .sax-button', am.selectFilterOrganisation);
|
||||
$('.ArticleFilter', $frm.filter).on('input', function () { am.refreshResults(250); }).on('keypress', function (event)
|
||||
{
|
||||
if (event.keyCode == 13) setTimeout(sax.refreshResults, 50);
|
||||
if (event.keyCode == 13) setTimeout(am.refreshResults, 50);
|
||||
});
|
||||
$frm.articleId = $('#frmArticleId');
|
||||
$frm.article = $('#frmArticle');
|
||||
$('.sax-input,.sax-textarea', $frm.article).on('input', function () { sax.clearControlError(this); });
|
||||
|
||||
var opt = sax.dlgOpts();
|
||||
opt.buttons[sax.dlg.btn.cancel] = { text: sax.dlg.btn.cancel, class: "floatr", click: function () { $(this).dialog('close'); } };
|
||||
opt.buttons[sax.dlg.btn.ok] = { text: sax.dlg.btn.ok, class: "floatr", click: function () { sax.storeItem(); } };
|
||||
opt.buttons['Header'] = { text: 'Header', class: "floatl", click: function () { sax.switchArticleHeader(); } };
|
||||
opt.buttons['Content'] = { text: 'Content', class: "floatl", click: function () { sax.switchArticleContent(); } };
|
||||
sax.$dlg.article = $('#dlgArticle').dialog(opt);
|
||||
opt.buttons[sax.dlg.btn.ok] = { text: sax.dlg.btn.ok, class: "floatr", click: function () { am.storeItem(); } };
|
||||
opt.buttons['Header'] = { text: 'Header', class: "floatl", click: function () { am.switchArticleHeader(); } };
|
||||
opt.buttons['Content'] = { text: 'Content', class: "floatl", click: function () { am.switchArticleContent(); } };
|
||||
$dlg.article = $('#dlgArticle').dialog(opt);
|
||||
|
||||
ac.$content = $('.sax-article-panel.sax-article-content');
|
||||
ac.$segList = $('.sax-article-segment-list', ac.$content);
|
||||
$frm.article = $('#frmArticle', $dlg.article);
|
||||
$frm.article.on('input', '.ArticleHeadline.sax-input,.ArticleSummary.sax-textarea', function () { am.refreshControlInfo(this); });
|
||||
$frm.article.on('click', '.sax-button.SelectSport', am.selectArticleSport).on('click', '.sax-button.SelectRegion', am.selectArticleRegion);
|
||||
$('.sax-input,.sax-textarea', $frm.article).on('input', function () { sax.clearControlError(this); });
|
||||
sax.initCalendars('.sax-input.sax-calendar', { minDate: '-' + (sax.articlePublish.maxDaysBefore || '7'), maxDate: '+' + (sax.articlePublish.maxDaysAhead || '7') });
|
||||
$('#ifArticlePublishOn').datepicker('option', 'onSelect', function (d, i) { if (d !== i.lastVal) { $('#chkArticlePublish').prop("checked", true); } });
|
||||
ac.$content = $('.sax-article-panel.sax-article-content', $dlg.article);
|
||||
ac.$segList = $('.sax-article-segment-list', ac.$content);
|
||||
|
||||
var opt = sax.dlgOpts();
|
||||
opt.buttons[sax.dlg.btn.ok] = function () { sax.uploadArticleImage(); };
|
||||
opt.buttons[sax.dlg.btn.ok] = function () { am.uploadArticleImage(); };
|
||||
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
|
||||
sax.$dlg.selectArticleImage = $('#dlgSelectArticleImage').dialog(opt);
|
||||
$dlg.selectArticleImage = $('#dlgSelectArticleImage').dialog(opt);
|
||||
|
||||
setTimeout(sax.refreshResults, 250);
|
||||
setTimeout(am.refreshResults, 250);
|
||||
});
|
||||
|
||||
}(window, window.document));
|
||||
|
||||
@@ -108,20 +108,20 @@
|
||||
if (ctrl == null || ctrl.value == null) return;
|
||||
if (ctrl.value.length > len) ctrl.value = ctrl.value.substring(0, len);
|
||||
}
|
||||
sax.setAvailableCharsLabel = function ($if, max, $lbl)
|
||||
sax.setAvailableCharsInfo = function ($if, max, $info)
|
||||
{
|
||||
var avail = Math.max(0, max - $if.val().length);
|
||||
$lbl.text(avail == 1 ? sax.lbl.availableCharacter : sax.lbl.availableCharacters.replace(/\{0\}/g, avail));
|
||||
}
|
||||
sax.setCharsAvailableLabel = function ($if, max)
|
||||
let info = '';
|
||||
if (max > 0)
|
||||
{
|
||||
var avail = Math.max(0, max - $if.val().length);
|
||||
$('.sax-select-chars-available', $if.closest('.sax-form-control')).text(avail == 1 ? sax.lbl.availableCharacter : sax.lbl.availableCharacters.replace(/\{0\}/g, avail));
|
||||
let avail = Math.max(0, max - $if.val().length);
|
||||
info = (avail == 1 ? sax.lbl.charAvailable : sax.lbl.charsAvailable.replace(/\{0\}/g, avail));
|
||||
}
|
||||
sax.setItemsSelectedLabel = function ($sel)
|
||||
($info || $('.sax-info', $if.closest('.sax-form-control'))).text(info);
|
||||
}
|
||||
sax.setItemsSelectedInfo = function ($sel, $info)
|
||||
{
|
||||
var sel = $(':selected', $sel).length;
|
||||
$('.sax-select-items-selected', $sel.closest('.sax-form-control')).text(sel == 0 ? sax.lbl.noneSelected : sax.lbl.numberSelected.replace(/\{0\}/g, sel));
|
||||
($info || $('.sax-info', $sel.closest('.sax-form-control'))).text(sel == 0 ? sax.lbl.noneSelected : sax.lbl.numberSelected.replace(/\{0\}/g, sel));
|
||||
}
|
||||
sax.initCalendars = function (sel, opt)
|
||||
{
|
||||
|
||||
@@ -182,6 +182,7 @@
|
||||
delete oe.$item;
|
||||
$('#ifEventId,#ifEventExists,#ifEventSportIdPrimary,#ifEventRegionIdCountry,input[type="text"],textarea,select', $frm.evt).val('');
|
||||
$('#cbEventType', $frm.evt).find('option[value=""]').remove();
|
||||
$('.EventDate', $frm.evt).datepicker('setDate', 'today');
|
||||
sax.clearControlErrors();
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
|
||||
//-------------------------------------------------------------------
|
||||
public static class Version
|
||||
{
|
||||
private static String version { get; } = "1.2.3.2";
|
||||
private static String version { get; } = "1.2.4";
|
||||
// Retrieve version.
|
||||
public static String GetFullVersion () { return version; }
|
||||
public static String GetAppVersion ()
|
||||
@@ -40,6 +40,9 @@ namespace Saxonite.Net.Standard.Base.App
|
||||
//-------------------------------------------------------------------
|
||||
// Version history.
|
||||
//-------------------------------------------------------------------
|
||||
// 1.2.4 3-Mar-2022 View own articles.
|
||||
// - Online Home page lists own articlesregardless of sport/region.
|
||||
// - Admin System Database Table info.
|
||||
// 1.2.3 16-Feb-2022 User online activity.
|
||||
// - Record user last online.
|
||||
// - Online Organisation category select - remove Partner/Other.
|
||||
|
||||
@@ -6,7 +6,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Base.App
|
||||
{
|
||||
@@ -47,6 +47,9 @@ namespace Saxonite.Base.App
|
||||
ActivityIndex_SportId,
|
||||
ActivityIndex_RegionId,
|
||||
ActivityIndex_EffectiveOn,
|
||||
ActivityIndex_UserAccountIdOwner,
|
||||
ActivityIndex_OrganisationIdOwner,
|
||||
ActivityIndex_ExpiresOn,
|
||||
ActivityIndex_Notes,
|
||||
ActivityIndex_Flags,
|
||||
ActivityIndex_Status,
|
||||
@@ -216,6 +219,7 @@ namespace Saxonite.Base.App
|
||||
Region_UpdateBy,
|
||||
Region_UpdateHost,
|
||||
Sport_Id,
|
||||
Sport_SportIdParent,
|
||||
Sport_Name,
|
||||
Sport_SpecialityLabel,
|
||||
Sport_Notes,
|
||||
@@ -360,7 +364,7 @@ namespace Saxonite.Base.App
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
private static readonly int tableCount = 18;
|
||||
private static readonly int columnCount = 313;
|
||||
private static readonly int columnCount = 317;
|
||||
private static ulong maxTextLen = 0;
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
@@ -555,6 +559,9 @@ namespace Saxonite.Base.App
|
||||
new ColumnDfn(1,"SportId",4,4,false,10),
|
||||
new ColumnDfn(1,"RegionId",4,4,false,10),
|
||||
new ColumnDfn(1,"EffectiveOn",9,93,false,16),
|
||||
new ColumnDfn(1,"UserAccountIdOwner",4,4,false,10),
|
||||
new ColumnDfn(1,"OrganisationIdOwner",4,4,false,10),
|
||||
new ColumnDfn(1,"ExpiresOn",9,93,false,16),
|
||||
new ColumnDfn(1,"Notes",0,-9,false,2000),
|
||||
new ColumnDfn(1,"Flags",3,5,false,5),
|
||||
new ColumnDfn(1,"Status",0,12,false,3),
|
||||
@@ -724,6 +731,7 @@ namespace Saxonite.Base.App
|
||||
new ColumnDfn(9,"UpdateBy",4,4,false,10),
|
||||
new ColumnDfn(9,"UpdateHost",0,12,false,100),
|
||||
new ColumnDfn(10,"Id",4,4,true,10),
|
||||
new ColumnDfn(10,"SportIdParent",4,4,false,10),
|
||||
new ColumnDfn(10,"Name",0,-9,false,100),
|
||||
new ColumnDfn(10,"SpecialityLabel",3,5,false,5),
|
||||
new ColumnDfn(10,"Notes",0,-9,false,2000),
|
||||
|
||||
@@ -43,6 +43,7 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
Region_Name,
|
||||
// Properties.
|
||||
EffectiveOn,
|
||||
ExpiresOn,
|
||||
// Associated data.
|
||||
// Common.
|
||||
Notes,
|
||||
@@ -59,9 +60,12 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
public class DataProperties
|
||||
{
|
||||
public ItemId ItemId { get; set; }
|
||||
public SysId UserAccountIdOwner { get; set; }
|
||||
public SysId OrganisationIdOwner { get; set; }
|
||||
public SysId SportId { get; set; }
|
||||
public SysId RegionId { get; set; }
|
||||
public DateTime EffectiveOn { get; set; }
|
||||
public DateTime ExpiresOn { get; set; }
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
@@ -81,6 +85,16 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
get { return data.ItemId; }
|
||||
set { CheckChanged(data.ItemId, value); data.ItemId = value; }
|
||||
}
|
||||
public SysId UserAccountIdOwner
|
||||
{
|
||||
get { return data.UserAccountIdOwner; }
|
||||
set { CheckChanged(data.UserAccountIdOwner, value); data.UserAccountIdOwner = value; }
|
||||
}
|
||||
public SysId OrganisationIdOwner
|
||||
{
|
||||
get { return data.OrganisationIdOwner; }
|
||||
set { CheckChanged(data.OrganisationIdOwner, value); data.OrganisationIdOwner = value; }
|
||||
}
|
||||
public SysId SportId
|
||||
{
|
||||
get { return data.SportId; }
|
||||
@@ -101,13 +115,26 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
data.EffectiveOn = value.Date;
|
||||
}
|
||||
}
|
||||
public DateTime ExpiresOn
|
||||
{
|
||||
get { return data.ExpiresOn; }
|
||||
set
|
||||
{
|
||||
// Values are restricted to whole date, ie. no time.
|
||||
CheckChanged(data.ExpiresOn, value.Date);
|
||||
data.ExpiresOn = value.Date;
|
||||
}
|
||||
}
|
||||
// Population.
|
||||
internal void PopulateFrom(Data data)
|
||||
{
|
||||
ItemId = data.ItemId;
|
||||
UserAccountIdOwner = data.UserAccountIdOwner;
|
||||
OrganisationIdOwner = data.OrganisationIdOwner;
|
||||
SportId = data.SportId;
|
||||
RegionId = data.RegionId;
|
||||
EffectiveOn = data.EffectiveOn;
|
||||
ExpiresOn = data.ExpiresOn;
|
||||
base.PopulateFrom(data);
|
||||
}
|
||||
public Data Clone()
|
||||
@@ -124,9 +151,12 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
{
|
||||
// Identifies the field that has invalid data.
|
||||
public ValidValue ItemId { get; set; } = ValidValue.Valid;
|
||||
public ValidValue UserAccountIdOwner { get; set; } = ValidValue.Valid;
|
||||
public ValidValue OrganisationIdOwner { get; set; } = ValidValue.Valid;
|
||||
public ValidValue SportId { get; set; } = ValidValue.Valid;
|
||||
public ValidValue RegionId { get; set; } = ValidValue.Valid;
|
||||
public ValidValue EffectiveOn { get; set; } = ValidValue.Valid;
|
||||
public ValidValue ExpiresOn { get; set; } = ValidValue.Valid;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
@@ -135,13 +165,12 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
protected SaxActivityIndex(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn) : base()
|
||||
protected SaxActivityIndex(ItemId itemId, SysId sportId, SysId regionId) : base()
|
||||
{
|
||||
base.SetData(data);
|
||||
ItemId = itemId;
|
||||
SportId = sportId;
|
||||
RegionId = regionId;
|
||||
EffectiveOn = effectiveOn;
|
||||
Status = DefaultStatus;
|
||||
}
|
||||
|
||||
@@ -164,13 +193,12 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
//-------------------------------------------------------------------
|
||||
// Utilities.
|
||||
/// <summary>
|
||||
/// Match the item to the sport, region and effective date.
|
||||
/// Match the item to the sport and region.
|
||||
/// </summary>
|
||||
public bool MatchesSportRegionEffective(SysId sportId, SysId regionId, DateTime effectiveOn)
|
||||
public bool MatchesSportRegion(SysId sportId, SysId regionId)
|
||||
{
|
||||
if (!SportId.Equals(sportId)) return false;
|
||||
if (!RegionId.Equals(regionId)) return false;
|
||||
if (!EffectiveOn.Equals(effectiveOn.Date)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -197,6 +225,16 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
get { return data.ItemId; }
|
||||
protected set { data.ItemId = value; }
|
||||
}
|
||||
public SysId UserAccountIdOwner
|
||||
{
|
||||
get { return data.UserAccountIdOwner; }
|
||||
set { data.UserAccountIdOwner = value; }
|
||||
}
|
||||
public SysId OrganisationIdOwner
|
||||
{
|
||||
get { return data.OrganisationIdOwner; }
|
||||
set { data.OrganisationIdOwner = value; }
|
||||
}
|
||||
public SysId SportId
|
||||
{
|
||||
get { return data.SportId; }
|
||||
@@ -212,6 +250,11 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
get { return data.EffectiveOn; }
|
||||
set { data.EffectiveOn = value; }
|
||||
}
|
||||
public DateTime ExpiresOn
|
||||
{
|
||||
get { return data.ExpiresOn; }
|
||||
set { data.ExpiresOn = value; }
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Flags - positions 1-16 available.
|
||||
@@ -224,6 +267,19 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
// P a r a m s
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>
|
||||
/// Combination Sport and Region Ids to index activities.
|
||||
/// </summary>
|
||||
public class SportRegionIds
|
||||
{
|
||||
public SportRegionIds(SysId sportId, SysId regionId)
|
||||
{
|
||||
SportId = sportId;
|
||||
RegionId = regionId;
|
||||
}
|
||||
public SysId SportId { get; }
|
||||
public SysId RegionId { get; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Item list parameters.
|
||||
/// </summary>
|
||||
public new class Params : SacsHierarchyItem.Params
|
||||
@@ -232,12 +288,18 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
public List<SysId> IdsIncluded { get; } = new List<SysId>();
|
||||
public List<SysId> IdsExcluded { get; } = new List<SysId>();
|
||||
public List<ItemId> ItemIdsIncluded { get; } = new List<ItemId>();
|
||||
public List<SysId> SportIdsIncluded { get; } = new List<SysId>();
|
||||
public List<SysId> RegionIdsIncluded { get; } = new List<SysId>();
|
||||
public DateTime EffectiveFrom { get; set; }
|
||||
public DateTime EffectiveTo { get; set; }
|
||||
/// <summary>Activities must match one of the sport/region combinations specified.</summary>
|
||||
public List<SportRegionIds> SportRegionIdsIncluded { get; } = new List<SportRegionIds>();
|
||||
/// <summary>Owner User Accounts - to include activities in result for users regardless of sports/regions.</summary>
|
||||
public List<SysId> UserAccountIdsOwnerIncluded { get; } = new List<SysId>();
|
||||
/// <summary>Owner Organisations - to include activities in result for organisations regardless of sport/region combinations.</summary>
|
||||
public List<SysId> OrganisationIdsOwnerIncluded { get; } = new List<SysId>();
|
||||
/// <summary>User Account - to include User Activity data in result.</summary>
|
||||
public SysId UserAccountId { get; set; }
|
||||
public DateTime EffectiveFrom { get; set; }
|
||||
public DateTime EffectiveTo { get; set; }
|
||||
/// <summary>Not Expired - either Expiry date not set or is after specified date.</summary>
|
||||
public DateTime NotExpiredOn { get; set; }
|
||||
// Table aliases - blank if not linked.
|
||||
public String Alias_ActivityIndex { get; set; }
|
||||
}
|
||||
@@ -249,11 +311,11 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
public static class SaxActivityIndexList
|
||||
{
|
||||
/// <summary>
|
||||
/// Get first entry that matcehs the sport, region and effective date.
|
||||
/// Get first entry that matches the sport and region.
|
||||
/// </summary>
|
||||
public static SaxActivityIndex GetActivityIndexBySportRegionEffective(this List<SaxActivityIndex> values, SysId sportId, SysId regionId, DateTime effectiveOn)
|
||||
public static SaxActivityIndex GetActivityIndexBySportRegion(this List<SaxActivityIndex> values, SysId sportId, SysId regionId)
|
||||
{
|
||||
return values.Find(item => item.MatchesSportRegionEffective(sportId, regionId, effectiveOn));
|
||||
return values.Find(item => item.MatchesSportRegion(sportId, regionId));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
{
|
||||
Pos,
|
||||
Id,
|
||||
SportIdParent,
|
||||
ParentSport_Name,
|
||||
Name,
|
||||
SpecialityLabel,
|
||||
SpecialityLabel_Desc,
|
||||
@@ -36,6 +38,7 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
/// <summary>Properties other than common.</summary>
|
||||
public class DataProperties
|
||||
{
|
||||
public SysId SportIdParent { get; set; }
|
||||
public String Name { get; set; } = String.Empty;
|
||||
public Sax.SportSpecialityLabel SpecialityLabel { get; set; }
|
||||
}
|
||||
@@ -52,6 +55,11 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
Status = DefaultStatus;
|
||||
}
|
||||
// Properties.
|
||||
public SysId SportIdParent
|
||||
{
|
||||
get { return data.SportIdParent; }
|
||||
set { CheckChanged(data.SportIdParent, value); data.SportIdParent = value; }
|
||||
}
|
||||
public String Name
|
||||
{
|
||||
get { return data.Name; }
|
||||
@@ -65,6 +73,7 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
// Population.
|
||||
internal void PopulateFrom (Data data)
|
||||
{
|
||||
SportIdParent = data.SportIdParent;
|
||||
Name = data.Name;
|
||||
SpecialityLabel = data.SpecialityLabel;
|
||||
base.PopulateFrom(data);
|
||||
@@ -82,6 +91,7 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
public new class ErrField : SacsHierarchyItem.ErrField
|
||||
{
|
||||
// Identifies the field that has invalid data.
|
||||
public ValidValue SportIdParent { get; set; } = ValidValue.Valid;
|
||||
public ValidValue Name { get; set; } = ValidValue.Valid;
|
||||
public ValidValue SpecialityLabel { get; set; } = ValidValue.Valid;
|
||||
}
|
||||
@@ -134,6 +144,11 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
throw new NotSupportedException(fn + " Id cannot be changed");
|
||||
this.data.PopulateFrom(data);
|
||||
}
|
||||
public SysId SportIdParent
|
||||
{
|
||||
get { return data.SportIdParent; }
|
||||
set { data.SportIdParent = value; }
|
||||
}
|
||||
public String Name
|
||||
{
|
||||
get { return data.Name; }
|
||||
@@ -172,6 +187,7 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
// List filtering.
|
||||
public List<SysId> IdsIncluded { get; } = new List<SysId>();
|
||||
public List<SysId> IdsExcluded { get; } = new List<SysId>();
|
||||
public SysId SportIdParent {get; set; }
|
||||
/// <summary>Generic filter - partial sport name, or other matching value (tbd).</summary>
|
||||
public String SportFilter { get; set; }
|
||||
public String NameFull { get; set; }
|
||||
|
||||
@@ -22,7 +22,8 @@ namespace Saxonite.Net.Standard.Base.Bus
|
||||
OnlineAt,
|
||||
// User properties.
|
||||
EmailAddress,
|
||||
Title, FirstName, LastName,
|
||||
DisplayName, Title, FirstName, LastName,
|
||||
LastLoginOn,
|
||||
LastLoginAt,
|
||||
}
|
||||
|
||||
|
||||
@@ -25,21 +25,35 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
public class IndexContext
|
||||
{
|
||||
// ToDo Include Localiser.
|
||||
/// <summary>
|
||||
/// Index Context - high level activity filter.
|
||||
/// <para>User Account allows User specific information about the activities to be included.</para>
|
||||
/// </summary>
|
||||
public IndexContext(SysId userAccountId)
|
||||
{
|
||||
UserAccountId = userAccountId;
|
||||
}
|
||||
public SysId UserAccountId { get; }
|
||||
public List<SysId> SportIds { get; } = new List<SysId>();
|
||||
public List<SysId> RegionIds { get; } = new List<SysId>();
|
||||
// Todo: Default period is ~12 months ago up to ~3 months in the future.
|
||||
/// <summary>Activities must match one of the sport/region combinations specified.</summary>
|
||||
public List<SaxActivityIndex.SportRegionIds> SportRegionIdsIncluded { get; } = new List<SaxActivityIndex.SportRegionIds>();
|
||||
/// <summary>
|
||||
/// Owner Users - eg. journalist for articles.
|
||||
/// <para>Allows the users' activities to be queried without relying on matching sport/region combinations.</para>
|
||||
/// </summary>
|
||||
public List<SysId> UserAccountIdsOwner { get; } = new List<SysId>();
|
||||
/// <summary>
|
||||
/// Owner Organisations - for articles, events and opportunities.
|
||||
/// <para>Allows the organisations' own activities to be queried without relying on matching sport/region combinations.</para>
|
||||
/// </summary>
|
||||
public List<SysId> OrganisationIdsOwner { get; } = new List<SysId>();
|
||||
// Todo: Default effective period for Activities.
|
||||
public DateTime EffectiveFrom { get; set; } = DateUtil.IncrementDate(DateTime.Today, -365);
|
||||
public DateTime EffectiveTo { get; set; } = DateUtil.IncrementDate(DateTime.Today, 30);
|
||||
public DateTime NotExpiredOn { get; set; } = DateTime.Today;
|
||||
public bool IsValid()
|
||||
{
|
||||
// Context must contain at least a sport, a region and a valid effective period.
|
||||
if (!SportIds.HasValidIds()) return false;
|
||||
if (!RegionIds.HasValidIds()) return false;
|
||||
if (!SportRegionIdsIncluded.Exists(item => SysId.IsValid(item.SportId) && SysId.IsValid(item.RegionId)) && !UserAccountIdsOwner.HasValidIds() && !OrganisationIdsOwner.HasValidIds()) return false;
|
||||
if (!DateUtil.IsValid(EffectiveFrom) || EffectiveTo < EffectiveFrom) return false;
|
||||
return true;
|
||||
}
|
||||
@@ -138,6 +152,8 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
{
|
||||
// Activity Index properties.
|
||||
IndexData indexData = new IndexData(article.GetItemId());
|
||||
indexData.UserAccountIdOwner = article.UserAccountIdAuthor;
|
||||
indexData.OrganisationIdOwner = article.OrganisationId;
|
||||
indexData.SportIds.Add(article.SportIdPrimary);
|
||||
indexData.RegionIds.Add(article.RegionIdPrimary);
|
||||
indexData.EffectiveOn = DateUtil.OnInvalid(article.PublishedAt.Date, article.CreateStamp.On.Date);
|
||||
@@ -165,9 +181,11 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
|
||||
// Activity Index properties.
|
||||
IndexData indexData = new IndexData(organisationEvent.GetItemId());
|
||||
indexData.OrganisationIdOwner = organisationEvent.OrganisationId;
|
||||
indexData.SportIds.Add(organisationEvent.SportIdPrimary);
|
||||
indexData.RegionIds.Add(organisationEvent.RegionIdCountry);
|
||||
indexData.EffectiveOn = DateUtil.OnInvalid(organisationEvent.PublishedAt.Date, organisationEvent.CreateStamp.On.Date);
|
||||
indexData.ExpiresOn = DateUtil.OnInvalid(organisationEvent.ExpiresAt.Date, DateUtil.IncrementDate(indexData.EffectiveOn, 7));
|
||||
return StoreActivityIndexData(indexData, dbUpdateInfo);
|
||||
}
|
||||
public bool ClearActivityIndex(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
|
||||
@@ -190,9 +208,11 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
|
||||
// Activity Index properties.
|
||||
IndexData indexData = new IndexData(opportunity.GetItemId());
|
||||
indexData.OrganisationIdOwner = opportunity.OrganisationId;
|
||||
indexData.SportIds.Add(opportunity.SportIdPrimary);
|
||||
indexData.RegionIds.Add(opportunity.RegionIdPrimary);
|
||||
indexData.EffectiveOn = DateUtil.OnInvalid(opportunity.PublishedAt.Date, opportunity.CreateStamp.On.Date);
|
||||
indexData.ExpiresOn = DateUtil.OnInvalid(opportunity.ExpiresAt.Date, DateUtil.IncrementDate(indexData.EffectiveOn, 28));
|
||||
return StoreActivityIndexData(indexData, dbUpdateInfo);
|
||||
}
|
||||
public bool ClearActivityIndex(SaxOrganisationOpportunity opportunity, DbUpdateInfo dbUpdateInfo)
|
||||
@@ -211,9 +231,12 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
ItemId = itemId;
|
||||
}
|
||||
public ItemId ItemId { get; }
|
||||
public SysId UserAccountIdOwner { get; set; }
|
||||
public SysId OrganisationIdOwner { get; set; }
|
||||
public List<SysId> SportIds { get; } = new List<SysId>();
|
||||
public List<SysId> RegionIds { get; } = new List<SysId>();
|
||||
public DateTime EffectiveOn { get; set; }
|
||||
public DateTime ExpiresOn { get; set; }
|
||||
public bool IsValid()
|
||||
{
|
||||
if (!ItemId.IsValid(ItemId)) return false;
|
||||
@@ -226,17 +249,23 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
/// <summary>Single entry in the index for an activity.</summary>
|
||||
protected class IndexEntryData
|
||||
{
|
||||
public IndexEntryData(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn)
|
||||
public IndexEntryData(ItemId itemId, SysId userAccountIdOwner, SysId organisationIdOwner, SysId sportId, SysId regionId, DateTime effectiveOn, DateTime expiresOn)
|
||||
{
|
||||
ItemId = itemId;
|
||||
UserAccountIdOwner = userAccountIdOwner;
|
||||
OrganisationIdOwner = organisationIdOwner;
|
||||
SportId = sportId;
|
||||
RegionId = regionId;
|
||||
EffectiveOn = effectiveOn;
|
||||
ExpiresOn = expiresOn;
|
||||
}
|
||||
public ItemId ItemId { get; }
|
||||
public SysId UserAccountIdOwner { get; }
|
||||
public SysId OrganisationIdOwner { get; }
|
||||
public SysId SportId { get; }
|
||||
public SysId RegionId { get; }
|
||||
public DateTime EffectiveOn { get; }
|
||||
public DateTime ExpiresOn { get; }
|
||||
public bool IsValid()
|
||||
{
|
||||
if (!ItemId.IsValid(ItemId)) return false;
|
||||
@@ -279,7 +308,7 @@ namespace Saxonite.Net.Standard.Base.Consoles
|
||||
{
|
||||
foreach (SysId regionId in indexData.RegionIds.FindAll(item => SysId.IsValid(item)))
|
||||
{
|
||||
IndexEntryData indexEntry = new IndexEntryData(indexData.ItemId, sportId, regionId, indexData.EffectiveOn);
|
||||
IndexEntryData indexEntry = new IndexEntryData(indexData.ItemId, indexData.UserAccountIdOwner, indexData.OrganisationIdOwner, sportId, regionId, indexData.EffectiveOn, indexData.ExpiresOn);
|
||||
if (indexEntry.IsValid())
|
||||
indexEntries.Add(indexEntry);
|
||||
}
|
||||
|
||||
@@ -109,6 +109,13 @@ namespace Saxonite.Net.Standard.Base.Mgr
|
||||
switch ((SaxUserOnline.Column)column.Id)
|
||||
{
|
||||
//-----------------------------------------------------------
|
||||
case SaxUserOnline.Column.DisplayName:
|
||||
String title = values.GetValue(GetUserOnlineColumnDfn(SaxUserOnline.Column.Title).DataName).ToString();
|
||||
String firstName = values.GetValue(GetUserOnlineColumnDfn(SaxUserOnline.Column.FirstName).DataName).ToString();
|
||||
String lastName = values.GetValue(GetUserOnlineColumnDfn(SaxUserOnline.Column.LastName).DataName).ToString();
|
||||
value = new DataValue(SaxUserAccount.GetDisplayName(title, firstName, lastName));
|
||||
break;
|
||||
|
||||
//-----------------------------------------------------------
|
||||
}
|
||||
return value;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace Saxonite.Net.Standard.Base.Mgr
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Create item.
|
||||
public abstract SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn);
|
||||
public abstract SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId);
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Retrieve individual items.
|
||||
@@ -95,7 +95,14 @@ namespace Saxonite.Net.Standard.Base.Mgr
|
||||
}
|
||||
}
|
||||
|
||||
// NB Associated data items aren't validated as these should be valid on the 'parent' object.
|
||||
// NB Associated data items shouldn't need to be validated as these should be valid on the 'parent' object.
|
||||
if (errField.OrganisationIdOwner != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationIdOwner))
|
||||
{
|
||||
}
|
||||
|
||||
if (errField.OrganisationIdOwner != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationIdOwner))
|
||||
{
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------
|
||||
return true;
|
||||
|
||||
@@ -78,6 +78,10 @@ namespace Saxonite.Net.Standard.Base.Mgr
|
||||
{
|
||||
ClearErrorState();
|
||||
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
|
||||
{
|
||||
|
||||
// Name.
|
||||
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Sport_Name), true))
|
||||
{
|
||||
@@ -104,6 +108,27 @@ namespace Saxonite.Net.Standard.Base.Mgr
|
||||
}
|
||||
}
|
||||
|
||||
// Associated data.
|
||||
if (data.Status != SaStatus.Deleted)
|
||||
{
|
||||
if (errField.SportIdParent != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdParent))
|
||||
{
|
||||
SaxSport sport = GetSportById(data.SportIdParent);
|
||||
disposableItems.Add(sport);
|
||||
if (sport == null)
|
||||
{
|
||||
errField.SportIdParent = SacsHierarchyItem.ValidValue.Invalid;
|
||||
return SetErrorState("Invalid parent");
|
||||
}
|
||||
if (SysId.IsValid(sport.SportIdParent))
|
||||
{
|
||||
errField.SportIdParent = SacsHierarchyItem.ValidValue.Invalid;
|
||||
return SetErrorState("parent already has a parent.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ namespace Saxonite.Net.Standard.Dbas.Bus
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
public SaxActivityIndex_Dbas(ISacsDatabase database, ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn, UInt16 flags) :
|
||||
base(itemId, sportId, regionId, effectiveOn)
|
||||
public SaxActivityIndex_Dbas(ISacsDatabase database, ItemId itemId, SysId sportId, SysId regionId, UInt16 flags) :
|
||||
base(itemId, sportId, regionId)
|
||||
{
|
||||
this.database = database;
|
||||
Flags = flags;
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
@@ -24,6 +24,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
public ColumnDataInt32 _SportId { get; } = new ColumnDataInt32("SportId");
|
||||
public ColumnDataInt32 _RegionId { get; } = new ColumnDataInt32("RegionId");
|
||||
public ColumnDataDateTime _EffectiveOn { get; } = new ColumnDataDateTime("EffectiveOn");
|
||||
public ColumnDataInt32 _UserAccountIdOwner { get; } = new ColumnDataInt32("UserAccountIdOwner");
|
||||
public ColumnDataInt32 _OrganisationIdOwner { get; } = new ColumnDataInt32("OrganisationIdOwner");
|
||||
public ColumnDataDateTime _ExpiresOn { get; } = new ColumnDataDateTime("ExpiresOn");
|
||||
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
|
||||
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
|
||||
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
|
||||
@@ -44,6 +47,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
"SportId",
|
||||
"RegionId",
|
||||
"EffectiveOn",
|
||||
"UserAccountIdOwner",
|
||||
"OrganisationIdOwner",
|
||||
"ExpiresOn",
|
||||
"Notes",
|
||||
"Flags",
|
||||
"Status",
|
||||
@@ -63,7 +69,6 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
"ItemId",
|
||||
"SportId",
|
||||
"RegionId",
|
||||
"EffectiveOn",
|
||||
};
|
||||
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
|
||||
{
|
||||
@@ -93,6 +98,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
public Int32 _SportId { get { return Cols._SportId.Value; } set { Cols._SportId.Value = value; } }
|
||||
public Int32 _RegionId { get { return Cols._RegionId.Value; } set { Cols._RegionId.Value = value; } }
|
||||
public DateTime _EffectiveOn { get { return Cols._EffectiveOn.Value; } set { Cols._EffectiveOn.Value = value; } }
|
||||
public Int32 _UserAccountIdOwner { get { return Cols._UserAccountIdOwner.Value; } set { Cols._UserAccountIdOwner.Value = value; } }
|
||||
public Int32 _OrganisationIdOwner { get { return Cols._OrganisationIdOwner.Value; } set { Cols._OrganisationIdOwner.Value = value; } }
|
||||
public DateTime _ExpiresOn { get { return Cols._ExpiresOn.Value; } set { Cols._ExpiresOn.Value = value; } }
|
||||
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
|
||||
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
|
||||
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
|
||||
@@ -128,6 +136,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
_SportId = GetFieldInt32(dbDataReader, "SportId", _SportId);
|
||||
_RegionId = GetFieldInt32(dbDataReader, "RegionId", _RegionId);
|
||||
_EffectiveOn = GetFieldDateTime(dbDataReader, "EffectiveOn", _EffectiveOn);
|
||||
_UserAccountIdOwner = GetFieldInt32(dbDataReader, "UserAccountIdOwner", _UserAccountIdOwner);
|
||||
_OrganisationIdOwner = GetFieldInt32(dbDataReader, "OrganisationIdOwner", _OrganisationIdOwner);
|
||||
_ExpiresOn = GetFieldDateTime(dbDataReader, "ExpiresOn", _ExpiresOn);
|
||||
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
|
||||
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
|
||||
_Status = GetFieldString(dbDataReader, "Status", _Status);
|
||||
@@ -160,6 +171,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
if (columnNames.ContainsCI("SportId")) AddCommandParameter(dbCommand, "@SportId", _SportId);
|
||||
if (columnNames.ContainsCI("RegionId")) AddCommandParameter(dbCommand, "@RegionId", _RegionId);
|
||||
if (columnNames.ContainsCI("EffectiveOn")) AddCommandParameter(dbCommand, "@EffectiveOn", _EffectiveOn);
|
||||
if (columnNames.ContainsCI("UserAccountIdOwner")) AddCommandParameter(dbCommand, "@UserAccountIdOwner", _UserAccountIdOwner);
|
||||
if (columnNames.ContainsCI("OrganisationIdOwner")) AddCommandParameter(dbCommand, "@OrganisationIdOwner", _OrganisationIdOwner);
|
||||
if (columnNames.ContainsCI("ExpiresOn")) AddCommandParameter(dbCommand, "@ExpiresOn", _ExpiresOn);
|
||||
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
|
||||
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
|
||||
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
|
||||
@@ -190,17 +204,21 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
if (dbCommand is SqlCommand)
|
||||
{
|
||||
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
|
||||
query += "WHERE ItemType=@ItemType AND ItemId=@ItemId AND SportId=@SportId AND RegionId=@RegionId AND EffectiveOn=@EffectiveOn;";
|
||||
query += "WHERE ItemType=@ItemType AND ItemId=@ItemId AND SportId=@SportId AND RegionId=@RegionId;";
|
||||
}
|
||||
else
|
||||
{
|
||||
query += columnNames.Concat(", ", "", "=?") + " ";
|
||||
query += "WHERE ItemType=? AND ItemId=? AND SportId=? AND RegionId=? AND EffectiveOn=?;";
|
||||
query += "WHERE ItemType=? AND ItemId=? AND SportId=? AND RegionId=?;";
|
||||
}
|
||||
dbCommand.CommandText = query;
|
||||
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
|
||||
// Populate parameters.
|
||||
dbCommand.Parameters.Clear();
|
||||
if (columnNames.ContainsCI("EffectiveOn")) AddCommandParameter(dbCommand, "@EffectiveOn", _EffectiveOn);
|
||||
if (columnNames.ContainsCI("UserAccountIdOwner")) AddCommandParameter(dbCommand, "@UserAccountIdOwner", _UserAccountIdOwner);
|
||||
if (columnNames.ContainsCI("OrganisationIdOwner")) AddCommandParameter(dbCommand, "@OrganisationIdOwner", _OrganisationIdOwner);
|
||||
if (columnNames.ContainsCI("ExpiresOn")) AddCommandParameter(dbCommand, "@ExpiresOn", _ExpiresOn);
|
||||
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
|
||||
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
|
||||
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
|
||||
@@ -211,7 +229,6 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
AddCommandParameter(dbCommand, "@ItemId", _ItemId);
|
||||
AddCommandParameter(dbCommand, "@SportId", _SportId);
|
||||
AddCommandParameter(dbCommand, "@RegionId", _RegionId);
|
||||
AddCommandParameter(dbCommand, "@EffectiveOn", _EffectiveOn);
|
||||
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
|
||||
return (executeNonQueryResult == 1);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
@@ -20,6 +20,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
public class ColumnsData
|
||||
{
|
||||
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
|
||||
public ColumnDataInt32 _SportIdParent { get; } = new ColumnDataInt32("SportIdParent");
|
||||
public ColumnDataString _Name { get; } = new ColumnDataString("Name");
|
||||
public ColumnDataInt16 _SpecialityLabel { get; } = new ColumnDataInt16("SpecialityLabel");
|
||||
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
|
||||
@@ -38,6 +39,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
protected static List<String> fields { get; } = new List<String>()
|
||||
{
|
||||
"Id",
|
||||
"SportIdParent",
|
||||
"Name",
|
||||
"SpecialityLabel",
|
||||
"Notes",
|
||||
@@ -82,6 +84,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
// Columns.
|
||||
public ColumnsData Cols { get; } = new ColumnsData();
|
||||
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
|
||||
public Int32 _SportIdParent { get { return Cols._SportIdParent.Value; } set { Cols._SportIdParent.Value = value; } }
|
||||
public String _Name { get { return Cols._Name.Value; } set { Cols._Name.Value = value; } }
|
||||
public Int16 _SpecialityLabel { get { return Cols._SpecialityLabel.Value; } set { Cols._SpecialityLabel.Value = value; } }
|
||||
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
|
||||
@@ -115,6 +118,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
public override void PopulateFrom (DbDataReader dbDataReader)
|
||||
{
|
||||
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
|
||||
_SportIdParent = GetFieldInt32(dbDataReader, "SportIdParent", _SportIdParent);
|
||||
_Name = GetFieldString(dbDataReader, "Name", _Name);
|
||||
_SpecialityLabel = GetFieldInt16(dbDataReader, "SpecialityLabel", _SpecialityLabel);
|
||||
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
|
||||
@@ -147,6 +151,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
|
||||
// Populate parameters.
|
||||
dbCommand.Parameters.Clear();
|
||||
if (columnNames.ContainsCI("SportIdParent")) AddCommandParameter(dbCommand, "@SportIdParent", _SportIdParent);
|
||||
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
|
||||
if (columnNames.ContainsCI("SpecialityLabel")) AddCommandParameter(dbCommand, "@SpecialityLabel", _SpecialityLabel);
|
||||
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
|
||||
@@ -194,6 +199,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
|
||||
// Populate parameters.
|
||||
dbCommand.Parameters.Clear();
|
||||
if (columnNames.ContainsCI("SportIdParent")) AddCommandParameter(dbCommand, "@SportIdParent", _SportIdParent);
|
||||
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
|
||||
if (columnNames.ContainsCI("SpecialityLabel")) AddCommandParameter(dbCommand, "@SpecialityLabel", _SpecialityLabel);
|
||||
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
|
||||
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:01
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Saxonite.Net.Standard.Dbas.Internal
|
||||
{
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Warn(fn + " ");
|
||||
SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc, 0));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -298,6 +298,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
SetUserOnlineColDfn(columnDfn, "Email", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaxUserOnline.Column.DisplayName:
|
||||
SetUserOnlineColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaxUserOnline.Column.Title:
|
||||
SetUserOnlineColDfn(columnDfn, "Title", 70, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
|
||||
columnDfn.ReadOnly = true;
|
||||
@@ -310,6 +314,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
SetUserOnlineColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaxUserOnline.Column.LastLoginOn:
|
||||
SetUserOnlineColDfn(columnDfn, "Last login on", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaxUserOnline.Column.LastLoginAt:
|
||||
SetUserOnlineColDfn(columnDfn, "Last login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
|
||||
columnDfn.ReadOnly = true;
|
||||
@@ -504,7 +512,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// User Account.
|
||||
bool hasUserAccountCols = columns.HasId(SaxUserOnline.Column.EmailAddress) || columns.HasId(SaxUserOnline.Column.Title) || columns.HasId(SaxUserOnline.Column.FirstName) || columns.HasId(SaxUserOnline.Column.LastName) || columns.HasId(SaxUserOnline.Column.LastLoginAt);
|
||||
bool hasUserAccountCols = columns.HasId(SaxUserOnline.Column.EmailAddress) || columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.Title) || columns.HasId(SaxUserOnline.Column.FirstName) || columns.HasId(SaxUserOnline.Column.LastName) || columns.HasId(SaxUserOnline.Column.LastLoginOn) || columns.HasId(SaxUserOnline.Column.LastLoginAt);
|
||||
if (hasUserAccountCols)
|
||||
{
|
||||
prm.Alias_UserAccount = aliasUserOnline_UserAccount;
|
||||
@@ -514,13 +522,13 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
|
||||
if (columns.HasId(SaxUserOnline.Column.EmailAddress))
|
||||
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
|
||||
if (columns.HasId(SaxUserOnline.Column.Title))
|
||||
if (columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.Title))
|
||||
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
|
||||
if (columns.HasId(SaxUserOnline.Column.FirstName))
|
||||
if (columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.FirstName))
|
||||
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
|
||||
if (columns.HasId(SaxUserOnline.Column.LastName))
|
||||
if (columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.LastName))
|
||||
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
|
||||
if (columns.HasId(SaxUserOnline.Column.LastLoginAt))
|
||||
if (columns.HasId(SaxUserOnline.Column.LastLoginOn) || columns.HasId(SaxUserOnline.Column.LastLoginAt))
|
||||
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt);
|
||||
if (cols.Count > 0)
|
||||
{
|
||||
|
||||
@@ -37,16 +37,16 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Create item.
|
||||
public override SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn)
|
||||
public override SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId)
|
||||
{
|
||||
ClearErrorState();
|
||||
return new SaxActivityIndex_Dbas(CoreDatabase, itemId, sportId, regionId, effectiveOn, 0);
|
||||
return new SaxActivityIndex_Dbas(CoreDatabase, itemId, sportId, regionId, 0);
|
||||
}
|
||||
private SaxActivityIndex_Dbas CreateActivityIndex(ActivityIndex_Db dbActivityIndex)
|
||||
{
|
||||
ClearErrorState();
|
||||
ItemId itemId = new ItemId(dbActivityIndex._ItemType, new SysId(dbActivityIndex._ItemId));
|
||||
SaxActivityIndex_Dbas activityIndex = new SaxActivityIndex_Dbas(CoreDatabase, itemId, new SysId(dbActivityIndex._SportId), new SysId(dbActivityIndex._RegionId), dbActivityIndex._EffectiveOn, (UInt16)dbActivityIndex._Flags);
|
||||
SaxActivityIndex_Dbas activityIndex = new SaxActivityIndex_Dbas(CoreDatabase, itemId, new SysId(dbActivityIndex._SportId), new SysId(dbActivityIndex._RegionId), (UInt16)dbActivityIndex._Flags);
|
||||
PopulateFrom(dbActivityIndex, activityIndex);
|
||||
return activityIndex;
|
||||
}
|
||||
@@ -209,7 +209,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
dbActivityIndex._ItemId = SysId.ToInt(activityIndex.ItemId.Id);
|
||||
dbActivityIndex._SportId = SysId.ToInt(activityIndex.SportId);
|
||||
dbActivityIndex._RegionId = SysId.ToInt(activityIndex.RegionId);
|
||||
dbActivityIndex._UserAccountIdOwner = SysId.ToInt(activityIndex.UserAccountIdOwner);
|
||||
dbActivityIndex._OrganisationIdOwner = SysId.ToInt(activityIndex.OrganisationIdOwner);
|
||||
dbActivityIndex._EffectiveOn = activityIndex.EffectiveOn;
|
||||
dbActivityIndex._ExpiresOn = activityIndex.ExpiresOn;
|
||||
dbActivityIndex._Notes = activityIndex.Notes;
|
||||
dbActivityIndex._Status = SacsSystem.GetStatusCode(activityIndex.Status);
|
||||
dbActivityIndex._Flags = (short)activityIndex.Flags;
|
||||
@@ -228,7 +231,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
//activityIndex.ItemId = new ItemId(dbActivityIndex._ItemType, new SysId(dbActivityIndex._ItemId);
|
||||
//activityIndex.SportId = new SysId(dbActivityIndex._SportId);
|
||||
//activityIndex.RegionId = new SysId(dbActivityIndex._RegionId);
|
||||
activityIndex.UserAccountIdOwner = new SysId(dbActivityIndex._UserAccountIdOwner);
|
||||
activityIndex.OrganisationIdOwner = new SysId(dbActivityIndex._OrganisationIdOwner);
|
||||
activityIndex.EffectiveOn = dbActivityIndex._EffectiveOn;
|
||||
activityIndex.ExpiresOn = dbActivityIndex._ExpiresOn;
|
||||
activityIndex.Notes = dbActivityIndex._Notes;
|
||||
activityIndex.Status = SacsSystem.GetStatusForCode(dbActivityIndex._Status);
|
||||
activityIndex.SetCreateStamp(dbActivityIndex._CreateOn, new SysId(dbActivityIndex._CreateBy), dbActivityIndex._CreateHost);
|
||||
@@ -438,15 +444,22 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
|
||||
}
|
||||
|
||||
// Sport Ids.
|
||||
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
|
||||
if (!sportIdsIncluded.IsEmpty())
|
||||
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex) + " IN (" + sportIdsIncluded + ")");
|
||||
// Activities are applicable if match on eo fthe sport/region combinations or match one of the owners (user or organisation).
|
||||
List<String> applicableFilter = new List<string>();
|
||||
|
||||
// Region Ids.
|
||||
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
|
||||
if (!regionIdsIncluded.IsEmpty())
|
||||
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex) + " IN (" + regionIdsIncluded + ")");
|
||||
// Sport and Region Id combinations.
|
||||
foreach (SaxActivityIndex.SportRegionIds sportRegionIds in prm.SportRegionIdsIncluded)
|
||||
applicableFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex) + "=" + sportRegionIds.SportId.ToString() + " AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex) + "=" + sportRegionIds.RegionId.ToString());
|
||||
|
||||
// Owner - User Account and/or Organisation.
|
||||
if (prm.UserAccountIdsOwnerIncluded.Exists(item => SysId.IsValid(item)))
|
||||
applicableFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_UserAccountIdOwner, aliasActivityIndex) + " IN (" + prm.UserAccountIdsOwnerIncluded.Concat(",") + ")");
|
||||
if (prm.OrganisationIdsOwnerIncluded.Exists(item => SysId.IsValid(item)))
|
||||
applicableFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_OrganisationIdOwner, aliasActivityIndex) + " IN (" + prm.OrganisationIdsOwnerIncluded.Concat(",") + ")");
|
||||
|
||||
// Any one of the applicable filters can be matched.
|
||||
if (!applicableFilter.IsEmpty())
|
||||
filter.Add(applicableFilter.Concat(" OR ", "(", ")"));
|
||||
|
||||
// Effective period.
|
||||
if (DateUtil.IsValid(prm.EffectiveFrom))
|
||||
@@ -454,6 +467,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
if (DateUtil.IsValid(prm.EffectiveTo))
|
||||
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex) + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.EffectiveTo.Date, 1)));
|
||||
|
||||
// Expiry.
|
||||
if (DateUtil.IsValid(prm.NotExpiredOn))
|
||||
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ExpiresOn, aliasActivityIndex) + " Is Null Or " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ExpiresOn, aliasActivityIndex) + ">" + DbQuery.FormatDateForCondition(prm.NotExpiredOn.Date));
|
||||
|
||||
if (filter.Count < 1) filter.Add("1=1");
|
||||
return filter;
|
||||
}
|
||||
|
||||
@@ -211,6 +211,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
private void PopulateTo(Sport_Db dbSport, SaxSport sport, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
dbSport._Id = SysId.ToInt(sport.Id);
|
||||
dbSport._SportIdParent = SysId.ToInt(sport.SportIdParent);
|
||||
dbSport._Name = sport.Name;
|
||||
dbSport._SpecialityLabel = (short)sport.SpecialityLabel;
|
||||
// Common properties.
|
||||
@@ -230,6 +231,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
private void PopulateFrom(Sport_Db dbSport, SaxSport sport)
|
||||
{
|
||||
//sport.Id = new SysId(dbSport._Id);
|
||||
sport.SportIdParent = new SysId(dbSport._SportIdParent);
|
||||
sport.Name = dbSport._Name;
|
||||
sport.SpecialityLabel = (Sax.SportSpecialityLabel)dbSport._SpecialityLabel;
|
||||
// Common properties.
|
||||
@@ -242,7 +244,9 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item column definitions.
|
||||
private static readonly String aliasSport = "Sprt";
|
||||
private static readonly String aliasSport = "Spt";
|
||||
private static readonly String aliasSport_Parent = "Spt_Prt";
|
||||
private static readonly String prefixSport_Parent = aliasSport_Parent + "_";
|
||||
//private static readonly String colSport_AssociatedData_Count = "UsrAct_AD_Count";
|
||||
private void SetSportColDfn
|
||||
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
|
||||
@@ -275,6 +279,14 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
|
||||
//-----------------------------------------------------------
|
||||
// Properties.
|
||||
case SaxSport.Column.SportIdParent:
|
||||
SetSportColDfn(columnDfn, "Parent #", 60, SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, ColumnAlignment.Right, DataValue.DataType.Long);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaxSport.Column.ParentSport_Name:
|
||||
SetSportColDfn(columnDfn, "Parent", 120, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasSport_Parent, prefixSport_Parent);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaxSport.Column.Name:
|
||||
SetSportColDfn(columnDfn, "Name", 120, SaxDbDfn_Core.ColumnIdx.Sport_Name);
|
||||
break;
|
||||
@@ -338,6 +350,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
if (!excludedIds.IsEmpty())
|
||||
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport) + " NOT IN (" + excludedIds + ")");
|
||||
|
||||
// Parent Sport.
|
||||
if (SysId.IsValid(prm.SportIdParent))
|
||||
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + "=" + prm.SportIdParent.ToString());
|
||||
|
||||
// Generic filter.
|
||||
if (!StringUtil.IsEmpty(prm.SportFilter))
|
||||
{
|
||||
@@ -480,6 +496,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
// Add columns as defined in query list.
|
||||
if (columns.HasId(SaxSport.Column.Id))
|
||||
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport));
|
||||
if (columns.HasId(SaxSport.Column.SportIdParent))
|
||||
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport));
|
||||
if (columns.HasId(SaxSport.Column.Name))
|
||||
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Name, aliasSport));
|
||||
if (columns.HasId(SaxSport.Column.SpecialityLabel) || columns.HasId(SaxSport.Column.SpecialityLabel_Desc))
|
||||
@@ -497,20 +515,18 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_UpdateOn, aliasSport));
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Movement count.
|
||||
/*
|
||||
if (columns.HasId(SaxSport.Column.Movement_Count))
|
||||
// Parent Sport.
|
||||
if (columns.HasId(SaxSport.Column.ParentSport_Name))
|
||||
{
|
||||
// Ref. SaxSport_Dbas.HasAssetMovements
|
||||
String aliasMovement = "aCntMov";
|
||||
DbQuery queryMovement = new DbQuery(SaxDatabase.DbmsType);
|
||||
queryMovement.Tables.Add(SaxDbDfn.GetTableName(SaxDbDfn.TableIdx.AssetMovement), aliasMovement);
|
||||
queryMovement.Columns.Add("Count(*)");
|
||||
queryMovement.Filters.Add(SaxDbDfn.GetColumnNameQual(SaxDbDfn.ColumnIdx.AssetMovement_AssetItemType, aliasMovement) + "=" + (int)Sax.AssetItemType.Sport);
|
||||
queryMovement.Filters.Add(SaxDbDfn.GetColumnNameQual(SaxDbDfn.ColumnIdx.AssetMovement_AssetItemId, aliasMovement) + "=" + SaxDbDfn.GetColumnNameQual(SaxDbDfn.ColumnIdx.Sport_Id, aliasSport));
|
||||
query.Columns.Add("(" + queryMovement.BuildQuery() + ")", colSport_Movement_Count);
|
||||
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
|
||||
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasSport_Parent);
|
||||
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport_Parent) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport));
|
||||
query.Joins.Add(joinSport);
|
||||
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
|
||||
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
|
||||
foreach (var col in cols)
|
||||
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasSport_Parent), prefixSport_Parent + SaxDbDfn_Core.GetColumnName(col, false));
|
||||
}
|
||||
*/
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Populate filter.
|
||||
|
||||
@@ -95,6 +95,57 @@
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>6</Pos>
|
||||
<Name>UserAccountIdOwner</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>4</DataTypeNative>
|
||||
<DataTypeNameNative>int</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>10</Size>
|
||||
<BufferLen>4</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>7</Pos>
|
||||
<Name>OrganisationIdOwner</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>4</DataTypeNative>
|
||||
<DataTypeNameNative>int</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>10</Size>
|
||||
<BufferLen>4</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>8</Pos>
|
||||
<Name>ExpiresOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>93</DataTypeNative>
|
||||
<DataTypeNameNative>smalldatetime</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>16</Size>
|
||||
<BufferLen>16</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>9</Pos>
|
||||
<Name>Notes</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -111,7 +162,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>7</Pos>
|
||||
<Pos>10</Pos>
|
||||
<Name>Flags</Name>
|
||||
<DataType>SmallInt</DataType>
|
||||
<DataTypeName />
|
||||
@@ -128,7 +179,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>8</Pos>
|
||||
<Pos>11</Pos>
|
||||
<Name>Status</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -145,7 +196,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>9</Pos>
|
||||
<Pos>12</Pos>
|
||||
<Name>CreateOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
@@ -162,7 +213,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>10</Pos>
|
||||
<Pos>13</Pos>
|
||||
<Name>CreateBy</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
@@ -179,7 +230,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>11</Pos>
|
||||
<Pos>14</Pos>
|
||||
<Name>CreateHost</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -196,7 +247,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>12</Pos>
|
||||
<Pos>15</Pos>
|
||||
<Name>UpdateOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
@@ -213,7 +264,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>13</Pos>
|
||||
<Pos>16</Pos>
|
||||
<Name>UpdateBy</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
@@ -230,7 +281,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Pos>14</Pos>
|
||||
<Pos>17</Pos>
|
||||
<Name>UpdateHost</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -249,14 +300,14 @@
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Name>PK_ActivityIndex</Name>
|
||||
<Name>PK_ActivityIndex_1</Name>
|
||||
<IndexType>1</IndexType>
|
||||
<Unique>true</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>1</Pages>
|
||||
<UniqueValues>14</UniqueValues>
|
||||
<UniqueValues>18</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
@@ -279,11 +330,6 @@
|
||||
<Name>RegionId</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>5</Seq>
|
||||
<Name>EffectiveOn</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
@@ -311,6 +357,31 @@
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Name>IDX_ActivityIndex_Organisation_Effective</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>OrganisationIdOwner</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>2</Seq>
|
||||
<Name>EffectiveOn</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
@@ -341,6 +412,31 @@
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ActivityIndex</Table>
|
||||
<Name>IDX_ActivityIndex_User_Effective</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>UserAccountIdOwner</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>2</Seq>
|
||||
<Name>EffectiveOn</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
</Indices>
|
||||
</DbDfnTable>
|
||||
<DbDfnTable>
|
||||
@@ -665,8 +761,8 @@
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>2</Pages>
|
||||
<UniqueValues>13</UniqueValues>
|
||||
<Pages>3</Pages>
|
||||
<UniqueValues>19</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
@@ -1717,7 +1813,7 @@
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>1</Pages>
|
||||
<UniqueValues>12</UniqueValues>
|
||||
<UniqueValues>17</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
@@ -1730,7 +1826,7 @@
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>ItemImage</Table>
|
||||
<Name>IDX_ItemImage_</Name>
|
||||
<Name>IDX_ItemImage_Item</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
@@ -3754,6 +3850,23 @@
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>2</Pos>
|
||||
<Name>SportIdParent</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>4</DataTypeNative>
|
||||
<DataTypeNameNative>int</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>10</Size>
|
||||
<BufferLen>4</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>3</Pos>
|
||||
<Name>Name</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3770,7 +3883,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>3</Pos>
|
||||
<Pos>4</Pos>
|
||||
<Name>SpecialityLabel</Name>
|
||||
<DataType>SmallInt</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3787,7 +3900,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>4</Pos>
|
||||
<Pos>5</Pos>
|
||||
<Name>Notes</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3804,7 +3917,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>5</Pos>
|
||||
<Pos>6</Pos>
|
||||
<Name>Flags</Name>
|
||||
<DataType>SmallInt</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3821,7 +3934,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>6</Pos>
|
||||
<Pos>7</Pos>
|
||||
<Name>Status</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3838,7 +3951,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>7</Pos>
|
||||
<Pos>8</Pos>
|
||||
<Name>CreateOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3855,7 +3968,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>8</Pos>
|
||||
<Pos>9</Pos>
|
||||
<Name>CreateBy</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3872,7 +3985,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>9</Pos>
|
||||
<Pos>10</Pos>
|
||||
<Name>CreateHost</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3889,7 +4002,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>10</Pos>
|
||||
<Pos>11</Pos>
|
||||
<Name>UpdateOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3906,7 +4019,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>11</Pos>
|
||||
<Pos>12</Pos>
|
||||
<Name>UpdateBy</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3923,7 +4036,7 @@
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Pos>12</Pos>
|
||||
<Pos>13</Pos>
|
||||
<Name>UpdateHost</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
@@ -3979,6 +4092,26 @@
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>Sport</Table>
|
||||
<Name>IDX_Sport_Parent</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>SportIdParent</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
</Indices>
|
||||
</DbDfnTable>
|
||||
<DbDfnTable>
|
||||
@@ -5005,7 +5138,7 @@
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>1</Pages>
|
||||
<UniqueValues>21</UniqueValues>
|
||||
<UniqueValues>24</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
@@ -5167,8 +5300,8 @@
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<Pages>1</Pages>
|
||||
<UniqueValues>2</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
@@ -5452,7 +5585,7 @@
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>1</Pages>
|
||||
<UniqueValues>15</UniqueValues>
|
||||
<UniqueValues>16</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
|
||||
Reference in New Issue
Block a user