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.EffectiveTo = context.EffectiveTo;
prmActivityIndex.Alias_ActivityIndex = alias_ActivityIndex;
prmActivityIndex.ResultsPaging.PageNo = 1;
prmActivityIndex.ResultsPaging.PageLength = 100;
query.Filters.AddRange(internals.ActivityMgr.GetActivityIndexQueryFilter(prmActivityIndex));
// First pass, note the activity Item and effective date.
@@ -137,7 +139,8 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
{
PopulateUserActivityDetails(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.
private void PopulateOrganisationOpportunitiesDetails(IndexContext context, List<ActivityData_Web> activities)
private void PopulateOrganisationOpportunityDetails(IndexContext context, List<ActivityData_Web> activities)
{
// Extract opportunity Ids.
List<SysId> opportunityIds = activities.FindAll(item => item.ItemId.Type == (int)Sax.DataItemType.OrganisationOpportunity).Select(ItemId => ItemId.ItemId.Id).ToList();
@@ -258,14 +319,14 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
// Opportunity columns - limit to essential information.
ColumnDfn colId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Id);
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 colOutline = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Outline);
ColumnDfn colSportId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.SportIdPrimary);
ColumnDfn colSportName = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.Sport_Name);
ColumnDfn colRegionId = Internals.ActivityMgr.GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column.RegionIdPrimary);
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.
SaxOrganisationOpportunity.Params prmOpportunity = new SaxOrganisationOpportunity.Params();
@@ -238,19 +238,19 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
String fn = nameof(ControllerBase) + ".EncryptParameters";
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);
// 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;
Array.Sort(paramKeys);
// 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);
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;
}
catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); }
@@ -262,7 +262,7 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
try
{
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);
}
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-content">
<div class="spacer4"></div>
@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-content">
<div class="spacer4"></div>
@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-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmSignIn", @class = "sax-form" }))
{
@@ -237,6 +237,9 @@
<data name="label.article" xml:space="preserve">
<value>Article</value>
</data>
<data name="label.at" xml:space="preserve">
<value>At</value>
</data>
<data name="label.calendar" xml:space="preserve">
<value>Calendar</value>
</data>
@@ -276,6 +279,9 @@
<data name="label.created" xml:space="preserve">
<value>Created</value>
</data>
<data name="label.date" xml:space="preserve">
<value>Date</value>
</data>
<data name="label.date.of.birth" xml:space="preserve">
<value>Date of birth</value>
</data>
@@ -285,6 +291,9 @@
<data name="label.delete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="label.details" xml:space="preserve">
<value>Details</value>
</data>
<data name="label.discipline" xml:space="preserve">
<value>Discipline</value>
</data>
@@ -294,6 +303,9 @@
<data name="label.drag.image.here" xml:space="preserve">
<value>Drag your image here.</value>
</data>
<data name="label.duration" xml:space="preserve">
<value>Duration</value>
</data>
<data name="label.edit" xml:space="preserve">
<value>Edit</value>
</data>
@@ -306,6 +318,9 @@
<data name="label.email.address" xml:space="preserve">
<value>Email address</value>
</data>
<data name="label.events" xml:space="preserve">
<value>Events</value>
</data>
<data name="label.excellent" xml:space="preserve">
<value>Excellent</value>
</data>
@@ -375,12 +390,18 @@
<data name="label.not.specified" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="label.occurs" xml:space="preserve">
<value>Occurs</value>
</data>
<data name="label.officiating" xml:space="preserve">
<value>Officiating</value>
</data>
<data name="label.ok" xml:space="preserve">
<value>OK</value>
</data>
<data name="label.on" xml:space="preserve">
<value>On</value>
</data>
<data name="label.opportunities" xml:space="preserve">
<value>Opportunities</value>
</data>
@@ -501,6 +522,9 @@
<data name="label.team" xml:space="preserve">
<value>Team</value>
</data>
<data name="label.time" xml:space="preserve">
<value>Time</value>
</data>
<data name="label.title" xml:space="preserve">
<value>Title</value>
</data>
@@ -620,6 +644,12 @@ You will then be able to publicise your sporting activities.</value>
<data name="organisation.caption.event" xml:space="preserve">
<value>Event</value>
</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">
<value>Events</value>
</data>
@@ -37,7 +37,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
{
public short ItemType { get; set; }
public String ItemTypeClass { get; set; }
public long ItemIdx { get; set; }
public String ItemId { get; set; }
public String Organisation { get; set; }
public String Author { get; set; }
public String Caption { get; set; }
@@ -102,6 +102,29 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
}
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>
private class ActivityResponseData_Opportunity
{
@@ -115,7 +138,6 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
PublishedOnFmt = model.Localiser.FormatDate(opportunity.PublishedAt);
}
public String Organisation { get; set; }
public String Author { get; set; }
public String Position { get; set; }
public String Outline { get; set; }
public String Sport { get; set; }
@@ -170,10 +192,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
activityData.ItemType = itemData.ItemId.Type;
if (itemData.ItemId.Type == (int)Sax.DataItemType.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)
activityData.ItemTypeClass = "Opportunity";
// 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.Author = itemData.Author;
activityData.Caption = itemData.Caption;
@@ -199,6 +223,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
private class AjaxResponse_ActivityInfo : AjaxResponse_Base
{
public ActivityResponseData_Article Article { get; set; }
public ActivityResponseData_Event Event { get; set; }
public ActivityResponseData_Opportunity Opportunity { get; set; }
}
//-------------------------------------------------------------------
@@ -224,8 +249,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
{
// Identify activity.
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType);
SysId itemId = model.ExtractSysId(model.ActivityIdx);
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityItemType);
SysId itemId = model.ExtractSysId(model.ActivityItemId);
if (itemType <= 0 || !SysId.IsValid(itemId))
{
SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix());
@@ -247,6 +272,18 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
disposableItems.Add(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)
{
// Organisation Opportunity.
@@ -297,8 +334,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
SaxSessionData_Online sessionData = SessionData_Online;
// Identify activity.
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType);
SysId itemId = model.ExtractSysId(model.ActivityIdx);
Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityItemType);
SysId itemId = model.ExtractSysId(model.ActivityItemId);
if (itemType <= 0 || !SysId.IsValid(itemId))
{
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 TypeCode { get; set; }
public String TypeDesc { get; set; }
public String About { get; set; }
public String RegionCaption { get; set; }
public String SportCaption { get; set; }
public String Summary { get; set; }
public String Details { get; set; }
public String SportCaptionPrimary { get; set; }
public String RegionCaptionCountry { get; set; }
public String PublishedOnFmt { get; set; }
public String ExpiresOnFmt { get; set; }
}
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 RegionIdCountry { get; set; }
public String SportIdPrimary { get; set; }
public String RegionIdCountry { get; set; }
public String PublishedOn_YYYYMMDD { get; set; }
public String ExpiresOn_YYYYMMDD { get; set; }
}
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.EventTimeFmt = DateUtil.Format(organisationEvent.EventAt, "HH:mm");
data.TypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType);
data.TypeDesc = Localiser.GetEventTypeCaption(organisationEvent.EventType);
data.About = organisationEvent.About;
data.RegionCaption = model.GetRegionCaption(organisationEvent.RegionIdCountry);
data.SportCaption = model.GetSportCaption(organisationEvent.SportIdPrimary);
data.Summary = organisationEvent.Summary;
data.Details = organisationEvent.Details;
data.SportCaptionPrimary = model.GetSportCaption(organisationEvent.SportIdPrimary);
data.RegionCaptionCountry = model.GetRegionCaption(organisationEvent.RegionIdCountry);
data.CreatedOnFmt = Localiser.FormatDate(organisationEvent.CreateStamp.On);
data.PublishedOnFmt = Localiser.FormatDate(organisationEvent.PublishedAt);
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)
{
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.RegionIdCountry = model.GetEncryptedRegionId(organisationEvent.RegionIdCountry);
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 colEventAt = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.EventAt_DateTime);
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 colRegionName = ActivityMgr.GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column.Region_Name);
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);
List<ColumnDfn> columns = new List<ColumnDfn>()
{
colId, colEventAt, colEventTypeCode, colAbout,
colId, colEventAt, colEventTypeCode, colSummary, colDetails,
colRegionId, colRegionName, colSportId, colSportName,
colPublishedOn, colExpiresOn,
colStatus, colCreatedOn
@@ -204,14 +209,15 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues();
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)),
EventTimeFmt = DateUtil.Format(values.GetDateTime(colEventAt.DataName), "HH:mm"),
TypeCode = values.GetString(colEventTypeCode.DataName),
TypeDesc = Localiser.GetEventTypeCaption((Sax.EventType)EventTypeCodes.GetTypeForCode(values.GetString(colEventTypeCode.DataName))),
About = values.GetString(colAbout.DataName),
RegionCaption = model.GetRegionCaption(values.GetString(colRegionId.DataName).ToSysId()),
SportCaption = model.GetSportCaption(values.GetString(colSportId.DataName).ToSysId()),
Summary = ActivityMgr.GetOrganisationEventDataValue(colSummary, values).AsString(),
Details = ActivityMgr.GetOrganisationEventDataValue(colDetails, values).AsString(),
RegionCaptionCountry = model.GetRegionCaption(values.GetString(colRegionId.DataName).ToSysId()),
SportCaptionPrimary = model.GetSportCaption(values.GetString(colSportId.DataName).ToSysId()),
CreatedOnFmt = Localiser.FormatDate(values.GetDateTime(colCreatedOn.DataName)),
PublishedOnFmt = Localiser.FormatDate(values.GetDateTime(colPublishedOn.DataName)),
ExpiresOnFmt = Localiser.FormatDate(values.GetDateTime(colExpiresOn.DataName)),
@@ -390,8 +396,10 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
}
if (model.EventTypeCode != null)
organisationEvent.EventType = (Sax.EventType)EventTypeCodes.GetTypeForCode(model.EventTypeCode);
if (model.EventAbout != null)
organisationEvent.About = model.EventAbout;
if (model.EventSummary != null)
organisationEvent.Summary = model.EventSummary;
if (model.EventDetails != null)
organisationEvent.Details = model.EventDetails;
if (model.EventStatusCode != null)
organisationEvent.Status = model.EventStatus;
@@ -414,7 +422,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
}
// Store Event Activity Index data.
// ToDo ActivityConsole.StoreActivityIndex(organisationEvent, DbUpdateInfo);
ActivityConsole.StoreActivityIndex(organisationEvent, DbUpdateInfo);
// Construct response.
PopulateEventResponseData(model, organisationEvent, responseData.Event);
@@ -29,6 +29,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public bool? CurrentUser { get; set; } = null;
public String EmailAddress { get; set; }
public String DisplayName { get; set; }
public String MemberRoles { get; set; }
public List<String> RoleCodes { get; set; } = new List<string>();
public List<CodeDesc> Roles { get; set; } = new List<CodeDesc>();
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)
{
data.Id = SysId.ToString(userOrganisation.Id);
data.UserAccountId = SysId.ToString(userOrganisation.UserAccountId);
data.Id = model.EncryptId(userOrganisation.Id);
data.UserAccountId = model.EncryptId(userOrganisation.UserAccountId);
if (userOrganisation.UserAccountId.Equals(UserAccountId)) data.CurrentUser = true;
data.EmailAddress = userAccount.EmailAddress;
data.DisplayName = userAccount.GetDisplayName();
@@ -56,6 +57,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
data.RoleCodes.Add(memberRoleCode);
data.Roles.Add(memberRoleCode, Localiser.GetOrganisationRoleCaption(organisationRole));
}
data.MemberRoles = data.Roles.Select(item => item.Desc).ToList().Concat(", ");
data.AdminComment = userOrganisation.AdminComment;
// NB UserAccount status (not UserOrganisation).
data.StatusCode = userAccount.StatusCode;
@@ -138,7 +140,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
prmMember.OrganisationIdsIncluded.Add(organisationId);
prmMember.UserAccountStatusCat = responseData.User.CanManage ? SaxUserAccount.StatusCat.AwaitingOrActive : SaxUserAccount.StatusCat.ActiveOnly;
prmMember.OrganisationMembersOnly = true;
//prmMember.MemberFilter = model.Filter.Member;
prmMember.UserFilterPartial = model.Filter.Member;
prmMember.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmMember);
model.PopulatePagingTo(prmMember.ResultsPaging);
@@ -171,8 +173,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues();
MemberData_List memberData = new MemberData_List()
{
Id = values.GetLong(colId.DataName).ToString(),
UserAccountId = values.GetString(colUserAccountId.DataName),
Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))),
UserAccountId = model.EncryptId(new SysId(values.GetLong(colUserAccountId.DataName))),
EmailAddress = values.GetString(colEmailAddress.DataName),
DisplayName = AccountMgr.GetUserOrganisationDataValue(colDisplayName, values).ToString(),
CreatedOnFmt = Localiser.FormatDate(values.GetDateTime(colCreatedOn.DataName)),
@@ -191,6 +193,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
memberData.RoleCodes.Add(memberRoleCode);
memberData.Roles.Add(memberRoleCode, Localiser.GetOrganisationRoleCaption(organisationRole));
}
memberData.MemberRoles = memberData.Roles.Select(item => item.Desc).ToList().Concat(", ");
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)
{
data.Id = SysId.ToString(opportunity.Id);
data.Id = model.EncryptId(opportunity.Id);
data.TypeCode = OpportunityTypeCodes.GetCodeForType(opportunity.OpportunityType);
data.TypeDesc = Localiser.GetOpportunityTypeCaption(opportunity.OpportunityType);
data.Position = opportunity.Position;
@@ -198,7 +198,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues();
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),
TypeDesc = Localiser.GetOpportunityTypeCaption((Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(values.GetString(colOpportunityTypeCode.DataName))),
Position = values.GetString(colPosition.DataName),
@@ -24,11 +24,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Organisation data.
public class OrganisationResponseData
{
public long Id { get; set; }
public String Id { get; set; }
public String Name { get; set; }
public long RegionId { get; set; }
public String RegionId { get; set; }
public String RegionName { get; set; }
public long SportId { get; set; }
public String SportId { get; set; }
public String SportName { get; set; }
}
@@ -86,11 +86,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues();
OrganisationResponseData organisationData = new OrganisationResponseData()
{
Id = values.GetLong(colOrganisationId.DataName),
Id = model.EncryptId(new SysId(values.GetLong(colOrganisationId.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),
SportId = values.GetLong(colSportId.DataName),
SportId = model.EncryptId(new SysId(values.GetLong(colSportId.DataName))),
SportName = values.GetString(colSportName.DataName),
};
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.
public AjaxResponse_MemberOrganisationList(SaxModel_Online model) : base(model) { }
public AjaxResponse_MemberAdminOrganisationList(SaxModel_Online model) : base(model) { }
// Organisation list.
public List<OrganisationResponseData> Organisations { get; } = new List<OrganisationResponseData>();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Organisation/Ajax/GetMemberOrganisationList")]
public IActionResult Ajax_GetMemberOrganisationList(Model_Organisation model)
[Route("Organisation/Ajax/GetMemberAdminOrganisationList")]
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"];
AjaxResponse_MemberOrganisationList responseData = new AjaxResponse_MemberOrganisationList(model);
AjaxResponse_MemberAdminOrganisationList responseData = new AjaxResponse_MemberAdminOrganisationList(model);
// Validate session and referrer.
if (!ValidReferer) return Forbid();
@@ -146,7 +146,10 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// 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.MemberAdmin);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.SortColumns.Add(colOrganisationName);
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmUserOrganisation);
@@ -158,11 +161,161 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
NamedValue.Map values = resultSet.GetRecordValues();
OrganisationResponseData organisationData = new OrganisationResponseData()
{
Id = values.GetLong(colOrganisationId.DataName),
Id = model.EncryptId(new SysId(values.GetLong(colOrganisationId.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),
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),
};
responseData.Organisations.Add(organisationData);
@@ -6,6 +6,7 @@ using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Base.App;
using Saxonite.Net.Core.Web.Online.Models;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
@@ -38,6 +39,33 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
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]
public IActionResult Events()
@@ -52,12 +80,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Get a suitable organisation for the filter.
SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember;
String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember;
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption);
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption, Sax.OrganisationRole.ScheduleAdmin);
if (organisationData == null)
return RedirectToAction("", "");
// 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;
@@ -79,39 +107,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
// Get a suitable organisation for the filter.
SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember;
String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember;
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption);
OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption, Sax.OrganisationRole.OpportunityAdmin);
if (organisationData == null)
return RedirectToAction("", "");
// Make a note of the filter values.
model.Filter.OrganisationId = SysId.ToString(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.OrganisationId = model.EncryptId(organisationData.Id);
model.Filter.OrganisationCaption = organisationData.Caption;
SessionData_Online.Filter.OrganisationIdMember = organisationData.Id;
SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption;
@@ -126,27 +127,46 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public SysId Id { get; }
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.
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
if (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) < 1)
return null;
// Filter organisation.
OrganisationData organisationData = new OrganisationData(filterOrganisationId);
organisationData.Caption = filterOrganisationCaption;
if (!SysId.IsValid(filterOrganisationId) || StringUtil.IsEmpty(filterOrganisationCaption))
// Roles (any) required for organisation list.
List<Sax.OrganisationRole> requiredRoles = new List<Sax.OrganisationRole>() { Sax.OrganisationRole.Admin };
if (organisationRole > 0)
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 colOrganisationName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name);
prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(UserAccountId);
if (SysId.IsValid(filterOrganisationId))
prmUserOrganisation.OrganisationIdsIncluded.Add(filterOrganisationId);
if (organisationData != null && SysId.IsValid(organisationData.Id))
prmUserOrganisation.OrganisationIdsIncluded.Add(organisationData.Id);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.SortColumns.Add(colOrganisationName);
@@ -13,7 +13,7 @@ using System.Threading.Tasks;
namespace Saxonite.Net.Core.Web.Online.Models
{
//=======================================================================
public class Model_Activity: SaxModel_Online
public class Model_Activity : SaxModel_Online
{
//-------------------------------------------------------------------
// Construction.
@@ -32,14 +32,14 @@ namespace Saxonite.Net.Core.Web.Online.Models
// Activity identity.
// ToDo Replace Type + Idx (Id) with Idx and cross-reference stored in Session data.
public String ActivityType { get; set; }
public String ActivityIdx { get; set; }
public String ActivityReaction{ get; set; }
public String ActivityItemType { get; set; }
public String ActivityItemId { get; set; }
public String ActivityReaction { get; set; }
public Sax.ActivityReaction GetActivityReaction()
{
Sax.ActivityReaction reaction = EnumUtil.ParseEnum(ActivityReaction, Sax.ActivityReaction.Unknown);
if (reaction <= 0 && StringUtil.IsNumeric(ActivityReaction))
reaction = (Sax.ActivityReaction)StringUtil.ToShort(ActivityReaction);
reaction = (Sax.ActivityReaction)StringUtil.ToShort(ActivityReaction);
return reaction;
}
@@ -49,7 +49,8 @@ namespace Saxonite.Net.Core.Web.Online.Models
public String EventDate { get; set; }
public String EventTime { 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 SaStatus EventStatus { get { return SacsSystem.GetStatusForCode(EventStatusCode); } }
@@ -69,6 +70,9 @@ namespace Saxonite.Net.Core.Web.Online.Models
// Event date.
if (EventDate != null)
{
DateTime eventOn = ParseDateFromForm(EventDate);
if (!DateUtil.IsValid(eventOn))
responseData.SetControlError(nameof(EventDate), Localiser["msg.validation.mandatory.value"]);
}
// Event time.
@@ -76,14 +80,22 @@ namespace Saxonite.Net.Core.Web.Online.Models
{
}
// Event about.
if (EventAbout != null)
// Event summary.
if (EventSummary != null)
{
responseData.SetControlValue(nameof(EventAbout), EventAbout);
if (StringUtil.IsEmpty(EventAbout))
responseData.SetControlError(nameof(EventAbout), Localiser["msg.validation.mandatory.value"]);
else if (StringUtil.GetLength(EventAbout) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About))
responseData.SetControlError(nameof(EventAbout), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About)]);
responseData.SetControlValue(nameof(EventSummary), EventSummary);
if (StringUtil.IsEmpty(EventSummary))
responseData.SetControlError(nameof(EventSummary), Localiser["msg.validation.mandatory.value"]);
else if (StringUtil.GetLength(EventSummary) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary))
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.
@@ -91,7 +103,7 @@ namespace Saxonite.Net.Core.Web.Online.Models
{
SysId articleSportId = ExtractSysId(EventSportIdPrimary);
if (!SysId.IsValid(articleSportId))
responseData.SetControlError(nameof(EventSportIdPrimary), Localiser["msg.validation.mandatory.value"]);
responseData.SetControlError("EventSportPrimary", Localiser["msg.validation.mandatory.value"]);
}
// Event region.
@@ -99,16 +111,16 @@ namespace Saxonite.Net.Core.Web.Online.Models
{
SysId articleRegionId = ExtractSysId(EventRegionIdCountry);
if (!SysId.IsValid(articleRegionId))
responseData.SetControlError(nameof(EventRegionIdCountry), Localiser["msg.validation.mandatory.value"]);
responseData.SetControlError("EventRegionCountry", Localiser["msg.validation.mandatory.value"]);
}
// Event status.
if (EventStatusCode != null)
{
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))
responseData.SetControlError(nameof(EventStatusCode), Localiser["msg.validation.invalid.value"]);
responseData.SetControlError(nameof(EventStatus), Localiser["msg.validation.invalid.value"]);
}
return !responseData.HasControlErrors();
@@ -21,10 +21,14 @@ namespace Saxonite.Net.Core.Web.Online.Models
{
//-------------------------------------------------------------------
// Data members.
private bool? userCanManageOrganisationMembers = null;
private bool? userCanManageOrganisationOpportunities = null;
private bool? userCanManageOrganisationSchedule = null;
private bool? userCanManageOrganisationArticles = null;
private class UserCanManageOptions
{
public bool? OrganisationMembers { get; set; } = 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.
@@ -42,9 +46,10 @@ namespace Saxonite.Net.Core.Web.Online.Models
//-------------------------------------------------------------------
// Menu options.
public bool MembersAllowed { get { return UserCanManageOrganisationMembers; } }
public bool OrganisationMembersAllowed { get { return UserCanManageOrganisationMembers; } }
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.
@@ -53,7 +58,7 @@ namespace Saxonite.Net.Core.Web.Online.Models
{
get
{
if (userCanManageOrganisationMembers == null && ValidUserSession)
if (userCanManage.OrganisationMembers == null && ValidUserSession)
{
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
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.MemberAdmin);
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
{
get
{
if (userCanManageOrganisationOpportunities == null && ValidUserSession)
if (userCanManage.OrganisationOpportunities == null && ValidUserSession)
{
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
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.OpportunityAdmin);
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
{
get
{
if (userCanManageOrganisationSchedule == null && ValidUserSession)
if (userCanManage.OrganisationSchedule == null && ValidUserSession)
{
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
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.ScheduleAdmin);
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
{
get
{
if (userCanManageOrganisationArticles == null && ValidUserSession)
if (userCanManage.OrganisationArticles == null && ValidUserSession)
{
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
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.ArticleAdmin);
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. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityId", @class = "", @action = "#", onsubmit = "return false;" }))
{
<input type="hidden" name="ActivityType" class="ActivityType" />
<input type="hidden" name="ActivityIdx" class="ActivityIdx" />
<input type="hidden" name="ActivityItemType" class="ActivityItemType" />
<input type="hidden" name="ActivityItemId" class="ActivityItemId" />
}
@* Activity React form - to record reaction to the selected activity. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmActivityReact", @class = "", @action = "#", onsubmit = "return false;" }))
{
<input type="hidden" name="ActivityType" class="ActivityType" />
<input type="hidden" name="ActivityIdx" class="ActivityIdx" />
<input type="hidden" name="ActivityItemType" class="ActivityItemType" />
<input type="hidden" name="ActivityItemId" class="ActivityItemId" />
<input type="hidden" name="ActivityReaction" class="ActivityReaction" />
}
@@ -121,6 +121,12 @@ else
<div class="sax-panel-item ArticleContentSegmentImage center">
<img src="" alt="" title="" />
</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="OpportunityOrganisation"></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">
@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="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 class="sax-control row">
@@ -92,14 +92,11 @@
<div class="sax-content">
<div class="row">
<div class="col-sm-6"><div class="MemberEmail"></div></div>
<div class="col-sm-6 text-sm-right"><div class=""></div></div>
</div>
<div class="">
<div class="MemberAdminComment sax-note"></div>
<div class="col-sm-6 text-sm-right"><div class="MemberRoles"></div></div>
</div>
<div class="row">
<div class="col-sm-6"><div class=" sax-note"></div></div>
<div class="col-sm-6 text-sm-right"><div class="MemberStatus sax-note"></div></div>
<div class="col-sm-8"><div class="MemberAdminComment sax-note"></div></div>
<div class="col-sm-4 text-sm-right"><div class="MemberStatus sax-note"></div></div>
</div>
</div>
</div>
@@ -35,7 +35,7 @@
<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" onclick="sax.selectFilterOrganisation()">@Localiser["label.select"]</button></div>
<div class="fixed"><button class="sax-button SelectFilterOrganisation">@Localiser["label.select"]</button></div>
</div>
</div>
<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" />
}
<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;" }))
{
@@ -26,92 +27,121 @@
@* Member Email Address *@
<div class="sax-form-control MemberEmailAddress">
<div class="sax-label">
<label for="ifMemberEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label>
<div class="row">
<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 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>
@* Member Display Name *@
<div class="sax-form-control MemberDisplayName">
<div class="sax-label">
<label for="ifMemberDisplayName"><span>@Localiser["label.name"]</span></label>
<div class="row">
<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 class="sax-control">
<input type="text" if="ifMemberDisplayName" class="MemberDisplayName sax-input" readonly="readonly" />
</div>
<div class="sax-message"></div>
</div>
@* Member Name *@
<div class="row">
<div class="col-sm-3"></div>
<div class="col-sm">
<div class="row">
<div class="col-sm-4">
@* User Title *@
<div class="sax-form-control MemberTitle">
<div class="sax-label">
<label for="cbMemberTitle"><span>@Localiser["label.title"]</span></label>
<div class="col-sm-4">
@* User Title *@
<div class="sax-form-control MemberTitle pr-sm-1">
<div class="sax-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 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 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 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>
@* Member roles *@
<div class="sax-form-control MemberRoleCodes">
<div class="sax-label">
<label for="ifMemberRoles"><span>@Localiser["label.roles"]</span></label>
<div class="row">
<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 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>
@* Admin Comment *@
<div class="sax-form-control MemberAdminComment">
<div class="sax-label">
<label for="ifMemberAdminComment"><span>@Localiser["label.comment"]</span></label>
<div class="row">
<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 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>
}
@@ -64,7 +64,7 @@
<label for="ifOpportunityOutline"><span>@Localiser["label.outline"]</span><span class="required">&nbsp;*</span></label>
</div>
<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 class="sax-message"></div>
</div>
@@ -80,8 +80,8 @@
<div class="col-sm">
<div class="sax-control row">
@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="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="col"><input type="text" id="ifOpportunitySportCaption" class="OpportunitySportCaption sax-input" readonly="readonly" /></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 class="sax-message"></div>
</div>
@@ -99,8 +99,8 @@
<div class="col-sm">
<div class="sax-control row">
@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="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="col"><input type="text" id="ifOpportunityRegionCaption" class="OpportunityRegionCaption sax-input" readonly="readonly" /></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 class="sax-message"></div>
</div>
@@ -134,14 +134,18 @@
{
<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>
}
@if (Model.OpportunitiesAllowed)
@if (Model.OrganisationOpportunitiesAllowed)
{
<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>
</li>
<li class="nav-item dropdown">
@@ -342,6 +342,19 @@
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 */
.sax-panel-item.Opportunity,
+10 -2
View File
@@ -45,6 +45,7 @@
}
#dlgActivity .sax-panel-item.Article .ArticleHeadline,
#dlgActivity .sax-panel-item.Event .EventOrganisation,
#dlgActivity .sax-panel-item.Opportunity .OpportunityOrganisation
{
margin: 0;
@@ -55,9 +56,10 @@
}
#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 .OpportunityPosition,
#dlgActivity .sax-panel-item.Opportunity .OpportunityOutline
#dlgActivity .sax-panel-item.Opportunity .OpportunityPosition
{
margin: 0;
padding: 8px 8px;
@@ -74,6 +76,12 @@
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 .ArticleOrganisation
{
@@ -20,6 +20,10 @@
--color-article: #9966CC;
--color-article-light: #b38cd9;
--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: #CC9933;
--color-opportunity-light: #dbb870;
+91 -91
View File
@@ -125,6 +125,97 @@
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)
{
@@ -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 ()
{
+23 -11
View File
@@ -5,7 +5,6 @@
(function (win, doc, undef)
{
"use strict";
sax.itemIdPrefix = 'Act_';
//--------------------------------------------------------------
sax.refreshResults = function (delay)
@@ -46,7 +45,7 @@
{
//sax.debug('populateItem', item);
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);
$('.ActivityAuthor', $item).text(item.author);
$('.ActivityCaption', $item).text(item.caption);
@@ -69,17 +68,19 @@
{
//sax.debug('expandActivity', item, $item);
let $frm = $('#frmActivityId');
$('.ActivityType', $frm).val(item.itemType);
$('.ActivityIdx', $frm).val(item.itemIdx);
$('.ActivityItemType', $frm).val(item.itemType);
$('.ActivityItemId', $frm).val(item.itemId);
sax.activity = { item: item, $item: $item };
sax.ajax.activityInfo = sax.ajax.activityInfo || { url: sax.url.base + 'Activity/Ajax/GetInfo', formId: 'frmActivityId', callbackFn: sax.showActivityDetails, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.activityInfo, 50);
}
sax.showActivityDetails = function (response)
{
sax.debug('showActivityDetails', response);
let $act = $('#dlgActivity .sax-content').empty();
//sax.debug('showActivityDetails', response);
let $act = $('.sax-content', sax.$dlg.activity).empty();
let $ar = $('.ActivityReaction', sax.$dlg.activity.parent()).hide();
let item;
let dlgH = 480;
if (item = response.article)
{
let $itm = $('.sax-panel-item-template .sax-panel-item.Article').clone();
@@ -88,7 +89,7 @@
$('.ArticleSummary', $itm).text(item.summary).toggle(!!item.summary);
$('.ArticleAuthor', $itm).text(item.author);
$('.ArticleOrganisation', $itm).text(item.organisation);
$('.ArticleOrigin', $itm).toggle(!!(item.author||item.organisation));
$('.ArticleOrigin', $itm).toggle(!!(item.author || item.organisation));
let segs = item.content.segments;
for (let segIdx = 0; segIdx < segs.length; segIdx++)
{
@@ -106,6 +107,17 @@
}
}
$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)
{
@@ -117,7 +129,7 @@
}
else return;
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.debug('setActivityReaction', r);
sax.debug('setActivityReaction', r, $('.sax-dialog-activity button.ActivityReaction' + r));
if ($('.sax-dialog-activity button.ActivityReaction' + r).hasClass(selectedClass)) r = 0;
sax.clearActivityReactionButton();
let fn = function (response)
@@ -143,8 +155,8 @@
sax.setActivityReactionButton(response.reaction);
}
let $frm = $('#frmActivityReact');
$('.ActivityType', $frm).val(sax.activity.item.itemType);
$('.ActivityIdx', $frm).val(sax.activity.item.itemIdx);
$('.ActivityItemType', $frm).val(sax.activity.item.itemType);
$('.ActivityItemId', $frm).val(sax.activity.item.itemId);
$('.ActivityReaction', $frm).val(r);
sax.ajax.activityReact = sax.ajax.activityReact || { url: sax.url.base + 'Activity/Ajax/React', formId: 'frmActivityReact', callbackFn: fn, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.activityReact, 20);
@@ -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)
{
"use strict";
let $pnl = sax.$pnl, $frm = sax.$frm, $dlg = sax.$dlg;
sax.members = {};
let om = sax.OrgMbr = { data: {}, fn: {} };
let $pnl = om.$pnl = {}, $frm = om.$frm = {}, $dlg = om.$dlg = {};
//--------------------------------------------------------------
sax.refreshResults = function (delay)
om.refreshResults = function (delay)
{
sax.data.userCanManageMembers = false;
if (!sax.awaitingRefreshResponse)
@@ -18,11 +18,11 @@
$('.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/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.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
om.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
@@ -36,38 +36,39 @@
// Menu.
let $bgr = $('.sax-burger', $pnl.filter);
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))
$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);
// Items.
var items = response.members;
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(sax.populateItem(sax.getItemTemplate(), items[itemIdx]));
$items.append(om.populateItem(om.getItemTemplate(), items[itemIdx]));
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
om.populateItem = function ($item, item)
{
if (!item) return;
$('.sax-panel-messages', $pnl.results).hide().empty();
$item.prop('id', sax.getItemId(item.id));
$('.MemberEmail', $item).text(item.emailAddress);
$('.MemberDisplayName', $item).text(item.displayName);
$('.MemberRoles', $item).text(item.memberRoles);
$('.MemberAdminComment', $item).text(item.adminComment);
$('.MemberStatus', $item).text(item.statusDesc).addClass('sax-status-' + item.statusCode.toLowerCase());
let $bgr = $('.sax-burger', $item);
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
if (sax.data.userCanManageMembers)
{
let fnUpd = function () { sax.updateItem(item) };
$mnu.append(sax.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
let fnUpd = function () { om.updateItem(item, $item) };
$mnu.append(om.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
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)
$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-content', $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);
@@ -75,142 +76,137 @@
}
//--------------------------------------------------------------
sax.getItemId = function (id)
{
return 'Itm_' + id;
}
sax.getFilterDropdownTemplate = function ()
om.getFilterDropdownTemplate = function ()
{
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();
}
sax.getItemDropdownTemplate = function ()
om.getItemDropdownTemplate = function ()
{
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);
}
//--------------------------------------------------------------
sax.selectFilterOrganisation = function ()
om.selectFilterOrganisation = function ()
{
if (!sax.data.memberOrganisations)
sax.getMemberOrganisations(sax.showSelectOrganisation);
else sax.showSelectOrganisation();
om.getMemberOrganisations(om.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;
sax.data.memberOrganisations = response.organisations;
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.showSelectOrganisation = function ()
om.showSelectOrganisation = function ()
{
//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 #ifFilterOrganisation').val(name);
sax.refreshResults(50);
om.refreshResults(50);
}
//--------------------------------------------------------------
sax.createItem = function ()
om.createItem = function ()
{
if (!sax.data.userCanManageMembers) return;
sax.clearItem();
$('.MemberOrganisationId', $frm.member).val($('.FilterOrganisationId', $frm.filter).val());
om.clearItem();
$('.MemberOrganisationId', $frm.mbr).val($('.FilterOrganisationId', $frm.filter).val());
$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: [] };
let $frmM = $frm.member;
$('.MemberId,.MemberExists,.MemberRoleCodes,input[type="text"],textarea,select', $frmM).val('');
$('.MemberEmailAddress', $frmM).prop('readonly', false);
$('.MemberDisplayName,.MemberTitle,.MemberFirstName,.MemberLastName', $frmM).hide();
$('.MemberId,.MemberExists,.MemberRoleCodes,input[type="text"],textarea,select', $frm.mbr).val('');
$('.MemberEmailAddress', $frm.mbr).prop('readonly', false);
$('.MemberDisplayName,.MemberTitle,.MemberFirstName,.MemberLastName', $frm.mbr).hide();
sax.clearControlErrors();
}
//--------------------------------------------------------------
sax.updateItem = function (item)
om.updateItem = function (item, $item)
{
if (!sax.data.userCanManageMembers) return;
$('.MemberId', $frm.memberId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetMember', formId: 'frmMemberId', callbackFn: sax.onUpdateItem };
om.clearItem();
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.onUpdateItem = function (response)
om.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
sax.clearItem();
if (!response.success) return;
let $frmM = $frm.member;
let item = sax.member = response.member;
$('.MemberId', $frmM).val(item.id);
$('.MemberExists', $frmM).val(1);
$('.MemberOrganisationId', $frmM).val();
$('.MemberEmailAddress', $frmM).val(item.emailAddress).prop('readonly', true);
$('.MemberDisplayName', $frmM).toggle(!item.awaiting).val(item.displayName);
$('.MemberTitle', $frmM).toggle(!!item.awaiting).val(item.title);
$('.MemberFirstName', $frmM).toggle(!!item.awaiting).val(item.firstName);
$('.MemberLastName', $frmM).toggle(!!item.awaiting).val(item.lastName);
$('.MemberRoleCodes', $frmM).val(item.roleCodes);
$('.MemberRoles', $frmM).val(sax.getSelectedMemberRoleDescs().join('\n'));
$('.MemberAdminComment', $frmM).val(item.adminComment);
$('.MemberId', $frm.mbr).val(item.id);
$('.MemberExists', $frm.mbr).val(1);
$('.MemberOrganisationId', $frm.mbr).val();
$('.MemberEmailAddress', $frm.mbr).val(item.emailAddress).prop('readonly', true);
$('.MemberDisplayName', $frm.mbr).toggle(!item.awaiting).val(item.displayName);
$('.MemberTitle', $frm.mbr).toggle(!!item.awaiting).val(item.title);
$('.MemberFirstName', $frm.mbr).toggle(!!item.awaiting).val(item.firstName);
$('.MemberLastName', $frm.mbr).toggle(!!item.awaiting).val(item.lastName);
$('.MemberRoleCodes', $frm.mbr).val(item.roleCodes);
$('.MemberRoles', $frm.mbr).val(om.getSelectedMemberRoleDescs().join('\n'));
$('.MemberAdminComment', $frm.mbr).val(item.adminComment);
sax.clearControlErrors();
$dlg.member.dialog('option', 'title', sax.dlg.title.updateMember);
sax.openDialog($dlg.member, 600, 600);
sax.openDialog($dlg.member, 600, 560);
}
//--------------------------------------------------------------
// Member Roles.
sax.selectMemberRoles = function ()
om.selectMemberRoles = function ()
{
//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.selectedCodes = sax.member.roleCodes || [];
sax.codeSelect.fn.openCodeSelect(sax.codeSelectCfg);
}
sax.updateMemberRoles = function (memberRoleCodes)
om.updateMemberRoles = function (memberRoleCodes)
{
//sax.debug('updateMemberRoles', memberRoleCodes);
let $frmM = $frm.member;
sax.member.roleCodes = memberRoleCodes;
$('.MemberRoleCodes', $frmM).val(memberRoleCodes.join(sax.data.memberRoleCodeDelim));
$('.MemberRoles', $frmM).val(sax.getSelectedMemberRoleDescs().join('\n'));
$('.MemberRoleCodes', $frm.mbr).val(memberRoleCodes.join(sax.data.memberRoleCodeDelim));
$('.MemberRoles', $frm.mbr).val(om.getSelectedMemberRoleDescs().join('\n'));
}
sax.getSelectedMemberRoleDescs = function ()
om.getSelectedMemberRoleDescs = function ()
{
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();
}
sax.getMemberRoleDesc = function (roleCode)
om.getMemberRoleDesc = function (roleCode)
{
let roleDesc = '';
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', $frmM).val($('.MemberLastName', $frmM).is(":visible") ? 1 : 0);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreMember', formId: 'frmMember', callbackFn: sax.onStoreItem };
$('.MemberNameSupplied', $frm.mbr).val($('.MemberLastName', $frm.mbr).is(":visible") ? 1 : 0);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreMember', formId: 'frmMember', callbackFn: om.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
sax.onStoreItem = function (response)
om.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
let $frmM = $frm.member;
if (response.memberNameRequired)
{
$('.MemberEmailAddress', $frmM).prop('readonly', true);
$('.MemberTitle,.MemberFirstName,.MemberLastName', $frmM).show();
$('.MemberEmailAddress', $frm.mbr).prop('readonly', true);
$('.MemberTitle,.MemberFirstName,.MemberLastName', $frm.mbr).show();
return;
}
$dlg.member.dialog('close');
var item = response.member;
var $item = $('#' + sax.getItemId(item.id));
if (!$item.length)
if (!om.$item || om.$item.length != 1)
{
$item = sax.getItemTemplate();
$('.sax-panel-item-list', $pnl.results).prepend($item).show();
om.$item = om.getItemTemplate();
$('.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 ()
{
$('.MemberId', $frm.memberId).val(id);
sax.ajax.removeItem = sax.ajax.removeItem || { url: sax.url.base + 'Organisation/Ajax/RemoveMember', formId: 'frmMemberId', callbackFn: sax.onItemRemoved };
$('.MemberId', $frm.mbrId).val(item.id);
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.doConfirm(sax.dlg.title.remove, sax.msg.remove, fn);
}
sax.onItemRemoved = function (response)
om.onItemRemoved = function (response)
{
if (!response.success) return;
var item = response.member;
var $item = $('#' + sax.getItemId(item.id));
//sax.debug(item, $item);
if ($item.length)
$item.remove();
//sax.debug(item, om.$item);
if (om.$item && om.$item.length == 1)
{
om.$item.remove();
delete om.$item;
}
}
//--------------------------------------------------------------
sax.activateItem = function (id)
om.activateItem = function (item, $item)
{
om.$item = $item;
let fn = function ()
{
$('.MemberId', $frm.memberId).val(id);
sax.ajax.activateItem = sax.ajax.activateItem || { url: sax.url.base + 'Organisation/Ajax/ActivateMember', formId: 'frmMemberId', callbackFn: sax.onItemActivated };
$('.MemberId', $frm.mbrId).val(item.id);
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.doConfirm(sax.dlg.title.activate, sax.msg.activate, fn);
}
sax.onItemActivated = function (response)
om.onItemActivated = function (response)
{
if (!response.success) return;
var item = response.member;
var $item = $('#' + sax.getItemId(item.id));
//sax.debug(item, $item);
if ($item.length)
sax.populateItem($item, item)
//sax.debug(item, om.$item);
if (om.$item && om.$item.length == 1)
{
om.populateItem(om.$item, item)
delete om.$item;
}
}
//--------------------------------------------------------------
@@ -297,21 +296,24 @@
$pnl.members = $('.sax-panel.Members');
$pnl.filter = $('.sax-panel-filter', $pnl.members);
$pnl.results = $('.sax-panel-results', $pnl.members);
$frm.filter = $('#frmMemberFilter');
$('.MemberFilter', $frm.filter).on('input', function () { sax.refreshResults(250); }).on('keypress', function (event)
$frm.filter = $('#frmMemberFilter', $pnl.members);
$('.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.member = $('#frmMember');
$('.sax-input', $frm.member).on('input', function () { sax.clearControlError(this); });
$frm.filter.on('dblclick', 'input.FilterOrganisation', om.selectFilterOrganisation).on('click', 'button.SelectFilterOrganisation', om.selectFilterOrganisation);
$frm.mbrId = $('#frmMemberId');
$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();
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'); };
$dlg.member = $('#dlgMember').dialog(opt);
setTimeout(sax.refreshResults, 250);
setTimeout(om.refreshResults, 250);
});
}(window, window.document));
+81 -82
View File
@@ -5,11 +5,11 @@
(function (win, doc, undef)
{
"use strict";
let $pnl = sax.$pnl, $frm = sax.$frm, $dlg = sax.$dlg;
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;
if (!sax.awaitingRefreshResponse)
@@ -18,11 +18,11 @@
$('.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/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.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
oo.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
@@ -37,23 +37,22 @@
// Menu.
let $bgr = $('.sax-burger', $pnl.filter);
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))
$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);
// Items.
var items = response.opportunities;
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(sax.populateItem(sax.getItemTemplate(), items[itemIdx]));
$items.append(oo.populateItem(oo.getItemTemplate(), items[itemIdx]));
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
oo.populateItem = function ($item, item)
{
if (!item) return;
$('.sax-panel-results .sax-panel-messages').hide().empty();
$item.prop('id', sax.getItemId(item.id));
$('.OpportunityType', $item).text(item.typeDesc);
$('.OpportunityPosition', $item).text(item.position);
$('.OpportunityOutline', $item).text(item.outline);
@@ -64,7 +63,7 @@
$('.OpportunityPublished', $item).toggle(!!item.publishedOnFmt);
$('.OpportunityExpiresOn', $item).text(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 $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
@@ -72,8 +71,8 @@
{
if (sax.data.userCanManageOpportunities)
{
let fnUpd = function () { sax.updateItem(item) };
$mnu.append(sax.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
let fnUpd = function () { oo.updateItem(item, $item) };
$mnu.append(oo.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
$('.sax-caption .sax-action', $item).off('click').on('click', fnUpd);
$item.off('dblclick').on('dblclick', fnUpd);
}
@@ -84,43 +83,39 @@
}
//--------------------------------------------------------------
sax.getItemId = function (id)
{
return 'Itm_' + id;
}
sax.getFilterDropdownTemplate = function ()
oo.getFilterDropdownTemplate = function ()
{
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();
}
sax.getItemDropdownTemplate = function ()
oo.getItemDropdownTemplate = function ()
{
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);
}
//--------------------------------------------------------------
sax.selectFilterOrganisation = function ()
oo.selectFilterOrganisation = function ()
{
if (!sax.data.memberOrganisations)
sax.getMemberOrganisations(sax.showSelectOrganisation);
else sax.showSelectOrganisation();
oo.getMemberOrganisations(oo.showSelectOrganisation);
else oo.showSelectOrganisation();
}
sax.getMemberOrganisations = function (fnCallback)
oo.getMemberOrganisations = function (fnCallback)
{
let handleMemberOrganisationsResponse = function (response)
{
@@ -129,100 +124,102 @@
sax.data.memberOrganisations = response.organisations;
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.showSelectOrganisation = function ()
oo.showSelectOrganisation = function ()
{
//sax.debug('sax.selectFilterOrganisation');
sax.selectOrganisation.fn.selectOrganisation({ caption: sax.dlg.title.selectOrganisation, items: sax.data.memberOrganisations, fnCallback: sax.onOrganisationSelected });
//sax.debug('selectFilterOrganisation');
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 #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));
$('#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));
$('#ifOpportunityRegionCaption').val(region ? region.name : '');
}
//--------------------------------------------------------------
sax.createItem = function ()
oo.createItem = function ()
{
if (!sax.data.userCanManageOpportunities) return;
sax.clearItem();
let $frmO = $frm.opportunity;
$('#ifOpportunitySportId', $frmO).val(oo.data.organisation.sportId);
$('#ifOpportunitySportCaption', $frmO).val(oo.data.organisation.sportName);
$('#ifOpportunityRegionId', $frmO).val(oo.data.organisation.regionId);
$('#ifOpportunityRegionCaption', $frmO).val(oo.data.organisation.regionName);
oo.clearItem();
$('#cbOpportunityType', $frm.opp).prepend($("<option>", { value: '', selected: true }));
$('#ifOpportunitySportId', $frm.opp).val(oo.data.organisation.sportId);
$('#ifOpportunitySportCaption', $frm.opp).val(oo.data.organisation.sportName);
$('#ifOpportunityRegionId', $frm.opp).val(oo.data.organisation.regionId);
$('#ifOpportunityRegionCaption', $frm.opp).val(oo.data.organisation.regionName);
$dlg.opportunity.dialog('option', 'title', sax.dlg.title.createOpportunity);
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.updateItem = function (item)
oo.updateItem = function (item, $item)
{
if (!sax.data.userCanManageOpportunities) return;
$('.OpportunityId', $frm.opportunityId).val(item.id);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetOpportunity', formId: 'frmOpportunityId', callbackFn: sax.onUpdateItem };
oo.clearItem();
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.onUpdateItem = function (response)
oo.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
sax.clearItem();
if (!response.success) return;
let $frmO = $frm.opportunity;
let item = response.opportunity;
$('#ifOpportunityId', $frmO).val(item.id);
$('#ifOpportunityExists', $frmO).val(1);
$('#cbOpportunityType', $frmO).val(item.typeCode);
$('#ifOpportunityPosition', $frmO).val(item.position);
$('#ifOpportunityOutline', $frmO).val(item.outline);
$('#ifOpportunityRegionId', $frmO).val(item.regionIdPrimary);
$('#ifOpportunityRegionCaption', $frmO).val(item.regionCaption);
$('#ifOpportunitySportId', $frmO).val(item.sportIdPrimary);
$('#ifOpportunitySportCaption', $frmO).val(item.sportCaption);
$('#cbOpportunityStatusCode', $frmO).val(item.statusCode);
$('#ifOpportunityId', $frm.opp).val(item.id);
$('#ifOpportunityExists', $frm.opp).val(1);
$('#cbOpportunityType', $frm.opp).val(item.typeCode);
$('#ifOpportunityPosition', $frm.opp).val(item.position);
$('#ifOpportunityOutline', $frm.opp).val(item.outline);
$('#ifOpportunityRegionId', $frm.opp).val(item.regionIdPrimary);
$('#ifOpportunityRegionCaption', $frm.opp).val(item.regionCaption);
$('#ifOpportunitySportId', $frm.opp).val(item.sportIdPrimary);
$('#ifOpportunitySportCaption', $frm.opp).val(item.sportCaption);
$('#cbOpportunityStatusCode', $frm.opp).val(item.statusCode);
sax.clearControlErrors();
$dlg.opportunity.dialog('option', 'title', sax.dlg.title.updateOpportunity);
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.onStoreItem = function (response)
oo.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
@@ -230,13 +227,12 @@
$dlg.opportunity.dialog('close');
var item = response.opportunity;
var $item = $('#' + sax.getItemId(item.id));
if (!$item.length)
if (!oo.$item || oo.$item.length != 1)
{
$item = $('.sax-panel-item-template .sax-panel-item', $pnl.results).clone();
$('.sax-panel-item-list', $pnl.results).prepend($item).show();
oo.$item = $('.sax-panel-item-template .sax-panel-item', $pnl.results).clone();
$('.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.filter = $('.sax-panel-filter', $pnl.opportunities);
$pnl.results = $('.sax-panel-results', $pnl.opportunities);
$frm.filter = $('#frmOpportunityFilter', $pnl.filter);
$('.OpportunityFilter', $frm.filter).on('input', function () { sax.refreshResults(250); }).on('keypress', function (event)
$frm.filter = $('#frmOpportunityFilter', $pnl.opportunities);
$('.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.opportunity = $('#frmOpportunity');
$('.sax-input', $frm.opportunity).on('input', function () { sax.clearControlError(this); });
$frm.filter.on('dblclick', 'input.FilterOrganisation', oo.selectFilterOrganisation).on('click', 'button.SelectFilterOrganisation', oo.selectFilterOrganisation);
$frm.oppId = $('#frmOpportunityId');
$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();
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'); };
$dlg.opportunity = $('#dlgOpportunity').dialog(opt);
setTimeout(sax.refreshResults, 250);
setTimeout(oo.refreshResults, 250);
});
}(window, window.document));
@@ -51,7 +51,7 @@
//--------------------------------------------------------------
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 })
}
or.onSelectOrgRegionCountry = function (region)
@@ -176,7 +176,7 @@
}
sax.selectContactImage = function ()
{
sax.debug('selectContactImage');
//sax.debug('selectContactImage');
let dlg = $dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload });
$('#ifContactImage', dlg).val('');
sax.openDialog(dlg, 560, 240);
+3 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.2.1.1";
private static String version { get; } = "1.2.2";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
@@ -40,6 +40,8 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
// Version history.
//-------------------------------------------------------------------
// 1.2.2 8-Dec-2021 Online Activities.
// - Organisation Events.
// 1.2.1 20-Nov-2021 Online Profile.
// - Online Organisation edit.
// 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. */
Playing,
Training,
Organisation,
Social,
}
@@ -6,7 +6,7 @@ using System.Collections.Generic;
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
{
@@ -165,7 +165,8 @@ namespace Saxonite.Base.App
OrganisationEvent_RegionIdCountry,
OrganisationEvent_EventAt,
OrganisationEvent_EventTypeCode,
OrganisationEvent_About,
OrganisationEvent_Summary,
OrganisationEvent_Details,
OrganisationEvent_EventData,
OrganisationEvent_PublishedAt,
OrganisationEvent_ExpiresAt,
@@ -356,7 +357,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 17;
private static readonly int columnCount = 310;
private static readonly int columnCount = 311;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -669,7 +670,8 @@ namespace Saxonite.Base.App
new ColumnDfn(7,"RegionIdCountry",4,4,false,10),
new ColumnDfn(7,"EventAt",9,93,false,16),
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,"PublishedAt",9,93,false,16),
new ColumnDfn(7,"ExpiresAt",9,93,false,16),
@@ -154,8 +154,9 @@ namespace Saxonite.Net.Standard.Base.App
//---------------------------------------------------------------
// Event types.
eventTypeCodes.Add(Sax.EventType.Playing, "PLG", "Playing");
eventTypeCodes.Add(Sax.EventType.Playing, "TRN", "Training");
eventTypeCodes.Add(Sax.EventType.Playing, "SCL", "Social");
eventTypeCodes.Add(Sax.EventType.Training, "TRN", "Training");
eventTypeCodes.Add(Sax.EventType.Organisation, "ORG", "Organisation");
eventTypeCodes.Add(Sax.EventType.Social, "SCL", "Social");
//---------------------------------------------------------------
// Opportunity types.
@@ -32,7 +32,8 @@ namespace Saxonite.Net.Standard.Base.Bus
EventAt_DateTime,
EventTypeCode,
EventType_Desc,
About,
Summary,
Details,
PublishedAt_Date,
PublishedAt_DateTime,
ExpiresAt_Date,
@@ -57,7 +58,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public SysId RegionIdCountry { get; set; }
public DateTime EventAt { 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 DateTime PublishedAt { get; set; }
public DateTime ExpiresAt { get; set; }
@@ -100,10 +102,15 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.EventType; }
set { CheckChanged((int)data.EventType, (int)value); data.EventType = value; }
}
public String About
public String Summary
{
get { return data.About; }
set { CheckChanged(data.About, value); data.About = value; }
get { return data.Summary; }
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
{
@@ -128,7 +135,8 @@ namespace Saxonite.Net.Standard.Base.Bus
RegionIdCountry = data.RegionIdCountry;
EventAt = data.EventAt;
EventType = data.EventType;
About = data.About;
Summary = data.Summary;
Details = data.Details;
EventData = data.EventData;
PublishedAt = data.PublishedAt;
ExpiresAt = data.ExpiresAt;
@@ -152,7 +160,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public ValidValue RegionIdCountry { get; set; } = ValidValue.Valid;
public ValidValue EventAt { 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 PublishedAt { 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; }
set { data.EventType = value; }
}
public String About
public String Summary
{
get { return data.About; }
set { data.About = value; }
get { return data.Summary; }
set { data.Summary = value; }
}
public String Details
{
get { return data.Details; }
set { data.Details = value; }
}
public String EventData
{
@@ -289,7 +303,7 @@ namespace Saxonite.Net.Standard.Base.Bus
public List<SysId> RegionIdsIncluded { get; } = new List<SysId>();
public DateTime EventFrom { 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>
public String EventFilter { get; set; }
public String NotesPartial { get; set; }
@@ -356,6 +356,10 @@ namespace Saxonite.Net.Standard.Base.Bus
public bool OrganisationMembersOnly { get; set; }
public List<Sax.OrganisationRole> OrganisationRoles { 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.
public String NotesPartial { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
@@ -24,6 +24,7 @@ namespace Saxonite.Net.Standard.Base.Consoles
/// </summary>
public class IndexContext
{
// ToDo Include Localiser.
public IndexContext (SysId userAccountId)
{
UserAccountId = userAccountId;
@@ -31,9 +32,9 @@ namespace Saxonite.Net.Standard.Base.Consoles
public SysId UserAccountId { get; }
public List<SysId> SportIds { get; } = new List<SysId>();
public List<SysId> RegionIds { get; } = new List<SysId>();
// Default period is ~3 months up to today.
public DateTime EffectiveFrom { get; } = DateUtil.IncrementDate(DateTime.Today, -90);
public DateTime EffectiveTo { get; } = DateTime.Today;
// Default period is ~12 months ago up to ~3 months in the future.
public DateTime EffectiveFrom { get; } = DateUtil.IncrementDate(DateTime.Today, -365);
public DateTime EffectiveTo { get; } = DateUtil.IncrementDate(DateTime.Today, 30);
public bool IsValid()
{
// 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>()
{
Sax.DataItemType.Article,
Sax.DataItemType.OrganisationEvent,
Sax.DataItemType.OrganisationOpportunity,
};
@@ -148,6 +150,31 @@ namespace Saxonite.Net.Standard.Base.Consoles
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>
/// Store the Activity Index for a Organisation Opportunity.
@@ -166,7 +193,6 @@ namespace Saxonite.Net.Standard.Base.Consoles
indexData.SportIds.Add(opportunity.SportIdPrimary);
indexData.RegionIds.Add(opportunity.RegionIdPrimary);
indexData.EffectiveOn = DateUtil.OnInvalid(opportunity.PublishedAt.Date, opportunity.CreateStamp.On.Date);
List<SysId> regionIds = new List<SysId>();
return StoreActivityIndexData(indexData, dbUpdateInfo);
}
public bool ClearActivityIndex(SaxOrganisationOpportunity opportunity, DbUpdateInfo dbUpdateInfo)
@@ -91,10 +91,16 @@ namespace Saxonite.Net.Standard.Base.Mgr
errField.EventType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Event type must be specified.");
}
// About.
if (errField.About != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.About, "outline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About), true))
// Summary.
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;
}
@@ -207,7 +213,15 @@ namespace Saxonite.Net.Standard.Base.Mgr
//-----------------------------------------------------------
// 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));
}
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -25,7 +25,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public ColumnDataInt32 _RegionIdCountry { get; } = new ColumnDataInt32("RegionIdCountry");
public ColumnDataDateTime _EventAt { get; } = new ColumnDataDateTime("EventAt");
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 ColumnDataDateTime _PublishedAt { get; } = new ColumnDataDateTime("PublishedAt");
public ColumnDataDateTime _ExpiresAt { get; } = new ColumnDataDateTime("ExpiresAt");
@@ -50,7 +51,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
"RegionIdCountry",
"EventAt",
"EventTypeCode",
"About",
"Summary",
"Details",
"EventData",
"PublishedAt",
"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 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 _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 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; } }
@@ -141,7 +144,8 @@ namespace Saxonite.Net.Standard.Dbas.Internal
_RegionIdCountry = GetFieldInt32(dbDataReader, "RegionIdCountry", _RegionIdCountry);
_EventAt = GetFieldDateTime(dbDataReader, "EventAt", _EventAt);
_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);
_PublishedAt = GetFieldDateTime(dbDataReader, "PublishedAt", _PublishedAt);
_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("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt);
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("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
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("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt);
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("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -9,7 +9,7 @@ using System.Data.Common;
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
{
@@ -511,40 +511,11 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// User filter.
if (!StringUtil.IsEmpty(prm.UserFilter))
{
// 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 ", "(", ")"));
}
}
filter.AddRange(GetUserAccountFilters(prm.UserFilter, aliasUserAccount));
// User filter - partial.
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
{
// 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 ", "(", ")"));
}
}
filter.AddRange(GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserAccount));
// Active roles.
List<String> roleCodes = new List<string>();
@@ -581,6 +552,49 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (filter.Count < 1) filter.Add("1=1");
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)
{
if (statusCat == SaxUserAccount.StatusCat.AwaitingOnly)
@@ -597,6 +611,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
//-------------------------------------------------------------------
// Item sort columns.
public List<String> GetUserAccountSortColumns(SaxUserAccount.Params prm)
{
@@ -450,22 +450,36 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation) + " IN (" + userAccountIdsIncluded + ")");
// User Account status.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
// User Account filters.
if (StringUtil.IsEmpty(prm.Alias_UserAccount))
{
if (StringUtil.IsEmpty(prm.Alias_UserAccount))
{
// User Account table isn't linked.
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount);
qry.Columns.Add("1");
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
// User Account table isn't linked - use sub-query.
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount);
qry.Columns.Add("1");
// Construct required filters.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
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() + ")");
}
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));
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.
@@ -537,6 +551,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
//-------------------------------------------------------------------
// Item sort columns.
public List<String> GetUserOrganisationSortColumns(SaxUserOrganisation.Params prm)
{
@@ -218,7 +218,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
dbOrganisationEvent._RegionIdCountry = SysId.ToInt(organisationEvent.RegionIdCountry);
dbOrganisationEvent._EventAt = organisationEvent.EventAt;
dbOrganisationEvent._EventTypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType);
dbOrganisationEvent._About = organisationEvent.About;
dbOrganisationEvent._Summary = organisationEvent.Summary;
dbOrganisationEvent._Details = organisationEvent.Details;
dbOrganisationEvent._EventData = organisationEvent.EventData;
dbOrganisationEvent._PublishedAt = organisationEvent.PublishedAt;
dbOrganisationEvent._ExpiresAt = organisationEvent.ExpiresAt;
@@ -243,7 +244,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
organisationEvent.RegionIdCountry = new SysId(dbOrganisationEvent._RegionIdCountry);
organisationEvent.EventAt = dbOrganisationEvent._EventAt;
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.PublishedAt = dbOrganisationEvent._PublishedAt;
organisationEvent.ExpiresAt = dbOrganisationEvent._ExpiresAt;
@@ -341,8 +343,11 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
case SaxOrganisationEvent.Column.EventType_Desc:
SetOrganisationEventColDfn(columnDfn, "Type", 120, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, ColumnAlignment.Center);
break;
case SaxOrganisationEvent.Column.About:
SetOrganisationEventColDfn(columnDfn, "About", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About);
case SaxOrganisationEvent.Column.Summary:
SetOrganisationEventColDfn(columnDfn, "Summary", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary);
break;
case SaxOrganisationEvent.Column.Details:
SetOrganisationEventColDfn(columnDfn, "Details", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details);
break;
case SaxOrganisationEvent.Column.PublishedAt_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())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, aliasOrganisationEvent) + " IN (" + regionIdsIncluded + ")");
// About.
if (!StringUtil.IsEmpty(prm.AboutPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About, aliasOrganisationEvent) + " Like '%" + DbQuery.FormatForLike(prm.AboutPartial, true) + "%'");
// Summary.
if (!StringUtil.IsEmpty(prm.SummaryPartial))
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))
{
// Split filter into words.
@@ -467,7 +472,8 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
foreach (String filterWord in filterWords)
{
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 ", "(", ")"));
}
}
@@ -606,8 +612,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.EventTypeCode) || columns.HasId(SaxOrganisationEvent.Column.EventType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.About))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_About, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.Summary))
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))
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))
@@ -256,7 +256,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>11</UniqueValues>
<UniqueValues>12</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -2637,7 +2637,24 @@
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<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>
<DataTypeName />
<DataTypeNative>-9</DataTypeNative>
@@ -2653,7 +2670,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>8</Pos>
<Pos>9</Pos>
<Name>EventData</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -2670,7 +2687,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>9</Pos>
<Pos>10</Pos>
<Name>PublishedAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -2687,7 +2704,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>10</Pos>
<Pos>11</Pos>
<Name>ExpiresAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -2704,7 +2721,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>11</Pos>
<Pos>12</Pos>
<Name>Notes</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -2721,7 +2738,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>12</Pos>
<Pos>13</Pos>
<Name>Flags</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
@@ -2738,7 +2755,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>13</Pos>
<Pos>14</Pos>
<Name>Status</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -2755,7 +2772,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>14</Pos>
<Pos>15</Pos>
<Name>CreateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -2772,7 +2789,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>15</Pos>
<Pos>16</Pos>
<Name>CreateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -2789,7 +2806,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>16</Pos>
<Pos>17</Pos>
<Name>CreateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -2806,7 +2823,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>17</Pos>
<Pos>18</Pos>
<Name>UpdateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -2823,7 +2840,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>18</Pos>
<Pos>19</Pos>
<Name>UpdateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -2840,7 +2857,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>OrganisationEvent</Table>
<Pos>19</Pos>
<Pos>20</Pos>
<Name>UpdateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -2865,8 +2882,8 @@
<Primary>false</Primary>
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>0</Pages>
<UniqueValues>0</UniqueValues>
<Pages>1</Pages>
<UniqueValues>1</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -3278,7 +3295,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>5</UniqueValues>
<UniqueValues>6</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -4988,7 +5005,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>18</UniqueValues>
<UniqueValues>19</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>