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
@@ -157,6 +157,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"]));
}
// Refresh profile contact details to session.
RefreshSessionProfileContact(userAccount);
// Construct response.
responseData.Contact = new ContactResponseData();
PopulateContactResponseData(responseData.Contact, userAccount);
@@ -14,6 +14,7 @@ using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
namespace Saxonite.Net.Core.Web.Online.Controllers
{
@@ -29,11 +30,15 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public long Id { get; set; }
public long SportId { get; set; }
public String SportName { get; set; }
public String SportParticipation { get; set; }
public String SportOfficiating { get; set; }
public String StatusCode { get; set; }
public String StatusDesc { get; set; }
}
public class ProfileSportResponseData_Item : ProfileSportResponseData_List
{
public String SportParticipationCode { get; set; }
public String SportOfficiatingCode { get; set; }
public String CreatedOnFmt { get; set; }
}
private void PopulateProfileSportResponseData(Model_Account model, SaxUserSport userSport, SaxSport sport, ProfileSportResponseData_Item data)
@@ -41,6 +46,10 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
data.Id = SysId.ToLong(userSport.Id);
data.SportId = SysId.ToLong(userSport.SportId);
data.SportName = sport.Name;
data.SportParticipationCode = SportParticipationCodes.GetCodeForType(userSport.Participation);
data.SportParticipation = Localiser.GetSportParticipationTypeCaption(userSport.Participation);
data.SportOfficiatingCode = SportOfficiatingCodes.GetCodeForType(userSport.Officiating);
data.SportOfficiating = Localiser.GetSportOfficiatingTypeCaption(userSport.Officiating);
data.CreatedOnFmt = DateUtil.Format(userSport.CreateStamp.On, "d-MMM-yyyy");
data.StatusCode = userSport.StatusCode;
data.StatusDesc = userSport.StatusDesc;
@@ -79,11 +88,14 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
ColumnDfn colId = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Id);
ColumnDfn colSportId = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportId);
ColumnDfn colSportName = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Sport_Name);
ColumnDfn colParticipation = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportParticipation);
ColumnDfn colOfficiating = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportOfficiating);
ColumnDfn colStatus = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Status);
List<ColumnDfn> columns = new List<ColumnDfn>()
{
colId,
colSportId, colSportName,
colParticipation, colOfficiating,
colStatus,
};
@@ -103,6 +115,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
Id = values.GetLong(colId.DataName),
SportId = values.GetLong(colSportId.DataName),
SportName = values.GetString(colSportName.DataName),
SportParticipation = Localiser.GetSportParticipationTypeCaption((Sax.SportParticipation)values.GetLong(colParticipation.DataName)),
SportOfficiating = Localiser.GetSportOfficiatingTypeCaption((Sax.SportOfficiating)values.GetLong(colOfficiating.DataName)),
StatusCode = values.GetString(colStatus.DataName),
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
};
@@ -227,11 +241,28 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
}
}
// Create new item if required.
// If sport doesn't exist for the user, it may have been previously deleted.
if (userSport == null)
userSport = AccountMgr.CreateUserSport(SessionData.User.UserAccountId, sportId);
{
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.UserAccountIdsIncluded.Add(SessionData.User.UserAccountId);
prmUserSport.SportIdsIncluded.Add(sportId);
prmUserSport.StatusCat = SaxUserSport.StatusCat.Any;
userSport = AccountMgr.GetUserSport(prmUserSport);
if (userSport != null)
{
SaLogger.Info(fn + " Resurrecting User Sport with status: " + userSport.StatusDesc + ". Id: " + SysId.ToString(userSport.Id));
userSport.Status = SaxUserSport.DefaultStatus;
}
else
userSport = AccountMgr.CreateUserSport(SessionData.User.UserAccountId, sportId);
}
// Populate item properties.
if (model.ProfileSportParticipationCode != null)
userSport.Participation = model.ProfileSportParticipation;
if (model.ProfileSportOfficiatingCode != null)
userSport.Officiating = model.ProfileSportOfficiating;
// Store item.
if (!SysId.IsValid(userSport.Id))
@@ -251,6 +282,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
}
}
// Refresh list of profile sports for Activity Index.
RefreshSessionProfileSports();
// Construct response.
PopulateProfileSportResponseData(model, userSport, sport, responseData.Sport);
responseData.Success = true;
@@ -46,7 +46,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
private void PopulateOpportunityResponseData(Model_Organisation_Opportunities model, SaxOrganisationOpportunity opportunity, OpportunityData_List data)
{
data.Id = SysId.ToString(opportunity.Id);
data.TypeCode = OpportunityTypes.GetCodeForType(opportunity.OpportunityType);
data.TypeCode = OpportunityTypeCodes.GetCodeForType(opportunity.OpportunityType);
data.TypeDesc = Localiser.GetOpportunityTypeCaption(opportunity.OpportunityType);
data.Position = opportunity.Position;
data.Outline = opportunity.Outline;
@@ -113,7 +113,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
SessionData_Online.Filter.SetMemberOrganisation(organisation);
// Reference data - opportunity types.
foreach (TypeCodeDesc opportunityType in OpportunityTypes)
foreach (TypeCodeDesc opportunityType in OpportunityTypeCodes)
responseData.OpportunityTypes.Add(opportunityType.Code, Localiser.GetOpportunityTypeCaption((Sax.OpportunityType)opportunityType.Type));
// User organisation.
@@ -172,11 +172,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
{
Id = values.GetString(colId.DataName),
TypeCode = values.GetString(colOpportunityTypeCode.DataName),
TypeDesc = Localiser.GetOpportunityTypeCaption((Sax.OpportunityType)OpportunityTypes.GetTypeForCode(values.GetString(colOpportunityTypeCode.DataName))),
TypeDesc = Localiser.GetOpportunityTypeCaption((Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(values.GetString(colOpportunityTypeCode.DataName))),
Position = values.GetString(colPosition.DataName),
Outline = values.GetString(colOutline.DataName),
RegionCaption = model.GetRegionCaption(values.GetString(colRegionName.DataName).ToSysId()),
SportCaption = model.GetSportCaption(values.GetString(colSportName.DataName).ToSysId()),
RegionCaption = model.GetRegionCaption(values.GetString(colRegionId.DataName).ToSysId()),
SportCaption = model.GetSportCaption(values.GetString(colSportId.DataName).ToSysId()),
CreatedOnFmt = DateUtil.Format(values.GetDateTime(colCreatedOn.DataName), "d-MMM-yyyy"),
PublishedOnFmt = DateUtil.Format(values.GetDateTime(colPublishedOn.DataName), "d-MMM-yyyy"),
ExpiresOnFmt = DateUtil.Format(values.GetDateTime(colExpiresOn.DataName), "d-MMM-yyyy"),
@@ -326,7 +326,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
if (model.OpportunitySportId != null)
opportunity.SportIdPrimary = model.OpportunitySportId.ToSysId();
if (model.OpportunityTypeCode != null)
opportunity.OpportunityType = (Sax.OpportunityType)OpportunityTypes.GetTypeForCode(model.OpportunityTypeCode);
opportunity.OpportunityType = (Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(model.OpportunityTypeCode);
if (model.OpportunityPosition != null)
opportunity.Position = model.OpportunityPosition;
if (model.OpportunityOutline != null)
@@ -96,6 +96,22 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
return true;
}
//-------------------------------------------------------------------
/// <summary>Populate the user's profile contact details to the session.</summary>
protected bool RefreshSessionProfileContact(SaxUserAccount userAccount)
{
String fn = GetType().Name + ".RefreshSessionProfileContact";
SaxSessionData_Online sessionData = SessionData_Online;
SysId userAccountId = sessionData?.User.UserAccountId ?? null;
if (!SysId.IsValid(userAccountId)) return false;
if (!SysId.IsValid(userAccount?.Id ?? null)) return false;
if (!userAccountId.Equals(userAccount.Id)) return false;
sessionData.RefreshUser(userAccount);
return true;
}
//-------------------------------------------------------------------
/// <summary>Populate the user's profile sports to the session.</summary>
protected bool RefreshSessionProfileSports()
@@ -109,18 +125,22 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Read discrete values to avoid loading the entire UserSport records which can be substantial.
ColumnDfn colSportId = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportId);
ColumnDfn colSportName = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Sport_Name);
ColumnDfn colParticipation = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportParticipation);
ColumnDfn colOfficiating = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportOfficiating);
ColumnDfn colStatus = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Status);
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.UserAccountIdsIncluded.Add(userAccountId);
prmUserSport.StatusCat = SaxUserSport.StatusCat.ActiveOnly;
using (DbResultSet resultSet = AccountMgr.ExecuteUserSportQuery(new List<ColumnDfn>() { colSportId, colSportName, colStatus }, prmUserSport))
using (DbResultSet resultSet = AccountMgr.ExecuteUserSportQuery(new List<ColumnDfn>() { colSportId, colSportName, colParticipation, colOfficiating, colStatus }, prmUserSport))
{
while (resultSet != null && resultSet.NextRecord())
{
NamedValue.Map values = resultSet.GetRecordValues();
SysId sportId = new SysId(values.GetLong(colSportId.DataName));
String sportName = values.GetString(colSportName.DataName);
Sax.SportParticipation participation = (Sax.SportParticipation)values.GetLong(colParticipation.DataName);
Sax.SportOfficiating officiating = (Sax.SportOfficiating)values.GetLong(colOfficiating.DataName);
SaStatus status = SacsSystem.GetStatusForCode(values.GetString(colStatus.DataName));
sessionData.Profile.AddSport(sportId, status);
}