This commit is contained in:
2021-06-18 19:57:52 +01:00
parent f9c3c01b28
commit 558be9063f
35 changed files with 875 additions and 75 deletions
@@ -8,6 +8,7 @@ using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Consoles;
using Saxonite.Net.Standard.Dbas.Mgr;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -20,7 +21,8 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
//-------------------------------------------------------------------
// Data members.
private readonly SaxInternals internals;
private readonly String alias_ActivityIndex = "ActIdx";
private readonly String alias_ActivityIndex = SaxActivityMgr_Dbas.aliasActivityIndex;
private readonly String alias_ActivityIndex_UserActivity = SaxActivityMgr_Dbas.aliasActivityIndex_UserActivity;
protected class IndexStatsData
{
public int EntriesInserted { get; set; }
@@ -54,6 +56,11 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
public void SetBlurb(String blurb) { Blurb = blurb; }
public void SetSport(SysId sportId, String sportName) { SportId = sportId; SportName = sportName; }
public void SetRegion(SysId regionId, String regionName) { RegionId = regionId; RegionName = regionName; }
// User Activity.
public void SetLastListedAt(DateTime lastListedAt) { LastListedAt = lastListedAt; }
public void SetLastViewedAt(DateTime lastViewedAt) { LastViewedAt = lastViewedAt; }
public void SetReaction(Sax.ActivityReaction reaction) { Reaction = reaction; }
public void SetLastReactedAt(DateTime lastReactedAt) { LastReactedAt = lastReactedAt; }
public static int CompareActivityIndices(ActivityData_Web item1, ActivityData_Web item2)
{
int effectiveCompare = item1.EffectiveOn.CompareTo(item2.EffectiveOn);
@@ -64,6 +71,7 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
public override IndexResults QueryIndex(IndexContext context)
{
String fn = GetType().Name + ".QueryIndex";
ClearErrorState();
IndexResults results = new IndexResults();
if (!context.IsValid()) return results;
@@ -72,7 +80,7 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
ColumnDfn colItemId = internals.ActivityMgr.GetActivityIndexColumnDfn(SaxActivityIndex.Column.ItemId);
String colDataNameEffectiveOn = "EffectiveOn";
// Query the index.
// Query the Activity Index.
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
DbQuery query = new DbQuery(db.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex, false), alias_ActivityIndex);
@@ -102,14 +110,17 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
Sax.DataItemType itemType = (Sax.DataItemType)values.GetLong(colItemType.DataName);
ItemId itemId = new ItemId((short)itemType, new SysId(values.GetLong(colItemId.DataName)));
DateTime effectiveOn = values.GetDate(colDataNameEffectiveOn);
activityDataList.Add(new ActivityData_Web(itemId, effectiveOn));
ActivityData_Web activtyData = new ActivityData_Web(itemId, effectiveOn);
activityDataList.Add(activtyData);
SaLogger.Info(fn + " Activity found - " + itemType.ToString() + ":" + SysId.ToString(itemId.Id) + ". Effective: " + DateUtil.Format(effectiveOn, "d-MMM-yyyy"));
}
}
// Sort the activity list.
activityDataList.Sort(ActivityData_Web.CompareActivityIndices);
// Populate activity details.
PopulateActivityDetails(activityDataList);
PopulateActivityDetails(context, activityDataList);
// ToDo Remove activities with blank caption.
@@ -120,12 +131,64 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
//-------------------------------------------------------------------
// Populate Activity Details.
//-------------------------------------------------------------------
private void PopulateActivityDetails(List<ActivityData_Web> activities)
private void PopulateActivityDetails(IndexContext context, List<ActivityData_Web> activities)
{
PopulateJournalistArticleDetails(activities);
PopulateOrganisationOpportunitiesDetails(activities);
PopulateUserActivityDetails(context, activities);
PopulateJournalistArticleDetails(context, activities);
PopulateOrganisationOpportunitiesDetails(context, activities);
}
private void PopulateJournalistArticleDetails(List<ActivityData_Web> activities)
//-------------------------------------------------------------------
private void PopulateUserActivityDetails(IndexContext context, List<ActivityData_Web> activities)
{
// Validate parameters.
if (!SysId.IsValid(context.UserAccountId)) return;
// Extract article Ids.
List<ItemId> activityItemIds = activities.Select(item => new ItemId(item.ItemId.Type, item.ItemId.Id)).ToList();
if (activityItemIds.IsEmpty()) return;
// User Activity columns - limit to essential information.
ColumnDfn colItemType = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.ItemType);
ColumnDfn colItemId = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.ItemId);
ColumnDfn colUserAccountId = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.UserAccountId);
ColumnDfn colLastListedAt = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.LastListedAt);
ColumnDfn colLastViewedAt = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.LastViewedAt);
ColumnDfn colReaction = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.Reaction);
ColumnDfn colLastReactedAt = Internals.ActivityMgr.GetUserActivityColumnDfn(SaxUserActivity.Column.LastReactedAt);
List<ColumnDfn> columns = new List<ColumnDfn>() { colItemType, colItemId, colUserAccountId, colLastListedAt, colLastViewedAt, colReaction, colLastReactedAt };
// User Activity filter.
SaxUserActivity.Params prmUserActivity = new SaxUserActivity.Params();
prmUserActivity.ItemIdsIncluded.AddRange(activityItemIds);
prmUserActivity.StatusCat = SaxUserActivity.StatusCat.ActiveOnly;
using (DbResultSet dbResultSet = Internals.ActivityMgr.ExecuteUserActivityQuery(columns, prmUserActivity))
{
while (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
ItemId activityItemId = new ItemId((short)values.GetLong(colItemType.DataName), new SysId(values.GetLong(colItemId.DataName)));
DateTime lastListedAt = values.GetDateTime(colLastListedAt.DataName);
DateTime lastViewedAt = values.GetDateTime(colLastViewedAt.DataName);
Sax.ActivityReaction reaction = (Sax.ActivityReaction)values.GetLong(colReaction.DataName);
DateTime lastReactedAt = values.GetDateTime(colLastReactedAt.DataName);
// Populate to corresponding activities.
foreach (ActivityData_Web activity in activities.FindAll(item => item.ItemId.Equals(activityItemId)))
{
activity.SetLastListedAt(lastListedAt);
activity.SetLastViewedAt(lastViewedAt);
activity.SetReaction(reaction);
activity.SetLastReactedAt(lastReactedAt);
}
}
}
}
//-------------------------------------------------------------------
// Journalist Article details.
private void PopulateJournalistArticleDetails(IndexContext context, List<ActivityData_Web> activities)
{
// Extract article Ids.
List<SysId> articleIds = activities.FindAll(item => item.ItemId.Type == (int)Sax.DataItemType.JournalistArticle).Select(ItemId => ItemId.ItemId.Id).ToList();
@@ -170,7 +233,10 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
}
}
}
private void PopulateOrganisationOpportunitiesDetails(List<ActivityData_Web> activities)
//-------------------------------------------------------------------
// Organisation Opportunity details.
private void PopulateOrganisationOpportunitiesDetails(IndexContext context, List<ActivityData_Web> activities)
{
// Extract opportunity Ids.
List<SysId> opportunityIds = activities.FindAll(item => item.ItemId.Type == (int)Sax.DataItemType.OrganisationOpportunity).Select(ItemId => ItemId.ItemId.Id).ToList();
@@ -222,11 +288,14 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
protected override bool StoreActivityIndexData(IndexData indexData, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".StoreActivityIndexData";
ClearErrorState();
// Validate paramaters.
if (!ItemId.IsValid(indexData.ItemId)) return false;
if (!ValidActivityItemTypes.Contains((Sax.DataItemType)indexData.ItemId.Type))
{
SaLogger.Warn(fn + " Invalid item type specified for Activity Index: " + ((Sax.DataItemType)indexData.ItemId.Type).ToString());
return false;
return SetErrorState("Invalid item type specified for Activity Index");
}
IndexStatsData stats = new IndexStatsData();
@@ -287,6 +356,7 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
protected override bool ClearActivityIndex(ItemId itemId, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".ClearActivityIndex";
ClearErrorState();
String tableName = SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex);
String filter =
SaxDbDfn_Core.GetColumnName(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType) + "=" + itemId.Type +
@@ -297,6 +367,129 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
return true;
}
//-------------------------------------------------------------------
// User Activities
//-------------------------------------------------------------------
/// <summary>
/// Record listing of activties 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>
/// </summary>
public override bool RecordUserActivitiesListed(SysId userAccountId, List<ItemId> activityItemIds, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".RecordUserActivitiesListed";
if (!SysId.IsValid(userAccountId)) return SetErrorState("User Account must be specified");
if (activityItemIds.IsEmpty()) return SetErrorState("Activity item ids must be specified");
String sqlNow = "'" + DateUtil.FormatSqlDateTime(DateTime.Now) + "'";
String sqlStatus = "'" + SacsSystem.GetStatusCode(SaxUserActivity.DefaultStatus) + "'";
// Merge query - insert missing user activities and update existing.
List<String> query = new List<String>()
{
"Merge",
"\tInto " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity) + " As UsrAct",
// Virtual table defining Activity Item Ids currently listed.
"\tUsing",
"\t(",
"\t\tSelect ItemType, ItemId From (Select 0 ItemType, 0 ItemId" + activityItemIds.Select(item => " Union Select " + item.Type.ToString() + ", " + item.Id.ToString()).ToList().Concat("", " ") + ") Dat Where Dat.ItemType>0 And Dat.ItemId>0",
"\t) As Act",
"\tOn UsrAct.UserAccountId="+userAccountId.ToString() + " And UsrAct.ItemType=Act.ItemType And UsrAct.ItemId=Act.ItemId",
// Matched - Update the User Activity to indicate 'Currently listed' and update the last listed date/time.
"\tWhen Matched Then",
"\t\tUpdate Set CurrentlyListed=1, ListedAtLast=" + sqlNow + ", Status=" + sqlStatus + ", UpdateOn=" + sqlNow + ", UpdateBy=" + dbUpdateInfo.UserId.ToString() + ", UpdateHost='" + dbUpdateInfo.Host + "'",
// Not Matched By Target - Insert the User Activity and indicate 'Currently listed' with first and last listed date/times.
"\tWhen Not Matched Then",
"\t\tInsert",
"\t\t\t(UserAccountId, ItemType, ItemId, CurrentlyListed, ListedAtFirst, ListedAtLast, Reaction, UserActivityData, Notes, Flags, Status, CreateOn, CreateBy, CreateHost, UpdateOn, UpdateBy, UpdateHost)",
"\t\t\tValues ("+userAccountId.ToString()+", Act.ItemType, Act.ItemId, 1, " + sqlNow + ", " + sqlNow + ", 0, '', '', 0, " + sqlStatus + ", " + sqlNow + ", " + dbUpdateInfo.UserId.ToString() + ", '" + dbUpdateInfo.Host + "', " + sqlNow + ", " + dbUpdateInfo.UserId.ToString() + ", '" + dbUpdateInfo.Host + "')",
// Not Matched By Source - Update the User Activity to indicate 'Not currently listed'.
"\tWhen Not Matched By Source And UsrAct.UserAccountId=" + userAccountId.ToString() + " And CurrentlyListed=1 Then",
"\t\tUpdate Set CurrentlyListed=0, UpdateOn=" + sqlNow + ", UpdateBy=" + dbUpdateInfo.UserId.ToString() + ", UpdateHost='" + dbUpdateInfo.Host + "'",
";"
};
String sql = query.Concat("\n");
//SaLogger.Debug(fn + " Query:\n" + sql);
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
int rows = db.ExecuteNonQuery(sql);
if (db.HasErrorState())
SaLogger.Debug(fn + " Database error: " + db.ErrorStateMessage);
SaLogger.Debug(fn + " Rows modified: " + rows);
return true;
}
//-------------------------------------------------------------------
public override bool RecordUserActivityViewed(SysId userAccountId, ItemId activityItemId, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".RecordUserActivityViewed";
if (!SysId.IsValid(userAccountId)) return SetErrorState("User Account must be specified");
if (!ItemId.IsValid(activityItemId)) return SetErrorState("Activity item id must be specified");
DateTime now = DateTime.Now;
SaxUserActivity userActivity = internals.ActivityMgr.GetUserActivityForUserItem(userAccountId, activityItemId);
if (userActivity != null)
{
// Update activity.
userActivity.CurrentlyListed = true;
if (!DateUtil.IsValid(userActivity.ViewedAtFirst))
userActivity.ViewedAtFirst = now;
userActivity.ViewedAtLast = now;
userActivity.Status = SaxUserActivity.DefaultStatus;
if (!internals.ActivityMgr.UpdateUserActivity(userActivity, dbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to update User Activity for viewing: " + internals.ActivityMgr.ErrorStateMessage);
return SetErrorState(internals.ActivityMgr.ErrorStateMessage);
}
}
else
{
SaLogger.Warn(fn + " User Activity not found. UserAccountId: " + userAccountId.ToString() + ". Item Type: " + (Sax.DataItemType)activityItemId.Type + ". ItemId: " + activityItemId.Id.ToString() + ".");
return SetErrorState("User Activity not found");
}
return true;
}
//-------------------------------------------------------------------
public override bool RecordUserActivityReaction(SysId userAccountId, ItemId activityItemId, Sax.ActivityReaction activityReaction, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".RecordUserActivityReaction";
if (!SysId.IsValid(userAccountId)) return SetErrorState("User Account must be specified");
if (!ItemId.IsValid(activityItemId)) return SetErrorState("Activity item id must be specified");
DateTime now = DateTime.Now;
SaxUserActivity userActivity = internals.ActivityMgr.GetUserActivityForUserItem(userAccountId, activityItemId);
if (userActivity != null)
{
if (userActivity.Reaction != activityReaction)
{
// Update activity.
userActivity.CurrentlyListed = true;
if (!DateUtil.IsValid(userActivity.ViewedAtFirst))
userActivity.ViewedAtFirst = now;
userActivity.ViewedAtLast = now;
userActivity.Reaction = activityReaction;
if (!DateUtil.IsValid(userActivity.ReactedAtFirst))
userActivity.ReactedAtFirst = now;
userActivity.ReactedAtLast = now;
userActivity.Status = SaxUserActivity.DefaultStatus;
if (!internals.ActivityMgr.UpdateUserActivity(userActivity, dbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to update User Activity with reaction: " + internals.ActivityMgr.ErrorStateMessage);
return SetErrorState(internals.ActivityMgr.ErrorStateMessage);
}
}
}
else
{
SaLogger.Warn(fn + " User Activity not found. UserAccountId: " + userAccountId.ToString() + ". Item Type: " + (Sax.DataItemType)activityItemId.Type + ". ItemId: " + activityItemId.Id.ToString() + ".");
return SetErrorState("User Activity not found");
}
return true;
}
//-------------------------------------------------------------------
}
//=======================================================================
@@ -234,12 +234,18 @@
<data name="label.email.address" xml:space="preserve">
<value>Email address</value>
</data>
<data name="label.excellent" xml:space="preserve">
<value>Excellent</value>
</data>
<data name="label.first.name" xml:space="preserve">
<value>First name</value>
</data>
<data name="label.forgotten.password" xml:space="preserve">
<value>Forgotten password?</value>
</data>
<data name="label.good" xml:space="preserve">
<value>Good</value>
</data>
<data name="label.headline" xml:space="preserve">
<value>Headline</value>
</data>
@@ -357,6 +363,9 @@
<data name="label.update" xml:space="preserve">
<value>update</value>
</data>
<data name="label.very.good" xml:space="preserve">
<value>Very Good</value>
</data>
<data name="label.yes" xml:space="preserve">
<value>Yes</value>
</data>
@@ -41,6 +41,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public String Blurb { get; set; }
public String Sport { get; set; }
public String Region { get; set; }
public int Reaction { get; set; }
public String PublishedOnFmt { get; set; }
}
/// <summary>Article activity info. </summary>
@@ -124,7 +125,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
SaxSessionData_Online sessionData = SessionData_Online;
// User context.
SaxActivityConsole.IndexContext indexContext = new SaxActivityConsole.IndexContext();
SysId userAccountId = SessionData.User.UserAccountId;
SaxActivityConsole.IndexContext indexContext = new SaxActivityConsole.IndexContext(userAccountId);
// Regions.
if (SysId.IsValid(sessionData.User.RegionIdProvince))
@@ -136,9 +138,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
indexContext.SportIds.AddRange(sessionData.Profile.Sports.Select(item => item.SportId));
// Populate activities.
List<ItemId> activityItemIds = new List<ItemId>();
SaxActivityConsole.IndexResults indexResults = ActivityConsole.QueryIndex(indexContext);
foreach (SaxActivityConsole.IndexResults.ActivityData itemData in indexResults.Items)
{
activityItemIds.Add(itemData.ItemId);
ActivityResponseData activityData = new ActivityResponseData();
activityData.ItemType = itemData.ItemId.Type;
if (itemData.ItemId.Type == (int)Sax.DataItemType.JournalistArticle)
@@ -151,10 +155,14 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
activityData.Blurb = itemData.Blurb;
activityData.Sport = Localiser.GetSportName(itemData.SportId, itemData.SportName);
activityData.Region = Localiser.GetRegionName(itemData.RegionId, itemData.RegionName);
activityData.Reaction = (int)itemData.Reaction;
activityData.PublishedOnFmt = Localiser.FormatDate(itemData.EffectiveOn);
responseData.Activities.Add(activityData);
}
if (!activityItemIds.IsEmpty())
ActivityConsole.RecordUserActivitiesListed(userAccountId, activityItemIds, DbUpdateInfo);
// Complete response.
responseData.Success = true;
return Json(responseData);
@@ -186,7 +194,6 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
if (!ValidUserSession)
return GetAjaxResult_InvalidSession(responseData);
SaxSessionData_Online sessionData = SessionData_Online;
String logSuffix = " User: " + sessionData.User.EmailAddress;
// Identify activity.
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType);
@@ -221,11 +228,64 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
responseData.Opportunity = new ActivityResponseData_Opportunity(model, opportunity);
}
// Record activty viewing.
if (!ActivityConsole.RecordUserActivityViewed(SessionData.User.UserAccountId, new ItemId((short)itemType, itemId), DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to record Activity Viewing: " + ActivityConsole.ErrorStateMessage + "." + getLogSuffix());
return Json(responseData);
}
// Complete response.
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
// Activity Reaction.
//-------------------------------------------------------------------
public class AjaxResponse_ActivityReaction : AjaxResponse_Base
{
public int Reaction { get; set; }
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Activity/Ajax/React")]
[Route("Activity/Ajax/Reaction")]
public IActionResult Ajax_SetActivityReaction(Model_Activity model)
{
String fn = GetType().Name + ".Ajax_SetActivityReaction";
String messageTitle = Localiser["activity.caption.activity"];
AjaxResponse_ActivityReaction responseData = new AjaxResponse_ActivityReaction();
// Validate session and referrer.
if (!ValidReferer)
return Forbid();
if (!ValidUserSession)
return GetAjaxResult_InvalidSession(responseData);
SaxSessionData_Online sessionData = SessionData_Online;
// Identify activity.
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType);
SysId itemId = model.ActivityIdx.ToSysId();
if (itemType <= 0 || !SysId.IsValid(itemId))
{
SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + getLogSuffix());
return Json(responseData);
}
// Record activity reaction.
if (!ActivityConsole.RecordUserActivityReaction(SessionData.User.UserAccountId, new ItemId((short)itemType, itemId), model.GetActivityReaction(), DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to record Activity Reaction: " + ActivityConsole.ErrorStateMessage + "." + getLogSuffix());
return Json(responseData);
}
// Complete response.
responseData.Reaction = (int)model.GetActivityReaction();
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
}
//=======================================================================
@@ -4,6 +4,7 @@ using Saxonite.Base.App;
using Saxonite.Net.Core.Web.Base.App;
using Saxonite.Net.Core.Web.Base.Controllers;
using Saxonite.Net.Core.Web.Base.Models;
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -33,6 +34,14 @@ namespace Saxonite.Net.Core.Web.Online.Models
// ToDo Replace Type + Idx (Id) with Idx and cross-reference stored in Session data.
public String ActivityType { get; set; }
public String ActivityIdx { get; set; }
public String ActivityReaction{ get; set; }
public Sax.ActivityReaction GetActivityReaction()
{
Sax.ActivityReaction reaction = EnumUtil.ParseEnum(ActivityReaction, Sax.ActivityReaction.Unknown);
if (reaction <= 0 && StringUtil.IsNumeric(ActivityReaction))
reaction = (Sax.ActivityReaction)StringUtil.ToShort(ActivityReaction);
return reaction;
}
//-------------------------------------------------------------------
}
@@ -63,6 +63,14 @@ else
<input type="hidden" name="ActivityIdx" class="ActivityIdx" />
}
@* Activity React form - to record reaction to the selected activity. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityReact", @class = "", @action = "#", onsubmit = "return false;" }))
{
<input type="hidden" name="ActivityType" class="ActivityType" />
<input type="hidden" name="ActivityIdx" class="ActivityIdx" />
<input type="hidden" name="ActivityReaction" class="ActivityReaction" />
}
@* Activity popup dialog with details. *@
<div id="dlgActivity" class="sax-dialog">
<div class="sax-content">
@@ -2,6 +2,29 @@
Home stylesheet.
*/
.sax-panel-item.Activity .sax-header
{
background-repeat: no-repeat;
background-position: right 4px center;
}
.sax-panel-item.Activity.sax-activity-reaction-1 .sax-header
{
background-image: URL("../img/icon/star-gold-24.png");
}
.sax-panel-item.Activity.sax-activity-reaction-2 .sax-header
{
background-image: URL("../img/icon/star-gold-2-24.png");
}
.sax-panel-item.Activity.sax-activity-reaction-3 .sax-header
{
background-image: URL("../img/icon/star-gold-3-24.png");
}
/* Activity Details */
#dlgActivity.ui-dialog-content.ui-widget-content
{
padding: 4px 4px 0 4px;
@@ -46,4 +69,34 @@
{
}
.ui-dialog.sax-dialog-activity button.ActivityReaction
{
min-width: 80px;
color: transparent;
background-color: transparent;
background-position: center center;
background-repeat: no-repeat;
}
.ui-dialog.sax-dialog-activity button.ActivityReaction.sax-selected
{
border-color: #d4af37;
box-shadow: 0 0 2px 2px #d4af37 inset;
}
.ui-dialog.sax-dialog-activity button.ActivityReaction1
{
background-image: url("../img/icon/star-gold-24.png");
}
.ui-dialog.sax-dialog-activity button.ActivityReaction2
{
background-image: url("../img/icon/star-gold-2-24.png");
}
.ui-dialog.sax-dialog-activity button.ActivityReaction3
{
background-image: url("../img/icon/star-gold-3-24.png");
}
/* The End */
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

+52 -13
View File
@@ -23,7 +23,7 @@
}
sax.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
@@ -44,31 +44,38 @@
}
sax.populateItem = function ($item, item)
{
sax.debug('populateItem', item);
//sax.debug('populateItem', item);
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.itemIdx).addClass(item.itemTypeClass);
$item.prop('id', sax.itemIdPrefix + item.itemIdx).addClass(item.itemTypeClass).toggleClass('sax-activity-reaction-' + item.reaction, !!item.reaction);
$('.ActivityCaption', $item).text(item.caption);
$('.ActivityBlurb', $item).text(item.blurb);
$('.ActivitySport', $item).text(item.sport);
$('.ActivityRegion', $item).text(item.region);
$('.ActivityPublishedOn', $item).text(item.publishedOnFmt);
$item.off('click').on('click', function () { sax.expandActivity(item.itemType, item.itemIdx); })
$item.off('click').on('click', function () { sax.expandActivity(item, $item); })
$('.sax-panel-results .sax-panel-messages').hide().empty();
}
sax.refreshItem = function ()
{
if (!sax.activity) return;
for (let i = 1; i < 4; i++)
sax.activity.$item.toggleClass('sax-activity-reaction-' + i, sax.activity.item.reaction == i);
}
//--------------------------------------------------------------
sax.expandActivity = function (type, idx)
sax.expandActivity = function (item, $item)
{
sax.debug('expandActivity(' + type + ',' + idx + ')');
//sax.debug('expandActivity', item, $item);
let $frm = $('#frmActivityId');
$('.ActivityType', $frm).val(type);
$('.ActivityIdx', $frm).val(idx);
$('.ActivityType', $frm).val(item.itemType);
$('.ActivityIdx', $frm).val(item.itemIdx);
sax.activity = { item:item, $item: $item };
sax.ajax.activityInfo = sax.ajax.activityInfo || { url: sax.url.base + 'Activity/Ajax/GetInfo', formId: 'frmActivityId', callbackFn: sax.showActivityDetails, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.activityInfo, 50);
}
sax.showActivityDetails = function (response)
{
sax.debug('showActivityDetails', response);
//sax.debug('showActivityDetails', response);
let $act = $('#dlgActivity .sax-content').empty();
let item;
if (item = response.article)
@@ -82,9 +89,7 @@
let seg = segs[segIdx];
let $seg = $('.sax-panel-item-template .sax-panel-item.ArticleContentSegment').clone().html(seg.body.html);
$('.ArticleContentSegments', $itm).append($seg);
sax.debug(seg, $seg);
}
sax.debug($itm);
$act.append($itm);
}
else if (item = response.opportunity)
@@ -96,15 +101,49 @@
$act.append($itm);
}
else return;
sax.setActivityReactionButton(sax.activity.item.reaction);
sax.openDialog(sax.$dlg.activity, 800, 1600);
}
//--------------------------------------------------------------
let selectedClass = 'sax-selected';
sax.setActivityReactionButton = function (r)
{
sax.clearActivityReactionButton();
$('.sax-dialog-activity button.ActivityReaction' + r).addClass(selectedClass);
}
sax.clearActivityReactionButton = function (r)
{
$('.sax-dialog-activity button.ActivityReaction').removeClass(selectedClass);
}
sax.setActivityReaction = function (r)
{
//sax.debug('setActivityReaction', r);
if ($('.sax-dialog-activity button.ActivityReaction' + r).hasClass(selectedClass)) r = 0;
sax.clearActivityReactionButton();
let fn = function (response)
{
if (!response.success) return;
sax.activity.item.reaction = response.reaction;
sax.setActivityReactionButton(response.reaction);
}
let $frm = $('#frmActivityReact');
$('.ActivityType', $frm).val(sax.activity.item.itemType);
$('.ActivityIdx', $frm).val(sax.activity.item.itemIdx);
$('.ActivityReaction', $frm).val(r);
sax.ajax.activityReact = sax.ajax.activityReact || { url: sax.url.base + 'Activity/Ajax/React', formId: 'frmActivityReact', callbackFn: fn, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.activityReact, 20);
}
//--------------------------------------------------------------
$(function ()
{
var opt = sax.dlgOpts();
opt.dialogClass += ' sax-dialog-border-thin sax-dialog-rounding-none sax-dialog-titlebar-hide';
opt.buttons[sax.dlg.btn.close] = function () { $(this).dialog('close'); };
opt.dialogClass += ' sax-dialog-activity sax-dialog-border-thin sax-dialog-rounding-none sax-dialog-titlebar-hide';
opt.buttons['close'] = { text: sax.dlg.btn.close, class: "floatr", click: function () { sax.refreshItem(); delete sax.activity; $(this).dialog('close'); } };
opt.buttons['react1'] = { text: '1', class: "floatl ActivityReaction ActivityReaction1", click: function () { sax.setActivityReaction(1); } };
opt.buttons['react2'] = { text: '2', class: "floatl ActivityReaction ActivityReaction2", click: function () { sax.setActivityReaction(2); } };
opt.buttons['react3'] = { text: '3', class: "floatl ActivityReaction ActivityReaction3", click: function () { sax.setActivityReaction(3); } };
sax.$dlg.activity = $('#dlgActivity').dialog(opt);
setTimeout(sax.refreshResults, 250);
+3 -3
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.0.8.0";
private static String version { get; } = "1.0.8.1";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
@@ -41,8 +41,8 @@ namespace Saxonite.Net.Standard.Base.App
// Version history.
//-------------------------------------------------------------------
// 1.0.8 15-Jun-2021 Online Article Content
// - Journalist Articles now have styled content.
// - Online home page click through activity for details.
// - Journalist Articles styled content.
// - Online home page click through activity for details with reaction.
// 1.0.7 8-Jun-2021 Online Activities & Profile
// - Style Online Activities by type.
// - Profile Contact Image upload.
+16 -2
View File
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Base.App
{
@@ -199,7 +199,14 @@ namespace Saxonite.Base.App
UserActivity_UserAccountId,
UserActivity_ItemType,
UserActivity_ItemId,
UserActivity_CurrentlyListed,
UserActivity_ListedAtFirst,
UserActivity_ListedAtLast,
UserActivity_ViewedAtFirst,
UserActivity_ViewedAtLast,
UserActivity_Reaction,
UserActivity_ReactedAtFirst,
UserActivity_ReactedAtLast,
UserActivity_UserActivityData,
UserActivity_Notes,
UserActivity_Flags,
@@ -262,7 +269,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 14;
private static readonly int columnCount = 219;
private static readonly int columnCount = 226;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -609,7 +616,14 @@ namespace Saxonite.Base.App
new ColumnDfn(10,"UserAccountId",4,4,false,10),
new ColumnDfn(10,"ItemType",3,5,false,5),
new ColumnDfn(10,"ItemId",5,-5,false,19),
new ColumnDfn(10,"CurrentlyListed",1,-7,false,1),
new ColumnDfn(10,"ListedAtFirst",9,93,false,16),
new ColumnDfn(10,"ListedAtLast",9,93,false,16),
new ColumnDfn(10,"ViewedAtFirst",9,93,false,16),
new ColumnDfn(10,"ViewedAtLast",9,93,false,16),
new ColumnDfn(10,"Reaction",3,5,false,5),
new ColumnDfn(10,"ReactedAtFirst",9,93,false,16),
new ColumnDfn(10,"ReactedAtLast",9,93,false,16),
new ColumnDfn(10,"UserActivityData",0,-9,false,0),
new ColumnDfn(10,"Notes",0,-9,false,2000),
new ColumnDfn(10,"Flags",3,5,false,5),
@@ -23,6 +23,12 @@ namespace Saxonite.Net.Standard.Base.Bus
ItemType_Code,
ItemType_Desc,
ItemId,
// User Activity.
UserActivity_UserAccountId,
UserActivity_ListedAtLast,
UserActivity_ViewedAtLast,
UserActivity_Reaction,
UserActivity_ReactedAtLast,
// Journalist Article.
Article_Headline,
Article_Summary,
@@ -230,6 +236,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public List<SysId> RegionIdsIncluded { get; } = new List<SysId>();
public DateTime EffectiveFrom { get; set; }
public DateTime EffectiveTo { get; set; }
/// <summary>User Account - to include User Activity data in result.</summary>
public SysId UserAccountId { get; set; }
// Table aliases - blank if not linked.
public String Alias_ActivityIndex { get; set; }
}
@@ -30,6 +30,13 @@ namespace Saxonite.Net.Standard.Base.Bus
ItemType_Code,
ItemType_Desc,
ItemId,
FirstListedAt,
LastListedAt,
FirstViewedAt,
LastViewedAt,
Reaction,
FirstReactedAt,
LastReactedAt,
// Associated data.
// Common.
Notes,
@@ -47,7 +54,14 @@ namespace Saxonite.Net.Standard.Base.Bus
{
public SysId UserAccountId { get; set; }
public ItemId ItemId { get; set; }
public bool CurrentlyListed {get; set; }
public DateTime ListedAtFirst { get; set; }
public DateTime ListedAtLast { get; set; }
public DateTime ViewedAtFirst { get; set; }
public DateTime ViewedAtLast { get; set; }
public Sax.ActivityReaction Reaction { get; set; }
public DateTime ReactedAtFirst { get; set; }
public DateTime ReactedAtLast { get; set; }
public String UserActivityData { get; set; }
}
@@ -73,11 +87,46 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.ItemId; }
set { CheckChanged(data.ItemId, value); data.ItemId = value; }
}
public bool CurrentlyListed
{
get { return data.CurrentlyListed; }
set { CheckChanged(data.CurrentlyListed, value); data.CurrentlyListed = value; }
}
public DateTime ListedAtFirst
{
get { return data.ListedAtFirst; }
set { CheckChanged(data.ListedAtFirst, value); data.ListedAtFirst = value; }
}
public DateTime ListedAtLast
{
get { return data.ListedAtLast; }
set { CheckChanged(data.ListedAtLast, value); data.ListedAtLast = value; }
}
public DateTime ViewedAtFirst
{
get { return data.ViewedAtFirst; }
set { CheckChanged(data.ViewedAtFirst, value); data.ViewedAtFirst = value; }
}
public DateTime ViewedAtLast
{
get { return data.ViewedAtLast; }
set { CheckChanged(data.ViewedAtLast, value); data.ViewedAtLast = value; }
}
public Sax.ActivityReaction Reaction
{
get { return data.Reaction; }
set { CheckChanged((int)data.Reaction, (int)value); data.Reaction = value; }
}
public DateTime ReactedAtFirst
{
get { return data.ReactedAtFirst; }
set { CheckChanged(data.ReactedAtFirst, value); data.ReactedAtFirst = value; }
}
public DateTime ReactedAtLast
{
get { return data.ReactedAtLast; }
set { CheckChanged(data.ReactedAtLast, value); data.ReactedAtLast = value; }
}
public String UserActivityData
{
get { return data.UserActivityData; }
@@ -88,7 +137,14 @@ namespace Saxonite.Net.Standard.Base.Bus
{
UserAccountId = data.UserAccountId;
ItemId = data.ItemId;
CurrentlyListed = data.CurrentlyListed;
ListedAtFirst = data.ListedAtFirst;
ListedAtLast = data.ListedAtLast;
ViewedAtFirst = data.ViewedAtFirst;
ViewedAtLast = data.ViewedAtLast;
Reaction = data.Reaction;
ReactedAtFirst = data.ReactedAtFirst;
ReactedAtLast = data.ReactedAtLast;
UserActivityData = data.UserActivityData;
base.PopulateFrom(data);
}
@@ -107,7 +163,14 @@ namespace Saxonite.Net.Standard.Base.Bus
// Identifies the field that has invalid data.
public ValidValue UserAccountId { get; set; } = ValidValue.Valid;
public ValidValue ItemId { get; set; } = ValidValue.Valid;
public ValidValue CurrentlyListed { get; set; } = ValidValue.Valid;
public ValidValue ListedAtFirst { get; set; } = ValidValue.Valid;
public ValidValue ListedAtLast { get; set; } = ValidValue.Valid;
public ValidValue ViewedAtFirst { get; set; } = ValidValue.Valid;
public ValidValue ViewedAtLast { get; set; } = ValidValue.Valid;
public ValidValue Reaction { get; set; } = ValidValue.Valid;
public ValidValue ReactedAtFirst { get; set; } = ValidValue.Valid;
public ValidValue ReactedAtLast { get; set; } = ValidValue.Valid;
public ValidValue UserActivityData { get; set; } = ValidValue.Valid;
}
@@ -175,11 +238,46 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.ItemId; }
protected set { data.ItemId = value; }
}
public bool CurrentlyListed
{
get { return data.CurrentlyListed; }
set { data.CurrentlyListed = value; }
}
public DateTime ListedAtFirst
{
get { return data.ListedAtFirst; }
set { data.ListedAtFirst = value; }
}
public DateTime ListedAtLast
{
get { return data.ListedAtLast; }
set { data.ListedAtLast = value; }
}
public DateTime ViewedAtFirst
{
get { return data.ViewedAtFirst; }
set { data.ViewedAtFirst = value; }
}
public DateTime ViewedAtLast
{
get { return data.ViewedAtLast; }
set { data.ViewedAtLast = value; }
}
public Sax.ActivityReaction Reaction
{
get { return data.Reaction; }
set { data.Reaction = value; }
}
public DateTime ReactedAtFirst
{
get { return data.ReactedAtFirst; }
set { data.ReactedAtFirst = value; }
}
public DateTime ReactedAtLast
{
get { return data.ReactedAtLast; }
set { data.ReactedAtLast = value; }
}
public String UserActivityData
{
get { return data.UserActivityData; }
@@ -15,7 +15,7 @@ namespace Saxonite.Net.Standard.Base.Consoles
// to identifying the activities that are relevant to a User or other context
// that defines at least one region/sport combination and an effective date (usually today).
//=======================================================================
public abstract class SaxActivityConsole : SacsDisposable
public abstract class SaxActivityConsole : SaErrorStateItem
{
//-------------------------------------------------------------------
// Definitions.
@@ -24,6 +24,11 @@ namespace Saxonite.Net.Standard.Base.Consoles
/// </summary>
public class IndexContext
{
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>();
// Default period is ~3 months up to today.
@@ -55,10 +60,15 @@ namespace Saxonite.Net.Standard.Base.Consoles
public DateTime EffectiveOn { get; }
public String Caption { get; protected set; }
public String Blurb { get; protected set; }
public SysId SportId{ get; protected set; }
public String SportName{ get; protected set; }
public SysId SportId { get; protected set; }
public String SportName { get; protected set; }
public SysId RegionId { get; protected set; }
public String RegionName{ get; protected set; }
public String RegionName { get; protected set; }
// User Activity.
public DateTime LastListedAt { get; protected set; }
public DateTime LastViewedAt { get; protected set; }
public Sax.ActivityReaction Reaction { get; protected set; }
public DateTime LastReactedAt { get; protected set; }
}
public List<ActivityData> Items { get; } = new List<ActivityData>();
}
@@ -105,6 +115,8 @@ namespace Saxonite.Net.Standard.Base.Consoles
/// </summary>
public bool StoreActivityIndex(SaxJournalistArticle article, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Only active articles have an activity index.
if (!article.IsStatusActive) ClearActivityIndex(article.GetItemId(), dbUpdateInfo);
@@ -128,6 +140,8 @@ namespace Saxonite.Net.Standard.Base.Consoles
/// </summary>
public bool StoreActivityIndex(SaxOrganisationOpportunity opportunity, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Only active opportunities have an activity index.
if (!opportunity.IsStatusActive) ClearActivityIndex(opportunity.GetItemId(), dbUpdateInfo);
@@ -209,16 +223,15 @@ namespace Saxonite.Net.Standard.Base.Consoles
}
//-------------------------------------------------------------------
// Activity Index data.
protected abstract bool StoreActivityIndexData(IndexData indexData, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
protected abstract bool ClearActivityIndex(ItemId itemId, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// Activity Index Utilities.
protected List<IndexEntryData> GetEntriesForIndex(IndexData indexData)
{
ClearErrorState();
List<IndexEntryData> indexEntries = new List<IndexEntryData>();
if (ItemId.IsValid(indexData.ItemId) && DateUtil.IsValid(indexData.EffectiveOn))
{
@@ -235,6 +248,13 @@ namespace Saxonite.Net.Standard.Base.Consoles
return indexEntries;
}
//-------------------------------------------------------------------
// User Activities
//-------------------------------------------------------------------
public abstract bool RecordUserActivitiesListed(SysId userAccountId, List<ItemId> activityItemIds, DbUpdateInfo dbUpdateInfo);
public abstract bool RecordUserActivityViewed(SysId userAccountId, ItemId activityItemId, DbUpdateInfo dbUpdateInfo);
public abstract bool RecordUserActivityReaction(SysId userAccountId, ItemId activityItemId, Sax.ActivityReaction activityReaction, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
}
//=======================================================================
@@ -26,6 +26,15 @@ namespace Saxonite.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserActivity GetUserActivity(SaxUserActivity.Params prmUserActivity);
public SaxUserActivity GetUserActivityForUserItem(SysId userAccountId, ItemId itemId)
{
if (!SysId.IsValid(userAccountId) || !ItemId.IsValid(itemId)) return null;
SaxUserActivity.Params prmUserActivity = new SaxUserActivity.Params();
prmUserActivity.UserAccountIdsIncluded.Add(userAccountId);
prmUserActivity.ItemIdsIncluded.Add(itemId);
prmUserActivity.StatusCat = SaxUserActivity.StatusCat.Any;
return ActivityMgr.GetUserActivity(prmUserActivity);
}
//-------------------------------------------------------------------
// Validate item data.
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -23,7 +23,14 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt64 _ItemId { get; } = new ColumnDataInt64("ItemId");
public ColumnDataBoolean _CurrentlyListed { get; } = new ColumnDataBoolean("CurrentlyListed");
public ColumnDataDateTime _ListedAtFirst { get; } = new ColumnDataDateTime("ListedAtFirst");
public ColumnDataDateTime _ListedAtLast { get; } = new ColumnDataDateTime("ListedAtLast");
public ColumnDataDateTime _ViewedAtFirst { get; } = new ColumnDataDateTime("ViewedAtFirst");
public ColumnDataDateTime _ViewedAtLast { get; } = new ColumnDataDateTime("ViewedAtLast");
public ColumnDataInt16 _Reaction { get; } = new ColumnDataInt16("Reaction");
public ColumnDataDateTime _ReactedAtFirst { get; } = new ColumnDataDateTime("ReactedAtFirst");
public ColumnDataDateTime _ReactedAtLast { get; } = new ColumnDataDateTime("ReactedAtLast");
public ColumnDataString _UserActivityData { get; } = new ColumnDataString("UserActivityData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
@@ -44,7 +51,14 @@ namespace Saxonite.Net.Standard.Dbas.Internal
"UserAccountId",
"ItemType",
"ItemId",
"CurrentlyListed",
"ListedAtFirst",
"ListedAtLast",
"ViewedAtFirst",
"ViewedAtLast",
"Reaction",
"ReactedAtFirst",
"ReactedAtLast",
"UserActivityData",
"Notes",
"Flags",
@@ -91,7 +105,14 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int64 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Boolean _CurrentlyListed { get { return Cols._CurrentlyListed.Value; } set { Cols._CurrentlyListed.Value = value; } }
public DateTime _ListedAtFirst { get { return Cols._ListedAtFirst.Value; } set { Cols._ListedAtFirst.Value = value; } }
public DateTime _ListedAtLast { get { return Cols._ListedAtLast.Value; } set { Cols._ListedAtLast.Value = value; } }
public DateTime _ViewedAtFirst { get { return Cols._ViewedAtFirst.Value; } set { Cols._ViewedAtFirst.Value = value; } }
public DateTime _ViewedAtLast { get { return Cols._ViewedAtLast.Value; } set { Cols._ViewedAtLast.Value = value; } }
public Int16 _Reaction { get { return Cols._Reaction.Value; } set { Cols._Reaction.Value = value; } }
public DateTime _ReactedAtFirst { get { return Cols._ReactedAtFirst.Value; } set { Cols._ReactedAtFirst.Value = value; } }
public DateTime _ReactedAtLast { get { return Cols._ReactedAtLast.Value; } set { Cols._ReactedAtLast.Value = value; } }
public String _UserActivityData { get { return Cols._UserActivityData.Value; } set { Cols._UserActivityData.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; } }
@@ -127,7 +148,14 @@ namespace Saxonite.Net.Standard.Dbas.Internal
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt64(dbDataReader, "ItemId", _ItemId);
_CurrentlyListed = GetFieldBoolean(dbDataReader, "CurrentlyListed", _CurrentlyListed);
_ListedAtFirst = GetFieldDateTime(dbDataReader, "ListedAtFirst", _ListedAtFirst);
_ListedAtLast = GetFieldDateTime(dbDataReader, "ListedAtLast", _ListedAtLast);
_ViewedAtFirst = GetFieldDateTime(dbDataReader, "ViewedAtFirst", _ViewedAtFirst);
_ViewedAtLast = GetFieldDateTime(dbDataReader, "ViewedAtLast", _ViewedAtLast);
_Reaction = GetFieldInt16(dbDataReader, "Reaction", _Reaction);
_ReactedAtFirst = GetFieldDateTime(dbDataReader, "ReactedAtFirst", _ReactedAtFirst);
_ReactedAtLast = GetFieldDateTime(dbDataReader, "ReactedAtLast", _ReactedAtLast);
_UserActivityData = GetFieldString(dbDataReader, "UserActivityData", _UserActivityData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
@@ -162,7 +190,14 @@ namespace Saxonite.Net.Standard.Dbas.Internal
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("CurrentlyListed")) AddCommandParameter(dbCommand, "@CurrentlyListed", _CurrentlyListed);
if (columnNames.ContainsCI("ListedAtFirst")) AddCommandParameter(dbCommand, "@ListedAtFirst", _ListedAtFirst);
if (columnNames.ContainsCI("ListedAtLast")) AddCommandParameter(dbCommand, "@ListedAtLast", _ListedAtLast);
if (columnNames.ContainsCI("ViewedAtFirst")) AddCommandParameter(dbCommand, "@ViewedAtFirst", _ViewedAtFirst);
if (columnNames.ContainsCI("ViewedAtLast")) AddCommandParameter(dbCommand, "@ViewedAtLast", _ViewedAtLast);
if (columnNames.ContainsCI("Reaction")) AddCommandParameter(dbCommand, "@Reaction", _Reaction);
if (columnNames.ContainsCI("ReactedAtFirst")) AddCommandParameter(dbCommand, "@ReactedAtFirst", _ReactedAtFirst);
if (columnNames.ContainsCI("ReactedAtLast")) AddCommandParameter(dbCommand, "@ReactedAtLast", _ReactedAtLast);
if (columnNames.ContainsCI("UserActivityData")) AddCommandParameter(dbCommand, "@UserActivityData", _UserActivityData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
@@ -212,7 +247,14 @@ namespace Saxonite.Net.Standard.Dbas.Internal
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("CurrentlyListed")) AddCommandParameter(dbCommand, "@CurrentlyListed", _CurrentlyListed);
if (columnNames.ContainsCI("ListedAtFirst")) AddCommandParameter(dbCommand, "@ListedAtFirst", _ListedAtFirst);
if (columnNames.ContainsCI("ListedAtLast")) AddCommandParameter(dbCommand, "@ListedAtLast", _ListedAtLast);
if (columnNames.ContainsCI("ViewedAtFirst")) AddCommandParameter(dbCommand, "@ViewedAtFirst", _ViewedAtFirst);
if (columnNames.ContainsCI("ViewedAtLast")) AddCommandParameter(dbCommand, "@ViewedAtLast", _ViewedAtLast);
if (columnNames.ContainsCI("Reaction")) AddCommandParameter(dbCommand, "@Reaction", _Reaction);
if (columnNames.ContainsCI("ReactedAtFirst")) AddCommandParameter(dbCommand, "@ReactedAtFirst", _ReactedAtFirst);
if (columnNames.ContainsCI("ReactedAtLast")) AddCommandParameter(dbCommand, "@ReactedAtLast", _ReactedAtLast);
if (columnNames.ContainsCI("UserActivityData")) AddCommandParameter(dbCommand, "@UserActivityData", _UserActivityData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 8-Jun-2021 19:08:09
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -238,15 +238,17 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasActivityIndex = "ActIdx";
private static readonly String aliasActivityIndex_Article = "ActIdx_JrnArt";
private static readonly String prefixActivityIndex_Article = "ActIdx_JrnArt_";
private static readonly String aliasActivityIndex_Opportunity = "ActIdx_OrgOpp";
private static readonly String prefixActivityIndex_Opportunity = "ActIdx_OrgOpp_";
private static readonly String aliasActivityIndex_Region = "ActIdx_Rgn";
private static readonly String prefixActivityIndex_Region = "ActIdx_Rgn_";
private static readonly String aliasActivityIndex_Sport = "ActIdx_Spt";
private static readonly String prefixActivityIndex_Sport = "ActIdx_Spt_";
public static String aliasActivityIndex { get; } = "ActIdx";
public static String aliasActivityIndex_UserActivity { get; } = "ActIdx_UsrAct";
private static String prefixActivityIndex_UserActivity { get; } = aliasActivityIndex_UserActivity + "_";
public static String aliasActivityIndex_Article { get; } = "ActIdx_JrnArt";
private static String prefixActivityIndex_Article { get; } = aliasActivityIndex_Article + "_";
public static String aliasActivityIndex_Opportunity { get; } = "ActIdx_OrgOpp";
private static String prefixActivityIndex_Opportunity { get; } = aliasActivityIndex_Opportunity + "_";
public static String aliasActivityIndex_Region { get; } = "ActIdx_Rgn";
private static String prefixActivityIndex_Region { get; } = aliasActivityIndex_Region + "_";
public static String aliasActivityIndex_Sport { get; } = "ActIdx_Spt";
private static String prefixActivityIndex_Sport { get; } = aliasActivityIndex_Sport + "_";
private void SetActivityIndexColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
@@ -290,6 +292,29 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// User Activity.
case SaxActivityIndex.Column.UserActivity_UserAccountId:
SetActivityIndexColDfn(columnDfn, "User #", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_ListedAtLast:
SetActivityIndexColDfn(columnDfn, "Last Listed", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_ViewedAtLast:
SetActivityIndexColDfn(columnDfn, "Last Viewed", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_Reaction:
SetActivityIndexColDfn(columnDfn, "Reaction", 60, SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_ReactedAtLast:
SetActivityIndexColDfn(columnDfn, "Last Reacted", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Article.
case SaxActivityIndex.Column.Article_Headline:
@@ -546,6 +571,26 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (columns.HasId(SaxActivityIndex.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_UpdateOn, aliasActivityIndex));
//---------------------------------------------------------------------
// User Activity.
if (columns.HasId(SaxActivityIndex.Column.UserActivity_UserAccountId) || columns.HasId(SaxActivityIndex.Column.UserActivity_ListedAtLast) || columns.HasId(SaxActivityIndex.Column.UserActivity_ViewedAtLast) || columns.HasId(SaxActivityIndex.Column.UserActivity_Reaction) || columns.HasId(SaxActivityIndex.Column.UserActivity_ReactedAtLast))
{
DbQueryJoin joinUserActivity = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserActivity.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity), aliasActivityIndex_UserActivity);
joinUserActivity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserActivityData, aliasActivityIndex_UserActivity) + "=" + prm.UserAccountId.ToString());
joinUserActivity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasActivityIndex_UserActivity) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex));
joinUserActivity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasActivityIndex_UserActivity) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex));
query.Joins.Add(joinUserActivity);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_UserActivity), prefixActivityIndex_UserActivity + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Article.
if (columns.HasId(SaxActivityIndex.Column.Article_Headline) || columns.HasId(SaxActivityIndex.Column.Article_Summary))
@@ -207,7 +207,14 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
dbUserActivity._UserAccountId = SysId.ToInt(userActivity.UserAccountId);
dbUserActivity._ItemType = userActivity.ItemId.Type;
dbUserActivity._ItemId = SysId.ToInt(userActivity.ItemId.Id);
dbUserActivity._CurrentlyListed = userActivity.CurrentlyListed;
dbUserActivity._ListedAtFirst = userActivity.ListedAtFirst;
dbUserActivity._ListedAtLast = userActivity.ListedAtLast;
dbUserActivity._ViewedAtFirst = userActivity.ViewedAtFirst;
dbUserActivity._ViewedAtLast = userActivity.ViewedAtLast;
dbUserActivity._Reaction = (short)userActivity.Reaction;
dbUserActivity._ReactedAtFirst = userActivity.ReactedAtFirst;
dbUserActivity._ReactedAtLast = userActivity.ReactedAtLast;
dbUserActivity._UserActivityData = userActivity.UserActivityData;
dbUserActivity._Notes = userActivity.Notes;
dbUserActivity._Status = SacsSystem.GetStatusCode(userActivity.Status);
@@ -227,7 +234,14 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
//userActivity.Id = new SysId(dbUserActivity._Id);
//userActivity.UserAccountId = new SysId(dbUserActivity._UserAccountId);
//userActivity.ItemId = new ItemId(dbUserActivity._ItemType, new SysId(dbUserActivity._ItemId);
userActivity.CurrentlyListed = dbUserActivity._CurrentlyListed;
userActivity.ListedAtFirst = dbUserActivity._ListedAtFirst;
userActivity.ListedAtLast = dbUserActivity._ListedAtLast;
userActivity.ViewedAtFirst = dbUserActivity._ViewedAtFirst;
userActivity.ViewedAtLast = dbUserActivity._ViewedAtLast;
userActivity.Reaction = (Sax.ActivityReaction)dbUserActivity._Reaction;
userActivity.ReactedAtFirst = dbUserActivity._ReactedAtFirst;
userActivity.ReactedAtLast = dbUserActivity._ReactedAtLast;
userActivity.UserActivityData = dbUserActivity._UserActivityData;
userActivity.Notes = dbUserActivity._Notes;
userActivity.Status = SacsSystem.GetStatusForCode(dbUserActivity._Status);
@@ -240,7 +254,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// Item column definitions.
private static readonly String aliasUserActivity = "UsrAct";
private static readonly String aliasUserActivity_UserAccount = "UsrAct_UsrAct";
private static readonly String prefixUserActivity_UserAccount= "UsrAct_UsrAct_";
private static readonly String prefixUserActivity_UserAccount = "UsrAct_UsrAct_";
private static readonly String aliasUserActivity_Article = "UsrAct_JrnArt";
private static readonly String prefixUserActivity_Article = "UsrAct_JrnArt_";
private static readonly String aliasUserActivity_Opportunity = "UsrAct_OrgOpp";
@@ -321,6 +335,27 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
//-----------------------------------------------------------
// Properties.
case SaxUserActivity.Column.FirstListedAt:
SetUserActivityColDfn(columnDfn, "First listed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.LastListedAt:
SetUserActivityColDfn(columnDfn, "Last listed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.FirstViewedAt:
SetUserActivityColDfn(columnDfn, "First viewed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.LastViewedAt:
SetUserActivityColDfn(columnDfn, "Last viewed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.Reaction:
SetUserActivityColDfn(columnDfn, "Reaction", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserActivity.Column.FirstReactedAt:
SetUserActivityColDfn(columnDfn, "First reacted", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.LastReactedAt:
SetUserActivityColDfn(columnDfn, "Last reacted", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
//-----------------------------------------------------------
// Derived properties.
@@ -501,9 +536,23 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (columns.HasId(SaxUserActivity.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Id, aliasUserActivity));
bool hasUserAccountCols = (columns.HasId(SaxUserActivity.Column.User_EmailAddress) || columns.HasId(SaxUserActivity.Column.User_DisplayName) || columns.HasId(SaxUserActivity.Column.User_Title) || columns.HasId(SaxUserActivity.Column.User_FirstName) || columns.HasId(SaxUserActivity.Column.User_LastName));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasUserActivity));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.FirstListedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtFirst, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.LastListedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.FirstViewedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtFirst, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.LastViewedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.Reaction))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.FirstReactedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtFirst, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.LastReactedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, aliasUserActivity));
// Common properties.
if (columns.HasId(SaxUserActivity.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Notes, aliasUserActivity));
@@ -3503,6 +3503,91 @@
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>5</Pos>
<Name>CurrentlyListed</Name>
<DataType>Bit</DataType>
<DataTypeName />
<DataTypeNative>-7</DataTypeNative>
<DataTypeNameNative>bit</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>1</Size>
<BufferLen>1</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>NoNulls</Nullable>
<IsNullable>false</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>6</Pos>
<Name>ListedAtFirst</Name>
<DataType>DateTime</DataType>
<DataTypeName />
<DataTypeNative>93</DataTypeNative>
<DataTypeNameNative>smalldatetime</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>16</Size>
<BufferLen>16</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>NoNulls</Nullable>
<IsNullable>false</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>7</Pos>
<Name>ListedAtLast</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>UserActivity</Table>
<Pos>8</Pos>
<Name>ViewedAtFirst</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>UserActivity</Table>
<Pos>9</Pos>
<Name>ViewedAtLast</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>UserActivity</Table>
<Pos>10</Pos>
<Name>Reaction</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
@@ -3512,6 +3597,23 @@
<Size>5</Size>
<BufferLen>2</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>NoNulls</Nullable>
<IsNullable>false</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>11</Pos>
<Name>ReactedAtFirst</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 />
@@ -3519,7 +3621,24 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>6</Pos>
<Pos>12</Pos>
<Name>ReactedAtLast</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>UserActivity</Table>
<Pos>13</Pos>
<Name>UserActivityData</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3529,14 +3648,14 @@
<Size>0</Size>
<BufferLen>0</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Nullable>NoNulls</Nullable>
<IsNullable>false</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>7</Pos>
<Pos>14</Pos>
<Name>Notes</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3553,7 +3672,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>8</Pos>
<Pos>15</Pos>
<Name>Flags</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
@@ -3570,7 +3689,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>9</Pos>
<Pos>16</Pos>
<Name>Status</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3587,7 +3706,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>10</Pos>
<Pos>17</Pos>
<Name>CreateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3604,7 +3723,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>11</Pos>
<Pos>18</Pos>
<Name>CreateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -3621,7 +3740,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>12</Pos>
<Pos>19</Pos>
<Name>CreateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3638,7 +3757,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>13</Pos>
<Pos>20</Pos>
<Name>UpdateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3655,7 +3774,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>14</Pos>
<Pos>21</Pos>
<Name>UpdateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -3672,7 +3791,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Pos>15</Pos>
<Pos>22</Pos>
<Name>UpdateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3783,6 +3902,31 @@
</DbDfnIndexColumn>
</Columns>
</DbDfnIndex>
<DbDfnIndex>
<Schema>dbo</Schema>
<Table>UserActivity</Table>
<Name>IDX_UserActivity_User_CurrentlyListed</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>UserAccountId</Name>
<Ascend>true</Ascend>
</DbDfnIndexColumn>
<DbDfnIndexColumn>
<Seq>2</Seq>
<Name>CurrentlyListed</Name>
<Ascend>true</Ascend>
</DbDfnIndexColumn>
</Columns>
</DbDfnIndex>
</Indices>
</DbDfnTable>
<DbDfnTable>