This commit is contained in:
2021-12-08 18:23:15 +00:00
parent 74fb9448ec
commit 5d15b28456
62 changed files with 1675 additions and 635 deletions
@@ -100,6 +100,8 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
prmActivityIndex.EffectiveFrom = context.EffectiveFrom; prmActivityIndex.EffectiveFrom = context.EffectiveFrom;
prmActivityIndex.EffectiveTo = context.EffectiveTo; prmActivityIndex.EffectiveTo = context.EffectiveTo;
prmActivityIndex.Alias_ActivityIndex = alias_ActivityIndex; prmActivityIndex.Alias_ActivityIndex = alias_ActivityIndex;
prmActivityIndex.ResultsPaging.PageNo = 1;
prmActivityIndex.ResultsPaging.PageLength = 100;
query.Filters.AddRange(internals.ActivityMgr.GetActivityIndexQueryFilter(prmActivityIndex)); query.Filters.AddRange(internals.ActivityMgr.GetActivityIndexQueryFilter(prmActivityIndex));
// First pass, note the activity Item and effective date. // First pass, note the activity Item and effective date.
@@ -137,7 +139,8 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
{ {
PopulateUserActivityDetails(context, activities); PopulateUserActivityDetails(context, activities);
PopulateArticleDetails(context, activities); PopulateArticleDetails(context, activities);
PopulateOrganisationOpportunitiesDetails(context, activities); PopulateOrganisationEventDetails(context, activities);
PopulateOrganisationOpportunityDetails(context, activities);
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -247,9 +250,67 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
} }
} }
//-------------------------------------------------------------------
// Organisation Event details.
private void PopulateOrganisationEventDetails(IndexContext context, List<ActivityData_Web> activities)
{
// Extract organisationEvent Ids.
List<SysId> organisationEventIds = activities.FindAll(item => item.ItemId.Type == (int)Sax.DataItemType.OrganisationEvent).Select(ItemId => ItemId.ItemId.Id).ToList();
if (organisationEventIds.IsEmpty()) return;
// Event columns - limit to essential information.
ColumnDfn colId = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Id);
ColumnDfn colOrganisationId = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.OrganisationId);
ColumnDfn colOrganisation = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Organisation_Name);
ColumnDfn colEventAt = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.EventAt_DateTime);
ColumnDfn colSummary = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Summary);
ColumnDfn colDetails = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Details);
ColumnDfn colSportId = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.SportIdPrimary);
ColumnDfn colSportName = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Sport_Name);
ColumnDfn colRegionId = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.RegionIdCountry);
ColumnDfn colRegionName = Internals.ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Region_Name);
List<ColumnDfn> columns = new List<ColumnDfn>() { colId, colOrganisationId, colOrganisation, colEventAt, colSummary, colDetails, colSportId, colSportName, colRegionId, colRegionName };
// Event filter.
SaxOrganisationEvent.Params prmEvent = new SaxOrganisationEvent.Params();
prmEvent.IdsIncluded.AddRange(organisationEventIds);
prmEvent.StatusCat = SaxOrganisationEvent.StatusCat.ActiveOnly;
using (DbResultSet dbResultSet = Internals.ActivityMgr.ExecuteOrganisationEventQuery(columns, prmEvent))
{
while (dbResultSet != null && dbResultSet.NextRecord())
{
NamedValue.Map values = dbResultSet.GetRecordValues();
ItemId itemId = new ItemId((short)Sax.DataItemType.OrganisationEvent, new SysId(values.GetLong(colId.DataName)));
SysId organisationId = new SysId(values.GetLong(colOrganisationId.DataName));
String organisation = values.GetString(colOrganisation.DataName);
DateTime eventAt = values.GetDateTime(colEventAt.DataName);
String eventAtDisplay = DateUtil.Format(eventAt, "d-MMM-yy");
if (eventAt.Hour > 0 || eventAt.Minute > 0)
eventAtDisplay += DateUtil.Format(values.GetDateTime(colEventAt.DataName), " HH:mm");
String eventSummary = values.GetString(colSummary.DataName);
String eventDetails = values.GetString(colDetails.DataName);
SysId sportId = new SysId(values.GetLong(colSportId.DataName));
String sportName = values.GetString(colSportName.DataName);
SysId regionId = new SysId(values.GetLong(colRegionId.DataName));
String regionName = values.GetString(colRegionName.DataName);
// Populate to corresponding activities.
foreach (ActivityData_Web activity in activities.FindAll(item => item.ItemId.Equals(itemId)))
{
activity.SetOrganisation(organisationId, organisation);
activity.SetCaption(eventAtDisplay);
activity.SetBlurb(eventSummary);
activity.SetSport(sportId, sportName);
activity.SetRegion(regionId, regionName);
}
}
}
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Organisation Opportunity details. // Organisation Opportunity details.
private void PopulateOrganisationOpportunitiesDetails(IndexContext context, List<ActivityData_Web> activities) private void PopulateOrganisationOpportunityDetails(IndexContext context, List<ActivityData_Web> activities)
{ {
// Extract opportunity Ids. // Extract opportunity Ids.
List<SysId> opportunityIds = activities.FindAll(item => item.ItemId.Type == (int)Sax.DataItemType.OrganisationOpportunity).Select(ItemId => ItemId.ItemId.Id).ToList(); List<SysId> opportunityIds = activities.FindAll(item => item.ItemId.Type == (int)Sax.DataItemType.OrganisationOpportunity).Select(ItemId => ItemId.ItemId.Id).ToList();
@@ -258,14 +319,14 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
// Opportunity columns - limit to essential information. // Opportunity columns - limit to essential information.
ColumnDfn colId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Id); ColumnDfn colId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Id);
ColumnDfn colOrganisationId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.OrganisationId); ColumnDfn colOrganisationId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.OrganisationId);
ColumnDfn colOrganisation= Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Organisation_Name); ColumnDfn colOrganisation = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Organisation_Name);
ColumnDfn colPosition = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Position); ColumnDfn colPosition = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Position);
ColumnDfn colOutline = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Outline); ColumnDfn colOutline = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Outline);
ColumnDfn colSportId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.SportIdPrimary); ColumnDfn colSportId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.SportIdPrimary);
ColumnDfn colSportName = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Sport_Name); ColumnDfn colSportName = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Sport_Name);
ColumnDfn colRegionId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.RegionIdPrimary); ColumnDfn colRegionId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.RegionIdPrimary);
ColumnDfn colRegionName = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Region_Name); ColumnDfn colRegionName = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Region_Name);
List<ColumnDfn> columns = new List<ColumnDfn>() { colId, colPosition, colOutline, colSportId, colSportName, colRegionId, colRegionName }; List<ColumnDfn> columns = new List<ColumnDfn>() { colId, colOrganisationId, colOrganisation, colPosition, colOutline, colSportId, colSportName, colRegionId, colRegionName };
// Opportunity filter. // Opportunity filter.
SaxOrganisationOpportunity.Params prmOpportunity = new SaxOrganisationOpportunity.Params(); SaxOrganisationOpportunity.Params prmOpportunity = new SaxOrganisationOpportunity.Params();
@@ -238,19 +238,19 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
String fn = nameof(ControllerBase) + ".EncryptParameters"; String fn = nameof(ControllerBase) + ".EncryptParameters";
try try
{ {
// Copy the list of parameters, adding a random name/value pair to randomise the encryption. // Copy the list of parameters and sort the keys.
NameValueCollection parametersToEncrypt = new NameValueCollection(parameters); NameValueCollection parametersToEncrypt = new NameValueCollection(parameters);
// NB Range 10-189 intended to have equal chance of 2 or 3 digit number.
parametersToEncrypt.Add("!" + SacsRandomHelper.getRandomLengthNumber(4), null);
// Sort the keys to ensure that the random '!' param is first in the query string.
String[] paramKeys = parametersToEncrypt.AllKeys; String[] paramKeys = parametersToEncrypt.AllKeys;
Array.Sort(paramKeys); Array.Sort(paramKeys);
// Serialise parameters as if in a URL query string - so that they can be deserialised in DecryptParameters() below. // Serialise parameters as if in a URL query string - so that they can be deserialised in DecryptParameters() below.
string queryString = String.Join("&", paramKeys.Select(a => a + "=" + HttpUtility.UrlEncode(parametersToEncrypt[a]))); // Start with a random length parameter name at start of list to obscure the encryption.
string queryString = SacsRandomHelper.getRandomLengthNumber(4) + "&";
queryString += String.Join("&", paramKeys.Select(a => a + "=" + HttpUtility.UrlEncode(parametersToEncrypt[a])));
// Encrypt data.
String encrypted = SacsEncryptionHelper.Encrypt(queryString, base64IV, base64Key); String encrypted = SacsEncryptionHelper.Encrypt(queryString, base64IV, base64Key);
if (SacsSystem.DebugMode) SaLogger.Debug(fn + "\n\tData: " + queryString + " \n\tEncrypted: " + encrypted); //if (SacsSystem.DebugMode) SaLogger.Debug(fn + "\n\tData: " + queryString + " \n\tEncrypted: " + encrypted);
return encrypted; return encrypted;
} }
catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); } catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); }
@@ -262,7 +262,7 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
try try
{ {
String queryString = SacsEncryptionHelper.Decrypt(encrypted, base64IV, base64Key); String queryString = SacsEncryptionHelper.Decrypt(encrypted, base64IV, base64Key);
if (SacsSystem.DebugMode) SaLogger.Debug(fn + " \n\tEncrypted: " + encrypted + "\n\tData: " + queryString); //if (SacsSystem.DebugMode) SaLogger.Debug(fn + " \n\tEncrypted: " + encrypted + "\n\tData: " + queryString);
return HttpUtility.ParseQueryString(queryString); return HttpUtility.ParseQueryString(queryString);
} }
catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); } catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); }
@@ -10,6 +10,7 @@
<div class="sax-header"><div class="sax-caption">@Localiser["security.caption.change.password"]</div></div> <div class="sax-header"><div class="sax-caption">@Localiser["security.caption.change.password"]</div></div>
<div class="sax-content"> <div class="sax-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmChangePassword", @class = "sax-form" })) @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmChangePassword", @class = "sax-form" }))
{ {
@@ -10,6 +10,7 @@
<div class="sax-header"><div class="sax-caption">@Localiser["security.caption.request.password"]</div></div> <div class="sax-header"><div class="sax-caption">@Localiser["security.caption.request.password"]</div></div>
<div class="sax-content"> <div class="sax-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRequestPassword", @class = "sax-form" })) @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRequestPassword", @class = "sax-form" }))
{ {
@@ -11,6 +11,7 @@
<div class="sax-header"><div class="sax-caption">@Localiser["security.caption.signin"]</div></div> <div class="sax-header"><div class="sax-caption">@Localiser["security.caption.signin"]</div></div>
<div class="sax-content"> <div class="sax-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmSignIn", @class = "sax-form" })) @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmSignIn", @class = "sax-form" }))
{ {
@@ -237,6 +237,9 @@
<data name="label.article" xml:space="preserve"> <data name="label.article" xml:space="preserve">
<value>Article</value> <value>Article</value>
</data> </data>
<data name="label.at" xml:space="preserve">
<value>At</value>
</data>
<data name="label.calendar" xml:space="preserve"> <data name="label.calendar" xml:space="preserve">
<value>Calendar</value> <value>Calendar</value>
</data> </data>
@@ -276,6 +279,9 @@
<data name="label.created" xml:space="preserve"> <data name="label.created" xml:space="preserve">
<value>Created</value> <value>Created</value>
</data> </data>
<data name="label.date" xml:space="preserve">
<value>Date</value>
</data>
<data name="label.date.of.birth" xml:space="preserve"> <data name="label.date.of.birth" xml:space="preserve">
<value>Date of birth</value> <value>Date of birth</value>
</data> </data>
@@ -285,6 +291,9 @@
<data name="label.delete" xml:space="preserve"> <data name="label.delete" xml:space="preserve">
<value>Delete</value> <value>Delete</value>
</data> </data>
<data name="label.details" xml:space="preserve">
<value>Details</value>
</data>
<data name="label.discipline" xml:space="preserve"> <data name="label.discipline" xml:space="preserve">
<value>Discipline</value> <value>Discipline</value>
</data> </data>
@@ -294,6 +303,9 @@
<data name="label.drag.image.here" xml:space="preserve"> <data name="label.drag.image.here" xml:space="preserve">
<value>Drag your image here.</value> <value>Drag your image here.</value>
</data> </data>
<data name="label.duration" xml:space="preserve">
<value>Duration</value>
</data>
<data name="label.edit" xml:space="preserve"> <data name="label.edit" xml:space="preserve">
<value>Edit</value> <value>Edit</value>
</data> </data>
@@ -306,6 +318,9 @@
<data name="label.email.address" xml:space="preserve"> <data name="label.email.address" xml:space="preserve">
<value>Email address</value> <value>Email address</value>
</data> </data>
<data name="label.events" xml:space="preserve">
<value>Events</value>
</data>
<data name="label.excellent" xml:space="preserve"> <data name="label.excellent" xml:space="preserve">
<value>Excellent</value> <value>Excellent</value>
</data> </data>
@@ -375,12 +390,18 @@
<data name="label.not.specified" xml:space="preserve"> <data name="label.not.specified" xml:space="preserve">
<value>Not specified</value> <value>Not specified</value>
</data> </data>
<data name="label.occurs" xml:space="preserve">
<value>Occurs</value>
</data>
<data name="label.officiating" xml:space="preserve"> <data name="label.officiating" xml:space="preserve">
<value>Officiating</value> <value>Officiating</value>
</data> </data>
<data name="label.ok" xml:space="preserve"> <data name="label.ok" xml:space="preserve">
<value>OK</value> <value>OK</value>
</data> </data>
<data name="label.on" xml:space="preserve">
<value>On</value>
</data>
<data name="label.opportunities" xml:space="preserve"> <data name="label.opportunities" xml:space="preserve">
<value>Opportunities</value> <value>Opportunities</value>
</data> </data>
@@ -501,6 +522,9 @@
<data name="label.team" xml:space="preserve"> <data name="label.team" xml:space="preserve">
<value>Team</value> <value>Team</value>
</data> </data>
<data name="label.time" xml:space="preserve">
<value>Time</value>
</data>
<data name="label.title" xml:space="preserve"> <data name="label.title" xml:space="preserve">
<value>Title</value> <value>Title</value>
</data> </data>
@@ -620,6 +644,12 @@ You will then be able to publicise your sporting activities.</value>
<data name="organisation.caption.event" xml:space="preserve"> <data name="organisation.caption.event" xml:space="preserve">
<value>Event</value> <value>Event</value>
</data> </data>
<data name="organisation.caption.event.create" xml:space="preserve">
<value>Create Event</value>
</data>
<data name="organisation.caption.event.update" xml:space="preserve">
<value>Update event</value>
</data>
<data name="organisation.caption.events" xml:space="preserve"> <data name="organisation.caption.events" xml:space="preserve">
<value>Events</value> <value>Events</value>
</data> </data>
@@ -37,7 +37,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
{ {
public short ItemType { get; set; } public short ItemType { get; set; }
public String ItemTypeClass { get; set; } public String ItemTypeClass { get; set; }
public long ItemIdx { get; set; } public String ItemId { get; set; }
public String Organisation { get; set; } public String Organisation { get; set; }
public String Author { get; set; } public String Author { get; set; }
public String Caption { get; set; } public String Caption { get; set; }
@@ -102,6 +102,29 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
} }
public ContentData Content { get; } = new ContentData(); public ContentData Content { get; } = new ContentData();
} }
/// <summary>Event activity info. </summary>
private class ActivityResponseData_Event
{
public ActivityResponseData_Event(SaxModel_Online model, SaxOrganisationEvent organisationEvent)
{
Organisation = model.GetOrganisationName(organisationEvent.OrganisationId);
EventAt = DateUtil.Format(organisationEvent.EventAt, "d-MMM-yy");
if (organisationEvent.EventAt.Hour>0 || organisationEvent.EventAt.Minute > 0)
EventAt += DateUtil.Format(organisationEvent.EventAt, " HH:ss");
Summary = organisationEvent.Summary;
Details = organisationEvent.Details;
Sport = model.GetSportCaption(organisationEvent.SportIdPrimary);
Region = model.GetRegionCaption(organisationEvent.RegionIdCountry);
PublishedOnFmt = model.Localiser.FormatDate(organisationEvent.PublishedAt);
}
public String Organisation { get; set; }
public String EventAt{ get; set; }
public String Summary { get; set; }
public String Details { get; set; }
public String Sport { get; set; }
public String Region { get; set; }
public String PublishedOnFmt { get; set; }
}
/// <summary>Opportunity activity info. </summary> /// <summary>Opportunity activity info. </summary>
private class ActivityResponseData_Opportunity private class ActivityResponseData_Opportunity
{ {
@@ -115,7 +138,6 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
PublishedOnFmt = model.Localiser.FormatDate(opportunity.PublishedAt); PublishedOnFmt = model.Localiser.FormatDate(opportunity.PublishedAt);
} }
public String Organisation { get; set; } public String Organisation { get; set; }
public String Author { get; set; }
public String Position { get; set; } public String Position { get; set; }
public String Outline { get; set; } public String Outline { get; set; }
public String Sport { get; set; } public String Sport { get; set; }
@@ -170,10 +192,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
activityData.ItemType = itemData.ItemId.Type; activityData.ItemType = itemData.ItemId.Type;
if (itemData.ItemId.Type == (int)Sax.DataItemType.Article) if (itemData.ItemId.Type == (int)Sax.DataItemType.Article)
activityData.ItemTypeClass = "Article"; activityData.ItemTypeClass = "Article";
else if (itemData.ItemId.Type == (int)Sax.DataItemType.OrganisationEvent)
activityData.ItemTypeClass = "Event";
else if (itemData.ItemId.Type == (int)Sax.DataItemType.OrganisationOpportunity) else if (itemData.ItemId.Type == (int)Sax.DataItemType.OrganisationOpportunity)
activityData.ItemTypeClass = "Opportunity"; activityData.ItemTypeClass = "Opportunity";
// ToDo Mask activity index Id with cross-reference stored in session data. // ToDo Mask activity index Id with cross-reference stored in session data.
activityData.ItemIdx = SysId.ToLong(itemData.ItemId.Id); activityData.ItemId = model.EncryptId(itemData.ItemId.Id);
activityData.Organisation = itemData.Organisation; activityData.Organisation = itemData.Organisation;
activityData.Author = itemData.Author; activityData.Author = itemData.Author;
activityData.Caption = itemData.Caption; activityData.Caption = itemData.Caption;
@@ -199,6 +223,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
private class AjaxResponse_ActivityInfo : AjaxResponse_Base private class AjaxResponse_ActivityInfo : AjaxResponse_Base
{ {
public ActivityResponseData_Article Article { get; set; } public ActivityResponseData_Article Article { get; set; }
public ActivityResponseData_Event Event { get; set; }
public ActivityResponseData_Opportunity Opportunity { get; set; } public ActivityResponseData_Opportunity Opportunity { get; set; }
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -224,8 +249,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
{ {
// Identify activity. // Identify activity.
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType); Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityItemType);
SysId itemId = model.ExtractSysId(model.ActivityIdx); SysId itemId = model.ExtractSysId(model.ActivityItemId);
if (itemType <= 0 || !SysId.IsValid(itemId)) if (itemType <= 0 || !SysId.IsValid(itemId))
{ {
SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix()); SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix());
@@ -247,6 +272,18 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
disposableItems.Add(organisation); disposableItems.Add(organisation);
responseData.Article = new ActivityResponseData_Article(this, model, article, organisation); responseData.Article = new ActivityResponseData_Article(this, model, article, organisation);
} }
else if (itemType == Sax.DataItemType.OrganisationEvent)
{
// Organisation Event.
SaxOrganisationEvent organisationEvent = ActivityMgr.GetOrganisationEventById(itemId);
disposableItems.Add(organisationEvent);
if (organisationEvent == null)
{
SaLogger.Warn(fn + " Event not found for Activity Id: " + itemId.ToString() + "." + GetLogSuffix());
return Json(responseData);
}
responseData.Event = new ActivityResponseData_Event(model, organisationEvent);
}
else if (itemType == Sax.DataItemType.OrganisationOpportunity) else if (itemType == Sax.DataItemType.OrganisationOpportunity)
{ {
// Organisation Opportunity. // Organisation Opportunity.
@@ -297,8 +334,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
SaxSessionData_Online sessionData = SessionData_Online; SaxSessionData_Online sessionData = SessionData_Online;
// Identify activity. // Identify activity.
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType); Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityItemType);
SysId itemId = model.ExtractSysId(model.ActivityIdx); SysId itemId = model.ExtractSysId(model.ActivityItemId);
if (itemType <= 0 || !SysId.IsValid(itemId)) if (itemType <= 0 || !SysId.IsValid(itemId))
{ {
SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix()); SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix());
@@ -27,31 +27,34 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public String EventTimeFmt { get; set; } public String EventTimeFmt { get; set; }
public String TypeCode { get; set; } public String TypeCode { get; set; }
public String TypeDesc { get; set; } public String TypeDesc { get; set; }
public String About { get; set; } public String Summary { get; set; }
public String RegionCaption { get; set; } public String Details { get; set; }
public String SportCaption { get; set; } public String SportCaptionPrimary { get; set; }
public String RegionCaptionCountry { get; set; }
public String PublishedOnFmt { get; set; } public String PublishedOnFmt { get; set; }
public String ExpiresOnFmt { get; set; } public String ExpiresOnFmt { get; set; }
} }
private class EventData_Detail : EventData_List private class EventData_Detail : EventData_List
{ {
public String EventAt_YYYYMMDD { get; set; } public String EventOn_Calendar { get; set; }
public String EventOn_YYYYMMDD { get; set; }
public String EventAt_HHMM { get; set; } public String EventAt_HHMM { get; set; }
public String RegionIdCountry { get; set; }
public String SportIdPrimary { get; set; } public String SportIdPrimary { get; set; }
public String RegionIdCountry { get; set; }
public String PublishedOn_YYYYMMDD { get; set; } public String PublishedOn_YYYYMMDD { get; set; }
public String ExpiresOn_YYYYMMDD { get; set; } public String ExpiresOn_YYYYMMDD { get; set; }
} }
private void PopulateEventResponseData(Model_Organisation_Events model, SaxOrganisationEvent organisationEvent, EventData_List data) private void PopulateEventResponseData(Model_Organisation_Events model, SaxOrganisationEvent organisationEvent, EventData_List data)
{ {
data.Id = SysId.ToString(organisationEvent.Id); data.Id = model.EncryptId(organisationEvent.Id);
data.EventDateFmt = Localiser.FormatDate(organisationEvent.EventAt); data.EventDateFmt = Localiser.FormatDate(organisationEvent.EventAt);
data.EventTimeFmt = DateUtil.Format(organisationEvent.EventAt, "HH:mm"); data.EventTimeFmt = DateUtil.Format(organisationEvent.EventAt, "HH:mm");
data.TypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType); data.TypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType);
data.TypeDesc = Localiser.GetEventTypeCaption(organisationEvent.EventType); data.TypeDesc = Localiser.GetEventTypeCaption(organisationEvent.EventType);
data.About = organisationEvent.About; data.Summary = organisationEvent.Summary;
data.RegionCaption = model.GetRegionCaption(organisationEvent.RegionIdCountry); data.Details = organisationEvent.Details;
data.SportCaption = model.GetSportCaption(organisationEvent.SportIdPrimary); data.SportCaptionPrimary = model.GetSportCaption(organisationEvent.SportIdPrimary);
data.RegionCaptionCountry = model.GetRegionCaption(organisationEvent.RegionIdCountry);
data.CreatedOnFmt = Localiser.FormatDate(organisationEvent.CreateStamp.On); data.CreatedOnFmt = Localiser.FormatDate(organisationEvent.CreateStamp.On);
data.PublishedOnFmt = Localiser.FormatDate(organisationEvent.PublishedAt); data.PublishedOnFmt = Localiser.FormatDate(organisationEvent.PublishedAt);
data.ExpiresOnFmt = Localiser.FormatDate(organisationEvent.ExpiresAt); data.ExpiresOnFmt = Localiser.FormatDate(organisationEvent.ExpiresAt);
@@ -61,7 +64,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
private void PopulateEventResponseData(Model_Organisation_Events model, SaxOrganisationEvent organisationEvent, EventData_Detail data) private void PopulateEventResponseData(Model_Organisation_Events model, SaxOrganisationEvent organisationEvent, EventData_Detail data)
{ {
PopulateEventResponseData(model, organisationEvent, data as EventData_List); PopulateEventResponseData(model, organisationEvent, data as EventData_List);
data.EventAt_YYYYMMDD = DateUtil.Format(organisationEvent.EventAt, "yyyyMMdd"); data.EventOn_Calendar = model.FormatDateForForm(organisationEvent.EventAt);
data.EventOn_YYYYMMDD = DateUtil.Format(organisationEvent.EventAt, "yyyyMMdd");
data.EventAt_HHMM = DateUtil.Format(organisationEvent.EventAt, "HH:mm"); data.EventAt_HHMM = DateUtil.Format(organisationEvent.EventAt, "HH:mm");
data.RegionIdCountry = model.GetEncryptedRegionId(organisationEvent.RegionIdCountry); data.RegionIdCountry = model.GetEncryptedRegionId(organisationEvent.RegionIdCountry);
data.SportIdPrimary = model.GetEncryptedSportId(organisationEvent.SportIdPrimary); data.SportIdPrimary = model.GetEncryptedSportId(organisationEvent.SportIdPrimary);
@@ -175,7 +179,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
ColumnDfn colId = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Id); ColumnDfn colId = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Id);
ColumnDfn colEventAt = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.EventAt_DateTime); ColumnDfn colEventAt = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.EventAt_DateTime);
ColumnDfn colEventTypeCode = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.EventTypeCode); ColumnDfn colEventTypeCode = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.EventTypeCode);
ColumnDfn colAbout = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.About); ColumnDfn colSummary = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Summary);
ColumnDfn colDetails = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Details);
ColumnDfn colRegionId = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.RegionIdCountry); ColumnDfn colRegionId = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.RegionIdCountry);
ColumnDfn colRegionName = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Region_Name); ColumnDfn colRegionName = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Region_Name);
ColumnDfn colSportId = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.SportIdPrimary); ColumnDfn colSportId = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.SportIdPrimary);
@@ -186,7 +191,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
ColumnDfn colCreatedOn = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.CreateOn_Date); ColumnDfn colCreatedOn = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.CreateOn_Date);
List<ColumnDfn> columns = new List<ColumnDfn>() List<ColumnDfn> columns = new List<ColumnDfn>()
{ {
colId, colEventAt, colEventTypeCode, colAbout, colId, colEventAt, colEventTypeCode, colSummary, colDetails,
colRegionId, colRegionName, colSportId, colSportName, colRegionId, colRegionName, colSportId, colSportName,
colPublishedOn, colExpiresOn, colPublishedOn, colExpiresOn,
colStatus, colCreatedOn colStatus, colCreatedOn
@@ -204,14 +209,15 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues(); NamedValue.Map values = resultSet.GetRecordValues();
EventData_List eventData = new EventData_List() EventData_List eventData = new EventData_List()
{ {
Id = values.GetLong(colId.DataName).ToString(), Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))),
EventDateFmt = Localiser.FormatDate(values.GetDateTime(colEventAt.DataName)), EventDateFmt = Localiser.FormatDate(values.GetDateTime(colEventAt.DataName)),
EventTimeFmt = DateUtil.Format(values.GetDateTime(colEventAt.DataName), "HH:mm"), EventTimeFmt = DateUtil.Format(values.GetDateTime(colEventAt.DataName), "HH:mm"),
TypeCode = values.GetString(colEventTypeCode.DataName), TypeCode = values.GetString(colEventTypeCode.DataName),
TypeDesc = Localiser.GetEventTypeCaption((Sax.EventType)EventTypeCodes.GetTypeForCode(values.GetString(colEventTypeCode.DataName))), TypeDesc = Localiser.GetEventTypeCaption((Sax.EventType)EventTypeCodes.GetTypeForCode(values.GetString(colEventTypeCode.DataName))),
About = values.GetString(colAbout.DataName), Summary = ActivityMgr.GetOrganisationEventDataValue(colSummary, values).AsString(),
RegionCaption = model.GetRegionCaption(values.GetString(colRegionId.DataName).ToSysId()), Details = ActivityMgr.GetOrganisationEventDataValue(colDetails, values).AsString(),
SportCaption = model.GetSportCaption(values.GetString(colSportId.DataName).ToSysId()), RegionCaptionCountry = model.GetRegionCaption(values.GetString(colRegionId.DataName).ToSysId()),
SportCaptionPrimary = model.GetSportCaption(values.GetString(colSportId.DataName).ToSysId()),
CreatedOnFmt = Localiser.FormatDate(values.GetDateTime(colCreatedOn.DataName)), CreatedOnFmt = Localiser.FormatDate(values.GetDateTime(colCreatedOn.DataName)),
PublishedOnFmt = Localiser.FormatDate(values.GetDateTime(colPublishedOn.DataName)), PublishedOnFmt = Localiser.FormatDate(values.GetDateTime(colPublishedOn.DataName)),
ExpiresOnFmt = Localiser.FormatDate(values.GetDateTime(colExpiresOn.DataName)), ExpiresOnFmt = Localiser.FormatDate(values.GetDateTime(colExpiresOn.DataName)),
@@ -390,8 +396,10 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
} }
if (model.EventTypeCode != null) if (model.EventTypeCode != null)
organisationEvent.EventType = (Sax.EventType)EventTypeCodes.GetTypeForCode(model.EventTypeCode); organisationEvent.EventType = (Sax.EventType)EventTypeCodes.GetTypeForCode(model.EventTypeCode);
if (model.EventAbout != null) if (model.EventSummary != null)
organisationEvent.About = model.EventAbout; organisationEvent.Summary = model.EventSummary;
if (model.EventDetails != null)
organisationEvent.Details = model.EventDetails;
if (model.EventStatusCode != null) if (model.EventStatusCode != null)
organisationEvent.Status = model.EventStatus; organisationEvent.Status = model.EventStatus;
@@ -414,7 +422,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
} }
// Store Event Activity Index data. // Store Event Activity Index data.
// ToDo ActivityConsole.StoreActivityIndex(organisationEvent, DbUpdateInfo); ActivityConsole.StoreActivityIndex(organisationEvent, DbUpdateInfo);
// Construct response. // Construct response.
PopulateEventResponseData(model, organisationEvent, responseData.Event); PopulateEventResponseData(model, organisationEvent, responseData.Event);
@@ -29,6 +29,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public bool? CurrentUser { get; set; } = null; public bool? CurrentUser { get; set; } = null;
public String EmailAddress { get; set; } public String EmailAddress { get; set; }
public String DisplayName { get; set; } public String DisplayName { get; set; }
public String MemberRoles { get; set; }
public List<String> RoleCodes { get; set; } = new List<string>(); public List<String> RoleCodes { get; set; } = new List<string>();
public List<CodeDesc> Roles { get; set; } = new List<CodeDesc>(); public List<CodeDesc> Roles { get; set; } = new List<CodeDesc>();
public String AdminComment { get; set; } public String AdminComment { get; set; }
@@ -41,8 +42,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
} }
private void PopulateMemberResponseData(Model_Organisation_Members model, SaxUserOrganisation userOrganisation, SaxUserAccount userAccount, SaxOrganisation organisation, MemberData_List data) private void PopulateMemberResponseData(Model_Organisation_Members model, SaxUserOrganisation userOrganisation, SaxUserAccount userAccount, SaxOrganisation organisation, MemberData_List data)
{ {
data.Id = SysId.ToString(userOrganisation.Id); data.Id = model.EncryptId(userOrganisation.Id);
data.UserAccountId = SysId.ToString(userOrganisation.UserAccountId); data.UserAccountId = model.EncryptId(userOrganisation.UserAccountId);
if (userOrganisation.UserAccountId.Equals(UserAccountId)) data.CurrentUser = true; if (userOrganisation.UserAccountId.Equals(UserAccountId)) data.CurrentUser = true;
data.EmailAddress = userAccount.EmailAddress; data.EmailAddress = userAccount.EmailAddress;
data.DisplayName = userAccount.GetDisplayName(); data.DisplayName = userAccount.GetDisplayName();
@@ -56,6 +57,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
data.RoleCodes.Add(memberRoleCode); data.RoleCodes.Add(memberRoleCode);
data.Roles.Add(memberRoleCode, Localiser.GetOrganisationRoleCaption(organisationRole)); data.Roles.Add(memberRoleCode, Localiser.GetOrganisationRoleCaption(organisationRole));
} }
data.MemberRoles = data.Roles.Select(item => item.Desc).ToList().Concat(", ");
data.AdminComment = userOrganisation.AdminComment; data.AdminComment = userOrganisation.AdminComment;
// NB UserAccount status (not UserOrganisation). // NB UserAccount status (not UserOrganisation).
data.StatusCode = userAccount.StatusCode; data.StatusCode = userAccount.StatusCode;
@@ -138,7 +140,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
prmMember.OrganisationIdsIncluded.Add(organisationId); prmMember.OrganisationIdsIncluded.Add(organisationId);
prmMember.UserAccountStatusCat = responseData.User.CanManage ? SaxUserAccount.StatusCat.AwaitingOrActive : SaxUserAccount.StatusCat.ActiveOnly; prmMember.UserAccountStatusCat = responseData.User.CanManage ? SaxUserAccount.StatusCat.AwaitingOrActive : SaxUserAccount.StatusCat.ActiveOnly;
prmMember.OrganisationMembersOnly = true; prmMember.OrganisationMembersOnly = true;
//prmMember.MemberFilter = model.Filter.Member; prmMember.UserFilterPartial = model.Filter.Member;
prmMember.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmMember.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmMember); model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmMember);
model.PopulatePagingTo(prmMember.ResultsPaging); model.PopulatePagingTo(prmMember.ResultsPaging);
@@ -171,8 +173,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues(); NamedValue.Map values = resultSet.GetRecordValues();
MemberData_List memberData = new MemberData_List() MemberData_List memberData = new MemberData_List()
{ {
Id = values.GetLong(colId.DataName).ToString(), Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))),
UserAccountId = values.GetString(colUserAccountId.DataName), UserAccountId = model.EncryptId(new SysId(values.GetLong(colUserAccountId.DataName))),
EmailAddress = values.GetString(colEmailAddress.DataName), EmailAddress = values.GetString(colEmailAddress.DataName),
DisplayName = AccountMgr.GetUserOrganisationDataValue(colDisplayName, values).ToString(), DisplayName = AccountMgr.GetUserOrganisationDataValue(colDisplayName, values).ToString(),
CreatedOnFmt = Localiser.FormatDate(values.GetDateTime(colCreatedOn.DataName)), CreatedOnFmt = Localiser.FormatDate(values.GetDateTime(colCreatedOn.DataName)),
@@ -191,6 +193,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
memberData.RoleCodes.Add(memberRoleCode); memberData.RoleCodes.Add(memberRoleCode);
memberData.Roles.Add(memberRoleCode, Localiser.GetOrganisationRoleCaption(organisationRole)); memberData.Roles.Add(memberRoleCode, Localiser.GetOrganisationRoleCaption(organisationRole));
} }
memberData.MemberRoles = memberData.Roles.Select(item => item.Desc).ToList().Concat(", ");
responseData.Members.Add(memberData); responseData.Members.Add(memberData);
} }
} }
@@ -41,7 +41,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
} }
private void PopulateOpportunityResponseData(Model_Organisation_Opportunities model, SaxOrganisationOpportunity opportunity, OpportunityData_List data) private void PopulateOpportunityResponseData(Model_Organisation_Opportunities model, SaxOrganisationOpportunity opportunity, OpportunityData_List data)
{ {
data.Id = SysId.ToString(opportunity.Id); data.Id = model.EncryptId(opportunity.Id);
data.TypeCode = OpportunityTypeCodes.GetCodeForType(opportunity.OpportunityType); data.TypeCode = OpportunityTypeCodes.GetCodeForType(opportunity.OpportunityType);
data.TypeDesc = Localiser.GetOpportunityTypeCaption(opportunity.OpportunityType); data.TypeDesc = Localiser.GetOpportunityTypeCaption(opportunity.OpportunityType);
data.Position = opportunity.Position; data.Position = opportunity.Position;
@@ -198,7 +198,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues(); NamedValue.Map values = resultSet.GetRecordValues();
OpportunityData_List opportunityData = new OpportunityData_List() OpportunityData_List opportunityData = new OpportunityData_List()
{ {
Id = values.GetLong(colId.DataName).ToString(), Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))),
TypeCode = values.GetString(colOpportunityTypeCode.DataName), TypeCode = values.GetString(colOpportunityTypeCode.DataName),
TypeDesc = Localiser.GetOpportunityTypeCaption((Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(values.GetString(colOpportunityTypeCode.DataName))), TypeDesc = Localiser.GetOpportunityTypeCaption((Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(values.GetString(colOpportunityTypeCode.DataName))),
Position = values.GetString(colPosition.DataName), Position = values.GetString(colPosition.DataName),
@@ -24,11 +24,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Organisation data. // Organisation data.
public class OrganisationResponseData public class OrganisationResponseData
{ {
public long Id { get; set; } public String Id { get; set; }
public String Name { get; set; } public String Name { get; set; }
public long RegionId { get; set; } public String RegionId { get; set; }
public String RegionName { get; set; } public String RegionName { get; set; }
public long SportId { get; set; } public String SportId { get; set; }
public String SportName { get; set; } public String SportName { get; set; }
} }
@@ -86,11 +86,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues(); NamedValue.Map values = resultSet.GetRecordValues();
OrganisationResponseData organisationData = new OrganisationResponseData() OrganisationResponseData organisationData = new OrganisationResponseData()
{ {
Id = values.GetLong(colOrganisationId.DataName), Id = model.EncryptId(new SysId(values.GetLong(colOrganisationId.DataName))),
Name = values.GetString(colOrganisationName.DataName), Name = values.GetString(colOrganisationName.DataName),
RegionId = values.GetLong(colRegionId.DataName), RegionId = model.EncryptId(new SysId(values.GetLong(colRegionId.DataName))),
RegionName = values.GetString(colRegionName.DataName), RegionName = values.GetString(colRegionName.DataName),
SportId = values.GetLong(colSportId.DataName), SportId = model.EncryptId(new SysId(values.GetLong(colSportId.DataName))),
SportName = values.GetString(colSportName.DataName), SportName = values.GetString(colSportName.DataName),
}; };
responseData.Organisations.Add(organisationData); responseData.Organisations.Add(organisationData);
@@ -106,23 +106,23 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Get Member Organisation List ajax request. // Get Member Admin Organisation List ajax request.
//------------------------------------------------------------------- //-------------------------------------------------------------------
private class AjaxResponse_MemberOrganisationList : AjaxResponse_Data private class AjaxResponse_MemberAdminOrganisationList : AjaxResponse_Data
{ {
// Construction. // Construction.
public AjaxResponse_MemberOrganisationList(SaxModel_Online model) : base(model) { } public AjaxResponse_MemberAdminOrganisationList(SaxModel_Online model) : base(model) { }
// Organisation list. // Organisation list.
public List<OrganisationResponseData> Organisations { get; } = new List<OrganisationResponseData>(); public List<OrganisationResponseData> Organisations { get; } = new List<OrganisationResponseData>();
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
[HttpPost] [HttpPost]
[Route("Organisation/Ajax/GetMemberOrganisationList")] [Route("Organisation/Ajax/GetMemberAdminOrganisationList")]
public IActionResult Ajax_GetMemberOrganisationList(Model_Organisation model) public IActionResult Ajax_GetMemberAdminOrganisationList(Model_Organisation model)
{ {
String fn = GetType().Name + ".Ajax_GetMemberOrganisationList"; String fn = GetType().Name + ".Ajax_GetMemberAdminOrganisationList";
String messageTitle = Localiser["organisation.caption.organisations"]; String messageTitle = Localiser["organisation.caption.organisations"];
AjaxResponse_MemberOrganisationList responseData = new AjaxResponse_MemberOrganisationList(model); AjaxResponse_MemberAdminOrganisationList responseData = new AjaxResponse_MemberAdminOrganisationList(model);
// Validate session and referrer. // Validate session and referrer.
if (!ValidReferer) return Forbid(); if (!ValidReferer) return Forbid();
@@ -146,7 +146,10 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Organisation filter // Organisation filter
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.OrganisationMembersOnly = true; prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.MemberAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.SortColumns.Add(colOrganisationName); prmUserOrganisation.SortColumns.Add(colOrganisationName);
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmUserOrganisation); model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmUserOrganisation);
@@ -158,11 +161,161 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues(); NamedValue.Map values = resultSet.GetRecordValues();
OrganisationResponseData organisationData = new OrganisationResponseData() OrganisationResponseData organisationData = new OrganisationResponseData()
{ {
Id = values.GetLong(colOrganisationId.DataName), Id = model.EncryptId(new SysId(values.GetLong(colOrganisationId.DataName))),
Name = values.GetString(colOrganisationName.DataName), Name = values.GetString(colOrganisationName.DataName),
RegionId = values.GetLong(colRegionId.DataName), RegionId = model.EncryptId(new SysId(values.GetLong(colRegionId.DataName))),
RegionName = values.GetString(colRegionName.DataName), RegionName = values.GetString(colRegionName.DataName),
SportId = values.GetLong(colSportId.DataName), SportId = model.EncryptId(new SysId(values.GetLong(colSportId.DataName))),
SportName = values.GetString(colSportName.DataName),
};
responseData.Organisations.Add(organisationData);
}
}
if (model.Paging.IsPaged)
model.Paging.ItemCount = (ushort)responseData.Organisations.Count;
// Complete response.
responseData.SetPaging(model);
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
// Get Event Admin Organisation List ajax request.
//-------------------------------------------------------------------
private class AjaxResponse_EventAdminOrganisationList : AjaxResponse_Data
{
// Construction.
public AjaxResponse_EventAdminOrganisationList(SaxModel_Online model) : base(model) { }
// Organisation list.
public List<OrganisationResponseData> Organisations { get; } = new List<OrganisationResponseData>();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Organisation/Ajax/GetEventAdminOrganisationList")]
public IActionResult Ajax_GetEventAdminOrganisationList(Model_Organisation model)
{
String fn = GetType().Name + ".Ajax_GetEventAdminOrganisationList";
String messageTitle = Localiser["organisation.caption.organisations"];
AjaxResponse_EventAdminOrganisationList responseData = new AjaxResponse_EventAdminOrganisationList(model);
// Validate session and referrer.
if (!ValidReferer) return Forbid();
if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData);
RefreshModel(model);
// Query columns.
ColumnDfn colOrganisationId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId);
ColumnDfn colOrganisationName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name);
ColumnDfn colRegionId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_RegionId);
ColumnDfn colRegionName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Region_Name);
ColumnDfn colSportId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_SportId);
ColumnDfn colSportName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Sport_Name);
List<ColumnDfn> columns = new List<ColumnDfn>()
{
colOrganisationId, colOrganisationName,
colRegionId, colRegionName,
colSportId, colSportName
};
// Organisation filter
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.ScheduleAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.SortColumns.Add(colOrganisationName);
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmUserOrganisation);
model.PopulatePagingTo(prmUserOrganisation.ResultsPaging);
using (DbResultSet resultSet = AccountMgr.ExecuteUserOrganisationQuery(columns, prmUserOrganisation))
{
while (resultSet != null && resultSet.HasRows && resultSet.NextRecord())
{
NamedValue.Map values = resultSet.GetRecordValues();
OrganisationResponseData organisationData = new OrganisationResponseData()
{
Id = model.EncryptId(new SysId(values.GetLong(colOrganisationId.DataName))),
Name = values.GetString(colOrganisationName.DataName),
RegionId = model.EncryptId(new SysId(values.GetLong(colRegionId.DataName))),
RegionName = values.GetString(colRegionName.DataName),
SportId = model.EncryptId(new SysId(values.GetLong(colSportId.DataName))),
SportName = values.GetString(colSportName.DataName),
};
responseData.Organisations.Add(organisationData);
}
}
if (model.Paging.IsPaged)
model.Paging.ItemCount = (ushort)responseData.Organisations.Count;
// Complete response.
responseData.SetPaging(model);
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
// Get Opportunity Admin Organisation List ajax request.
//-------------------------------------------------------------------
private class AjaxResponse_OpportunityAdminOrganisationList : AjaxResponse_Data
{
// Construction.
public AjaxResponse_OpportunityAdminOrganisationList(SaxModel_Online model) : base(model) { }
// Organisation list.
public List<OrganisationResponseData> Organisations { get; } = new List<OrganisationResponseData>();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Organisation/Ajax/GetOpportunityAdminOrganisationList")]
public IActionResult Ajax_GetOpportunityAdminOrganisationList(Model_Organisation model)
{
String fn = GetType().Name + ".Ajax_GetOpportunityAdminOrganisationList";
String messageTitle = Localiser["organisation.caption.organisations"];
AjaxResponse_OpportunityAdminOrganisationList responseData = new AjaxResponse_OpportunityAdminOrganisationList(model);
// Validate session and referrer.
if (!ValidReferer) return Forbid();
if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData);
RefreshModel(model);
// Query columns.
ColumnDfn colOrganisationId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId);
ColumnDfn colOrganisationName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name);
ColumnDfn colRegionId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_RegionId);
ColumnDfn colRegionName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Region_Name);
ColumnDfn colSportId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_SportId);
ColumnDfn colSportName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Sport_Name);
List<ColumnDfn> columns = new List<ColumnDfn>()
{
colOrganisationId, colOrganisationName,
colRegionId, colRegionName,
colSportId, colSportName
};
// Organisation filter
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.OpportunityAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.SortColumns.Add(colOrganisationName);
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmUserOrganisation);
model.PopulatePagingTo(prmUserOrganisation.ResultsPaging);
using (DbResultSet resultSet = AccountMgr.ExecuteUserOrganisationQuery(columns, prmUserOrganisation))
{
while (resultSet != null && resultSet.HasRows && resultSet.NextRecord())
{
NamedValue.Map values = resultSet.GetRecordValues();
OrganisationResponseData organisationData = new OrganisationResponseData()
{
Id = model.EncryptId(new SysId(values.GetLong(colOrganisationId.DataName))),
Name = values.GetString(colOrganisationName.DataName),
RegionId = model.EncryptId(new SysId(values.GetLong(colRegionId.DataName))),
RegionName = values.GetString(colRegionName.DataName),
SportId = model.EncryptId(new SysId(values.GetLong(colSportId.DataName))),
SportName = values.GetString(colSportName.DataName), SportName = values.GetString(colSportName.DataName),
}; };
responseData.Organisations.Add(organisationData); responseData.Organisations.Add(organisationData);
@@ -6,6 +6,7 @@ using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
using Saxonite.Net.Core.Web.Online.Models; using Saxonite.Net.Core.Web.Online.Models;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus; using Saxonite.Net.Standard.Base.Bus;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -38,6 +39,33 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
return RedirectToAction("", ""); return RedirectToAction("", "");
} }
//-------------------------------------------------------------------
[HttpGet]
public IActionResult Members()
{
// Validate session.
if (!ValidUserSession)
return RedirectToAction("", "");
// Model.
Model_Organisation_Members model = new Model_Organisation_Members(Localiser);
// Get a suitable organisation for the filter.
SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember;
String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember;
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption, Sax.OrganisationRole.MemberAdmin);
if (organisationData == null)
return RedirectToAction("", "");
// Make a note of the filter values.
model.Filter.OrganisationId = model.EncryptId(organisationData.Id);
model.Filter.OrganisationCaption = organisationData.Caption;
SessionData_Online.Filter.OrganisationIdMember = organisationData.Id;
SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption;
return View(model);
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
[HttpGet] [HttpGet]
public IActionResult Events() public IActionResult Events()
@@ -52,12 +80,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Get a suitable organisation for the filter. // Get a suitable organisation for the filter.
SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember; SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember;
String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember; String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember;
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption); OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption, Sax.OrganisationRole.ScheduleAdmin);
if (organisationData == null) if (organisationData == null)
return RedirectToAction("", ""); return RedirectToAction("", "");
// Make a note of the filter values. // Make a note of the filter values.
model.Filter.OrganisationId = SysId.ToString(organisationData.Id); model.Filter.OrganisationId = model.EncryptId(organisationData.Id);
model.Filter.OrganisationCaption = organisationData.Caption; model.Filter.OrganisationCaption = organisationData.Caption;
SessionData_Online.Filter.OrganisationIdMember = organisationData.Id; SessionData_Online.Filter.OrganisationIdMember = organisationData.Id;
SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption; SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption;
@@ -79,39 +107,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Get a suitable organisation for the filter. // Get a suitable organisation for the filter.
SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember; SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember;
String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember; String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember;
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption); OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption, Sax.OrganisationRole.OpportunityAdmin);
if (organisationData == null) if (organisationData == null)
return RedirectToAction("", ""); return RedirectToAction("", "");
// Make a note of the filter values. // Make a note of the filter values.
model.Filter.OrganisationId = SysId.ToString(organisationData.Id); model.Filter.OrganisationId = model.EncryptId(organisationData.Id);
model.Filter.OrganisationCaption = organisationData.Caption;
SessionData_Online.Filter.OrganisationIdMember = organisationData.Id;
SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption;
return View(model);
}
//-------------------------------------------------------------------
[HttpGet]
public IActionResult Members()
{
// Validate session.
if (!ValidUserSession)
return RedirectToAction("", "");
// Model.
Model_Organisation_Members model = new Model_Organisation_Members(Localiser);
// Get a suitable organisation for the filter.
SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember;
String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember;
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption);
if (organisationData == null)
return RedirectToAction("", "");
// Make a note of the filter values.
model.Filter.OrganisationId = SysId.ToString(organisationData.Id);
model.Filter.OrganisationCaption = organisationData.Caption; model.Filter.OrganisationCaption = organisationData.Caption;
SessionData_Online.Filter.OrganisationIdMember = organisationData.Id; SessionData_Online.Filter.OrganisationIdMember = organisationData.Id;
SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption; SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption;
@@ -126,27 +127,46 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public SysId Id { get; } public SysId Id { get; }
public String Caption { get; set; } public String Caption { get; set; }
} }
private OrganisationData GetOrganisationForFilter(SysId filterOrganisationId, String filterOrganisationCaption) private OrganisationData GetOrganisationForFilter(SysId filterOrganisationId, String filterOrganisationCaption, Sax.OrganisationRole organisationRole)
{ {
// Check that user is associated with organisations. // Check that user is associated with organisations.
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
if (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) < 1) if (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) < 1)
return null; return null;
// Filter organisation. // Roles (any) required for organisation list.
OrganisationData organisationData = new OrganisationData(filterOrganisationId); List<Sax.OrganisationRole> requiredRoles = new List<Sax.OrganisationRole>() { Sax.OrganisationRole.Admin };
organisationData.Caption = filterOrganisationCaption; if (organisationRole > 0)
if (!SysId.IsValid(filterOrganisationId) || StringUtil.IsEmpty(filterOrganisationCaption)) requiredRoles.Add(organisationRole);
// Retrieve specified organisation.
OrganisationData organisationData = null;
if (SysId.IsValid(filterOrganisationId))
{ {
// Pick the first Organisation that the user is a member of. organisationData = new OrganisationData(filterOrganisationId) { Caption = filterOrganisationCaption };
using (SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationData.Id))
{
// Validate organisation.
if (organisation != null && organisation.IsStatusActive && AccountMgr.UserHasAnyOrganisationRole(UserAccountId, organisation.Id, requiredRoles))
organisationData.Caption = organisation.Name;
else
organisationData = null;
}
}
if (organisationData == null)
{
// Pick the first valid Organisation that the user is a member of.
ColumnDfn colOrganisationId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId); ColumnDfn colOrganisationId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId);
ColumnDfn colOrganisationName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name); ColumnDfn colOrganisationName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name);
prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
if (SysId.IsValid(filterOrganisationId)) if (organisationData != null && SysId.IsValid(organisationData.Id))
prmUserOrganisation.OrganisationIdsIncluded.Add(filterOrganisationId); prmUserOrganisation.OrganisationIdsIncluded.Add(organisationData.Id);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.OrganisationMembersOnly = true; prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.SortColumns.Add(colOrganisationName); prmUserOrganisation.SortColumns.Add(colOrganisationName);
@@ -13,7 +13,7 @@ using System.Threading.Tasks;
namespace Saxonite.Net.Core.Web.Online.Models namespace Saxonite.Net.Core.Web.Online.Models
{ {
//======================================================================= //=======================================================================
public class Model_Activity: SaxModel_Online public class Model_Activity : SaxModel_Online
{ {
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Construction. // Construction.
@@ -32,14 +32,14 @@ namespace Saxonite.Net.Core.Web.Online.Models
// Activity identity. // Activity identity.
// ToDo Replace Type + Idx (Id) with Idx and cross-reference stored in Session data. // ToDo Replace Type + Idx (Id) with Idx and cross-reference stored in Session data.
public String ActivityType { get; set; } public String ActivityItemType { get; set; }
public String ActivityIdx { get; set; } public String ActivityItemId { get; set; }
public String ActivityReaction{ get; set; } public String ActivityReaction { get; set; }
public Sax.ActivityReaction GetActivityReaction() public Sax.ActivityReaction GetActivityReaction()
{ {
Sax.ActivityReaction reaction = EnumUtil.ParseEnum(ActivityReaction, Sax.ActivityReaction.Unknown); Sax.ActivityReaction reaction = EnumUtil.ParseEnum(ActivityReaction, Sax.ActivityReaction.Unknown);
if (reaction <= 0 && StringUtil.IsNumeric(ActivityReaction)) if (reaction <= 0 && StringUtil.IsNumeric(ActivityReaction))
reaction = (Sax.ActivityReaction)StringUtil.ToShort(ActivityReaction); reaction = (Sax.ActivityReaction)StringUtil.ToShort(ActivityReaction);
return reaction; return reaction;
} }
@@ -49,7 +49,8 @@ namespace Saxonite.Net.Core.Web.Online.Models
public String EventDate { get; set; } public String EventDate { get; set; }
public String EventTime { get; set; } public String EventTime { get; set; }
public String EventTypeCode { get; set; } public String EventTypeCode { get; set; }
public String EventAbout { get; set; } public String EventSummary { get; set; }
public String EventDetails { get; set; }
public String EventStatusCode { get; set; } public String EventStatusCode { get; set; }
public SaStatus EventStatus { get { return SacsSystem.GetStatusForCode(EventStatusCode); } } public SaStatus EventStatus { get { return SacsSystem.GetStatusForCode(EventStatusCode); } }
@@ -69,6 +70,9 @@ namespace Saxonite.Net.Core.Web.Online.Models
// Event date. // Event date.
if (EventDate != null) if (EventDate != null)
{ {
DateTime eventOn = ParseDateFromForm(EventDate);
if (!DateUtil.IsValid(eventOn))
responseData.SetControlError(nameof(EventDate), Localiser["msg.validation.mandatory.value"]);
} }
// Event time. // Event time.
@@ -76,14 +80,22 @@ namespace Saxonite.Net.Core.Web.Online.Models
{ {
} }
// Event about. // Event summary.
if (EventAbout != null) if (EventSummary != null)
{ {
responseData.SetControlValue(nameof(EventAbout), EventAbout); responseData.SetControlValue(nameof(EventSummary), EventSummary);
if (StringUtil.IsEmpty(EventAbout)) if (StringUtil.IsEmpty(EventSummary))
responseData.SetControlError(nameof(EventAbout), Localiser["msg.validation.mandatory.value"]); responseData.SetControlError(nameof(EventSummary), Localiser["msg.validation.mandatory.value"]);
else if (StringUtil.GetLength(EventAbout) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About)) else if (StringUtil.GetLength(EventSummary) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary))
responseData.SetControlError(nameof(EventAbout), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About)]); responseData.SetControlError(nameof(EventSummary), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary)]);
}
// Event details.
if (EventDetails != null)
{
responseData.SetControlValue(nameof(EventDetails), EventDetails);
if (StringUtil.GetLength(EventDetails) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details))
responseData.SetControlError(nameof(EventDetails), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details)]);
} }
// Event sport. // Event sport.
@@ -91,7 +103,7 @@ namespace Saxonite.Net.Core.Web.Online.Models
{ {
SysId articleSportId = ExtractSysId(EventSportIdPrimary); SysId articleSportId = ExtractSysId(EventSportIdPrimary);
if (!SysId.IsValid(articleSportId)) if (!SysId.IsValid(articleSportId))
responseData.SetControlError(nameof(EventSportIdPrimary), Localiser["msg.validation.mandatory.value"]); responseData.SetControlError("EventSportPrimary", Localiser["msg.validation.mandatory.value"]);
} }
// Event region. // Event region.
@@ -99,16 +111,16 @@ namespace Saxonite.Net.Core.Web.Online.Models
{ {
SysId articleRegionId = ExtractSysId(EventRegionIdCountry); SysId articleRegionId = ExtractSysId(EventRegionIdCountry);
if (!SysId.IsValid(articleRegionId)) if (!SysId.IsValid(articleRegionId))
responseData.SetControlError(nameof(EventRegionIdCountry), Localiser["msg.validation.mandatory.value"]); responseData.SetControlError("EventRegionCountry", Localiser["msg.validation.mandatory.value"]);
} }
// Event status. // Event status.
if (EventStatusCode != null) if (EventStatusCode != null)
{ {
if (StringUtil.IsEmpty(EventStatusCode)) if (StringUtil.IsEmpty(EventStatusCode))
responseData.SetControlError(nameof(EventStatusCode), Localiser["msg.validation.mandatory.value"]); responseData.SetControlError(nameof(EventStatus), Localiser["msg.validation.mandatory.value"]);
else if (!SaxOrganisationEvent.ValidStatuses.Contains(EventStatus)) else if (!SaxOrganisationEvent.ValidStatuses.Contains(EventStatus))
responseData.SetControlError(nameof(EventStatusCode), Localiser["msg.validation.invalid.value"]); responseData.SetControlError(nameof(EventStatus), Localiser["msg.validation.invalid.value"]);
} }
return !responseData.HasControlErrors(); return !responseData.HasControlErrors();
@@ -21,10 +21,14 @@ namespace Saxonite.Net.Core.Web.Online.Models
{ {
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Data members. // Data members.
private bool? userCanManageOrganisationMembers = null; private class UserCanManageOptions
private bool? userCanManageOrganisationOpportunities = null; {
private bool? userCanManageOrganisationSchedule = null; public bool? OrganisationMembers { get; set; } = null;
private bool? userCanManageOrganisationArticles = null; public bool? OrganisationOpportunities { get; set; } = null;
public bool? OrganisationSchedule { get; set; } = null;
public bool? OrganisationArticles { get; set; } = null;
}
private readonly UserCanManageOptions userCanManage = new UserCanManageOptions();
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Protected construction. // Protected construction.
@@ -42,9 +46,10 @@ namespace Saxonite.Net.Core.Web.Online.Models
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Menu options. // Menu options.
public bool MembersAllowed { get { return UserCanManageOrganisationMembers; } } public bool OrganisationMembersAllowed { get { return UserCanManageOrganisationMembers; } }
public bool ArticlesAllowed { get { return UserIsJournalist || UserCanManageOrganisationArticles; } } public bool ArticlesAllowed { get { return UserIsJournalist || UserCanManageOrganisationArticles; } }
public bool OpportunitiesAllowed { get { return UserCanManageOrganisationOpportunities; } } public bool OrganisationOpportunitiesAllowed { get { return UserCanManageOrganisationOpportunities; } }
public bool OrganisationEventsAllowed { get { return UserCanManageOrganisationSchedule; } }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Security profile. // Security profile.
@@ -53,7 +58,7 @@ namespace Saxonite.Net.Core.Web.Online.Models
{ {
get get
{ {
if (userCanManageOrganisationMembers == null && ValidUserSession) if (userCanManage.OrganisationMembers == null && ValidUserSession)
{ {
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
@@ -61,16 +66,16 @@ namespace Saxonite.Net.Core.Web.Online.Models
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.MemberAdmin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.MemberAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
userCanManageOrganisationMembers = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0); userCanManage.OrganisationMembers = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0);
} }
return userCanManageOrganisationMembers == true ? true : false; return userCanManage.OrganisationMembers == true ? true : false;
} }
} }
public bool UserCanManageOrganisationOpportunities public bool UserCanManageOrganisationOpportunities
{ {
get get
{ {
if (userCanManageOrganisationOpportunities == null && ValidUserSession) if (userCanManage.OrganisationOpportunities == null && ValidUserSession)
{ {
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
@@ -78,16 +83,16 @@ namespace Saxonite.Net.Core.Web.Online.Models
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.OpportunityAdmin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.OpportunityAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
userCanManageOrganisationOpportunities = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0); userCanManage.OrganisationOpportunities = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0);
} }
return userCanManageOrganisationOpportunities == true ? true : false; return userCanManage.OrganisationOpportunities == true ? true : false;
} }
} }
public bool UserCanManageOrganisationSchedule public bool UserCanManageOrganisationSchedule
{ {
get get
{ {
if (userCanManageOrganisationSchedule == null && ValidUserSession) if (userCanManage.OrganisationSchedule == null && ValidUserSession)
{ {
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
@@ -95,16 +100,16 @@ namespace Saxonite.Net.Core.Web.Online.Models
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.ScheduleAdmin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.ScheduleAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
userCanManageOrganisationSchedule = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0); userCanManage.OrganisationSchedule = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0);
} }
return userCanManageOrganisationSchedule == true ? true : false; return userCanManage.OrganisationSchedule == true ? true : false;
} }
} }
public bool UserCanManageOrganisationArticles public bool UserCanManageOrganisationArticles
{ {
get get
{ {
if (userCanManageOrganisationArticles == null && ValidUserSession) if (userCanManage.OrganisationArticles == null && ValidUserSession)
{ {
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId); prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
@@ -112,9 +117,9 @@ namespace Saxonite.Net.Core.Web.Online.Models
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.Admin);
prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.ArticleAdmin); prmUserOrganisation.OrganisationRolesAny.Add(Sax.OrganisationRole.ArticleAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
userCanManageOrganisationArticles = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0); userCanManage.OrganisationArticles = (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) > 0);
} }
return userCanManageOrganisationArticles == true ? true : false; return userCanManage.OrganisationArticles == true ? true : false;
} }
} }
+10 -4
View File
@@ -86,15 +86,15 @@ else
@* Activity Id form - to retrieve details for the selected activity. *@ @* Activity Id form - to retrieve details for the selected activity. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityId", @class = "", @action = "#", onsubmit = "return false;" })) @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityId", @class = "", @action = "#", onsubmit = "return false;" }))
{ {
<input type="hidden" name="ActivityType" class="ActivityType" /> <input type="hidden" name="ActivityItemType" class="ActivityItemType" />
<input type="hidden" name="ActivityIdx" class="ActivityIdx" /> <input type="hidden" name="ActivityItemId" class="ActivityItemId" />
} }
@* Activity React form - to record reaction to the selected activity. *@ @* Activity React form - to record reaction to the selected activity. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityReact", @class = "", @action = "#", onsubmit = "return false;" })) @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityReact", @class = "", @action = "#", onsubmit = "return false;" }))
{ {
<input type="hidden" name="ActivityType" class="ActivityType" /> <input type="hidden" name="ActivityItemType" class="ActivityItemType" />
<input type="hidden" name="ActivityIdx" class="ActivityIdx" /> <input type="hidden" name="ActivityItemId" class="ActivityItemId" />
<input type="hidden" name="ActivityReaction" class="ActivityReaction" /> <input type="hidden" name="ActivityReaction" class="ActivityReaction" />
} }
@@ -121,6 +121,12 @@ else
<div class="sax-panel-item ArticleContentSegmentImage center"> <div class="sax-panel-item ArticleContentSegmentImage center">
<img src="" alt="" title="" /> <img src="" alt="" title="" />
</div> </div>
<div class="sax-panel-item Event">
<div class="EventOrganisation"></div>
<div class="EventAt"></div>
<div class="EventSummary"></div>
<div class="EventDetails"></div>
</div>
<div class="sax-panel-item Opportunity"> <div class="sax-panel-item Opportunity">
<div class="OpportunityOrganisation"></div> <div class="OpportunityOrganisation"></div>
<div class="OpportunityPosition"></div> <div class="OpportunityPosition"></div>
@@ -0,0 +1,109 @@
@model Model_Organisation_Events
@inject SaxLocaliser Localiser
@{
ViewData["Title"] = "Organisation - Events";
}
<div class="sax-panel Events">
<script type="text/javascript">
sax.lbl.edit = '@(Localiser.GetJavascriptText("label.edit"))';
</script>
@* Filter Form *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmEventFilter", @class = "sax-form", @action = "#", @method = "POST", onsubmit = "return false;" }))
{
@* Filter Panel *@
<div class="sax-panel-filter">
@* Filter header *@
<div class="sax-header row">
<div class="col"><div class="sax-caption">@Localiser["organisation.caption.events"]</div></div>
<div class="fixed row">
@* Burger menu *@
<ul class="nav navbar-nav navbar-dark navbar-right sax-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sax-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
<div class="sax-content">
<div class="sax-control row">
<div class="col-sm-4"><div class="sax-label text-left text-sm-right">@Localiser["label.organisation"]</div></div>
<div class="col-sm-8 row">
@Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId", @class = "FilterOrganisationId" })
<div class="col"><input type="text" id="ifFilterOrganisation" class="FilterOrganisation sax-input" readonly="readonly" value="@(Model.Filter.OrganisationCaption)" /></div>
<div class="fixed"><button class="sax-button SelectFilterOrganisation">@Localiser["label.select"]</button></div>
</div>
</div>
<div class="sax-control row">
<div class="col-sm-4"><div class="sax-label text-left text-sm-right">@Localiser["label.search"]</div></div>
<div class="col-sm-8"><input type="search" id="ifEventFilter" name="Filter.Event" class="EventFilter sax-input" maxlength="64" autocomplete="off" /></div>
</div>
</div>
@* Filter item templates *@
<div class="sax-panel-item-template">
@* Burger dropdown item template - ul is ignored *@
<ul class="sax-dropdown-menu Events">
<li class="sax-dropdown-item sax-action"><div class="sax-label">...</div></li>
</ul>
</div>
</div>
}
@* Results Panel *@
<div class="sax-panel-results">
<div class="sax-panel-messages"></div>
<div class="sax-panel-item-list"></div>
@* Element templates *@
<div class="sax-panel-item-template">
@* Item template *@
<div class="sax-panel-item Event">
<div class="sax-header row">
<div class="col">
<div class="sax-caption"><div class="sax-action"><span class="EventDate"></span><span class=""></span></div></div>
</div>
<div class="fixed sax-actions">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sax-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sax-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
<div class="sax-content">
<div class="row">
<div class="col-sm-12"><div class="EventSummary"></div></div>
<div class="col-sm-6"><div class="EventRegionCaption sax-note"></div></div>
<div class="col-sm-6 right"><div class="EventSportCaption sax-note"></div></div>
</div>
<div class="row">
<div class="col-sm-4"><div class="sax-note">@Localiser["label.created"]:&nbsp;<span class="EventCreatedOn"></span></div></div>
<div class="col-sm-4"><div class="EventPublished sax-note">@Localiser["label.published"]:&nbsp;<span class="EventPublishedOn"></span></div></div>
<div class="col-sm-4 right"><div class="EventStatusDesc sax-note"></div></div>
</div>
</div>
</div>
@* Burger dropdown item template - ul is ignored *@
<ul class="sax-dropdown-menu Event">
<li class="sax-dropdown-item sax-action"><div class="sax-label">...</div></li>
</ul>
</div>
</div>
</div>
<partial name="~/Views/Common/OrganisationSelect.cshtml" />
<partial name="Panel-EventDialog.cshtml" />
@@ -43,7 +43,7 @@
<div class="col-sm-8 row"> <div class="col-sm-8 row">
@Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId", @class = "FilterOrganisationId" }) @Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId", @class = "FilterOrganisationId" })
<div class="col"><input type="text" id="ifFilterOrganisation" class="FilterOrganisation sax-input" value="@(Model.Filter.OrganisationCaption)" /></div> <div class="col"><input type="text" id="ifFilterOrganisation" class="FilterOrganisation sax-input" value="@(Model.Filter.OrganisationCaption)" /></div>
<div class="fixed"><button class="sax-button" onclick="sax.selectFilterOrganisation()">@Localiser["label.select"]</button></div> <div class="fixed"><button class="sax-button SelectFilterOrganisation">@Localiser["label.select"]</button></div>
</div> </div>
</div> </div>
<div class="sax-control row"> <div class="sax-control row">
@@ -92,14 +92,11 @@
<div class="sax-content"> <div class="sax-content">
<div class="row"> <div class="row">
<div class="col-sm-6"><div class="MemberEmail"></div></div> <div class="col-sm-6"><div class="MemberEmail"></div></div>
<div class="col-sm-6 text-sm-right"><div class=""></div></div> <div class="col-sm-6 text-sm-right"><div class="MemberRoles"></div></div>
</div>
<div class="">
<div class="MemberAdminComment sax-note"></div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-6"><div class=" sax-note"></div></div> <div class="col-sm-8"><div class="MemberAdminComment sax-note"></div></div>
<div class="col-sm-6 text-sm-right"><div class="MemberStatus sax-note"></div></div> <div class="col-sm-4 text-sm-right"><div class="MemberStatus sax-note"></div></div>
</div> </div>
</div> </div>
</div> </div>
@@ -35,7 +35,7 @@
<div class="col-sm-8 row"> <div class="col-sm-8 row">
@Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId", @class = "FilterOrganisationId" }) @Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId", @class = "FilterOrganisationId" })
<div class="col"><input type="text" id="ifFilterOrganisation" class="FilterOrganisation sax-input" readonly="readonly" value="@(Model.Filter.OrganisationCaption)" /></div> <div class="col"><input type="text" id="ifFilterOrganisation" class="FilterOrganisation sax-input" readonly="readonly" value="@(Model.Filter.OrganisationCaption)" /></div>
<div class="fixed"><button class="sax-button" onclick="sax.selectFilterOrganisation()">@Localiser["label.select"]</button></div> <div class="fixed"><button class="sax-button SelectFilterOrganisation">@Localiser["label.select"]</button></div>
</div> </div>
</div> </div>
<div class="sax-control row"> <div class="sax-control row">
@@ -0,0 +1,127 @@
@model Model_Organisation_Events
@inject SaxLocaliser Localiser
@{
/* Organisation Events - Event dialog panel */
}
<script type="text/javascript">
sax.dlg.title.createEvent = '@Localiser.GetJavascriptText("organisation.caption.event.create")';
sax.dlg.title.updateEvent = '@Localiser.GetJavascriptText("organisation.caption.event.update")';
sax.dlg.title.selectRegion = '@Localiser.GetJavascriptText("reference.caption.region.select")';
sax.dlg.title.selectSport = '@Localiser.GetJavascriptText("reference.caption.sport.select")';
</script>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmEventId", @class = "sax-form" }))
{
@Html.HiddenFor(model => model.EventId, new { @class = "EventId" })
}
<div id="dlgEvent" class="sax-dialog" title="">
<div class="spacer2"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmEvent", @class = "sax-form", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.EventId, new { @id = "ifEventId", @class = "EventId" })
@Html.HiddenFor(model => model.EventExists, new { @id = "ifEventExists", @class = "EventExists" })
<input type="hidden" id="ifEventOrganisationId" class="EventOrganisationId" name="EventOrganisationId" value="@(Model.Filter.OrganisationId)" />
@* Event type *@
<div class="sax-form-control EventTypeCode">
<div class="row">
<div class="col-sm-3">
<div class="sax-label">
<label for="cbEventType"><span>@Localiser["label.type"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control">
<select id="cbEventType" class="EventType sax-select" name="EventTypeCode"></select>
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
@* Event date and time *@
<div class="sax-form-control EventDate">
<div class="row">
<div class="col-sm-3">
<div class="sax-label">
<label for="ifEventDate"><span>@Localiser["label.occurs"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control">
<input id="ifEventDate" name="EventDate" class="EventDate sax-input sax-calendar" readonly="readonly" />
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
@* Event summary *@
<div class="sax-form-control EventSummary">
<div class="sax-label">
<label for="ifEventSummary"><span>@Localiser["label.summary"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextAreaFor(model => model.EventSummary, new { @id = "ifEventSummary", @class = "EventSummary sax-textarea", @rows = 3, @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary) })
</div>
<div class="sax-message"></div>
</div>
@* Event details *@
<div class="sax-form-control EventDetails">
<div class="sax-label">
<label for="ifEventDetails"><span>@Localiser["label.details"]</span><span class="required">&nbsp;</span></label>
</div>
<div class="sax-control">
@Html.TextAreaFor(model => model.EventDetails, new { @id = "ifEventDetails", @class = "EventDetails sax-textarea", @rows = 6, @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details) })
</div>
<div class="sax-message"></div>
</div>
@* Sport *@
<div class="sax-form-control EventSportPrimary">
<div class="row">
<div class="col-sm-3">
<div class="sax-label">
<label for="ifEventSportPrimaryCaption"><span>@Localiser["label.sport"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control row">
@Html.HiddenFor(model => model.EventSportIdPrimary, new { @id = "ifEventSportIdPrimary", @class = "EventSportIdPrimary" })
<div class="col"><input type="text" id="ifEventSportCaptionPrimary" class="EventSportCaptionPrimary sax-input" readonly="readonly" /></div>
<div class="fixed"><button class="SelectEventSportPrimary sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
@* Region *@
<div class="sax-form-control EventRegionCountry">
<div class="row">
<div class="col-sm-3">
<div class="sax-label">
<label for="ifEventRegionCountryCaption"><span>@Localiser["label.region"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control row">
@Html.HiddenFor(model => model.EventRegionIdCountry, new { @id = "ifEventRegionIdCountry", @class = "EventRegionIdCountry" })
<div class="col"><input type="text" id="ifEventRegionCaptionCountry" class="EventRegionCaptionCountry sax-input" readonly="readonly" /></div>
<div class="fixed"><button class="SelectEventRegionCountry sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
}
<div class="spacer2"></div>
</div>
<partial name="~/Views/Common/RegionSelect.cshtml" />
<partial name="~/Views/Common/SportSelect.cshtml" />
@@ -16,6 +16,7 @@
<input type="hidden" name="MemberId" class="MemberId" /> <input type="hidden" name="MemberId" class="MemberId" />
} }
<div id="dlgMember" class="sax-dialog" title=""> <div id="dlgMember" class="sax-dialog" title="">
<div class="spacer2"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmMember", @class = "sax-form", @onSubmit = "return false;" })) @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmMember", @class = "sax-form", @onSubmit = "return false;" }))
{ {
@@ -26,92 +27,121 @@
@* Member Email Address *@ @* Member Email Address *@
<div class="sax-form-control MemberEmailAddress"> <div class="sax-form-control MemberEmailAddress">
<div class="sax-label"> <div class="row">
<label for="ifMemberEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label> <div class="col-sm-3">
<div class="sax-label">
<label for="ifMemberEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control">
<input type="text" name="MemberEmailAddress" class="MemberEmailAddress sax-input" autocomplete="off" readonly="readonly" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress))" />
</div>
<div class="sax-message"></div>
</div>
</div> </div>
<div class="sax-control">
<input type="text" name="MemberEmailAddress" class="MemberEmailAddress sax-input" autocomplete="off" readonly="readonly" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress))" />
</div>
<div class="sax-message"></div>
</div> </div>
@* Member Display Name *@ @* Member Display Name *@
<div class="sax-form-control MemberDisplayName"> <div class="sax-form-control MemberDisplayName">
<div class="sax-label"> <div class="row">
<label for="ifMemberDisplayName"><span>@Localiser["label.name"]</span></label> <div class="col-sm-3">
<div class="sax-label">
<label for="ifMemberDisplayName"><span>@Localiser["label.name"]</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control">
<input type="text" if="ifMemberDisplayName" class="MemberDisplayName sax-input" readonly="readonly" />
</div>
<div class="sax-message"></div>
</div>
</div> </div>
<div class="sax-control">
<input type="text" if="ifMemberDisplayName" class="MemberDisplayName sax-input" readonly="readonly" />
</div>
<div class="sax-message"></div>
</div> </div>
@* Member Name *@ @* Member Name *@
<div class="row"> <div class="row">
<div class="col-sm-3"></div>
<div class="col-sm">
<div class="row">
<div class="col-sm-4"> <div class="col-sm-4">
@* User Title *@ @* User Title *@
<div class="sax-form-control MemberTitle"> <div class="sax-form-control MemberTitle pr-sm-1">
<div class="sax-label"> <div class="sax-label">
<label for="cbMemberTitle"><span>@Localiser["label.title"]</span></label> <label for="cbMemberTitle"><span>@Localiser["label.title"]</span></label>
</div>
<div class="sax-control">
<select id="cbMemberTitle" name="MemberTitle" class="MemberTitle sax-input"></select>
</div>
<div class="sax-message"></div>
</div>
</div> </div>
<div class="sax-control">
<select id="cbMemberTitle" name="MemberTitle" class="MemberTitle sax-input"></select> <div class="col-sm-4">
@* User First Name *@
<div class="sax-form-control MemberFirstName pr-sm-1">
<div class="sax-label">
<label for="ifMemberFirstName"><span>@Localiser["label.first.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifMemberFirstName" name="MemberFirstName" class="MemberFirstName sax-input" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName))" />
</div>
<div class="sax-message"></div>
</div>
</div> </div>
<div class="sax-message"></div>
<div class="col-sm-4">
@* User Last Name *@
<div class="sax-form-control MemberLastName">
<div class="sax-label">
<label for="ifMemberLastName"><span>@Localiser["label.last.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifMemberLastName" name="MemberLastName" class="MemberLastName sax-input" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName))" />
</div>
<div class="sax-message"></div>
</div>
</div>
</div> </div>
</div> </div>
<div class="col-sm-4">
@* User First Name *@
<div class="sax-form-control MemberFirstName">
<div class="sax-label">
<label for="ifMemberFirstName"><span>@Localiser["label.first.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifMemberFirstName" name="MemberFirstName" class="MemberFirstName sax-input" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName))" />
</div>
<div class="sax-message"></div>
</div>
</div>
<div class="col-sm-4">
@* User Last Name *@
<div class="sax-form-control MemberLastName">
<div class="sax-label">
<label for="ifMemberLastName"><span>@Localiser["label.last.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifMemberLastName" name="MemberLastName" class="MemberLastName sax-input" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName))" />
</div>
<div class="sax-message"></div>
</div>
</div>
</div> </div>
@* Member roles *@ @* Member roles *@
<div class="sax-form-control MemberRoleCodes"> <div class="sax-form-control MemberRoleCodes">
<div class="sax-label"> <div class="row">
<label for="ifMemberRoles"><span>@Localiser["label.roles"]</span></label> <div class="col-sm-3">
<div class="sax-label">
<label for="ifMemberRoles"><span>@Localiser["label.roles"]</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control row">
<input type="hidden" name="MemberRoleCodes" class="MemberRoleCodes sax-input" />
<div class="col"><textarea class="MemberRoles sax-input" rows="4" readonly="readonly"></textarea></div>
<div class="fixed"><button class="sax-button SelectMemberRoles" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
</div>
<div class="sax-message"></div>
</div>
</div> </div>
<div class="sax-control row">
<input type="hidden" name="MemberRoleCodes" class="MemberRoleCodes sax-input" />
<div class="col"><textarea class="MemberRoles sax-input" rows="6" readonly="readonly" ondblclick="sax.selectMemberRoles()"></textarea></div>
<div class="fixed"><button class="sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px" onclick="sax.selectMemberRoles()">@Localiser["label.select"]</button></div>
</div>
<div class="sax-message"></div>
</div> </div>
@* Admin Comment *@ @* Admin Comment *@
<div class="sax-form-control MemberAdminComment"> <div class="sax-form-control MemberAdminComment">
<div class="sax-label"> <div class="row">
<label for="ifMemberAdminComment"><span>@Localiser["label.comment"]</span></label> <div class="col-sm-3">
<div class="sax-label">
<label for="ifMemberAdminComment"><span>@Localiser["label.comment"]</span></label>
</div>
</div>
<div class="col-sm">
<div class="sax-control">
<textarea type="text" id="ifMemberAdminComment" name="MemberAdminComment" class="MemberAdminComment sax-textarea" rows="6" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment))"></textarea>
</div>
<div class="sax-message"></div>
</div>
</div> </div>
<div class="sax-control">
<textarea type="text" id="ifMemberAdminComment" name="MemberAdminComment" class="MemberAdminComment sax-textarea" rows="4" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment))"></textarea>
</div>
<div class="sax-message"></div>
</div> </div>
} }
@@ -64,7 +64,7 @@
<label for="ifOpportunityOutline"><span>@Localiser["label.outline"]</span><span class="required">&nbsp;*</span></label> <label for="ifOpportunityOutline"><span>@Localiser["label.outline"]</span><span class="required">&nbsp;*</span></label>
</div> </div>
<div class="sax-control"> <div class="sax-control">
@Html.TextAreaFor(model => model.OpportunityOutline, new { @id = "ifOpportunityOutline", @class = "OpportunityOutline sax-input", @rows = 4, @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline) }) @Html.TextAreaFor(model => model.OpportunityOutline, new { @id = "ifOpportunityOutline", @class = "OpportunityOutline sax-textarea", @rows = 4, @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline) })
</div> </div>
<div class="sax-message"></div> <div class="sax-message"></div>
</div> </div>
@@ -80,8 +80,8 @@
<div class="col-sm"> <div class="col-sm">
<div class="sax-control row"> <div class="sax-control row">
@Html.HiddenFor(model => model.OpportunitySportId, new { @id = "ifOpportunitySportId", @class = "OpportunitySportId" }) @Html.HiddenFor(model => model.OpportunitySportId, new { @id = "ifOpportunitySportId", @class = "OpportunitySportId" })
<div class="col"><input type="text" id="ifOpportunitySportCaption" class="OpportunitySportCaption sax-input" readonly="readonly" ondblclick="sax.selectSport()" /></div> <div class="col"><input type="text" id="ifOpportunitySportCaption" class="OpportunitySportCaption sax-input" readonly="readonly" /></div>
<div class="fixed"><button class="SelectSport sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px" onclick="sax.selectSport()">@Localiser["label.select"]</button></div> <div class="fixed"><button class="SelectOpportunitySport sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
</div> </div>
<div class="sax-message"></div> <div class="sax-message"></div>
</div> </div>
@@ -99,8 +99,8 @@
<div class="col-sm"> <div class="col-sm">
<div class="sax-control row"> <div class="sax-control row">
@Html.HiddenFor(model => model.OpportunityRegionId, new { @id = "ifOpportunityRegionId", @class = "OpportunityRegionId" }) @Html.HiddenFor(model => model.OpportunityRegionId, new { @id = "ifOpportunityRegionId", @class = "OpportunityRegionId" })
<div class="col"><input type="text" id="ifOpportunityRegionCaption" class="OpportunityRegionCaption sax-input" readonly="readonly" ondblclick="sax.selectRegion()" /></div> <div class="col"><input type="text" id="ifOpportunityRegionCaption" class="OpportunityRegionCaption sax-input" readonly="readonly" /></div>
<div class="fixed"><button class="SelectRegion sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px" onclick="sax.selectRegion()">@Localiser["label.select"]</button></div> <div class="fixed"><button class="SelectOpportunityRegion sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px">@Localiser["label.select"]</button></div>
</div> </div>
<div class="sax-message"></div> <div class="sax-message"></div>
</div> </div>
@@ -134,14 +134,18 @@
{ {
<div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Article/Index');">@Localiser["article.caption.articles"]</div> <div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Article/Index');">@Localiser["article.caption.articles"]</div>
} }
@if (Model.MembersAllowed) @if (Model.OrganisationMembersAllowed)
{ {
<div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Organisation/Members');">@Localiser["label.members"]</div> <div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Organisation/Members');">@Localiser["label.members"]</div>
} }
@if (Model.OpportunitiesAllowed) @if (Model.OrganisationOpportunitiesAllowed)
{ {
<div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Organisation/Opportunities');">@Localiser["label.opportunities"]</div> <div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Organisation/Opportunities');">@Localiser["label.opportunities"]</div>
} }
@if (Model.OrganisationEventsAllowed)
{
<div class="dropdown-item text-dark sax-action" onclick="sax.goToPage('Organisation/Events');">@Localiser["label.events"]</div>
}
</div> </div>
</li> </li>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
@@ -342,6 +342,19 @@
background-color: var(--color-article-pale); background-color: var(--color-article-pale);
} }
/* Events*/
.sax-panel-item.Event,
.sax-panel-item.Event > .sax-header
{
border-color: var(--color-event);
}
.sax-panel-item.Event > .sax-header
{
background-color: var(--color-event-pale);
}
/* Opportunities */ /* Opportunities */
.sax-panel-item.Opportunity, .sax-panel-item.Opportunity,
+10 -2
View File
@@ -45,6 +45,7 @@
} }
#dlgActivity .sax-panel-item.Article .ArticleHeadline, #dlgActivity .sax-panel-item.Article .ArticleHeadline,
#dlgActivity .sax-panel-item.Event .EventOrganisation,
#dlgActivity .sax-panel-item.Opportunity .OpportunityOrganisation #dlgActivity .sax-panel-item.Opportunity .OpportunityOrganisation
{ {
margin: 0; margin: 0;
@@ -55,9 +56,10 @@
} }
#dlgActivity .sax-panel-item.Article .ArticleSummary, #dlgActivity .sax-panel-item.Article .ArticleSummary,
#dlgActivity .sax-panel-item.Event .EventAt,
#dlgActivity .sax-panel-item.Event .EventSummary,
#dlgActivity .sax-panel-item.Opportunity .OpportunityOrganisation, #dlgActivity .sax-panel-item.Opportunity .OpportunityOrganisation,
#dlgActivity .sax-panel-item.Opportunity .OpportunityPosition, #dlgActivity .sax-panel-item.Opportunity .OpportunityPosition
#dlgActivity .sax-panel-item.Opportunity .OpportunityOutline
{ {
margin: 0; margin: 0;
padding: 8px 8px; padding: 8px 8px;
@@ -74,6 +76,12 @@
border-bottom: 1px solid #b0b0b0; border-bottom: 1px solid #b0b0b0;
} }
#dlgActivity .sax-panel-item.Event .EventDetails,
#dlgActivity .sax-panel-item.Opportunity .OpportunityOutline
{
padding: 8px 8px;
}
#dlgActivity .sax-panel-item.Article .ArticleAuthor, #dlgActivity .sax-panel-item.Article .ArticleAuthor,
#dlgActivity .sax-panel-item.Article .ArticleOrganisation #dlgActivity .sax-panel-item.Article .ArticleOrganisation
{ {
@@ -20,6 +20,10 @@
--color-article: #9966CC; --color-article: #9966CC;
--color-article-light: #b38cd9; --color-article-light: #b38cd9;
--color-article-pale: #decdee; --color-article-pale: #decdee;
--color-event-dark: #38969d;
--color-event: #71b4b9;
--color-event-light: #aad2d5;
--color-event-pale: #c6e1e3;
--color-opportunity-dark: #8f6b24; --color-opportunity-dark: #8f6b24;
--color-opportunity: #CC9933; --color-opportunity: #CC9933;
--color-opportunity-light: #dbb870; --color-opportunity-light: #dbb870;
+91 -91
View File
@@ -125,6 +125,97 @@
sax.refreshResults(50); sax.refreshResults(50);
} }
//--------------------------------------------------------------
sax.createItem = function ()
{
sax.clearItem();
sax.populateArticleContent({});
sax.openArticleDialog(sax.dlg.title.createArticle);
}
sax.clearItem = function ()
{
let $frmF = $frm.filter;
let $frmA = $frm.article;
$('#ifArticleId,#ifArticleExists,#ifArticleOrganisationId,#ifArticleRegionId,#ifArticleSportId,input[type="text"],textarea,select', $frmA).val('');
let orgId = $('#ifFilterOrganisationId', $frmF).val();
$('#ifArticleOrganisationId', $frmA).val(orgId);
$('#ifArticleOrganisation', $frmA).val($('#ifFilterOrganisation', $frmF).val());
$('.sax-form-control.ArticleOrganisation', $frmA).toggle(!!orgId);
$('#chkArticlePublish', $frmA).prop("checked", false);
$('.sax-input.sax-calendar.ArticlePublishOn', $frmA).datepicker('setDate', 'today');
sax.clearControlErrors();
}
sax.openArticleDialog = function (title)
{
sax.clearControlErrors();
sax.switchArticleHeader();
sax.$dlg.article.dialog('option', 'title', title);
sax.openDialog(sax.$dlg.article, 600, 800);
}
//--------------------------------------------------------------
sax.updateItem = function (item)
{
$('.ArticleId', $frm.articleId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Article/Ajax/GetItem', formId: 'frmArticleId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
sax.clearItem();
if (!response.success) return;
let $frmA = $frm.article;
let item = response.article;
$('#ifArticleId', $frmA).val(item.id);
$('#ifArticleExists', $frmA).val(1);
$('#ifArticleHeadline', $frmA).val(item.headline);
$('#ifArticleSummary', $frmA).val(item.summary);
$('#ifArticleRegionId', $frmA).val(item.regionIdPrimary);
$('#ifArticleRegionCaption', $frmA).val(item.regionCaptionPrimary);
$('#ifArticleSportId', $frmA).val(item.sportIdPrimary);
$('#ifArticleSportCaption', $frmA).val(item.sportCaptionPrimary);
if (item.published)
$('span.ArticlePublishedOn', $frmA).text(item.publishedOnFmt);
$('div.ArticlePublish', $frmA).toggle(!item.published);
$('div.ArticlePublished', $frmA).toggle(!!item.published);
$('#cbArticleStatusCode', $frmA).val(item.statusCode);
sax.populateArticleContent(item.content);
sax.openArticleDialog(sax.dlg.title.updateArticle);
}
//--------------------------------------------------------------
sax.switchArticleHeader = function ()
{
$('.sax-article').removeClass('ArticleContent').addClass('ArticleHeader');
}
sax.switchArticleContent = function ()
{
$('.sax-article').removeClass('ArticleHeader').addClass('ArticleContent');
}
//--------------------------------------------------------------
sax.selectSport = function ()
{
sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#ifArticleSportId').val(), fnCallback: sax.onSelectSport })
}
sax.onSelectSport = function (sport)
{
sax.clearControlError($('#ifArticleSportId').val(sport.id));
$('#ifArticleSportCaption').val(sport ? sport.name : '');
}
//--------------------------------------------------------------
sax.selectRegion = function ()
{
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifArticleRegionId').val(), fnCallback: sax.onSelectRegion })
}
sax.onSelectRegion = function (region)
{
sax.clearControlError($('#ifArticleRegionId').val(region.id));
$('#ifArticleRegionCaption').val(region ? region.name : '');
}
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.segmentId = function (idx) sax.segmentId = function (idx)
{ {
@@ -333,97 +424,6 @@
} }
} }
//--------------------------------------------------------------
sax.createItem = function ()
{
sax.clearItem();
sax.populateArticleContent({});
sax.openArticleDialog(sax.dlg.title.createArticle);
}
sax.clearItem = function ()
{
let $frmF = $frm.filter;
let $frmA = $frm.article;
$('#ifArticleId,#ifArticleExists,#ifArticleOrganisationId,#ifArticleRegionId,#ifArticleSportId,input[type="text"],textarea,select', $frmA).val('');
let orgId = $('#ifFilterOrganisationId', $frmF).val();
$('#ifArticleOrganisationId', $frmA).val(orgId);
$('#ifArticleOrganisation', $frmA).val($('#ifFilterOrganisation', $frmF).val());
$('.sax-form-control.ArticleOrganisation', $frmA).toggle(!!orgId);
$('#chkArticlePublish', $frmA).prop("checked", false);
$('.sax-input.sax-calendar.ArticlePublishOn', $frmA).datepicker('setDate', 'today');
sax.clearControlErrors();
}
sax.openArticleDialog = function (title)
{
sax.clearControlErrors();
sax.switchArticleHeader();
sax.$dlg.article.dialog('option', 'title', title);
sax.openDialog(sax.$dlg.article, 600, 800);
}
//--------------------------------------------------------------
sax.updateItem = function (item)
{
$('.ArticleId', $frm.articleId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Article/Ajax/GetItem', formId: 'frmArticleId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
sax.clearItem();
if (!response.success) return;
let $frmA = $frm.article;
let item = response.article;
$('#ifArticleId', $frmA).val(item.id);
$('#ifArticleExists', $frmA).val(1);
$('#ifArticleHeadline', $frmA).val(item.headline);
$('#ifArticleSummary', $frmA).val(item.summary);
$('#ifArticleRegionId', $frmA).val(item.regionIdPrimary);
$('#ifArticleRegionCaption', $frmA).val(item.regionCaptionPrimary);
$('#ifArticleSportId', $frmA).val(item.sportIdPrimary);
$('#ifArticleSportCaption', $frmA).val(item.sportCaptionPrimary);
if (item.published)
$('span.ArticlePublishedOn', $frmA).text(item.publishedOnFmt);
$('div.ArticlePublish', $frmA).toggle(!item.published);
$('div.ArticlePublished', $frmA).toggle(!!item.published);
$('#cbArticleStatusCode', $frmA).val(item.statusCode);
sax.populateArticleContent(item.content);
sax.openArticleDialog(sax.dlg.title.updateArticle);
}
//--------------------------------------------------------------
sax.switchArticleHeader = function ()
{
$('.sax-article').removeClass('ArticleContent').addClass('ArticleHeader');
}
sax.switchArticleContent = function ()
{
$('.sax-article').removeClass('ArticleHeader').addClass('ArticleContent');
}
//--------------------------------------------------------------
sax.selectSport = function ()
{
sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#ifArticleSportId').val(), fnCallback: sax.onSelectSport })
}
sax.onSelectSport = function (sport)
{
sax.clearControlError($('#ifArticleSportId').val(sport.id));
$('#ifArticleSportCaption').val(sport ? sport.name : '');
}
//--------------------------------------------------------------
sax.selectRegion = function ()
{
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifArticleRegionId').val(), fnCallback: sax.onSelectRegion })
}
sax.onSelectRegion = function (region)
{
sax.clearControlError($('#ifArticleRegionId').val(region.id));
$('#ifArticleRegionCaption').val(region ? region.name : '');
}
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.storeItem = function () sax.storeItem = function ()
{ {
+23 -11
View File
@@ -5,7 +5,6 @@
(function (win, doc, undef) (function (win, doc, undef)
{ {
"use strict"; "use strict";
sax.itemIdPrefix = 'Act_';
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.refreshResults = function (delay) sax.refreshResults = function (delay)
@@ -46,7 +45,7 @@
{ {
//sax.debug('populateItem', item); //sax.debug('populateItem', item);
if (!item) return; if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.itemIdx).addClass(item.itemTypeClass).toggleClass('sax-activity-reaction-' + item.reaction, !!item.reaction); $item.addClass(item.itemTypeClass).toggleClass('sax-activity-reaction-' + item.reaction, !!item.reaction);
$('.ActivityOrganisation', $item).text(item.organisation); $('.ActivityOrganisation', $item).text(item.organisation);
$('.ActivityAuthor', $item).text(item.author); $('.ActivityAuthor', $item).text(item.author);
$('.ActivityCaption', $item).text(item.caption); $('.ActivityCaption', $item).text(item.caption);
@@ -69,17 +68,19 @@
{ {
//sax.debug('expandActivity', item, $item); //sax.debug('expandActivity', item, $item);
let $frm = $('#frmActivityId'); let $frm = $('#frmActivityId');
$('.ActivityType', $frm).val(item.itemType); $('.ActivityItemType', $frm).val(item.itemType);
$('.ActivityIdx', $frm).val(item.itemIdx); $('.ActivityItemId', $frm).val(item.itemId);
sax.activity = { item: item, $item: $item }; 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.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.doAjaxRequest(sax.ajax.activityInfo, 50);
} }
sax.showActivityDetails = function (response) sax.showActivityDetails = function (response)
{ {
sax.debug('showActivityDetails', response); //sax.debug('showActivityDetails', response);
let $act = $('#dlgActivity .sax-content').empty(); let $act = $('.sax-content', sax.$dlg.activity).empty();
let $ar = $('.ActivityReaction', sax.$dlg.activity.parent()).hide();
let item; let item;
let dlgH = 480;
if (item = response.article) if (item = response.article)
{ {
let $itm = $('.sax-panel-item-template .sax-panel-item.Article').clone(); let $itm = $('.sax-panel-item-template .sax-panel-item.Article').clone();
@@ -88,7 +89,7 @@
$('.ArticleSummary', $itm).text(item.summary).toggle(!!item.summary); $('.ArticleSummary', $itm).text(item.summary).toggle(!!item.summary);
$('.ArticleAuthor', $itm).text(item.author); $('.ArticleAuthor', $itm).text(item.author);
$('.ArticleOrganisation', $itm).text(item.organisation); $('.ArticleOrganisation', $itm).text(item.organisation);
$('.ArticleOrigin', $itm).toggle(!!(item.author||item.organisation)); $('.ArticleOrigin', $itm).toggle(!!(item.author || item.organisation));
let segs = item.content.segments; let segs = item.content.segments;
for (let segIdx = 0; segIdx < segs.length; segIdx++) for (let segIdx = 0; segIdx < segs.length; segIdx++)
{ {
@@ -106,6 +107,17 @@
} }
} }
$act.append($itm); $act.append($itm);
$ar.show();
dlgH = 1600;
}
else if (item = response.event)
{
let $itm = $('.sax-panel-item-template .sax-panel-item.Event').clone();
$('.EventOrganisation', $itm).text(item.organisation);
$('.EventAt', $itm).text(item.eventAt);
$('.EventSummary', $itm).text(item.summary).toggle(!!item.summary);
$('.EventDetails', $itm).text(item.details).toggle(!!item.details);
$act.append($itm);
} }
else if (item = response.opportunity) else if (item = response.opportunity)
{ {
@@ -117,7 +129,7 @@
} }
else return; else return;
sax.setActivityReactionButton(sax.activity.item.reaction); sax.setActivityReactionButton(sax.activity.item.reaction);
sax.openDialog(sax.$dlg.activity, 800, 1600); sax.openDialog(sax.$dlg.activity, 800, dlgH);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
@@ -133,7 +145,7 @@
} }
sax.setActivityReaction = function (r) sax.setActivityReaction = function (r)
{ {
//sax.debug('setActivityReaction', r); sax.debug('setActivityReaction', r, $('.sax-dialog-activity button.ActivityReaction' + r));
if ($('.sax-dialog-activity button.ActivityReaction' + r).hasClass(selectedClass)) r = 0; if ($('.sax-dialog-activity button.ActivityReaction' + r).hasClass(selectedClass)) r = 0;
sax.clearActivityReactionButton(); sax.clearActivityReactionButton();
let fn = function (response) let fn = function (response)
@@ -143,8 +155,8 @@
sax.setActivityReactionButton(response.reaction); sax.setActivityReactionButton(response.reaction);
} }
let $frm = $('#frmActivityReact'); let $frm = $('#frmActivityReact');
$('.ActivityType', $frm).val(sax.activity.item.itemType); $('.ActivityItemType', $frm).val(sax.activity.item.itemType);
$('.ActivityIdx', $frm).val(sax.activity.item.itemIdx); $('.ActivityItemId', $frm).val(sax.activity.item.itemId);
$('.ActivityReaction', $frm).val(r); $('.ActivityReaction', $frm).val(r);
sax.ajax.activityReact = sax.ajax.activityReact || { url: sax.url.base + 'Activity/Ajax/React', formId: 'frmActivityReact', callbackFn: fn, noWaitIcon: true }; 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); sax.doAjaxRequest(sax.ajax.activityReact, 20);
@@ -0,0 +1,270 @@
/*
* Organisation - Events page scripts.
*/
(function (win, doc, undef)
{
"use strict";
let oe = sax.OrgEvt = { data: {}, fn: {} };
let $pnl = oe.$pnl = {}, $frm = oe.$frm = {}, $dlg = oe.$dlg = {};
//--------------------------------------------------------------
oe.refreshResults = function (delay)
{
sax.data.userCanManageEvents = false;
if (!sax.awaitingRefreshResponse)
{
$('.sax-burger', $pnl.filter).hide();
$('.sax-panel-item-list', $pnl.results).fadeOut(200).empty();
$('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetEventList', formId: 'frmEventFilter', callbackFn: oe.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
oe.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty();
var $items = $('.sax-panel-item-list', $pnl.results).hide().empty();
if (!response.success) return;
oe.data.organisation = response.organisation;
// Reference data - Event types.
if (response.eventTypes)
sax.populateSelectCodeDesc('#cbEventType', response.eventTypes);
// Menu.
let $bgr = $('.sax-burger', $pnl.filter);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
$mnu.append(oe.getFilterMenuOption(sax.lbl.refresh, function () { oe.refreshResults(); }, 'sax-refresh'));
if (sax.data.userCanManageEvents = (response.user && response.user.canManage))
$mnu.append(oe.getFilterMenuOption(sax.lbl.add, function () { oe.createItem(); }, 'sax-edit'));
$bgr.toggle(!!$('.sax-dropdown-item', $mnu).length);
// Items.
var items = response.events;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$items.append(oe.populateItem(oe.getItemTemplate(), items[itemIdx]));
$items.fadeIn(50);
}
oe.populateItem = function ($item, item)
{
if (!item) return;
$('.sax-panel-results .sax-panel-messages').hide().empty();
$('.EventType', $item).text(item.typeDesc);
$('.EventDate', $item).text(item.eventDateFmt);
$('.EventTime', $item).text(item.eventTimeFmt);
$('.EventSummary', $item).text(item.summary);
$('.EventDetails', $item).text(item.details);
$('.EventSportCaption', $item).text(item.sportCaptionPrimary);
$('.EventRegionCaption', $item).text(item.regionCaptionCountry);
$('.EventCreatedOn', $item).text(item.createdOnFmt);
$('.EventPublishedOn', $item).text(item.publishedOnFmt);
$('.EventPublished', $item).toggle(!!item.publishedOnFmt);
$('.EventExpiresOn', $item).text(item.expiresOnFmt);
$('.EventExpires', $item).toggle(!!item.expiresOnFmt);
$('.EventStatusDesc', $item).text(item.statusDesc).addClass('sax-status-' + item.statusCode.toLowerCase());
let $bgr = $('.sax-burger', $item);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
if (!item.deleted)
{
if (sax.data.userCanManageEvents)
{
let fnUpd = function () { oe.updateItem(item, $item) };
$mnu.append(oe.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
$('.sax-caption .sax-action', $item).off('click').on('click', fnUpd);
$item.off('dblclick').on('dblclick', fnUpd);
}
}
else $('.sax-caption .sax-action', $item).removeClass('sax-action');
$bgr.toggle(!!$('.sax-dropdown-menu .sax-dropdown-item', $item).length);
return $item;
}
//--------------------------------------------------------------
oe.getFilterDropdownTemplate = function ()
{
return $('.sax-panel-item-template .sax-dropdown-menu.Events li.sax-dropdown-item', sax.$pnl.filter).clone();
}
oe.getItemTemplate = function ()
{
return $('.sax-panel-item-template .sax-panel-item.Event', sax.$pnl.results).clone();
}
oe.getItemDropdownTemplate = function ()
{
return $('.sax-panel-item-template .sax-dropdown-menu.Event li.sax-dropdown-item', sax.$pnl.results).clone();
}
oe.getFilterMenuOption = function (lbl, fn, cls)
{
return oe.getMenuOption(oe.getFilterDropdownTemplate(), lbl, fn, cls);
}
oe.getItemMenuOption = function (lbl, fn, cls)
{
return oe.getMenuOption(oe.getItemDropdownTemplate(), lbl, fn, cls);
}
oe.getMenuOption = function ($opt, lbl, fn, cls)
{
return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls);
}
//--------------------------------------------------------------
oe.selectFilterOrganisation = function ()
{
if (!sax.data.memberOrganisations)
oe.getMemberOrganisations(oe.showSelectOrganisation);
else oe.showSelectOrganisation();
}
oe.getMemberOrganisations = function (fnCallback)
{
let handleMemberOrganisationsResponse = function (response)
{
//sax.debug('handleUserOrgsResponse', response);
if (!response.success) return;
sax.data.memberOrganisations = response.organisations;
if (fnCallback) fnCallback();
}
sax.ajax.userOrgs = sax.ajax.userOrgs || { url: sax.url.base + 'Organisation/Ajax/GetEventAdminOrganisationList', formId: 'frmNavigate', callbackFn: handleMemberOrganisationsResponse };
sax.doAjaxRequest(sax.ajax.userOrgs);
}
oe.showSelectOrganisation = function ()
{
//sax.debug('selectFilterOrganisation');
sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.memberOrganisations, fnCallback: oe.onOrganisationSelected });
}
oe.onOrganisationSelected = function (id, name)
{
//sax.debug('onOrganisationSelected', id, name);
$('#frmEventFilter #ifFilterOrganisationId, #frmEvent #ifEventOrganisationId').val(id);
$('#frmEventFilter #ifFilterOrganisation').val(name);
oe.refreshResults(50);
}
//--------------------------------------------------------------
oe.selectSportPrimary = function ()
{
sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('.EventSportIdPrimary', $frm.evt).val(), fnCallback: oe.onSelectSport })
}
oe.onSelectSport = function (sport)
{
sax.clearControlError($('.EventSportIdPrimary', $frm.evt).val(sport.id));
$('.EventSportCaptionPrimary', $frm.evt).val(sport ? sport.name : '');
}
//--------------------------------------------------------------
oe.selectRegionCountry = function ()
{
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('.EventRegionIdCountry', $frm.evt).val(), fnCallback: oe.onSelectRegion })
}
oe.onSelectRegion = function (region)
{
sax.clearControlError($('.EventRegionIdCountry', $frm.evt).val(region.id));
$('.EventRegionCaptionCountry', $frm.evt).val(region ? region.name : '');
}
//--------------------------------------------------------------
oe.createItem = function ()
{
if (!sax.data.userCanManageEvents) return;
oe.clearItem();
$('#cbEventType', $frm.evt).prepend($("<option>", { value: '', selected: true }));
$('#ifEventSportIdPrimary', $frm.evt).val(oe.data.organisation.sportId);
$('#ifEventSportCaptionPrimary', $frm.evt).val(oe.data.organisation.sportName);
$('#ifEventRegionIdCountry', $frm.evt).val(oe.data.organisation.regionId);
$('#ifEventRegionCaptionCountry', $frm.evt).val(oe.data.organisation.regionName);
$dlg.event.dialog('option', 'title', sax.dlg.title.createEvent);
sax.openDialog($dlg.event, 600, 600);
}
oe.clearItem = function ()
{
delete oe.$item;
$('#ifEventId,#ifEventExists,#ifEventSportIdPrimary,#ifEventRegionIdCountry,input[type="text"],textarea,select', $frm.evt).val('');
$('#cbEventType', $frm.evt).find('option[value=""]').remove();
sax.clearControlErrors();
}
//--------------------------------------------------------------
oe.updateItem = function (item, $item)
{
if (!sax.data.userCanManageEvents) return;
oe.clearItem();
oe.$item = $item;
$('.EventId', $frm.evtId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetEvent', formId: 'frmEventId', callbackFn: oe.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
oe.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
if (!response.success) return;
let item = response.event;
$('#ifEventId', $frm.evt).val(item.id);
$('#ifEventExists', $frm.evt).val(1);
$('#cbEventType', $frm.evt).val(item.typeCode);
$('#ifEventDate', $frm.evt).val(item.eventOn_Calendar);
$('#ifEventSummary', $frm.evt).val(item.summary);
$('#ifEventDetails', $frm.evt).val(item.details);
$('#ifEventSportIdPrimary', $frm.evt).val(item.sportIdPrimary);
$('#ifEventSportCaptionPrimary', $frm.evt).val(item.sportCaptionPrimary);
$('#ifEventRegionIdCountry', $frm.evt).val(item.regionIdCountry);
$('#ifEventRegionCaptionCountry', $frm.evt).val(item.regionCaptionCountry);
$('#cbEventStatusCode', $frm.evt).val(item.statusCode);
sax.clearControlErrors();
$dlg.event.dialog('option', 'title', sax.dlg.title.updateEvent);
sax.openDialog($dlg.event, 600, 600);
}
//--------------------------------------------------------------
oe.storeItem = function ()
{
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreEvent', formId: 'frmEvent', callbackFn: oe.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
oe.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
$dlg.event.dialog('close');
var item = response.event;
if (!oe.$item || oe.$item.length != 1)
{
oe.$item = $('.sax-panel-item-template .sax-panel-item', $pnl.results).clone();
$('.sax-panel-item-list', $pnl.results).prepend(oe.$item).show();
}
oe.populateItem(oe.$item, item)
}
//--------------------------------------------------------------
$(function ()
{
$pnl.events = $('.sax-panel.Events');
$pnl.filter = $('.sax-panel-filter', $pnl.events);
$pnl.results = $('.sax-panel-results', $pnl.events);
$frm.filter = $('#frmEventFilter', $pnl.events);
$('.EventFilter', $frm.filter).on('input', function () { oe.refreshResults(250); }).on('keypress', function (event)
{
if (event.keyCode == 13) setTimeout(oe.refreshResults, 50);
});
$frm.filter.on('dblclick', 'input.FilterOrganisation', oe.selectFilterOrganisation).on('click', 'button.SelectFilterOrganisation', oe.selectFilterOrganisation);
$frm.evtId = $('#frmEventId');
$frm.evt = $('#frmEvent');
$('.sax-input', $frm.evt).on('input', function () { sax.clearControlError(this); });
sax.initCalendars('#frmEvent .sax-input.sax-calendar').datepicker('option', { maxDate: '+700' });
$frm.evt.on('dblclick', 'input.EventSportCaptionPrimary', oe.selectSportPrimary).on('click', 'button.SelectEventSportPrimary', oe.selectSportPrimary);
$frm.evt.on('dblclick', 'input.EventRegionCaptionCountry', oe.selectRegionCountry).on('click', 'button.SelectEventRegionCountry', oe.selectRegionCountry);
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { oe.storeItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
$dlg.event = $('#dlgEvent').dialog(opt);
setTimeout(oe.refreshResults, 250);
});
}(window, window.document));
/* The End */
+114 -112
View File
@@ -5,11 +5,11 @@
(function (win, doc, undef) (function (win, doc, undef)
{ {
"use strict"; "use strict";
let $pnl = sax.$pnl, $frm = sax.$frm, $dlg = sax.$dlg; let om = sax.OrgMbr = { data: {}, fn: {} };
sax.members = {}; let $pnl = om.$pnl = {}, $frm = om.$frm = {}, $dlg = om.$dlg = {};
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.refreshResults = function (delay) om.refreshResults = function (delay)
{ {
sax.data.userCanManageMembers = false; sax.data.userCanManageMembers = false;
if (!sax.awaitingRefreshResponse) if (!sax.awaitingRefreshResponse)
@@ -18,11 +18,11 @@
$('.sax-panel-item-list', $pnl.results).fadeOut(200).empty(); $('.sax-panel-item-list', $pnl.results).fadeOut(200).empty();
$('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200); $('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
} }
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetMemberList', formId: 'frmMemberFilter', callbackFn: sax.doRefreshResults }; sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetMemberList', formId: 'frmMemberFilter', callbackFn: om.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50); sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true; sax.awaitingRefreshResponse = true;
} }
sax.doRefreshResults = function (response) om.doRefreshResults = function (response)
{ {
//sax.debug('doRefreshResults', response); //sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse; delete sax.awaitingRefreshResponse;
@@ -36,38 +36,39 @@
// Menu. // Menu.
let $bgr = $('.sax-burger', $pnl.filter); let $bgr = $('.sax-burger', $pnl.filter);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty(); let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
$mnu.append(sax.getFilterMenuOption(sax.lbl.refresh, function () { sax.refreshResults(); }, 'sax-refresh')); $mnu.append(om.getFilterMenuOption(sax.lbl.refresh, function () { om.refreshResults(); }, 'sax-refresh'));
if (sax.data.userCanManageMembers = (response.user && response.user.canManage)) if (sax.data.userCanManageMembers = (response.user && response.user.canManage))
$mnu.append(sax.getFilterMenuOption(sax.lbl.add, function () { sax.createItem(); }, 'sax-edit')); $mnu.append(om.getFilterMenuOption(sax.lbl.add, function () { om.createItem(); }, 'sax-edit'));
$bgr.toggle(!!$('.sax-dropdown-item', $mnu).length); $bgr.toggle(!!$('.sax-dropdown-item', $mnu).length);
// Items. // Items.
var items = response.members; var items = response.members;
if (!items.length) if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500); return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++) for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$items.append(sax.populateItem(sax.getItemTemplate(), items[itemIdx])); $items.append(om.populateItem(om.getItemTemplate(), items[itemIdx]));
$items.fadeIn(50); $items.fadeIn(50);
} }
sax.populateItem = function ($item, item) om.populateItem = function ($item, item)
{ {
if (!item) return; if (!item) return;
$('.sax-panel-messages', $pnl.results).hide().empty(); $('.sax-panel-messages', $pnl.results).hide().empty();
$item.prop('id', sax.getItemId(item.id));
$('.MemberEmail', $item).text(item.emailAddress); $('.MemberEmail', $item).text(item.emailAddress);
$('.MemberDisplayName', $item).text(item.displayName); $('.MemberDisplayName', $item).text(item.displayName);
$('.MemberRoles', $item).text(item.memberRoles);
$('.MemberAdminComment', $item).text(item.adminComment); $('.MemberAdminComment', $item).text(item.adminComment);
$('.MemberStatus', $item).text(item.statusDesc).addClass('sax-status-' + item.statusCode.toLowerCase()); $('.MemberStatus', $item).text(item.statusDesc).addClass('sax-status-' + item.statusCode.toLowerCase());
let $bgr = $('.sax-burger', $item); let $bgr = $('.sax-burger', $item);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty(); let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
if (sax.data.userCanManageMembers) if (sax.data.userCanManageMembers)
{ {
let fnUpd = function () { sax.updateItem(item) }; let fnUpd = function () { om.updateItem(item, $item) };
$mnu.append(sax.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit')); $mnu.append(om.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
if (!item.currentUser) if (!item.currentUser)
$mnu.append(sax.getItemMenuOption(sax.lbl.remove, function () { sax.removeItem(item.id) }, 'sax-remove')); $mnu.append(om.getItemMenuOption(sax.lbl.remove, function () { om.removeItem(item, $item) }, 'sax-remove'));
if (item.awaiting) if (item.awaiting)
$mnu.append(sax.getItemMenuOption(sax.lbl.activate, function () { sax.activateItem(item.id) }, 'sax-user')); $mnu.append(om.getItemMenuOption(sax.lbl.activate, function () { om.activateItem(item, $item) }, 'sax-user'));
$('.sax-caption .sax-action', $item).off('click').on('click', fnUpd); $('.sax-caption .sax-action', $item).off('click').on('click', fnUpd);
$('.sax-content', $item).off('dblclick').on('dblclick', fnUpd);
} }
else $('.sax-caption .sax-action', $item).removeClass('sax-action'); else $('.sax-caption .sax-action', $item).removeClass('sax-action');
$bgr.toggle(!!$('.sax-dropdown-menu .sax-dropdown-item', $item).length); $bgr.toggle(!!$('.sax-dropdown-menu .sax-dropdown-item', $item).length);
@@ -75,142 +76,137 @@
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.getItemId = function (id) om.getFilterDropdownTemplate = function ()
{
return 'Itm_' + id;
}
sax.getFilterDropdownTemplate = function ()
{ {
return $('.sax-panel-item-template .sax-dropdown-menu.Members li.sax-dropdown-item', $pnl.filter).clone(); return $('.sax-panel-item-template .sax-dropdown-menu.Members li.sax-dropdown-item', $pnl.filter).clone();
} }
sax.getItemTemplate = function () om.getItemTemplate = function ()
{ {
return $('.sax-panel-item-template .sax-panel-item.Member', $pnl.results).clone(); return $('.sax-panel-item-template .sax-panel-item.Member', $pnl.results).clone();
} }
sax.getItemDropdownTemplate = function () om.getItemDropdownTemplate = function ()
{ {
return $('.sax-panel-item-template .sax-dropdown-menu.Member li.sax-dropdown-item', $pnl.results).clone(); return $('.sax-panel-item-template .sax-dropdown-menu.Member li.sax-dropdown-item', $pnl.results).clone();
} }
sax.getFilterMenuOption = function (lbl, fn, cls) om.getFilterMenuOption = function (lbl, fn, cls)
{ {
return sax.getMenuOption(sax.getFilterDropdownTemplate(), lbl, fn, cls); return om.getMenuOption(om.getFilterDropdownTemplate(), lbl, fn, cls);
} }
sax.getItemMenuOption = function (lbl, fn, cls) om.getItemMenuOption = function (lbl, fn, cls)
{ {
return sax.getMenuOption(sax.getItemDropdownTemplate(), lbl, fn, cls); return om.getMenuOption(om.getItemDropdownTemplate(), lbl, fn, cls);
} }
sax.getMenuOption = function ($opt, lbl, fn, cls) om.getMenuOption = function ($opt, lbl, fn, cls)
{ {
return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls); return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.selectFilterOrganisation = function () om.selectFilterOrganisation = function ()
{ {
if (!sax.data.memberOrganisations) if (!sax.data.memberOrganisations)
sax.getMemberOrganisations(sax.showSelectOrganisation); om.getMemberOrganisations(om.showSelectOrganisation);
else sax.showSelectOrganisation(); else om.showSelectOrganisation();
} }
sax.getMemberOrganisations = function (fnCallback) om.getMemberOrganisations = function (fnCallback)
{ {
let handleMemberOrganisationsResponse = function (response) let handleMbrOrgsResponse = function (response)
{ {
//sax.debug('handleUserOrgsResponse', response); //sax.debug('handleMbrOrgsResponse', response);
if (!response.success) return; if (!response.success) return;
sax.data.memberOrganisations = response.organisations; sax.data.memberOrganisations = response.organisations;
if (fnCallback) fnCallback(); if (fnCallback) fnCallback();
} }
sax.ajax.userOrgs = sax.ajax.userOrgs || { url: sax.url.base + 'Organisation/Ajax/GetMemberOrganisationList', formId: 'frmNavigate', callbackFn: handleMemberOrganisationsResponse }; sax.ajax.userOrgs = sax.ajax.userOrgs || { url: sax.url.base + 'Organisation/Ajax/GetMemberAdminOrganisationList', formId: 'frmNavigate', callbackFn: handleMbrOrgsResponse };
sax.doAjaxRequest(sax.ajax.userOrgs); sax.doAjaxRequest(sax.ajax.userOrgs);
} }
sax.showSelectOrganisation = function () om.showSelectOrganisation = function ()
{ {
//sax.debug('sax.selectFilterOrganisation'); //sax.debug('sax.selectFilterOrganisation');
sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.memberOrganisations, fnCallback: sax.onOrganisationSelected }); sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.memberOrganisations, fnCallback: om.onOrganisationSelected });
} }
sax.onOrganisationSelected = function (id, name) om.onOrganisationSelected = function (id, name)
{ {
//sax.debug('sax.onOrganisationSelected', id, name); //sax.debug('om.onOrganisationSelected', id, name);
$('#frmMemberFilter #ifFilterOrganisationId, #frmMember #ifMemberOrganisationId').val(id); $('#frmMemberFilter #ifFilterOrganisationId, #frmMember #ifMemberOrganisationId').val(id);
$('#frmMemberFilter #ifFilterOrganisation').val(name); $('#frmMemberFilter #ifFilterOrganisation').val(name);
sax.refreshResults(50); om.refreshResults(50);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.createItem = function () om.createItem = function ()
{ {
if (!sax.data.userCanManageMembers) return; if (!sax.data.userCanManageMembers) return;
sax.clearItem(); om.clearItem();
$('.MemberOrganisationId', $frm.member).val($('.FilterOrganisationId', $frm.filter).val()); $('.MemberOrganisationId', $frm.mbr).val($('.FilterOrganisationId', $frm.filter).val());
$dlg.member.dialog('option', 'title', sax.dlg.title.createMember); $dlg.member.dialog('option', 'title', sax.dlg.title.createMember);
sax.openDialog($dlg.member, 600, 600); sax.openDialog($dlg.member, 600, 560);
} }
sax.clearItem = function () om.clearItem = function ()
{ {
delete om.$item;
sax.member = { roleCodes: [] }; sax.member = { roleCodes: [] };
let $frmM = $frm.member; $('.MemberId,.MemberExists,.MemberRoleCodes,input[type="text"],textarea,select', $frm.mbr).val('');
$('.MemberId,.MemberExists,.MemberRoleCodes,input[type="text"],textarea,select', $frmM).val(''); $('.MemberEmailAddress', $frm.mbr).prop('readonly', false);
$('.MemberEmailAddress', $frmM).prop('readonly', false); $('.MemberDisplayName,.MemberTitle,.MemberFirstName,.MemberLastName', $frm.mbr).hide();
$('.MemberDisplayName,.MemberTitle,.MemberFirstName,.MemberLastName', $frmM).hide();
sax.clearControlErrors(); sax.clearControlErrors();
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.updateItem = function (item) om.updateItem = function (item, $item)
{ {
if (!sax.data.userCanManageMembers) return; if (!sax.data.userCanManageMembers) return;
$('.MemberId', $frm.memberId).val(item.id); om.clearItem();
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetMember', formId: 'frmMemberId', callbackFn: sax.onUpdateItem }; om.$item = $item;
$('.MemberId', $frm.mbrId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetMember', formId: 'frmMemberId', callbackFn: om.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50); sax.doAjaxRequest(sax.ajax.updateItem, 50);
} }
sax.onUpdateItem = function (response) om.onUpdateItem = function (response)
{ {
//sax.debug('onUpdateItem', response); //sax.debug('onUpdateItem', response);
sax.clearItem();
if (!response.success) return; if (!response.success) return;
let $frmM = $frm.member;
let item = sax.member = response.member; let item = sax.member = response.member;
$('.MemberId', $frmM).val(item.id); $('.MemberId', $frm.mbr).val(item.id);
$('.MemberExists', $frmM).val(1); $('.MemberExists', $frm.mbr).val(1);
$('.MemberOrganisationId', $frmM).val(); $('.MemberOrganisationId', $frm.mbr).val();
$('.MemberEmailAddress', $frmM).val(item.emailAddress).prop('readonly', true); $('.MemberEmailAddress', $frm.mbr).val(item.emailAddress).prop('readonly', true);
$('.MemberDisplayName', $frmM).toggle(!item.awaiting).val(item.displayName); $('.MemberDisplayName', $frm.mbr).toggle(!item.awaiting).val(item.displayName);
$('.MemberTitle', $frmM).toggle(!!item.awaiting).val(item.title); $('.MemberTitle', $frm.mbr).toggle(!!item.awaiting).val(item.title);
$('.MemberFirstName', $frmM).toggle(!!item.awaiting).val(item.firstName); $('.MemberFirstName', $frm.mbr).toggle(!!item.awaiting).val(item.firstName);
$('.MemberLastName', $frmM).toggle(!!item.awaiting).val(item.lastName); $('.MemberLastName', $frm.mbr).toggle(!!item.awaiting).val(item.lastName);
$('.MemberRoleCodes', $frmM).val(item.roleCodes); $('.MemberRoleCodes', $frm.mbr).val(item.roleCodes);
$('.MemberRoles', $frmM).val(sax.getSelectedMemberRoleDescs().join('\n')); $('.MemberRoles', $frm.mbr).val(om.getSelectedMemberRoleDescs().join('\n'));
$('.MemberAdminComment', $frmM).val(item.adminComment); $('.MemberAdminComment', $frm.mbr).val(item.adminComment);
sax.clearControlErrors(); sax.clearControlErrors();
$dlg.member.dialog('option', 'title', sax.dlg.title.updateMember); $dlg.member.dialog('option', 'title', sax.dlg.title.updateMember);
sax.openDialog($dlg.member, 600, 600); sax.openDialog($dlg.member, 600, 560);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
// Member Roles. // Member Roles.
sax.selectMemberRoles = function () om.selectMemberRoles = function ()
{ {
//sax.debug('selectMemberRoles',sax.data); //sax.debug('selectMemberRoles',sax.data);
sax.codeSelectCfg = sax.codeSelectCfg || { caption: sax.dlg.title.selectRoles, width: 520, fnCallback: sax.updateMemberRoles }; sax.codeSelectCfg = sax.codeSelectCfg || { caption: sax.dlg.title.selectRoles, width: 520, fnCallback: om.updateMemberRoles };
sax.codeSelectCfg.codes = sax.data.memberRoles; sax.codeSelectCfg.codes = sax.data.memberRoles;
sax.codeSelectCfg.selectedCodes = sax.member.roleCodes || []; sax.codeSelectCfg.selectedCodes = sax.member.roleCodes || [];
sax.codeSelect.fn.openCodeSelect(sax.codeSelectCfg); sax.codeSelect.fn.openCodeSelect(sax.codeSelectCfg);
} }
sax.updateMemberRoles = function (memberRoleCodes) om.updateMemberRoles = function (memberRoleCodes)
{ {
//sax.debug('updateMemberRoles', memberRoleCodes); //sax.debug('updateMemberRoles', memberRoleCodes);
let $frmM = $frm.member;
sax.member.roleCodes = memberRoleCodes; sax.member.roleCodes = memberRoleCodes;
$('.MemberRoleCodes', $frmM).val(memberRoleCodes.join(sax.data.memberRoleCodeDelim)); $('.MemberRoleCodes', $frm.mbr).val(memberRoleCodes.join(sax.data.memberRoleCodeDelim));
$('.MemberRoles', $frmM).val(sax.getSelectedMemberRoleDescs().join('\n')); $('.MemberRoles', $frm.mbr).val(om.getSelectedMemberRoleDescs().join('\n'));
} }
sax.getSelectedMemberRoleDescs = function () om.getSelectedMemberRoleDescs = function ()
{ {
let roles = []; let roles = [];
sax.member.roleCodes.forEach(function (value) { roles.push(sax.getMemberRoleDesc(value)); }) sax.member.roleCodes.forEach(function (value) { roles.push(om.getMemberRoleDesc(value)); })
return roles.sortCI(); return roles.sortCI();
} }
sax.getMemberRoleDesc = function (roleCode) om.getMemberRoleDesc = function (roleCode)
{ {
let roleDesc = ''; let roleDesc = '';
sax.data.memberRoles.some(function (value) { if (value.code == roleCode) { roleDesc = value.desc; return true; } return false; }) sax.data.memberRoles.some(function (value) { if (value.code == roleCode) { roleDesc = value.desc; return true; } return false; })
@@ -218,77 +214,80 @@
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.storeItem = function () om.storeItem = function ()
{ {
let $frmM = $frm.member; $('.MemberNameSupplied', $frm.mbr).val($('.MemberLastName', $frm.mbr).is(":visible") ? 1 : 0);
$('.MemberNameSupplied', $frmM).val($('.MemberLastName', $frmM).is(":visible") ? 1 : 0); sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreMember', formId: 'frmMember', callbackFn: om.onStoreItem };
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreMember', formId: 'frmMember', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50); sax.doAjaxRequest(sax.ajax.storeItem, 50);
} }
sax.onStoreItem = function (response) om.onStoreItem = function (response)
{ {
//sax.debug('onStoreItem', response); //sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues); sax.refreshControlValues(response.controlValues);
if (!response.success) return; if (!response.success) return;
let $frmM = $frm.member;
if (response.memberNameRequired) if (response.memberNameRequired)
{ {
$('.MemberEmailAddress', $frmM).prop('readonly', true); $('.MemberEmailAddress', $frm.mbr).prop('readonly', true);
$('.MemberTitle,.MemberFirstName,.MemberLastName', $frmM).show(); $('.MemberTitle,.MemberFirstName,.MemberLastName', $frm.mbr).show();
return; return;
} }
$dlg.member.dialog('close'); $dlg.member.dialog('close');
var item = response.member; var item = response.member;
var $item = $('#' + sax.getItemId(item.id)); if (!om.$item || om.$item.length != 1)
if (!$item.length)
{ {
$item = sax.getItemTemplate(); om.$item = om.getItemTemplate();
$('.sax-panel-item-list', $pnl.results).prepend($item).show(); $('.sax-panel-item-list', $pnl.results).prepend(om.$item).show();
} }
sax.populateItem($item, item) om.populateItem(om.$item, item)
delete om.$item;
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.removeItem = function (id) om.removeItem = function (item, $item)
{ {
om.$item = $item;
let fn = function () let fn = function ()
{ {
$('.MemberId', $frm.memberId).val(id); $('.MemberId', $frm.mbrId).val(item.id);
sax.ajax.removeItem = sax.ajax.removeItem || { url: sax.url.base + 'Organisation/Ajax/RemoveMember', formId: 'frmMemberId', callbackFn: sax.onItemRemoved }; sax.ajax.removeItem = sax.ajax.removeItem || { url: sax.url.base + 'Organisation/Ajax/RemoveMember', formId: 'frmMemberId', callbackFn: om.onItemRemoved };
sax.doAjaxRequest(sax.ajax.removeItem, 50); sax.doAjaxRequest(sax.ajax.removeItem, 50);
} }
sax.doConfirm(sax.dlg.title.remove, sax.msg.remove, fn); sax.doConfirm(sax.dlg.title.remove, sax.msg.remove, fn);
} }
sax.onItemRemoved = function (response) om.onItemRemoved = function (response)
{ {
if (!response.success) return; if (!response.success) return;
var item = response.member; var item = response.member;
var $item = $('#' + sax.getItemId(item.id)); //sax.debug(item, om.$item);
//sax.debug(item, $item); if (om.$item && om.$item.length == 1)
if ($item.length) {
$item.remove(); om.$item.remove();
delete om.$item;
}
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.activateItem = function (id) om.activateItem = function (item, $item)
{ {
om.$item = $item;
let fn = function () let fn = function ()
{ {
$('.MemberId', $frm.memberId).val(id); $('.MemberId', $frm.mbrId).val(item.id);
sax.ajax.activateItem = sax.ajax.activateItem || { url: sax.url.base + 'Organisation/Ajax/ActivateMember', formId: 'frmMemberId', callbackFn: sax.onItemActivated }; sax.ajax.activateItem = sax.ajax.activateItem || { url: sax.url.base + 'Organisation/Ajax/ActivateMember', formId: 'frmMemberId', callbackFn: om.onItemActivated };
sax.doAjaxRequest(sax.ajax.activateItem, 50); sax.doAjaxRequest(sax.ajax.activateItem, 50);
} }
sax.doConfirm(sax.dlg.title.activate, sax.msg.activate, fn); sax.doConfirm(sax.dlg.title.activate, sax.msg.activate, fn);
} }
sax.onItemActivated = function (response) om.onItemActivated = function (response)
{ {
if (!response.success) return; if (!response.success) return;
var item = response.member; var item = response.member;
var $item = $('#' + sax.getItemId(item.id)); //sax.debug(item, om.$item);
//sax.debug(item, $item); if (om.$item && om.$item.length == 1)
if ($item.length) {
sax.populateItem($item, item) om.populateItem(om.$item, item)
delete om.$item;
}
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
@@ -297,21 +296,24 @@
$pnl.members = $('.sax-panel.Members'); $pnl.members = $('.sax-panel.Members');
$pnl.filter = $('.sax-panel-filter', $pnl.members); $pnl.filter = $('.sax-panel-filter', $pnl.members);
$pnl.results = $('.sax-panel-results', $pnl.members); $pnl.results = $('.sax-panel-results', $pnl.members);
$frm.filter = $('#frmMemberFilter'); $frm.filter = $('#frmMemberFilter', $pnl.members);
$('.MemberFilter', $frm.filter).on('input', function () { sax.refreshResults(250); }).on('keypress', function (event) $('.MemberFilter', $frm.filter).on('input', function () { om.refreshResults(250); }).on('keypress', function (event)
{ {
if (event.keyCode == 13) setTimeout(sax.refreshResults, 50); if (event.keyCode == 13) setTimeout(om.refreshResults, 50);
}); });
$frm.memberId = $('#frmMemberId'); $frm.filter.on('dblclick', 'input.FilterOrganisation', om.selectFilterOrganisation).on('click', 'button.SelectFilterOrganisation', om.selectFilterOrganisation);
$frm.member = $('#frmMember'); $frm.mbrId = $('#frmMemberId');
$('.sax-input', $frm.member).on('input', function () { sax.clearControlError(this); }); $frm.mbr = $('#frmMember');
$('.sax-input', $frm.mbr).on('input', function () { sax.clearControlError(this); });
$('.MemberRoles', $frm.mbr).on('dblclick', om.selectMemberRoles);
$('button.SelectMemberRoles', $frm.mbr).on('click', om.selectMemberRoles);
var opt = sax.dlgOpts(); var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.storeItem(); }; opt.buttons[sax.dlg.btn.ok] = function () { om.storeItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
$dlg.member = $('#dlgMember').dialog(opt); $dlg.member = $('#dlgMember').dialog(opt);
setTimeout(sax.refreshResults, 250); setTimeout(om.refreshResults, 250);
}); });
}(window, window.document)); }(window, window.document));
+81 -82
View File
@@ -5,11 +5,11 @@
(function (win, doc, undef) (function (win, doc, undef)
{ {
"use strict"; "use strict";
let $pnl = sax.$pnl, $frm = sax.$frm, $dlg = sax.$dlg;
let oo = sax.OrgOpp = { data: {}, fn: {} }; let oo = sax.OrgOpp = { data: {}, fn: {} };
let $pnl = oo.$pnl = {}, $frm = oo.$frm = {}, $dlg = oo.$dlg = {};
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.refreshResults = function (delay) oo.refreshResults = function (delay)
{ {
sax.data.userCanManageOpportunities = false; sax.data.userCanManageOpportunities = false;
if (!sax.awaitingRefreshResponse) if (!sax.awaitingRefreshResponse)
@@ -18,11 +18,11 @@
$('.sax-panel-item-list', $pnl.results).fadeOut(200).empty(); $('.sax-panel-item-list', $pnl.results).fadeOut(200).empty();
$('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200); $('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
} }
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetOpportunityList', formId: 'frmOpportunityFilter', callbackFn: sax.doRefreshResults }; sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetOpportunityList', formId: 'frmOpportunityFilter', callbackFn: oo.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50); sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true; sax.awaitingRefreshResponse = true;
} }
sax.doRefreshResults = function (response) oo.doRefreshResults = function (response)
{ {
//sax.debug('doRefreshResults', response); //sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse; delete sax.awaitingRefreshResponse;
@@ -37,23 +37,22 @@
// Menu. // Menu.
let $bgr = $('.sax-burger', $pnl.filter); let $bgr = $('.sax-burger', $pnl.filter);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty(); let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
$mnu.append(sax.getFilterMenuOption(sax.lbl.refresh, function () { sax.refreshResults(); }, 'sax-refresh')); $mnu.append(oo.getFilterMenuOption(sax.lbl.refresh, function () { oo.refreshResults(); }, 'sax-refresh'));
if (sax.data.userCanManageOpportunities = (response.user && response.user.canManage)) if (sax.data.userCanManageOpportunities = (response.user && response.user.canManage))
$mnu.append(sax.getFilterMenuOption(sax.lbl.add, function () { sax.createItem(); }, 'sax-edit')); $mnu.append(oo.getFilterMenuOption(sax.lbl.add, function () { oo.createItem(); }, 'sax-edit'));
$bgr.toggle(!!$('.sax-dropdown-item', $mnu).length); $bgr.toggle(!!$('.sax-dropdown-item', $mnu).length);
// Items. // Items.
var items = response.opportunities; var items = response.opportunities;
if (!items.length) if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500); return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++) for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$items.append(sax.populateItem(sax.getItemTemplate(), items[itemIdx])); $items.append(oo.populateItem(oo.getItemTemplate(), items[itemIdx]));
$items.fadeIn(50); $items.fadeIn(50);
} }
sax.populateItem = function ($item, item) oo.populateItem = function ($item, item)
{ {
if (!item) return; if (!item) return;
$('.sax-panel-results .sax-panel-messages').hide().empty(); $('.sax-panel-results .sax-panel-messages').hide().empty();
$item.prop('id', sax.getItemId(item.id));
$('.OpportunityType', $item).text(item.typeDesc); $('.OpportunityType', $item).text(item.typeDesc);
$('.OpportunityPosition', $item).text(item.position); $('.OpportunityPosition', $item).text(item.position);
$('.OpportunityOutline', $item).text(item.outline); $('.OpportunityOutline', $item).text(item.outline);
@@ -64,7 +63,7 @@
$('.OpportunityPublished', $item).toggle(!!item.publishedOnFmt); $('.OpportunityPublished', $item).toggle(!!item.publishedOnFmt);
$('.OpportunityExpiresOn', $item).text(item.expiresOnFmt); $('.OpportunityExpiresOn', $item).text(item.expiresOnFmt);
$('.OpportunityExpires', $item).toggle(!!item.expiresOnFmt); $('.OpportunityExpires', $item).toggle(!!item.expiresOnFmt);
$('.OpportunityStatusDesc', $item).text(item.statusDesc); $('.OpportunityStatusDesc', $item).text(item.statusDesc).addClass('sax-status-' + item.statusCode.toLowerCase());
let $bgr = $('.sax-burger', $item); let $bgr = $('.sax-burger', $item);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty(); let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
@@ -72,8 +71,8 @@
{ {
if (sax.data.userCanManageOpportunities) if (sax.data.userCanManageOpportunities)
{ {
let fnUpd = function () { sax.updateItem(item) }; let fnUpd = function () { oo.updateItem(item, $item) };
$mnu.append(sax.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit')); $mnu.append(oo.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
$('.sax-caption .sax-action', $item).off('click').on('click', fnUpd); $('.sax-caption .sax-action', $item).off('click').on('click', fnUpd);
$item.off('dblclick').on('dblclick', fnUpd); $item.off('dblclick').on('dblclick', fnUpd);
} }
@@ -84,43 +83,39 @@
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.getItemId = function (id) oo.getFilterDropdownTemplate = function ()
{
return 'Itm_' + id;
}
sax.getFilterDropdownTemplate = function ()
{ {
return $('.sax-panel-item-template .sax-dropdown-menu.Opportunities li.sax-dropdown-item', sax.$pnl.filter).clone(); return $('.sax-panel-item-template .sax-dropdown-menu.Opportunities li.sax-dropdown-item', sax.$pnl.filter).clone();
} }
sax.getItemTemplate = function () oo.getItemTemplate = function ()
{ {
return $('.sax-panel-item-template .sax-panel-item.Opportunity', sax.$pnl.results).clone(); return $('.sax-panel-item-template .sax-panel-item.Opportunity', sax.$pnl.results).clone();
} }
sax.getItemDropdownTemplate = function () oo.getItemDropdownTemplate = function ()
{ {
return $('.sax-panel-item-template .sax-dropdown-menu.Opportunity li.sax-dropdown-item', sax.$pnl.results).clone(); return $('.sax-panel-item-template .sax-dropdown-menu.Opportunity li.sax-dropdown-item', sax.$pnl.results).clone();
} }
sax.getFilterMenuOption = function (lbl, fn, cls) oo.getFilterMenuOption = function (lbl, fn, cls)
{ {
return sax.getMenuOption(sax.getFilterDropdownTemplate(), lbl, fn, cls); return oo.getMenuOption(oo.getFilterDropdownTemplate(), lbl, fn, cls);
} }
sax.getItemMenuOption = function (lbl, fn, cls) oo.getItemMenuOption = function (lbl, fn, cls)
{ {
return sax.getMenuOption(sax.getItemDropdownTemplate(), lbl, fn, cls); return oo.getMenuOption(oo.getItemDropdownTemplate(), lbl, fn, cls);
} }
sax.getMenuOption = function ($opt, lbl, fn, cls) oo.getMenuOption = function ($opt, lbl, fn, cls)
{ {
return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls); return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.selectFilterOrganisation = function () oo.selectFilterOrganisation = function ()
{ {
if (!sax.data.memberOrganisations) if (!sax.data.memberOrganisations)
sax.getMemberOrganisations(sax.showSelectOrganisation); oo.getMemberOrganisations(oo.showSelectOrganisation);
else sax.showSelectOrganisation(); else oo.showSelectOrganisation();
} }
sax.getMemberOrganisations = function (fnCallback) oo.getMemberOrganisations = function (fnCallback)
{ {
let handleMemberOrganisationsResponse = function (response) let handleMemberOrganisationsResponse = function (response)
{ {
@@ -129,100 +124,102 @@
sax.data.memberOrganisations = response.organisations; sax.data.memberOrganisations = response.organisations;
if (fnCallback) fnCallback(); if (fnCallback) fnCallback();
} }
sax.ajax.userOrgs = sax.ajax.userOrgs || { url: sax.url.base + 'Organisation/Ajax/GetMemberOrganisationList', formId: 'frmNavigate', callbackFn: handleMemberOrganisationsResponse }; sax.ajax.userOrgs = sax.ajax.userOrgs || { url: sax.url.base + 'Organisation/Ajax/GetOpportunityAdminOrganisationList', formId: 'frmNavigate', callbackFn: handleMemberOrganisationsResponse };
sax.doAjaxRequest(sax.ajax.userOrgs); sax.doAjaxRequest(sax.ajax.userOrgs);
} }
sax.showSelectOrganisation = function () oo.showSelectOrganisation = function ()
{ {
//sax.debug('sax.selectFilterOrganisation'); //sax.debug('selectFilterOrganisation');
sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.memberOrganisations, fnCallback: sax.onOrganisationSelected }); sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.memberOrganisations, fnCallback: oo.onOrganisationSelected });
} }
sax.onOrganisationSelected = function (id, name) oo.onOrganisationSelected = function (id, name)
{ {
//sax.debug('sax.onOrganisationSelected', id, name); //sax.debug('onOrganisationSelected', id, name);
$('#frmOpportunityFilter #ifFilterOrganisationId, #frmOpportunity #ifOpportunityOrganisationId').val(id); $('#frmOpportunityFilter #ifFilterOrganisationId, #frmOpportunity #ifOpportunityOrganisationId').val(id);
$('#frmOpportunityFilter #ifFilterOrganisation').val(name); $('#frmOpportunityFilter #ifFilterOrganisation').val(name);
sax.refreshResults(50); oo.refreshResults(50);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.selectSport = function () oo.selectSport = function ()
{ {
sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#ifOpportunitySportId').val(), fnCallback: sax.onSelectSport }) sax.mdl.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#ifOpportunitySportId').val(), fnCallback: oo.onSelectSport })
} }
sax.onSelectSport = function (sport) oo.onSelectSport = function (sport)
{ {
sax.clearControlError($('#ifOpportunitySportId').val(sport.id)); sax.clearControlError($('#ifOpportunitySportId').val(sport.id));
$('#ifOpportunitySportCaption').val(sport ? sport.name : ''); $('#ifOpportunitySportCaption').val(sport ? sport.name : '');
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.selectRegion = function () oo.selectRegion = function ()
{ {
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifOpportunityRegionId').val(), fnCallback: sax.onSelectRegion }) sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifOpportunityRegionId').val(), fnCallback: oo.onSelectRegion })
} }
sax.onSelectRegion = function (region) oo.onSelectRegion = function (region)
{ {
sax.clearControlError($('#ifOpportunityRegionId').val(region.id)); sax.clearControlError($('#ifOpportunityRegionId').val(region.id));
$('#ifOpportunityRegionCaption').val(region ? region.name : ''); $('#ifOpportunityRegionCaption').val(region ? region.name : '');
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.createItem = function () oo.createItem = function ()
{ {
if (!sax.data.userCanManageOpportunities) return; if (!sax.data.userCanManageOpportunities) return;
sax.clearItem(); oo.clearItem();
let $frmO = $frm.opportunity; $('#cbOpportunityType', $frm.opp).prepend($("<option>", { value: '', selected: true }));
$('#ifOpportunitySportId', $frmO).val(oo.data.organisation.sportId); $('#ifOpportunitySportId', $frm.opp).val(oo.data.organisation.sportId);
$('#ifOpportunitySportCaption', $frmO).val(oo.data.organisation.sportName); $('#ifOpportunitySportCaption', $frm.opp).val(oo.data.organisation.sportName);
$('#ifOpportunityRegionId', $frmO).val(oo.data.organisation.regionId); $('#ifOpportunityRegionId', $frm.opp).val(oo.data.organisation.regionId);
$('#ifOpportunityRegionCaption', $frmO).val(oo.data.organisation.regionName); $('#ifOpportunityRegionCaption', $frm.opp).val(oo.data.organisation.regionName);
$dlg.opportunity.dialog('option', 'title', sax.dlg.title.createOpportunity); $dlg.opportunity.dialog('option', 'title', sax.dlg.title.createOpportunity);
sax.openDialog($dlg.opportunity, 600, 600); sax.openDialog($dlg.opportunity, 600, 600);
} }
sax.clearItem = function () oo.clearItem = function ()
{ {
$('#ifOpportunityId,#ifOpportunityExists,#ifOpportunityRegionId,#ifOpportunitySportId,input[type="text"],textarea,select', $frm.opportunity).val(''); delete oo.$item;
$('#ifOpportunityId,#ifOpportunityExists,#ifOpportunityRegionId,#ifOpportunitySportId,input[type="text"],textarea,select', $frm.opp).val('');
$('#cbOpportunityType', $frm.opp).find('option[value=""]').remove();
sax.clearControlErrors(); sax.clearControlErrors();
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.updateItem = function (item) oo.updateItem = function (item, $item)
{ {
if (!sax.data.userCanManageOpportunities) return; if (!sax.data.userCanManageOpportunities) return;
$('.OpportunityId', $frm.opportunityId).val(item.id); oo.clearItem();
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetOpportunity', formId: 'frmOpportunityId', callbackFn: sax.onUpdateItem }; oo.$item = $item;
$('.OpportunityId', $frm.oppId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetOpportunity', formId: 'frmOpportunityId', callbackFn: oo.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50); sax.doAjaxRequest(sax.ajax.updateItem, 50);
} }
sax.onUpdateItem = function (response) oo.onUpdateItem = function (response)
{ {
//sax.debug('onUpdateItem', response); //sax.debug('onUpdateItem', response);
sax.clearItem();
if (!response.success) return; if (!response.success) return;
let $frmO = $frm.opportunity;
let item = response.opportunity; let item = response.opportunity;
$('#ifOpportunityId', $frmO).val(item.id); $('#ifOpportunityId', $frm.opp).val(item.id);
$('#ifOpportunityExists', $frmO).val(1); $('#ifOpportunityExists', $frm.opp).val(1);
$('#cbOpportunityType', $frmO).val(item.typeCode); $('#cbOpportunityType', $frm.opp).val(item.typeCode);
$('#ifOpportunityPosition', $frmO).val(item.position); $('#ifOpportunityPosition', $frm.opp).val(item.position);
$('#ifOpportunityOutline', $frmO).val(item.outline); $('#ifOpportunityOutline', $frm.opp).val(item.outline);
$('#ifOpportunityRegionId', $frmO).val(item.regionIdPrimary); $('#ifOpportunityRegionId', $frm.opp).val(item.regionIdPrimary);
$('#ifOpportunityRegionCaption', $frmO).val(item.regionCaption); $('#ifOpportunityRegionCaption', $frm.opp).val(item.regionCaption);
$('#ifOpportunitySportId', $frmO).val(item.sportIdPrimary); $('#ifOpportunitySportId', $frm.opp).val(item.sportIdPrimary);
$('#ifOpportunitySportCaption', $frmO).val(item.sportCaption); $('#ifOpportunitySportCaption', $frm.opp).val(item.sportCaption);
$('#cbOpportunityStatusCode', $frmO).val(item.statusCode); $('#cbOpportunityStatusCode', $frm.opp).val(item.statusCode);
sax.clearControlErrors(); sax.clearControlErrors();
$dlg.opportunity.dialog('option', 'title', sax.dlg.title.updateOpportunity); $dlg.opportunity.dialog('option', 'title', sax.dlg.title.updateOpportunity);
sax.openDialog($dlg.opportunity, 600, 600); sax.openDialog($dlg.opportunity, 600, 600);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
sax.storeItem = function () oo.storeItem = function ()
{ {
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreOpportunity', formId: 'frmOpportunity', callbackFn: sax.onStoreItem }; sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreOpportunity', formId: 'frmOpportunity', callbackFn: oo.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50); sax.doAjaxRequest(sax.ajax.storeItem, 50);
} }
sax.onStoreItem = function (response) oo.onStoreItem = function (response)
{ {
//sax.debug('onStoreItem', response); //sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues); sax.refreshControlValues(response.controlValues);
@@ -230,13 +227,12 @@
$dlg.opportunity.dialog('close'); $dlg.opportunity.dialog('close');
var item = response.opportunity; var item = response.opportunity;
var $item = $('#' + sax.getItemId(item.id)); if (!oo.$item || oo.$item.length != 1)
if (!$item.length)
{ {
$item = $('.sax-panel-item-template .sax-panel-item', $pnl.results).clone(); oo.$item = $('.sax-panel-item-template .sax-panel-item', $pnl.results).clone();
$('.sax-panel-item-list', $pnl.results).prepend($item).show(); $('.sax-panel-item-list', $pnl.results).prepend(oo.$item).show();
} }
sax.populateItem($item, item) oo.populateItem(oo.$item, item)
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
@@ -245,21 +241,24 @@
$pnl.opportunities = $('.sax-panel.Opportunities'); $pnl.opportunities = $('.sax-panel.Opportunities');
$pnl.filter = $('.sax-panel-filter', $pnl.opportunities); $pnl.filter = $('.sax-panel-filter', $pnl.opportunities);
$pnl.results = $('.sax-panel-results', $pnl.opportunities); $pnl.results = $('.sax-panel-results', $pnl.opportunities);
$frm.filter = $('#frmOpportunityFilter', $pnl.filter); $frm.filter = $('#frmOpportunityFilter', $pnl.opportunities);
$('.OpportunityFilter', $frm.filter).on('input', function () { sax.refreshResults(250); }).on('keypress', function (event) $('.OpportunityFilter', $frm.filter).on('input', function () { oo.refreshResults(250); }).on('keypress', function (event)
{ {
if (event.keyCode == 13) setTimeout(sax.refreshResults, 50); if (event.keyCode == 13) setTimeout(oo.refreshResults, 50);
}); });
$frm.opportunityId = $('#frmOpportunityId'); $frm.filter.on('dblclick', 'input.FilterOrganisation', oo.selectFilterOrganisation).on('click', 'button.SelectFilterOrganisation', oo.selectFilterOrganisation);
$frm.opportunity = $('#frmOpportunity'); $frm.oppId = $('#frmOpportunityId');
$('.sax-input', $frm.opportunity).on('input', function () { sax.clearControlError(this); }); $frm.opp = $('#frmOpportunity');
$('.sax-input', $frm.opp).on('input', function () { sax.clearControlError(this); });
$frm.opp.on('dblclick', 'input.OpportunitySportCaption', oo.selectSport).on('click', 'button.SelectOpportunitySport', oo.selectSport);
$frm.opp.on('dblclick', 'input.OpportunityRegionCaption', oo.selectRegion).on('click', 'button.SelectOpportunityRegion', oo.selectRegion);
var opt = sax.dlgOpts(); var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.storeItem(); }; opt.buttons[sax.dlg.btn.ok] = function () { oo.storeItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
$dlg.opportunity = $('#dlgOpportunity').dialog(opt); $dlg.opportunity = $('#dlgOpportunity').dialog(opt);
setTimeout(sax.refreshResults, 250); setTimeout(oo.refreshResults, 250);
}); });
}(window, window.document)); }(window, window.document));
@@ -51,7 +51,7 @@
//-------------------------------------------------------------- //--------------------------------------------------------------
or.selectOrgRegionCountry = function () or.selectOrgRegionCountry = function ()
{ {
sax.debug($('.OrganisationRegionIdCountry', or.$frm).val()); //sax.debug($('.OrganisationRegionIdCountry', or.$frm).val());
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('.OrganisationRegionIdCountry', or.$frm).val(), typesInc: [30], fnCallback: or.onSelectOrgRegionCountry }) sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('.OrganisationRegionIdCountry', or.$frm).val(), typesInc: [30], fnCallback: or.onSelectOrgRegionCountry })
} }
or.onSelectOrgRegionCountry = function (region) or.onSelectOrgRegionCountry = function (region)
@@ -176,7 +176,7 @@
} }
sax.selectContactImage = function () sax.selectContactImage = function ()
{ {
sax.debug('selectContactImage'); //sax.debug('selectContactImage');
let dlg = $dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload }); let dlg = $dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload });
$('#ifContactImage', dlg).val(''); $('#ifContactImage', dlg).val('');
sax.openDialog(dlg, 560, 240); sax.openDialog(dlg, 560, 240);
+3 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//------------------------------------------------------------------- //-------------------------------------------------------------------
public static class Version public static class Version
{ {
private static String version { get; } = "1.2.1.1"; private static String version { get; } = "1.2.2";
// Retrieve version. // Retrieve version.
public static String GetFullVersion () { return version; } public static String GetFullVersion () { return version; }
public static String GetAppVersion () public static String GetAppVersion ()
@@ -40,6 +40,8 @@ namespace Saxonite.Net.Standard.Base.App
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Version history. // Version history.
//------------------------------------------------------------------- //-------------------------------------------------------------------
// 1.2.2 8-Dec-2021 Online Activities.
// - Organisation Events.
// 1.2.1 20-Nov-2021 Online Profile. // 1.2.1 20-Nov-2021 Online Profile.
// - Online Organisation edit. // - Online Organisation edit.
// 1.2.0 1-Nov-2021 'Admin' Organisation role // 1.2.0 1-Nov-2021 'Admin' Organisation role
+1
View File
@@ -259,6 +259,7 @@ namespace Saxonite.Net.Standard.Base.App
/* Do not change the values or codes - tied to database. */ /* Do not change the values or codes - tied to database. */
Playing, Playing,
Training, Training,
Organisation,
Social, Social,
} }
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Base.App namespace Saxonite.Base.App
{ {
@@ -165,7 +165,8 @@ namespace Saxonite.Base.App
OrganisationEvent_RegionIdCountry, OrganisationEvent_RegionIdCountry,
OrganisationEvent_EventAt, OrganisationEvent_EventAt,
OrganisationEvent_EventTypeCode, OrganisationEvent_EventTypeCode,
OrganisationEvent_About, OrganisationEvent_Summary,
OrganisationEvent_Details,
OrganisationEvent_EventData, OrganisationEvent_EventData,
OrganisationEvent_PublishedAt, OrganisationEvent_PublishedAt,
OrganisationEvent_ExpiresAt, OrganisationEvent_ExpiresAt,
@@ -356,7 +357,7 @@ namespace Saxonite.Base.App
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Data members. // Data members.
private static readonly int tableCount = 17; private static readonly int tableCount = 17;
private static readonly int columnCount = 310; private static readonly int columnCount = 311;
private static ulong maxTextLen = 0; private static ulong maxTextLen = 0;
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -669,7 +670,8 @@ namespace Saxonite.Base.App
new ColumnDfn(7,"RegionIdCountry",4,4,false,10), new ColumnDfn(7,"RegionIdCountry",4,4,false,10),
new ColumnDfn(7,"EventAt",9,93,false,16), new ColumnDfn(7,"EventAt",9,93,false,16),
new ColumnDfn(7,"EventTypeCode",0,12,false,3), new ColumnDfn(7,"EventTypeCode",0,12,false,3),
new ColumnDfn(7,"About",0,-9,false,2000), new ColumnDfn(7,"Summary",0,-9,false,200),
new ColumnDfn(7,"Details",0,-9,false,2000),
new ColumnDfn(7,"EventData",0,-9,false,0), new ColumnDfn(7,"EventData",0,-9,false,0),
new ColumnDfn(7,"PublishedAt",9,93,false,16), new ColumnDfn(7,"PublishedAt",9,93,false,16),
new ColumnDfn(7,"ExpiresAt",9,93,false,16), new ColumnDfn(7,"ExpiresAt",9,93,false,16),
@@ -154,8 +154,9 @@ namespace Saxonite.Net.Standard.Base.App
//--------------------------------------------------------------- //---------------------------------------------------------------
// Event types. // Event types.
eventTypeCodes.Add(Sax.EventType.Playing, "PLG", "Playing"); eventTypeCodes.Add(Sax.EventType.Playing, "PLG", "Playing");
eventTypeCodes.Add(Sax.EventType.Playing, "TRN", "Training"); eventTypeCodes.Add(Sax.EventType.Training, "TRN", "Training");
eventTypeCodes.Add(Sax.EventType.Playing, "SCL", "Social"); eventTypeCodes.Add(Sax.EventType.Organisation, "ORG", "Organisation");
eventTypeCodes.Add(Sax.EventType.Social, "SCL", "Social");
//--------------------------------------------------------------- //---------------------------------------------------------------
// Opportunity types. // Opportunity types.
@@ -32,7 +32,8 @@ namespace Saxonite.Net.Standard.Base.Bus
EventAt_DateTime, EventAt_DateTime,
EventTypeCode, EventTypeCode,
EventType_Desc, EventType_Desc,
About, Summary,
Details,
PublishedAt_Date, PublishedAt_Date,
PublishedAt_DateTime, PublishedAt_DateTime,
ExpiresAt_Date, ExpiresAt_Date,
@@ -57,7 +58,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public SysId RegionIdCountry { get; set; } public SysId RegionIdCountry { get; set; }
public DateTime EventAt { get; set; } public DateTime EventAt { get; set; }
public Sax.EventType EventType { get; set; } public Sax.EventType EventType { get; set; }
public String About { get; set; } = String.Empty; public String Summary { get; set; } = String.Empty;
public String Details { get; set; } = String.Empty;
public String EventData { get; set; } = String.Empty; public String EventData { get; set; } = String.Empty;
public DateTime PublishedAt { get; set; } public DateTime PublishedAt { get; set; }
public DateTime ExpiresAt { get; set; } public DateTime ExpiresAt { get; set; }
@@ -100,10 +102,15 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.EventType; } get { return data.EventType; }
set { CheckChanged((int)data.EventType, (int)value); data.EventType = value; } set { CheckChanged((int)data.EventType, (int)value); data.EventType = value; }
} }
public String About public String Summary
{ {
get { return data.About; } get { return data.Summary; }
set { CheckChanged(data.About, value); data.About = value; } set { CheckChanged(data.Summary, value); data.Summary = value; }
}
public String Details
{
get { return data.Details; }
set { CheckChanged(data.Details, value); data.Details = value; }
} }
public String EventData public String EventData
{ {
@@ -128,7 +135,8 @@ namespace Saxonite.Net.Standard.Base.Bus
RegionIdCountry = data.RegionIdCountry; RegionIdCountry = data.RegionIdCountry;
EventAt = data.EventAt; EventAt = data.EventAt;
EventType = data.EventType; EventType = data.EventType;
About = data.About; Summary = data.Summary;
Details = data.Details;
EventData = data.EventData; EventData = data.EventData;
PublishedAt = data.PublishedAt; PublishedAt = data.PublishedAt;
ExpiresAt = data.ExpiresAt; ExpiresAt = data.ExpiresAt;
@@ -152,7 +160,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public ValidValue RegionIdCountry { get; set; } = ValidValue.Valid; public ValidValue RegionIdCountry { get; set; } = ValidValue.Valid;
public ValidValue EventAt { get; set; } = ValidValue.Valid; public ValidValue EventAt { get; set; } = ValidValue.Valid;
public ValidValue EventType { get; set; } = ValidValue.Valid; public ValidValue EventType { get; set; } = ValidValue.Valid;
public ValidValue About { get; set; } = ValidValue.Valid; public ValidValue Summary { get; set; } = ValidValue.Valid;
public ValidValue Details { get; set; } = ValidValue.Valid;
public ValidValue EventData { get; set; } = ValidValue.Valid; public ValidValue EventData { get; set; } = ValidValue.Valid;
public ValidValue PublishedAt { get; set; } = ValidValue.Valid; public ValidValue PublishedAt { get; set; } = ValidValue.Valid;
public ValidValue ExpiresAt { get; set; } = ValidValue.Valid; public ValidValue ExpiresAt { get; set; } = ValidValue.Valid;
@@ -234,10 +243,15 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.EventType; } get { return data.EventType; }
set { data.EventType = value; } set { data.EventType = value; }
} }
public String About public String Summary
{ {
get { return data.About; } get { return data.Summary; }
set { data.About = value; } set { data.Summary = value; }
}
public String Details
{
get { return data.Details; }
set { data.Details = value; }
} }
public String EventData public String EventData
{ {
@@ -289,7 +303,7 @@ namespace Saxonite.Net.Standard.Base.Bus
public List<SysId> RegionIdsIncluded { get; } = new List<SysId>(); public List<SysId> RegionIdsIncluded { get; } = new List<SysId>();
public DateTime EventFrom { get; set; } public DateTime EventFrom { get; set; }
public DateTime EventTo{ get; set; } public DateTime EventTo{ get; set; }
public String AboutPartial { get; set; } public String SummaryPartial { get; set; }
/// <summary>General filter value - position, outline, sport, body etc. </summary> /// <summary>General filter value - position, outline, sport, body etc. </summary>
public String EventFilter { get; set; } public String EventFilter { get; set; }
public String NotesPartial { get; set; } public String NotesPartial { get; set; }
@@ -356,6 +356,10 @@ namespace Saxonite.Net.Standard.Base.Bus
public bool OrganisationMembersOnly { get; set; } public bool OrganisationMembersOnly { get; set; }
public List<Sax.OrganisationRole> OrganisationRoles { get; } = new List<Sax.OrganisationRole>(); public List<Sax.OrganisationRole> OrganisationRoles { get; } = new List<Sax.OrganisationRole>();
public List<Sax.OrganisationRole> OrganisationRolesAny { get; } = new List<Sax.OrganisationRole>(); public List<Sax.OrganisationRole> OrganisationRolesAny { get; } = new List<Sax.OrganisationRole>();
/// <summary>Exact match on various user account properties including name, email etc.</summary>
public String UserFilter { get; set; }
/// <summary>Partial match on various user account properties including name, countries etc.</summary>
public String UserFilterPartial { get; set; }
// Common properties. // Common properties.
public String NotesPartial { get; set; } public String NotesPartial { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted; public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
@@ -24,6 +24,7 @@ namespace Saxonite.Net.Standard.Base.Consoles
/// </summary> /// </summary>
public class IndexContext public class IndexContext
{ {
// ToDo Include Localiser.
public IndexContext (SysId userAccountId) public IndexContext (SysId userAccountId)
{ {
UserAccountId = userAccountId; UserAccountId = userAccountId;
@@ -31,9 +32,9 @@ namespace Saxonite.Net.Standard.Base.Consoles
public SysId UserAccountId { get; } public SysId UserAccountId { get; }
public List<SysId> SportIds { get; } = new List<SysId>(); public List<SysId> SportIds { get; } = new List<SysId>();
public List<SysId> RegionIds { get; } = new List<SysId>(); public List<SysId> RegionIds { get; } = new List<SysId>();
// Default period is ~3 months up to today. // Default period is ~12 months ago up to ~3 months in the future.
public DateTime EffectiveFrom { get; } = DateUtil.IncrementDate(DateTime.Today, -90); public DateTime EffectiveFrom { get; } = DateUtil.IncrementDate(DateTime.Today, -365);
public DateTime EffectiveTo { get; } = DateTime.Today; public DateTime EffectiveTo { get; } = DateUtil.IncrementDate(DateTime.Today, 30);
public bool IsValid() public bool IsValid()
{ {
// Context must contain at least a sport, a region and a valid effective period. // Context must contain at least a sport, a region and a valid effective period.
@@ -83,6 +84,7 @@ namespace Saxonite.Net.Standard.Base.Consoles
private readonly List<Sax.DataItemType> validActivityItemTypes = new List<Sax.DataItemType>() private readonly List<Sax.DataItemType> validActivityItemTypes = new List<Sax.DataItemType>()
{ {
Sax.DataItemType.Article, Sax.DataItemType.Article,
Sax.DataItemType.OrganisationEvent,
Sax.DataItemType.OrganisationOpportunity, Sax.DataItemType.OrganisationOpportunity,
}; };
@@ -148,6 +150,31 @@ namespace Saxonite.Net.Standard.Base.Consoles
return ClearActivityIndex(article.GetItemId(), dbUpdateInfo); return ClearActivityIndex(article.GetItemId(), dbUpdateInfo);
} }
//-------------------------------------------------------------------
/// <summary>
/// Store the Activity Index for a Organisation Event.
/// </summary>
public bool StoreActivityIndex(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Only active opportunities have an activity index.
if (!organisationEvent.IsStatusActive) ClearActivityIndex(organisationEvent.GetItemId(), dbUpdateInfo);
// NB There will be other rules as well, eg. whether published.
// Activity Index properties.
IndexData indexData = new IndexData(organisationEvent.GetItemId());
indexData.SportIds.Add(organisationEvent.SportIdPrimary);
indexData.RegionIds.Add(organisationEvent.RegionIdCountry);
indexData.EffectiveOn = DateUtil.OnInvalid(organisationEvent.PublishedAt.Date, organisationEvent.CreateStamp.On.Date);
return StoreActivityIndexData(indexData, dbUpdateInfo);
}
public bool ClearActivityIndex(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
{
return ClearActivityIndex(organisationEvent.GetItemId(), dbUpdateInfo);
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
/// <summary> /// <summary>
/// Store the Activity Index for a Organisation Opportunity. /// Store the Activity Index for a Organisation Opportunity.
@@ -166,7 +193,6 @@ namespace Saxonite.Net.Standard.Base.Consoles
indexData.SportIds.Add(opportunity.SportIdPrimary); indexData.SportIds.Add(opportunity.SportIdPrimary);
indexData.RegionIds.Add(opportunity.RegionIdPrimary); indexData.RegionIds.Add(opportunity.RegionIdPrimary);
indexData.EffectiveOn = DateUtil.OnInvalid(opportunity.PublishedAt.Date, opportunity.CreateStamp.On.Date); indexData.EffectiveOn = DateUtil.OnInvalid(opportunity.PublishedAt.Date, opportunity.CreateStamp.On.Date);
List<SysId> regionIds = new List<SysId>();
return StoreActivityIndexData(indexData, dbUpdateInfo); return StoreActivityIndexData(indexData, dbUpdateInfo);
} }
public bool ClearActivityIndex(SaxOrganisationOpportunity opportunity, DbUpdateInfo dbUpdateInfo) public bool ClearActivityIndex(SaxOrganisationOpportunity opportunity, DbUpdateInfo dbUpdateInfo)
@@ -91,10 +91,16 @@ namespace Saxonite.Net.Standard.Base.Mgr
errField.EventType = SacsHierarchyItem.ValidValue.Invalid; errField.EventType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Event type must be specified."); return SetErrorState("Event type must be specified.");
} }
// About. // Summary.
if (errField.About != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.About, "outline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About), true)) if (errField.Summary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Summary, "outline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary), true))
{ {
errField.About = SacsHierarchyItem.ValidValue.Invalid; errField.Summary = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Details.
if (errField.Details != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Details, "details", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details)))
{
errField.Details = SacsHierarchyItem.ValidValue.Invalid;
return false; return false;
} }
@@ -207,7 +213,15 @@ namespace Saxonite.Net.Standard.Base.Mgr
//----------------------------------------------------------- //-----------------------------------------------------------
// Summary - limit to 200 chars. // Summary - limit to 200 chars.
case SaxOrganisationEvent.Column.About: case SaxOrganisationEvent.Column.Summary:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Details - limit to 200 chars.
case SaxOrganisationEvent.Column.Details:
{ {
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
} }
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -25,7 +25,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public ColumnDataInt32 _RegionIdCountry { get; } = new ColumnDataInt32("RegionIdCountry"); public ColumnDataInt32 _RegionIdCountry { get; } = new ColumnDataInt32("RegionIdCountry");
public ColumnDataDateTime _EventAt { get; } = new ColumnDataDateTime("EventAt"); public ColumnDataDateTime _EventAt { get; } = new ColumnDataDateTime("EventAt");
public ColumnDataString _EventTypeCode { get; } = new ColumnDataString("EventTypeCode"); public ColumnDataString _EventTypeCode { get; } = new ColumnDataString("EventTypeCode");
public ColumnDataString _About { get; } = new ColumnDataString("About"); public ColumnDataString _Summary { get; } = new ColumnDataString("Summary");
public ColumnDataString _Details { get; } = new ColumnDataString("Details");
public ColumnDataString _EventData { get; } = new ColumnDataString("EventData"); public ColumnDataString _EventData { get; } = new ColumnDataString("EventData");
public ColumnDataDateTime _PublishedAt { get; } = new ColumnDataDateTime("PublishedAt"); public ColumnDataDateTime _PublishedAt { get; } = new ColumnDataDateTime("PublishedAt");
public ColumnDataDateTime _ExpiresAt { get; } = new ColumnDataDateTime("ExpiresAt"); public ColumnDataDateTime _ExpiresAt { get; } = new ColumnDataDateTime("ExpiresAt");
@@ -50,7 +51,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
"RegionIdCountry", "RegionIdCountry",
"EventAt", "EventAt",
"EventTypeCode", "EventTypeCode",
"About", "Summary",
"Details",
"EventData", "EventData",
"PublishedAt", "PublishedAt",
"ExpiresAt", "ExpiresAt",
@@ -101,7 +103,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public Int32 _RegionIdCountry { get { return Cols._RegionIdCountry.Value; } set { Cols._RegionIdCountry.Value = value; } } public Int32 _RegionIdCountry { get { return Cols._RegionIdCountry.Value; } set { Cols._RegionIdCountry.Value = value; } }
public DateTime _EventAt { get { return Cols._EventAt.Value; } set { Cols._EventAt.Value = value; } } public DateTime _EventAt { get { return Cols._EventAt.Value; } set { Cols._EventAt.Value = value; } }
public String _EventTypeCode { get { return Cols._EventTypeCode.Value; } set { Cols._EventTypeCode.Value = value; } } public String _EventTypeCode { get { return Cols._EventTypeCode.Value; } set { Cols._EventTypeCode.Value = value; } }
public String _About { get { return Cols._About.Value; } set { Cols._About.Value = value; } } public String _Summary { get { return Cols._Summary.Value; } set { Cols._Summary.Value = value; } }
public String _Details { get { return Cols._Details.Value; } set { Cols._Details.Value = value; } }
public String _EventData { get { return Cols._EventData.Value; } set { Cols._EventData.Value = value; } } public String _EventData { get { return Cols._EventData.Value; } set { Cols._EventData.Value = value; } }
public DateTime _PublishedAt { get { return Cols._PublishedAt.Value; } set { Cols._PublishedAt.Value = value; } } public DateTime _PublishedAt { get { return Cols._PublishedAt.Value; } set { Cols._PublishedAt.Value = value; } }
public DateTime _ExpiresAt { get { return Cols._ExpiresAt.Value; } set { Cols._ExpiresAt.Value = value; } } public DateTime _ExpiresAt { get { return Cols._ExpiresAt.Value; } set { Cols._ExpiresAt.Value = value; } }
@@ -141,7 +144,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
_RegionIdCountry = GetFieldInt32(dbDataReader, "RegionIdCountry", _RegionIdCountry); _RegionIdCountry = GetFieldInt32(dbDataReader, "RegionIdCountry", _RegionIdCountry);
_EventAt = GetFieldDateTime(dbDataReader, "EventAt", _EventAt); _EventAt = GetFieldDateTime(dbDataReader, "EventAt", _EventAt);
_EventTypeCode = GetFieldString(dbDataReader, "EventTypeCode", _EventTypeCode); _EventTypeCode = GetFieldString(dbDataReader, "EventTypeCode", _EventTypeCode);
_About = GetFieldString(dbDataReader, "About", _About); _Summary = GetFieldString(dbDataReader, "Summary", _Summary);
_Details = GetFieldString(dbDataReader, "Details", _Details);
_EventData = GetFieldString(dbDataReader, "EventData", _EventData); _EventData = GetFieldString(dbDataReader, "EventData", _EventData);
_PublishedAt = GetFieldDateTime(dbDataReader, "PublishedAt", _PublishedAt); _PublishedAt = GetFieldDateTime(dbDataReader, "PublishedAt", _PublishedAt);
_ExpiresAt = GetFieldDateTime(dbDataReader, "ExpiresAt", _ExpiresAt); _ExpiresAt = GetFieldDateTime(dbDataReader, "ExpiresAt", _ExpiresAt);
@@ -180,7 +184,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry); if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt); if (columnNames.ContainsCI("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt);
if (columnNames.ContainsCI("EventTypeCode")) AddCommandParameter(dbCommand, "@EventTypeCode", _EventTypeCode); if (columnNames.ContainsCI("EventTypeCode")) AddCommandParameter(dbCommand, "@EventTypeCode", _EventTypeCode);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About); if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("Details")) AddCommandParameter(dbCommand, "@Details", _Details);
if (columnNames.ContainsCI("EventData")) AddCommandParameter(dbCommand, "@EventData", _EventData); if (columnNames.ContainsCI("EventData")) AddCommandParameter(dbCommand, "@EventData", _EventData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt); if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt); if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
@@ -234,7 +239,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry); if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt); if (columnNames.ContainsCI("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt);
if (columnNames.ContainsCI("EventTypeCode")) AddCommandParameter(dbCommand, "@EventTypeCode", _EventTypeCode); if (columnNames.ContainsCI("EventTypeCode")) AddCommandParameter(dbCommand, "@EventTypeCode", _EventTypeCode);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About); if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("Details")) AddCommandParameter(dbCommand, "@Details", _Details);
if (columnNames.ContainsCI("EventData")) AddCommandParameter(dbCommand, "@EventData", _EventData); if (columnNames.ContainsCI("EventData")) AddCommandParameter(dbCommand, "@EventData", _EventData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt); if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt); if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 20-Nov-2021 14:44:06 // Code generated by Sarand Database Utilities Wed 8-Dec-2021 14:16:53
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal namespace Saxonite.Net.Standard.Dbas.Internal
{ {
@@ -511,40 +511,11 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// User filter. // User filter.
if (!StringUtil.IsEmpty(prm.UserFilter)) if (!StringUtil.IsEmpty(prm.UserFilter))
{ filter.AddRange(GetUserAccountFilters(prm.UserFilter, aliasUserAccount));
// Split filter into words.
List<String> filterWords = prm.UserFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userFilter = new List<string>();
// Exact match for each word to avoid Online user search allowing partial lookup.
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
filter.Add(userFilter.Concat(" OR ", "(", ")"));
}
}
// User filter - partial. // User filter - partial.
if (!StringUtil.IsEmpty(prm.UserFilterPartial)) if (!StringUtil.IsEmpty(prm.UserFilterPartial))
{ filter.AddRange(GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserAccount));
// Split filter into words.
List<String> filterWords = prm.UserFilterPartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userAccountFilter = new List<string>();
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
filter.Add(userAccountFilter.Concat(" OR ", "(", ")"));
}
}
// Active roles. // Active roles.
List<String> roleCodes = new List<string>(); List<String> roleCodes = new List<string>();
@@ -581,6 +552,49 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (filter.Count < 1) filter.Add("1=1"); if (filter.Count < 1) filter.Add("1=1");
return filter; return filter;
} }
internal static List<String> GetUserAccountFilters(String userFilter, String aliasUserAccount)
{
List<String> filter = new List<string>();
if (!StringUtil.IsEmpty(userFilter))
{
// Split filter into words.
List<String> filterWords = userFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userAccountFilter = new List<string>();
// Exact match for each word to avoid Online user search allowing partial lookup.
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
filter.Add(userAccountFilter.Concat(" OR ", "(", ")"));
}
}
return filter;
}
internal static List<String> GetPartialUserAccountFilters(String userFilterPartial, String aliasUserAccount)
{
List<String> filter = new List<string>();
if (!StringUtil.IsEmpty(userFilterPartial))
{
// Split filter into words.
List<String> filterWords = userFilterPartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userAccountFilter = new List<string>();
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
filter.Add(userAccountFilter.Concat(" OR ", "(", ")"));
}
}
return filter;
}
internal static String GetUserAccountStatusCatFilterCondition(SaxUserAccount.StatusCat statusCat) internal static String GetUserAccountStatusCatFilterCondition(SaxUserAccount.StatusCat statusCat)
{ {
if (statusCat == SaxUserAccount.StatusCat.AwaitingOnly) if (statusCat == SaxUserAccount.StatusCat.AwaitingOnly)
@@ -597,6 +611,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return ""; return "";
} }
//-------------------------------------------------------------------
// Item sort columns. // Item sort columns.
public List<String> GetUserAccountSortColumns(SaxUserAccount.Params prm) public List<String> GetUserAccountSortColumns(SaxUserAccount.Params prm)
{ {
@@ -450,22 +450,36 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (!userAccountIdsIncluded.IsEmpty()) if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation) + " IN (" + userAccountIdsIncluded + ")"); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation) + " IN (" + userAccountIdsIncluded + ")");
// User Account status. // User Account filters.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any) if (StringUtil.IsEmpty(prm.Alias_UserAccount))
{ {
if (StringUtil.IsEmpty(prm.Alias_UserAccount)) // User Account table isn't linked - use sub-query.
{ DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
// User Account table isn't linked. qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount);
DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Columns.Add("1");
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount); // Construct required filters.
qry.Columns.Add("1"); if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserOrganisation_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat)); qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserOrganisation_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
if (!StringUtil.IsEmpty(prm.UserFilter))
qry.Filters.AddRange(SaxAccountMgr_Dbas.GetUserAccountFilters(prm.UserFilter, aliasUserOrganisation_UserAccount));
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
qry.Filters.AddRange(SaxAccountMgr_Dbas.GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserOrganisation_UserAccount));
if (!qry.Filters.IsEmpty())
{
// At least one User Account filter has been applied. Include Id filter and construct main query filter.
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
filter.Add("Exists (" + qry.BuildQuery() + ")"); filter.Add("Exists (" + qry.BuildQuery() + ")");
} }
else }
// User Account table is linked - filter directly. else
{
// User Account table is linked - filter directly.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, prm.Alias_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat)); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, prm.Alias_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
if (!StringUtil.IsEmpty(prm.UserFilter))
filter.AddRange(SaxAccountMgr_Dbas.GetUserAccountFilters(prm.UserFilter, prm.Alias_UserAccount));
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
filter.AddRange(SaxAccountMgr_Dbas.GetPartialUserAccountFilters(prm.UserFilterPartial, prm.Alias_UserAccount));
} }
// Organisations. // Organisations.
@@ -537,6 +551,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return ""; return "";
} }
//-------------------------------------------------------------------
// Item sort columns. // Item sort columns.
public List<String> GetUserOrganisationSortColumns(SaxUserOrganisation.Params prm) public List<String> GetUserOrganisationSortColumns(SaxUserOrganisation.Params prm)
{ {
@@ -218,7 +218,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
dbOrganisationEvent._RegionIdCountry = SysId.ToInt(organisationEvent.RegionIdCountry); dbOrganisationEvent._RegionIdCountry = SysId.ToInt(organisationEvent.RegionIdCountry);
dbOrganisationEvent._EventAt = organisationEvent.EventAt; dbOrganisationEvent._EventAt = organisationEvent.EventAt;
dbOrganisationEvent._EventTypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType); dbOrganisationEvent._EventTypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType);
dbOrganisationEvent._About = organisationEvent.About; dbOrganisationEvent._Summary = organisationEvent.Summary;
dbOrganisationEvent._Details = organisationEvent.Details;
dbOrganisationEvent._EventData = organisationEvent.EventData; dbOrganisationEvent._EventData = organisationEvent.EventData;
dbOrganisationEvent._PublishedAt = organisationEvent.PublishedAt; dbOrganisationEvent._PublishedAt = organisationEvent.PublishedAt;
dbOrganisationEvent._ExpiresAt = organisationEvent.ExpiresAt; dbOrganisationEvent._ExpiresAt = organisationEvent.ExpiresAt;
@@ -243,7 +244,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
organisationEvent.RegionIdCountry = new SysId(dbOrganisationEvent._RegionIdCountry); organisationEvent.RegionIdCountry = new SysId(dbOrganisationEvent._RegionIdCountry);
organisationEvent.EventAt = dbOrganisationEvent._EventAt; organisationEvent.EventAt = dbOrganisationEvent._EventAt;
organisationEvent.EventType = (Sax.EventType)EventTypeCodes.GetTypeForCode(dbOrganisationEvent._EventTypeCode); organisationEvent.EventType = (Sax.EventType)EventTypeCodes.GetTypeForCode(dbOrganisationEvent._EventTypeCode);
organisationEvent.About = dbOrganisationEvent._About; organisationEvent.Summary = dbOrganisationEvent._Summary;
organisationEvent.Details = dbOrganisationEvent._Details;
organisationEvent.EventData = dbOrganisationEvent._EventData; organisationEvent.EventData = dbOrganisationEvent._EventData;
organisationEvent.PublishedAt = dbOrganisationEvent._PublishedAt; organisationEvent.PublishedAt = dbOrganisationEvent._PublishedAt;
organisationEvent.ExpiresAt = dbOrganisationEvent._ExpiresAt; organisationEvent.ExpiresAt = dbOrganisationEvent._ExpiresAt;
@@ -341,8 +343,11 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
case SaxOrganisationEvent.Column.EventType_Desc: case SaxOrganisationEvent.Column.EventType_Desc:
SetOrganisationEventColDfn(columnDfn, "Type", 120, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, ColumnAlignment.Center); SetOrganisationEventColDfn(columnDfn, "Type", 120, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, ColumnAlignment.Center);
break; break;
case SaxOrganisationEvent.Column.About: case SaxOrganisationEvent.Column.Summary:
SetOrganisationEventColDfn(columnDfn, "About", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About); SetOrganisationEventColDfn(columnDfn, "Summary", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary);
break;
case SaxOrganisationEvent.Column.Details:
SetOrganisationEventColDfn(columnDfn, "Details", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details);
break; break;
case SaxOrganisationEvent.Column.PublishedAt_Date: case SaxOrganisationEvent.Column.PublishedAt_Date:
SetOrganisationEventColDfn(columnDfn, "Published", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, ColumnAlignment.Center, DataValue.DataType.Date); SetOrganisationEventColDfn(columnDfn, "Published", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, ColumnAlignment.Center, DataValue.DataType.Date);
@@ -453,11 +458,11 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (!regionIdsIncluded.IsEmpty()) if (!regionIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, aliasOrganisationEvent) + " IN (" + regionIdsIncluded + ")"); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, aliasOrganisationEvent) + " IN (" + regionIdsIncluded + ")");
// About. // Summary.
if (!StringUtil.IsEmpty(prm.AboutPartial)) if (!StringUtil.IsEmpty(prm.SummaryPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About, aliasOrganisationEvent) + " Like '%" + DbQuery.FormatForLike(prm.AboutPartial, true) + "%'"); filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary, aliasOrganisationEvent) + " Like '%" + DbQuery.FormatForLike(prm.SummaryPartial, true) + "%'");
// Article. // Event filter.
if (!StringUtil.IsEmpty(prm.EventFilter)) if (!StringUtil.IsEmpty(prm.EventFilter))
{ {
// Split filter into words. // Split filter into words.
@@ -467,7 +472,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
foreach (String filterWord in filterWords) foreach (String filterWord in filterWords)
{ {
List<String> articleFilter = new List<String>(); List<String> articleFilter = new List<String>();
articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About, aliasOrganisationEvent) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'"); articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary, aliasOrganisationEvent) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details, aliasOrganisationEvent) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
filter.Add(articleFilter.Concat(" OR ", "(", ")")); filter.Add(articleFilter.Concat(" OR ", "(", ")"));
} }
} }
@@ -606,8 +612,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.EventTypeCode) || columns.HasId(SaxOrganisationEvent.Column.EventType_Desc)) if (columns.HasId(SaxOrganisationEvent.Column.EventTypeCode) || columns.HasId(SaxOrganisationEvent.Column.EventType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, aliasOrganisationEvent)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.About)) if (columns.HasId(SaxOrganisationEvent.Column.Summary))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About, aliasOrganisationEvent)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.Details))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.PublishedAt_Date) || columns.HasId(SaxOrganisationEvent.Column.PublishedAt_DateTime)) if (columns.HasId(SaxOrganisationEvent.Column.PublishedAt_Date) || columns.HasId(SaxOrganisationEvent.Column.PublishedAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, aliasOrganisationEvent)); query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.ExpiresAt_Date) || columns.HasId(SaxOrganisationEvent.Column.ExpiresAt_DateTime)) if (columns.HasId(SaxOrganisationEvent.Column.ExpiresAt_Date) || columns.HasId(SaxOrganisationEvent.Column.ExpiresAt_DateTime))
@@ -256,7 +256,7 @@
<Clustered>false</Clustered> <Clustered>false</Clustered>
<Nullable>false</Nullable> <Nullable>false</Nullable>
<Pages>1</Pages> <Pages>1</Pages>
<UniqueValues>11</UniqueValues> <UniqueValues>12</UniqueValues>
<HasColumns>false</HasColumns> <HasColumns>false</HasColumns>
<Columns> <Columns>
<DbDfnIndexColumn> <DbDfnIndexColumn>
@@ -2637,7 +2637,24 @@
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>7</Pos> <Pos>7</Pos>
<Name>About</Name> <Name>Summary</Name>
<DataType>VarChar</DataType>
<DataTypeName />
<DataTypeNative>-9</DataTypeNative>
<DataTypeNameNative>nvarchar</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>200</Size>
<BufferLen>400</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>NoNulls</Nullable>
<IsNullable>false</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>8</Pos>
<Name>Details</Name>
<DataType>VarChar</DataType> <DataType>VarChar</DataType>
<DataTypeName /> <DataTypeName />
<DataTypeNative>-9</DataTypeNative> <DataTypeNative>-9</DataTypeNative>
@@ -2653,7 +2670,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>8</Pos> <Pos>9</Pos>
<Name>EventData</Name> <Name>EventData</Name>
<DataType>VarChar</DataType> <DataType>VarChar</DataType>
<DataTypeName /> <DataTypeName />
@@ -2670,7 +2687,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>9</Pos> <Pos>10</Pos>
<Name>PublishedAt</Name> <Name>PublishedAt</Name>
<DataType>DateTime</DataType> <DataType>DateTime</DataType>
<DataTypeName /> <DataTypeName />
@@ -2687,7 +2704,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>10</Pos> <Pos>11</Pos>
<Name>ExpiresAt</Name> <Name>ExpiresAt</Name>
<DataType>DateTime</DataType> <DataType>DateTime</DataType>
<DataTypeName /> <DataTypeName />
@@ -2704,7 +2721,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>11</Pos> <Pos>12</Pos>
<Name>Notes</Name> <Name>Notes</Name>
<DataType>VarChar</DataType> <DataType>VarChar</DataType>
<DataTypeName /> <DataTypeName />
@@ -2721,7 +2738,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>12</Pos> <Pos>13</Pos>
<Name>Flags</Name> <Name>Flags</Name>
<DataType>SmallInt</DataType> <DataType>SmallInt</DataType>
<DataTypeName /> <DataTypeName />
@@ -2738,7 +2755,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>13</Pos> <Pos>14</Pos>
<Name>Status</Name> <Name>Status</Name>
<DataType>VarChar</DataType> <DataType>VarChar</DataType>
<DataTypeName /> <DataTypeName />
@@ -2755,7 +2772,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>14</Pos> <Pos>15</Pos>
<Name>CreateOn</Name> <Name>CreateOn</Name>
<DataType>DateTime</DataType> <DataType>DateTime</DataType>
<DataTypeName /> <DataTypeName />
@@ -2772,7 +2789,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>15</Pos> <Pos>16</Pos>
<Name>CreateBy</Name> <Name>CreateBy</Name>
<DataType>Int</DataType> <DataType>Int</DataType>
<DataTypeName /> <DataTypeName />
@@ -2789,7 +2806,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>16</Pos> <Pos>17</Pos>
<Name>CreateHost</Name> <Name>CreateHost</Name>
<DataType>VarChar</DataType> <DataType>VarChar</DataType>
<DataTypeName /> <DataTypeName />
@@ -2806,7 +2823,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>17</Pos> <Pos>18</Pos>
<Name>UpdateOn</Name> <Name>UpdateOn</Name>
<DataType>DateTime</DataType> <DataType>DateTime</DataType>
<DataTypeName /> <DataTypeName />
@@ -2823,7 +2840,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>18</Pos> <Pos>19</Pos>
<Name>UpdateBy</Name> <Name>UpdateBy</Name>
<DataType>Int</DataType> <DataType>Int</DataType>
<DataTypeName /> <DataTypeName />
@@ -2840,7 +2857,7 @@
<DbDfnColumn> <DbDfnColumn>
<Schema>dbo</Schema> <Schema>dbo</Schema>
<Table>OrganisationEvent</Table> <Table>OrganisationEvent</Table>
<Pos>19</Pos> <Pos>20</Pos>
<Name>UpdateHost</Name> <Name>UpdateHost</Name>
<DataType>VarChar</DataType> <DataType>VarChar</DataType>
<DataTypeName /> <DataTypeName />
@@ -2865,8 +2882,8 @@
<Primary>false</Primary> <Primary>false</Primary>
<Clustered>false</Clustered> <Clustered>false</Clustered>
<Nullable>false</Nullable> <Nullable>false</Nullable>
<Pages>0</Pages> <Pages>1</Pages>
<UniqueValues>0</UniqueValues> <UniqueValues>1</UniqueValues>
<HasColumns>false</HasColumns> <HasColumns>false</HasColumns>
<Columns> <Columns>
<DbDfnIndexColumn> <DbDfnIndexColumn>
@@ -3278,7 +3295,7 @@
<Clustered>false</Clustered> <Clustered>false</Clustered>
<Nullable>false</Nullable> <Nullable>false</Nullable>
<Pages>1</Pages> <Pages>1</Pages>
<UniqueValues>5</UniqueValues> <UniqueValues>6</UniqueValues>
<HasColumns>false</HasColumns> <HasColumns>false</HasColumns>
<Columns> <Columns>
<DbDfnIndexColumn> <DbDfnIndexColumn>
@@ -4988,7 +5005,7 @@
<Clustered>false</Clustered> <Clustered>false</Clustered>
<Nullable>false</Nullable> <Nullable>false</Nullable>
<Pages>1</Pages> <Pages>1</Pages>
<UniqueValues>18</UniqueValues> <UniqueValues>19</UniqueValues>
<HasColumns>false</HasColumns> <HasColumns>false</HasColumns>
<Columns> <Columns>
<DbDfnIndexColumn> <DbDfnIndexColumn>