Refresh Online Session with profile region and sports.
This commit is contained in:
2021-06-02 16:52:57 +01:00
parent 7b0a710b13
commit 7e5940a542
62 changed files with 601 additions and 214 deletions
+4 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.0.5.3";
private static String version { get; } = "1.0.6.0";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
@@ -39,6 +39,9 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
// Version history.
//-------------------------------------------------------------------
// 1.0.6 ?-Jun-2021 ???
// - ?.
// 1.0.5 31-May-2021 Activity Index
// - Admin Database Schema (Home) and Tables page.
// - Online Account country, Home activities.
+19 -4
View File
@@ -88,6 +88,8 @@ namespace Saxonite.Net.Standard.Base.App
public enum CodeType
{
YesNo,
SportParticipation,
SportOfficiating,
RegionType,
UserRole,
Title,
@@ -170,10 +172,23 @@ namespace Saxonite.Net.Standard.Base.App
{
Unknown = 0,
/* Do not change the values/codes - tied to database. */
Regular,
Occasional,
Spectator,
Interested
Professional = 100,
Regular = 200,
Occasional = 300,
Spectator = 400,
Interested = 900,
}
//-------------------------------------------------------------------
/// <summary>Sport Officiating</summary>
public enum SportOfficiating
{
Unknown = 0,
/* Do not change the values/codes - tied to database. */
Professional = 100,
Regular = 200,
Occasional = 300,
Interested = 900,
}
//-------------------------------------------------------------------
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 25-May-2021 19:36:10
// Code generated by Sarand Database Utilities Wed 2-Jun-2021 15:39:57
//---------------------------------------------------------------------------
namespace Saxonite.Base.App
{
@@ -201,6 +201,8 @@ namespace Saxonite.Base.App
UserSport_Id,
UserSport_UserAccountId,
UserSport_SportId,
UserSport_Participation,
UserSport_Officiating,
UserSport_UserSportData,
UserSport_Notes,
UserSport_Flags,
@@ -216,7 +218,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 11;
private static readonly int columnCount = 176;
private static readonly int columnCount = 178;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -565,6 +567,8 @@ namespace Saxonite.Base.App
new ColumnDfn(11,"Id",4,4,true,10),
new ColumnDfn(11,"UserAccountId",4,4,false,10),
new ColumnDfn(11,"SportId",4,4,false,10),
new ColumnDfn(11,"Participation",3,5,false,5),
new ColumnDfn(11,"Officiating",3,5,false,5),
new ColumnDfn(11,"UserSportData",0,-9,false,0),
new ColumnDfn(11,"Notes",0,-9,false,2000),
new ColumnDfn(11,"Flags",3,5,false,5),
@@ -87,13 +87,15 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
// System codes.
private readonly Dictionary<Sax.CodeType, List<TypeCodeDesc>> codeTypes = new Dictionary<Sax.CodeType, List<TypeCodeDesc>>();
public List<TypeCodeDesc> RegionTypes { get { return GetCodesOfType(Sax.CodeType.RegionType); } }
public List<TypeCodeDesc> UserRoles { get { return GetCodesOfType(Sax.CodeType.UserRole); } }
public List<TypeCodeDesc> OrganisationTypes { get { return GetCodesOfType(Sax.CodeType.OrganisationType); } }
public List<TypeCodeDesc> OrganisationCategories { get { return GetCodesOfType(Sax.CodeType.OrganisationCategory); } }
public List<TypeCodeDesc> OrganisationRoles { get { return GetCodesOfType(Sax.CodeType.OrganisationRole); } }
public List<TypeCodeDesc> OpportunityTypes { get { return GetCodesOfType(Sax.CodeType.OpportunityType); } }
public List<TypeCodeDesc> DataItemTypes { get { return GetCodesOfType(Sax.CodeType.DataItemType); } }
public List<TypeCodeDesc> SportParticipationCodes { get { return GetCodesOfType(Sax.CodeType.SportParticipation); } }
public List<TypeCodeDesc> SportOfficiatingCodes { get { return GetCodesOfType(Sax.CodeType.SportOfficiating); } }
public List<TypeCodeDesc> RegionTypeCodes { get { return GetCodesOfType(Sax.CodeType.RegionType); } }
public List<TypeCodeDesc> UserRoleCodes { get { return GetCodesOfType(Sax.CodeType.UserRole); } }
public List<TypeCodeDesc> OrganisationTypeCodes { get { return GetCodesOfType(Sax.CodeType.OrganisationType); } }
public List<TypeCodeDesc> OrganisationCategoryCodes { get { return GetCodesOfType(Sax.CodeType.OrganisationCategory); } }
public List<TypeCodeDesc> OrganisationRoleCodes { get { return GetCodesOfType(Sax.CodeType.OrganisationRole); } }
public List<TypeCodeDesc> OpportunityTypeCodes { get { return GetCodesOfType(Sax.CodeType.OpportunityType); } }
public List<TypeCodeDesc> DataItemTypeCodes { get { return GetCodesOfType(Sax.CodeType.DataItemType); } }
public List<TypeCodeDesc> GetCodesOfType(Sax.CodeType codeType)
{
if (!codeTypes.ContainsKey(codeType))
+40 -14
View File
@@ -14,7 +14,7 @@ using Newtonsoft.Json.Converters;
namespace Saxonite.Net.Standard.Base.App
{
//=======================================================================
public class SaxSessionData
public abstract class SaxSessionData
{
//-------------------------------------------------------------------
// Protected construction.
@@ -28,7 +28,7 @@ namespace Saxonite.Net.Standard.Base.App
private SaxSessionData(SaxSessionContext sessionContext)
{
SessionContext = sessionContext;
User = new UserData(SessionContext, null, null);
userData = CreateUserData(SessionContext, null, null);
}
/// <summary>
/// Primary constructor - on user login.
@@ -38,7 +38,7 @@ namespace Saxonite.Net.Standard.Base.App
protected SaxSessionData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles)
{
SessionContext = sessionContext;
User = new UserData(SessionContext, userAccount, userRoles);
userData = CreateUserData(SessionContext, userAccount, userRoles);
}
//-------------------------------------------------------------------
@@ -60,17 +60,12 @@ namespace Saxonite.Net.Standard.Base.App
public class UserData
{
protected UserData() { }
public UserData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles)
protected UserData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles)
{
if (userAccount != null)
{
UserAccountId = userAccount.Id;
FirstName = userAccount.FirstName;
LastName = userAccount.LastName;
DisplayName = userAccount.GetDisplayName();
EmailAddress = userAccount.EmailAddress;
RegionIdCountry = userAccount.RegionIdCountry;
RegionIdProvince = userAccount.RegionIdProvince;
RefreshUserData(userAccount);
if (sessionContext.Application == Sax.Application.Admin)
KeepLoggedIn = userAccount.KeepLoggedIn_Admin;
else if (sessionContext.Application == Sax.Application.Online)
@@ -84,7 +79,22 @@ namespace Saxonite.Net.Standard.Base.App
}
}
}
protected UserData(UserData userData)
{
UserAccountId = userData.UserAccountId;
Title = userData.Title;
FirstName = userData.FirstName;
LastName = userData.LastName;
DisplayName = userData.DisplayName;
EmailAddress = userData.EmailAddress;
RegionIdCountry = userData.RegionIdCountry;
RegionIdProvince = userData.RegionIdProvince;
KeepLoggedIn = userData.KeepLoggedIn;
roles.AddRange(userData.Roles);
}
// Properties.
public SysId UserAccountId { get; protected set; }
public String Title { get; protected set; }
public String FirstName { get; protected set; }
public String LastName { get; protected set; }
public String DisplayName { get; protected set; }
@@ -93,6 +103,21 @@ namespace Saxonite.Net.Standard.Base.App
public SysId RegionIdProvince { get; protected set; }
public bool KeepLoggedIn { get; protected set; }
public bool UserAccountSupplied { get; protected set; }
// Refresh properties.
protected bool RefreshUserData(SaxUserAccount userAccount)
{
// Check that user matches the session.
if (!SysId.IsValid(UserAccountId) || !SysId.IsValid(userAccount?.Id ?? null) || !UserAccountId.Equals(userAccount.Id)) return false;
// Refresh properties.
Title = userAccount.Title;
FirstName = userAccount.FirstName;
LastName = userAccount.LastName;
DisplayName = userAccount.GetDisplayName();
EmailAddress = userAccount.EmailAddress;
RegionIdCountry = userAccount.RegionIdCountry;
RegionIdProvince = userAccount.RegionIdProvince;
return true;
}
// Roles.
public class RoleData
{
@@ -107,19 +132,20 @@ namespace Saxonite.Net.Standard.Base.App
public Sax.UserRole Role { get; protected set; }
public SaStatus Status { get; protected set; }
}
[JsonIgnore]
private readonly List<RoleData> roles = new List<RoleData>();
public List<RoleData> Roles { get { return new List<RoleData>(roles); } protected set { roles.Clear(); roles.AddRange(value); } }
[JsonIgnore]
public bool IsJournalist { get { return roles?.Exists(item => item.Role == Sax.UserRole.Journalist) ?? false; } }
}
public UserData User { get; private set; }
protected abstract UserData CreateUserData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles);
private UserData userData;
public UserData User { get { return userData; } }
/// <summary>User - JSON deserialisation route.</summary>
protected void SetUser(UserData user)
{
if (User != null && User.UserAccountSupplied)
if (this.userData != null && User.UserAccountSupplied)
throw new NotSupportedException("Session User cannot be replaced.");
User = user;
this.userData = user;
}
//-------------------------------------------------------------------
@@ -14,8 +14,10 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
// Data members.
// Code types.
private static readonly List<TypeCodeDesc> regionTypeCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> yesNoCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> sportParticipationCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> sportOfficiatingCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> regionTypeCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> userRoleCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> titleCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> organisationTypeCodes = new List<TypeCodeDesc>();
@@ -33,6 +35,20 @@ namespace Saxonite.Net.Standard.Base.App
yesNoCodes.Add(Sax.YesNo.Yes, "YES", "Yes");
yesNoCodes.Add(Sax.YesNo.No, "NO", "No");
//---------------------------------------------------------------
// Sport participation.
sportParticipationCodes.Add(Sax.SportParticipation.Professional, "PRO", "Professional");
sportParticipationCodes.Add(Sax.SportParticipation.Regular, "REG", "Regular");
sportParticipationCodes.Add(Sax.SportParticipation.Occasional, "OCC", "Occasional");
sportParticipationCodes.Add(Sax.SportParticipation.Spectator, "SPC", "Spectator");
sportParticipationCodes.Add(Sax.SportParticipation.Interested, "INT", "Interested");
//---------------------------------------------------------------
// Sport officiating.
sportOfficiatingCodes.Add(Sax.SportParticipation.Professional, "PRO", "Professional");
sportOfficiatingCodes.Add(Sax.SportParticipation.Regular, "REG", "Regular");
sportOfficiatingCodes.Add(Sax.SportParticipation.Occasional, "OCC", "Occasional");
//---------------------------------------------------------------
// Region types.
regionTypeCodes.Add(Sax.RegionType.Continent, "CONT", "Continent");
@@ -38,6 +38,10 @@ namespace Saxonite.Net.Standard.Base.App
{
case Sax.CodeType.YesNo:
return new List<TypeCodeDesc>(yesNoCodes);
case Sax.CodeType.SportParticipation:
return new List<TypeCodeDesc>(sportParticipationCodes);
case Sax.CodeType.SportOfficiating:
return new List<TypeCodeDesc>(sportOfficiatingCodes);
case Sax.CodeType.RegionType:
return new List<TypeCodeDesc>(regionTypeCodes);
case Sax.CodeType.UserRole:
@@ -28,6 +28,12 @@ namespace Saxonite.Net.Standard.Base.Bus
// Sport.
SportId,
Sport_Name,
SportParticipation,
SportParticipation_Code,
SportParticipation_Desc,
SportOfficiating,
SportOfficiating_Code,
SportOfficiating_Desc,
// Associated data.
// Common.
Notes,
@@ -45,6 +51,8 @@ namespace Saxonite.Net.Standard.Base.Bus
{
public SysId UserAccountId { get; set; }
public SysId SportId { get; set; }
public Sax.SportParticipation Participation { get; set; }
public Sax.SportOfficiating Officiating { get; set; }
public String UserSportData { get; set; }
}
@@ -70,6 +78,16 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.SportId; }
set { CheckChanged(data.SportId, value); data.SportId = value; }
}
public Sax.SportParticipation Participation
{
get { return data.Participation; }
set { CheckChanged((int)data.Participation, (int)value); data.Participation = value; }
}
public Sax.SportOfficiating Officiating
{
get { return data.Officiating; }
set { CheckChanged((int)data.Officiating, (int)value); data.Officiating = value; }
}
public String UserSportData
{
get { return data.UserSportData; }
@@ -79,6 +97,8 @@ namespace Saxonite.Net.Standard.Base.Bus
internal void PopulateFrom(Data data)
{
UserAccountId = data.UserAccountId;
Participation = data.Participation;
Officiating = data.Officiating;
SportId = data.SportId;
UserSportData = data.UserSportData;
base.PopulateFrom(data);
@@ -97,6 +117,8 @@ namespace Saxonite.Net.Standard.Base.Bus
{
// Identifies the field that has invalid data.
public ValidValue UserAccountId { get; set; } = ValidValue.Valid;
public ValidValue Participation { get; set; } = ValidValue.Valid;
public ValidValue Officiating { get; set; } = ValidValue.Valid;
public ValidValue SportId { get; set; } = ValidValue.Valid;
public ValidValue UserSportData { get; set; } = ValidValue.Valid;
}
@@ -165,6 +187,16 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.SportId; }
protected set { data.SportId = value; }
}
public Sax.SportParticipation Participation
{
get { return data.Participation; }
set { data.Participation = value; }
}
public Sax.SportOfficiating Officiating
{
get { return data.Officiating; }
set { data.Officiating = value; }
}
public String UserSportData
{
get { return data.UserSportData; }
@@ -179,7 +179,7 @@ namespace Saxonite.Net.Standard.Base.Mgr
case SaxUserRole.Column.UserRole_Desc:
{
String userRoleCode = values.GetValue(column.DataName).ToString();
value = new DataValue(UserRoles.GetDescForCode(userRoleCode));
value = new DataValue(UserRoleCodes.GetDescForCode(userRoleCode));
}
break;
@@ -204,6 +204,28 @@ namespace Saxonite.Net.Standard.Base.Mgr
DataValue value = new DataValue();
switch ((SaxUserSport.Column)column.Id)
{
//-----------------------------------------------------------
// Sport Participation.
case SaxUserSport.Column.SportParticipation_Code:
case SaxUserSport.Column.SportParticipation_Desc:
Sax.SportParticipation sportParticipation = (Sax.SportParticipation)values.GetLong(column.DataName);
if (column.Id == (int)SaxUserSport.Column.SportParticipation_Code)
value = new DataValue(SportParticipationCodes.GetCodeForType(sportParticipation));
else
value = new DataValue(SportParticipationCodes.GetDescForType(sportParticipation));
break;
//-----------------------------------------------------------
// Sport Officiating.
case SaxUserSport.Column.SportOfficiating_Code:
case SaxUserSport.Column.SportOfficiating_Desc:
Sax.SportOfficiating sportOfficiating = (Sax.SportOfficiating)values.GetLong(column.DataName);
if (column.Id == (int)SaxUserSport.Column.SportOfficiating_Code)
value = new DataValue(SportOfficiatingCodes.GetCodeForType(sportOfficiating));
else
value = new DataValue(SportOfficiatingCodes.GetDescForType(sportOfficiating));
break;
//-----------------------------------------------------------
// Notes.
case SaxUserSport.Column.Notes:
@@ -133,12 +133,12 @@ namespace Saxonite.Net.Standard.Base.Mgr
// Data item type.
case SaxActivityIndex.Column.ItemType_Code:
{
value = new DataValue(DataItemTypes.GetCodeForType(values.GetLong(column.DataName)));
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxActivityIndex.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypes.GetDescForType(values.GetLong(column.DataName)));
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
@@ -196,7 +196,7 @@ namespace Saxonite.Net.Standard.Base.Mgr
case SaxOrganisationOpportunity.Column.OpportunityType_Desc:
{
String code = values.GetValue(column.DataName).ToString();
value = new DataValue(OpportunityTypes.GetDescForCode(code, code));
value = new DataValue(OpportunityTypeCodes.GetDescForCode(code, code));
}
break;
@@ -150,12 +150,12 @@ namespace Saxonite.Net.Standard.Base.Mgr
// Data item type.
case SaxItemSport.Column.ItemType_Code:
{
value = new DataValue(DataItemTypes.GetCodeForType(values.GetLong(column.DataName)));
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxItemSport.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypes.GetDescForType(values.GetLong(column.DataName)));
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
+10 -8
View File
@@ -45,7 +45,7 @@ namespace Saxonite.Net.Standard.Base.Mgr
public ISacsDatabase CoreDatabase { get { return Internals.CoreDatabase; } }
public IDatabaseInfo CoreDbInfo { get { return Internals.CreateCoreDbInfo(); } }
// Business components.
protected SaxInternals Internals
protected SaxInternals Internals
{
get
{
@@ -66,13 +66,15 @@ namespace Saxonite.Net.Standard.Base.Mgr
public SaxActivityMgr ActivityMgr { get { return Internals.ActivityMgr; } }
public SaxItemDataMgr ItemDataMgr { get { return Internals.ItemDataMgr; } }
// Application codes.
public List<TypeCodeDesc> RegionTypes { get { return Internals.RegionTypes; } }
public List<TypeCodeDesc> UserRoles { get { return Internals.UserRoles; } }
public List<TypeCodeDesc> OrganisationTypes { get { return Internals.OrganisationTypes; } }
public List<TypeCodeDesc> OrganisationCategories { get { return Internals.OrganisationCategories; } }
public List<TypeCodeDesc> OrganisationRoles { get { return Internals.OrganisationRoles; } }
public List<TypeCodeDesc> OpportunityTypes { get { return Internals.OpportunityTypes; } }
public List<TypeCodeDesc> DataItemTypes { get { return Internals.DataItemTypes; } }
public List<TypeCodeDesc> SportParticipationCodes { get { return Internals.SportParticipationCodes; } }
public List<TypeCodeDesc> SportOfficiatingCodes { get { return Internals.SportOfficiatingCodes; } }
public List<TypeCodeDesc> RegionTypeCodes { get { return Internals.RegionTypeCodes; } }
public List<TypeCodeDesc> UserRoleCodes { get { return Internals.UserRoleCodes; } }
public List<TypeCodeDesc> OrganisationTypeCodes { get { return Internals.OrganisationTypeCodes; } }
public List<TypeCodeDesc> OrganisationCategoryCodes { get { return Internals.OrganisationCategoryCodes; } }
public List<TypeCodeDesc> OrganisationRoleCodes { get { return Internals.OrganisationRoleCodes; } }
public List<TypeCodeDesc> OpportunityTypeCodes { get { return Internals.OpportunityTypeCodes; } }
public List<TypeCodeDesc> DataItemTypeCodes { get { return Internals.DataItemTypeCodes; } }
//-------------------------------------------------------------------
}