v1.0.8.1
This commit is contained in:
@@ -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 |
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -504,6 +539,20 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
|
||||
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>
|
||||
|
||||
Reference in New Issue
Block a user