diff --git a/SaxoniteCoreWebAdmin/wwwroot/css/sax-data.css b/SaxoniteCoreWebAdmin/wwwroot/css/sax-data.css index c4c240e..7ccb301 100644 --- a/SaxoniteCoreWebAdmin/wwwroot/css/sax-data.css +++ b/SaxoniteCoreWebAdmin/wwwroot/css/sax-data.css @@ -155,6 +155,11 @@ font-weight: bold; } +.sax-panel-item > .sax-header ul.nav.sax-burger +{ + margin: 0; +} + .sax-panel-item > .sax-header .sax-action { border-radius: 4px; diff --git a/SaxoniteCoreWebOnline/Localisation/SaxOnlineProperties.resx b/SaxoniteCoreWebOnline/Localisation/SaxOnlineProperties.resx index a3d5fbc..b53558f 100644 --- a/SaxoniteCoreWebOnline/Localisation/SaxOnlineProperties.resx +++ b/SaxoniteCoreWebOnline/Localisation/SaxOnlineProperties.resx @@ -153,6 +153,9 @@ My Sports + + Sport Experience + Activities @@ -243,6 +246,9 @@ Close + + Club + Comment @@ -267,6 +273,9 @@ Delete + + Discipline + Edit @@ -282,12 +291,18 @@ Excellent + + Experience + First name Forgotten password? + + From + Gender @@ -306,6 +321,9 @@ Last name + + League + Location @@ -366,6 +384,9 @@ Current password + + Period + Phone @@ -426,6 +447,9 @@ none selected + + Speciality + Sport @@ -441,9 +465,15 @@ Summary + + Team + Title + + To + Town diff --git a/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Contact.cs b/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Contact.cs index 20e8c74..fb3809c 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Contact.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Contact.cs @@ -120,7 +120,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers if (userAccount == null) { SaLogger.Warn(fn + " Failed to retrieve user account for Id: " + SysId.ToString(SessionData.User.UserAccountId)); - return Json(responseData.SetGoHome(messageTitle, @Localiser.GetJavascriptText("msg.something.gone.wrong"))); + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); } // Logically delete any previous 'Uploaded' Avatar image. @@ -264,12 +264,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers if (userAccount == null) { SaLogger.Warn(fn + " Failed to retrieve user account for Id: " + SysId.ToString(SessionData.User.UserAccountId)); - return Json(responseData.SetGoHome(messageTitle, @Localiser.GetJavascriptText("msg.something.gone.wrong"))); + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); } if (!userAccount.EmailAddress.EqualsCI(SessionData.User.EmailAddress)) { SaLogger.Warn(fn + " Unable to update user account '" + userAccount.EmailAddress + ". Email doesn't match session: " + SessionData.User.EmailAddress); - return Json(responseData.SetGoHome(messageTitle, @Localiser.GetJavascriptText("msg.something.gone.wrong"))); + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); } // Populate user properties. @@ -303,9 +303,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } // Regions. if (model.AccountRegionIdCountry != null) - userAccount.RegionIdCountry = model.AccountRegionIdCountry.ToSysId(); + userAccount.RegionIdCountry = model.ExtractSysId(model.AccountRegionIdCountry); if (model.AccountRegionIdProvince != null) - userAccount.RegionIdProvince = model.AccountRegionIdProvince.ToSysId(); + userAccount.RegionIdProvince = model.ExtractSysId(model.AccountRegionIdProvince); // Update User Account. if (userAccount.Changed) SaLogger.Info(fn + " Updating user account '" + userAccount.EmailAddress + "'. Id: " + SysId.ToString(userAccount.Id), true); diff --git a/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Sports.cs b/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Sports.cs index 3717eee..d108bae 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Sports.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-Sports.cs @@ -157,7 +157,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers RefreshModel(model); // Identify item. - SysId userSportId = model.UserSportId.ToSysId(); + SysId userSportId = model.ExtractSysId(model.UserSportId); if (!SysId.IsValid(userSportId)) return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); @@ -205,7 +205,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers return Json(responseData); // Validate Profile Sport Id against 'Exists' flag. - SysId userSportId = model.UserSportId.ToSysId(); + SysId userSportId = model.ExtractSysId(model.UserSportId); bool profileSportExists = StringUtil.ToBool(model.ProfileSportExists); if (profileSportExists && !SysId.IsValid(userSportId)) { @@ -219,7 +219,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } // Retrieve the sport. - SysId sportId = model.ProfileSportId.ToSysId(); + SysId sportId = model.ExtractSysId(model.ProfileSportId); SaxSport sport = ReferenceMgr.GetSportById(sportId); if (sport == null) { diff --git a/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-UserSportExperience.cs b/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-UserSportExperience.cs new file mode 100644 index 0000000..9e3971e --- /dev/null +++ b/SaxoniteCoreWebOnline/Online/Controllers/AccountController-Ajax-UserSportExperience.cs @@ -0,0 +1,351 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Saxonite.Net.Core.Web.Online.Models; +using Saxonite.Net.Core.Web.Base.App; +using Saxonite.Net.Core.Web.Base.Controllers; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using Saxonite.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Utils; +using Saxonite.Net.Standard.Base.App; +using Microsoft.AspNetCore.Http; +using Sarand.Net.Standard.Base.Helpers; +using System.IO; +using System.Drawing; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; + +namespace Saxonite.Net.Core.Web.Online.Controllers +{ + //======================================================================= + // Online Account Controller - User Sport Experience - Ajax actions. + //======================================================================= + partial class AccountController + { + //------------------------------------------------------------------- + // Common response data. + private class SportExperienceResponseData_List + { + public String Id { get; set; } + public String UserSportId { get; set; } + public String Period { get; set; } + public String PeriodFrom { get; set; } + public String PeriodTo { get; set; } + public String OrganisationName { get; set; } + public String Summary { get; set; } + public String Team { get; set; } + public String League { get; set; } + public String Speciality { get; set; } + // Regions. + public String RegionCaptionNation { get; set; } + public String RegionCaptionProvince { get; set; } + public string RegionRepresentation { get; set; } + } + private class SportExperienceResponseData_Detail : SportExperienceResponseData_List + { + public String PeriodFrom_YMD { get; set; } + public String PeriodTo_YMD { get; set; } + public String OrganisationId { get; set; } + public String RegionIdNation { get; set; } + public String RegionIdProvince { get; set; } + } + private void PopulateSportExperienceResponseData(Model_UserSportExperience model, SportExperienceResponseData_Detail data, SaxUserSportExperience userSportExperience) + { + data.Id = model.EncryptId(userSportExperience.Id); + data.UserSportId = model.EncryptId(userSportExperience.UserSportId); + data.PeriodFrom_YMD = DateUtil.FormatDateForJavascript(userSportExperience.PeriodFrom); + data.PeriodFrom = model.FormatDateForForm(userSportExperience.PeriodFrom); + data.PeriodTo_YMD = DateUtil.FormatDateForJavascript(userSportExperience.PeriodTo); + data.PeriodTo = model.FormatDateForForm(userSportExperience.PeriodTo); + data.Period = data.PeriodFrom + " - " + data.PeriodTo; + data.OrganisationId = model.EncryptId(userSportExperience.OrganisationId); + data.OrganisationName = userSportExperience.OrganisationName; + data.Summary = userSportExperience.Summary; + data.Team = userSportExperience.Team; + data.League = userSportExperience.League; + data.Speciality = userSportExperience.Speciality; + // Regions. + data.RegionIdNation = model.EncryptId(userSportExperience.RegionIdNation); + data.RegionIdProvince = model.EncryptId(userSportExperience.RegionIdProvince); + using (SaxRegion regionNation = Internals.GetRegion(userSportExperience.RegionIdNation)) + using (SaxRegion regionProvince = Internals.GetRegion(userSportExperience.RegionIdProvince)) + { + data.RegionCaptionNation = Localiser.GetRegionName(regionNation); + data.RegionCaptionProvince = Localiser.GetRegionName(regionProvince); + List locations = new List() { data.RegionCaptionProvince, data.RegionCaptionNation }; + data.RegionRepresentation = locations.Concat(", ", "", "", true, true); + } + } + + //------------------------------------------------------------------- + // Utilites. + + //------------------------------------------------------------------- + // User Sport - Get Experience list. + //------------------------------------------------------------------- + private class AjaxResponse_UserSportExperienceList : AjaxResponse_Data + { + // Construction. + public AjaxResponse_UserSportExperienceList(SaxModel_Online model) : base(model) { } + // Contact details. + public List Experiences { get; } = new List(); + } + // Ajax request. + [HttpPost] + [Route("UserSport/Ajax/GetExperienceList")] + public IActionResult GetUserSportExperienceList(Model_UserSportExperience model) + { + String fn = GetType().Name + ".GetUserSportExperienceList"; + AjaxResponse_UserSportExperienceList responseData = new AjaxResponse_UserSportExperienceList(model); + String messageTitle = Localiser["account.caption.profile.sports"]; + + // Validate session and referrer. + if (!ValidReferer) return Forbid(); + if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); + RefreshModel(model); + + // Record disposable items as they are created so all can be disposed when needed. + using (DisposableCollection disposableItems = new DisposableCollection()) + { + // Validate User Sport Id against user account. + SysId userSportId = model.ExtractSysId(model.UserSportId); + SaxUserSport userSport = AccountMgr.GetUserSportById(userSportId); + disposableItems.Add(userSport); + if (userSport == null || !userSport.UserAccountId.Equals(SessionData.User.UserAccountId)) + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); + + // Columns. + ColumnDfn colId = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.Id); + ColumnDfn colUserSportId = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.UserSportId); + ColumnDfn colPeriodFrom = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.PeriodFrom); + ColumnDfn colPeriodTo = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.PeriodTo); + ColumnDfn colOrganisationId = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.OrganisationId); + ColumnDfn colOrganisationName = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.Organisation_Name); + ColumnDfn colSummary = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.Summary); + ColumnDfn colTeam = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.Team); + ColumnDfn colLeague = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.League); + ColumnDfn colSpeciality = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.Speciality); + ColumnDfn colNotes = AccountMgr.GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.Notes); + List columnsToQuery = new List() + { + colId, colUserSportId, colPeriodFrom, colPeriodTo, + colOrganisationId, colOrganisationName, + colSummary, colTeam, colLeague, colSpeciality, colNotes + }; + + // Filter. + SaxUserSportExperience.Params prmUserSportExperience = new SaxUserSportExperience.Params(); + prmUserSportExperience.UserSportIdsIncluded.Add(model.ExtractSysId(model.UserSportId)); + prmUserSportExperience.StatusCat = SaxUserSportExperience.StatusCat.NotDeleted; + + // Sort columns. + colPeriodFrom.SortAscending = false; + prmUserSportExperience.SortColumns.Add(colPeriodFrom); + + // Query items. + using (DbResultSet resultSet = AccountMgr.ExecuteUserSportExperienceQuery(columnsToQuery, prmUserSportExperience)) + { + while (resultSet != null && resultSet.HasRows && resultSet.NextRecord()) + { + NamedValue.Map values = resultSet.GetRecordValues(); + SportExperienceResponseData_List itemData = new SportExperienceResponseData_List() + { + Id = model.EncryptId(new SysId(values.GetLong(colId.DataName))), + UserSportId = model.EncryptId(new SysId(values.GetLong(colUserSportId.DataName))), + PeriodFrom = model.FormatDateForForm(values.GetDate(colPeriodFrom.DataName)), + PeriodTo = model.FormatDateForForm(values.GetDate(colPeriodTo.DataName)), + OrganisationName = AccountMgr.GetUserSportExperienceDataValue(colOrganisationName, values).AsString(), + Summary = values.GetString(colSummary.DataName), + Team = values.GetString(colTeam.DataName), + League = values.GetString(colLeague.DataName), + Speciality = values.GetString(colSpeciality.DataName), + }; + itemData.Period = itemData.PeriodFrom + " - " + itemData.PeriodTo; + responseData.Experiences.Add(itemData); + } + } + } + + // Complete response. + responseData.Success = true; + return Json(responseData); + } + + //------------------------------------------------------------------- + // User Sport - Get Experience. + //------------------------------------------------------------------- + private class AjaxResponse_UserSportExperienceData : AjaxResponse_Data + { + // Construction. + public AjaxResponse_UserSportExperienceData(SaxModel_Online model) : base(model) { } + // Contact details. + public SportExperienceResponseData_Detail Experience { get; set; } + } + // Ajax request. + [HttpPost] + [Route("UserSport/Ajax/GetExperience")] + public IActionResult GetUserSportExperience(Model_UserSportExperience model) + { + String fn = GetType().Name + ".GetUserSportExperience"; + AjaxResponse_UserSportExperienceData responseData = new AjaxResponse_UserSportExperienceData(model); + String messageTitle = Localiser["account.caption.profile.sports"]; + + // Validate session and referrer. + if (!ValidReferer) return Forbid(); + if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); + RefreshModel(model); + + // Record disposable items as they are created so all can be disposed when needed. + using (DisposableCollection disposableItems = new DisposableCollection()) + { + // Validate User Sport Experience Id against user account. + SysId userSportExperienceId = model.ExtractSysId(model.UserSportExperienceId); + SaxUserSportExperience userSportExperience = AccountMgr.GetUserSportExperienceById(userSportExperienceId); + disposableItems.Add(userSportExperience); + SaxUserSport userSport = AccountMgr.GetUserSportById(userSportExperience?.UserSportId ?? null); + disposableItems.Add(userSport); + if (userSportExperience == null || userSport == null || !userSport.UserAccountId.Equals(SessionData.User.UserAccountId)) + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); + + // Populate data to response. + responseData.Experience = new SportExperienceResponseData_Detail(); + PopulateSportExperienceResponseData(model, responseData.Experience, userSportExperience); + } + + // Complete response. + responseData.Success = true; + return Json(responseData); + } + + //------------------------------------------------------------------- + // Account - Store User Sport Experience. + //------------------------------------------------------------------- + private class AjaxResponse_StoreUserSportExperience : AjaxResponse_Data + { + // Construction. + public AjaxResponse_StoreUserSportExperience(SaxModel_Online model) : base(model) { } + // Contact details. + public SportExperienceResponseData_Detail Experience { get; set; } + } + // Ajax request. + [HttpPost] + [Route("UserSport/Ajax/StoreExperience")] + public IActionResult StoreUserSportExperience(Model_UserSportExperience model) + { + String fn = GetType().Name + ".StoreUserSportExperience"; + AjaxResponse_StoreUserSportExperience responseData = new AjaxResponse_StoreUserSportExperience(model); + String messageTitle = Localiser["account.caption.profile.sports"]; + + // Validate session and referrer. + if (!ValidReferer) return Forbid(); + if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); + RefreshModel(model); + + // Record disposable items as they are created so all can be disposed when needed. + using (DisposableCollection disposableItems = new DisposableCollection()) + { + // Validate data. + model.ValidateProfileSportData(responseData); + if (responseData.HasControlErrors()) + return Json(responseData); + + // Validate User Sport Experience Id. + SysId userSportExperienceId = model.ExtractSysId(model.UserSportExperienceId); + if (SysId.IsValid(userSportExperienceId) != StringUtil.ToBool(model.UserSportExperienceExists)) + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); + + // Retrieve User Sport Experience. + SaxUserSportExperience userSportExperience = null; + SaxUserSport userSport = null; + if (SysId.IsValid(userSportExperienceId)) + { + userSportExperience = AccountMgr.GetUserSportExperienceById(userSportExperienceId); + disposableItems.Add(userSportExperience); + userSport = AccountMgr.GetUserSportById(userSportExperience?.UserSportId ?? null); + disposableItems.Add(userSport); + if (userSportExperience == null || userSport == null || !userSport.UserAccountId.Equals(SessionData.User.UserAccountId)) + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); + } + else + { + // Creating new User Sport Experience. + // Retrieve User Sport and validate. + SysId userSportId = model.ExtractSysId(model.UserSportId); + userSport = AccountMgr.GetUserSportById(userSportId); + disposableItems.Add(userSport); + if (userSport == null || !userSport.UserAccountId.Equals(SessionData.User.UserAccountId)) + return Json(responseData.SetGoHome(messageTitle, Localiser["msg.something.gone.wrong"])); + // Create User Sport Experience. + userSportExperience = AccountMgr.CreateUserSportExperience(userSport.Id); + disposableItems.Add(userSportExperience); + } + + // Populate properties. + userSportExperience.Changed = false; + if (model.ExperiencePeriodFrom != null) + userSportExperience.PeriodFrom = model.ParseDateFromForm(model.ExperiencePeriodFrom); + if (model.ExperiencePeriodTo != null) + userSportExperience.PeriodTo = model.ParseDateFromForm(model.ExperiencePeriodTo); + if (model.ExperienceOrganisationId != null) + userSportExperience.OrganisationId = model.ExtractSysId(model.ExperienceOrganisationId); + if (model.ExperienceOrganisationName != null) + userSportExperience.OrganisationName = model.ExperienceOrganisationName; + if (model.ExperienceSummary != null) + userSportExperience.Summary = model.ExperienceSummary; + if (model.ExperienceTeam != null) + userSportExperience.Team = model.ExperienceTeam; + if (model.ExperienceLeague != null) + userSportExperience.League = model.ExperienceLeague; + if (model.ExperienceSpeciality != null) + userSportExperience.Speciality = model.ExperienceSpeciality; + // Regions. + if (model.ExperienceRegionIdNation != null) + userSportExperience.RegionIdNation = model.ExtractSysId(model.ExperienceRegionIdNation); + if (model.ExperienceRegionIdProvince != null) + userSportExperience.RegionIdProvince = model.ExtractSysId(model.ExperienceRegionIdProvince); + + // Store Experience. + if (!SysId.IsValid(userSportExperience.Id)) + { + if (AccountMgr.InsertUserSportExperience(userSportExperience, DbUpdateInfo)) + { + responseData.SetNotification(messageTitle, Localiser["msg.item.created"]); + } + else + { + SaLogger.Warn(fn + " Failed to insert user sport experience: " + AccountMgr.ErrorStateMessage); + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"])); + } + } + else + { + if (AccountMgr.UpdateUserSportExperience(userSportExperience, DbUpdateInfo)) + { + responseData.SetNotification(messageTitle, Localiser["msg.item.updated"]); + } + else + { + SaLogger.Warn(fn + " Failed to update user sport experience: " + AccountMgr.ErrorStateMessage); + return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"])); + } + } + + // Populate data to response. + responseData.Experience = new SportExperienceResponseData_Detail(); + PopulateSportExperienceResponseData(model, responseData.Experience, userSportExperience); + } + + // Complete response. + responseData.Success = true; + return Json(responseData); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs b/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs index 211ec48..e3d3412 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs @@ -220,7 +220,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Identify activity. Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType); - SysId itemId = model.ActivityIdx.ToSysId(); + SysId itemId = model.ExtractSysId(model.ActivityIdx); if (itemType <= 0 || !SysId.IsValid(itemId)) { SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix()); @@ -288,7 +288,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Identify activity. Sax.DataItemType itemType = (Sax.DataItemType)StringUtil.ToShort(model.ActivityType); - SysId itemId = model.ActivityIdx.ToSysId(); + SysId itemId = model.ExtractSysId(model.ActivityIdx); if (itemType <= 0 || !SysId.IsValid(itemId)) { SaLogger.Warn(fn + " Activity type/Id inncorrectly specified." + GetLogSuffix()); diff --git a/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs b/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs index c43c84e..2fb8446 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs @@ -261,7 +261,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers RefreshModel(model); // Identify item. - SysId articleId = model.ArticleId.ToSysId(); + SysId articleId = model.ExtractSysId(model.ArticleId); if (!SysId.IsValid(articleId)) return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); @@ -351,7 +351,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Image belongs to the article. // If the article doesn't yet exist, it will need to be uploaded to the user first and later transferred. - SysId articleId = model.ArticleId.ToSysId(); + SysId articleId = model.ExtractSysId(model.ArticleId); ItemId articleItemId = new ItemId((short)Sax.DataItemType.Article, articleId); ItemId userItemId = new ItemId((short)Sax.DataItemType.UserAccount, sessionData.User.UserAccountId); ItemId imageItemId = SysId.IsValid(articleId) ? articleItemId : userItemId; @@ -467,7 +467,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } // Validate item Id against 'Exists' flag. - SysId articleId = model.ArticleId.ToSysId(); + SysId articleId = model.ExtractSysId(model.ArticleId); bool articleExists = StringUtil.ToBool(model.ArticleExists); if (articleExists && !SysId.IsValid(articleId)) { @@ -508,9 +508,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Populate item properties. if (model.ArticleRegionId != null) - article.RegionIdPrimary = model.ArticleRegionId.ToSysId(); + article.RegionIdPrimary = model.ExtractSysId(model.ArticleRegionId); if (model.ArticleSportId != null) - article.SportIdPrimary = model.ArticleSportId.ToSysId(); + article.SportIdPrimary = model.ExtractSysId(model.ArticleSportId); if (model.ArticleHeadline != null) article.Headline = model.ArticleHeadline; if (model.ArticleSummary != null) @@ -558,7 +558,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } else if (!StringUtil.IsEmpty(segmentItemImageId) || !StringUtil.IsEmpty(segmentImageIdx)) { - SysId itemImageId = segmentItemImageId.ToSysId(); + SysId itemImageId = model.ExtractSysId(segmentItemImageId); int imageIdx = StringUtil.ToInt(segmentImageIdx); // Check for new image first. diff --git a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Members.cs b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Members.cs index 764908a..3447e13 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Members.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Members.cs @@ -105,7 +105,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers RefreshModel(model); // Organisation. - SysId organisationId = model.Filter.OrganisationId.ToSysId(); + SysId organisationId = model.ExtractSysId(model.Filter.OrganisationId); SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId); if (organisation == null || !organisation.IsStatusActive) { @@ -178,7 +178,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers StatusCode = values.GetString(colUserStatus.DataName), StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colUserStatus.DataName)) }; - if (memberData.UserAccountId.ToSysId().Equals(SessionData.User.UserAccountId)) memberData.CurrentUser = true; + if (model.ExtractSysId(memberData.UserAccountId).Equals(SessionData.User.UserAccountId)) memberData.CurrentUser = true; String memberRoleCodes = values.GetString(colOrganisationRoleCodes.DataName); foreach (String memberRoleCode in StringListUtil.Split(memberRoleCodes, SaxUserOrganisation.UserOrgnisationRoleDelim)) { @@ -226,7 +226,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers RefreshModel(model); // Identify item. - SysId memberId = model.MemberId.ToSysId(); + SysId memberId = model.ExtractSysId(model.MemberId); if (!SysId.IsValid(memberId)) return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); @@ -314,7 +314,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers //--------------------------------------------------------------- // Validate Member against Id against 'Exists' flag. - SysId memberId = model.MemberId.ToSysId(); + SysId memberId = model.ExtractSysId(model.MemberId); bool memberExists = StringUtil.ToBool(model.MemberExists); if (memberExists && !SysId.IsValid(memberId)) { @@ -341,7 +341,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } // Validate the Organisation. - SysId organisationId = userOrganisation != null ? userOrganisation.OrganisationId : model.MemberOrganisationId.ToSysId(); + SysId organisationId = userOrganisation != null ? userOrganisation.OrganisationId : model.ExtractSysId(model.MemberOrganisationId); if (!SysId.IsValid(organisationId)) { SaLogger.Warn(fn + " Organisation Id not specified for Member."); @@ -529,7 +529,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers { // Retrieve User Organisation [MemberId). - SysId userOrganisationId = model.MemberId.ToSysId(); + SysId userOrganisationId = model.ExtractSysId(model.MemberId); SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(userOrganisationId); disposableItems.Add(userOrganisation); if (userOrganisation == null || !userOrganisation.IsStatusActive) @@ -645,7 +645,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers { // Retrieve User Organisation [MemberId). - SysId userOrganisationId = model.MemberId.ToSysId(); + SysId userOrganisationId = model.ExtractSysId(model.MemberId); SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(userOrganisationId); disposableItems.Add(userOrganisation); if (userOrganisation == null || !userOrganisation.IsStatusActive) diff --git a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Opportunities.cs b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Opportunities.cs index d582630..bb9b1f6 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Opportunities.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Opportunities.cs @@ -32,7 +32,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers public String PublishedOnFmt { get; set; } public String ExpiresOnFmt { get; set; } } - private class OpportunityData_Full : OpportunityData_List + private class OpportunityData_Detail : OpportunityData_List { public String RegionIdPrimary { get; set; } public String SportIdPrimary { get; set; } @@ -54,7 +54,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers data.StatusCode = opportunity.StatusCode; data.StatusDesc = opportunity.StatusDesc; } - private void PopulateOpportunityResponseData(Model_Organisation_Opportunities model, SaxOrganisationOpportunity opportunity, OpportunityData_Full data) + private void PopulateOpportunityResponseData(Model_Organisation_Opportunities model, SaxOrganisationOpportunity opportunity, OpportunityData_Detail data) { PopulateOpportunityResponseData(model, opportunity, data as OpportunityData_List); data.RegionIdPrimary = SysId.ToString(opportunity.RegionIdPrimary); @@ -97,7 +97,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers RefreshModel(model); // Organisation. - SysId organisationId = model.Filter.OrganisationId.ToSysId(); + SysId organisationId = model.ExtractSysId(model.Filter.OrganisationId); using (SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId)) { if (organisation == null || !organisation.IsStatusActive) @@ -205,7 +205,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Construction. public AjaxResponse_Opportunity(SaxModel_Online model) : base(model) { } // Opportunity details. - public OpportunityData_Full Opportunity { get; } = new OpportunityData_Full(); + public OpportunityData_Detail Opportunity { get; } = new OpportunityData_Detail(); } //------------------------------------------------------------------- [HttpPost] @@ -222,7 +222,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers RefreshModel(model); // Identify item. - SysId opportunityId = model.OpportunityId.ToSysId(); + SysId opportunityId = model.ExtractSysId(model.OpportunityId); if (!SysId.IsValid(opportunityId)) return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); @@ -279,7 +279,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers return Json(responseData); // Validate Opportunity against Id against 'Exists' flag. - SysId opportunityId = model.OpportunityId.ToSysId(); + SysId opportunityId = model.ExtractSysId(model.OpportunityId); bool opportunityExists = StringUtil.ToBool(model.OpportunityExists); if (opportunityExists && !SysId.IsValid(opportunityId)) { @@ -306,7 +306,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } // Validate the Organisation. - SysId organisationId = model.OpportunityOrganisationId.ToSysId(); + SysId organisationId = model.ExtractSysId(model.OpportunityOrganisationId); if (!SysId.IsValid(organisationId)) { SaLogger.Warn(fn + " Organisation Id not specified for Opportunity."); @@ -341,9 +341,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Populate item properties. if (model.OpportunityRegionId != null) - opportunity.RegionIdPrimary = model.OpportunityRegionId.ToSysId(); + opportunity.RegionIdPrimary = model.ExtractSysId(model.OpportunityRegionId); if (model.OpportunitySportId != null) - opportunity.SportIdPrimary = model.OpportunitySportId.ToSysId(); + opportunity.SportIdPrimary = model.ExtractSysId(model.OpportunitySportId); if (model.OpportunityTypeCode != null) opportunity.OpportunityType = (Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(model.OpportunityTypeCode); if (model.OpportunityPosition != null) diff --git a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Request.cs b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Request.cs index e6ac2bc..509e6cf 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Request.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax-Request.cs @@ -48,14 +48,16 @@ namespace Saxonite.Net.Core.Web.Online.Controllers return Json(responseData); // Check Regions. - SaxRegion regionCountry = Internals.GetRegion(model.OrganisationRegionIdCountry.ToSysId()); - if (SysId.IsValid(model.OrganisationRegionIdCountry.ToSysId()) && regionCountry == null) + SysId regionIdCountry = model.ExtractSysId(model.OrganisationRegionIdCountry); + SaxRegion regionCountry = Internals.GetRegion(regionIdCountry); + if (SysId.IsValid(regionIdCountry) && regionCountry == null) { SaLogger.Warn(fn + " Country region not found. Id: " + model.OrganisationRegionIdCountry + ". " + GetLogSuffix()); return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"])); } - SaxRegion regionProvince = Internals.GetRegion(model.OrganisationAddressRegionIdProvince.ToSysId()); - if (SysId.IsValid(model.OrganisationAddressRegionIdProvince.ToSysId()) && regionProvince == null) + SysId regionIdAddressProvince= model.ExtractSysId(model.OrganisationAddressRegionIdProvince); + SaxRegion regionProvince = Internals.GetRegion(regionIdAddressProvince); + if (SysId.IsValid(regionIdAddressProvince) && regionProvince == null) { SaLogger.Warn(fn + " Province region not found. Id: " + model.OrganisationAddressRegionIdProvince + ". " + GetLogSuffix()); return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"])); @@ -102,17 +104,18 @@ namespace Saxonite.Net.Core.Web.Online.Controllers } } - if (SysId.IsValid(model.OrganisationSportId.ToSysId())) + SysId organisationSportId = model.ExtractSysId(model.OrganisationSportId); + if (SysId.IsValid(organisationSportId)) { // Add User Sport if not already present. // NB This will also reactivate an inactive or deleted User Sport. SaxUserSport.Params prmUserSport = new SaxUserSport.Params(); prmUserSport.UserAccountIdsIncluded.Add(userAccount.Id); - prmUserSport.SportIdsIncluded.Add(model.OrganisationSportId.ToSysId()); + prmUserSport.SportIdsIncluded.Add(organisationSportId); prmUserSport.StatusCat = SaxUserSport.StatusCat.Any; SaxUserSport userSport = AccountMgr.GetUserSport(prmUserSport); if (userSport == null) - userSport = AccountMgr.CreateUserSport(userAccount.Id, model.OrganisationSportId.ToSysId()); + userSport = AccountMgr.CreateUserSport(userAccount.Id, organisationSportId); userSport.Status = SaxUserSport.DefaultStatus; if (!SysId.IsValid(userSport.Id)) { @@ -137,8 +140,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers organisation.Name = model.OrganisationName; organisation.OrganisationType = model.GetOrganisationType(); organisation.OrganisationCategory = model.GetOrganisationCategory(); - organisation.SportIdPrimary = model.OrganisationSportId.ToSysId(); - organisation.RegionIdPrimary = model.OrganisationRegionIdCountry.ToSysId(); + organisation.SportIdPrimary = organisationSportId; + organisation.RegionIdPrimary = model.ExtractSysId(model.OrganisationRegionIdCountry); organisation.PhoneMain = model.OrganisationPhoneMain; organisation.Status = SaStatus.Awaiting; if (!AccountMgr.InsertOrganisation(organisation, DbUpdateInfo)) @@ -163,7 +166,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers organisationAddress.Line3 = model.OrganisationAddressLine3; organisationAddress.Town = model.OrganisationAddressTown; organisationAddress.Province = model.OrganisationAddressProvince; - organisationAddress.RegionIdProvince = model.OrganisationAddressRegionIdProvince.ToSysId(); + organisationAddress.RegionIdProvince = model.ExtractSysId(model.OrganisationAddressRegionIdProvince); if (SysId.IsValid(regionCountry.Id)) { organisationAddress.Country = regionCountry.Name; diff --git a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax.cs b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax.cs index 6faba77..c218bcc 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/OrganisationController-Ajax.cs @@ -73,8 +73,8 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Organisation filter. SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params(); prmOrganisation.OrganisationFilter = model.Filter.Organisation; - prmOrganisation.RegionIdsIncluded.AddId(model.Filter.RegionId.ToSysId()); - prmOrganisation.SportIdsIncluded.AddId(model.Filter.SportId.ToSysId()); + prmOrganisation.RegionIdsIncluded.AddId(model.ExtractSysId(model.Filter.RegionId)); + prmOrganisation.SportIdsIncluded.AddId(model.ExtractSysId(model.Filter.SportId)); prmOrganisation.StatusCat = SaxOrganisation.StatusCat.ActiveOnly; prmOrganisation.SortColumns.Add(colOrganisationName); model.Paging.ItemTotal = (ulong)AccountMgr.GetOrganisationCount(prmOrganisation); diff --git a/SaxoniteCoreWebOnline/Online/Models/Model_Account.cs b/SaxoniteCoreWebOnline/Online/Models/Model_Account.cs index b1b9507..2ea9cac 100644 --- a/SaxoniteCoreWebOnline/Online/Models/Model_Account.cs +++ b/SaxoniteCoreWebOnline/Online/Models/Model_Account.cs @@ -25,6 +25,10 @@ namespace Saxonite.Net.Core.Web.Online.Models { AdditionalFiles_CSS.Add("css/sax-account.css"); AdditionalFiles_JS.Add("js/sax-account.js"); + AdditionalFiles_JS.Add("js/sax-usr-pro.js"); + AdditionalFiles_JS.Add("js/sax-usr-spt.js"); + AdditionalFiles_JS.Add("js/sax-usr-spt-exp.js"); + AdditionalFiles_JS.Add("js/sax-usr-org.js"); } //------------------------------------------------------------------- @@ -128,9 +132,10 @@ namespace Saxonite.Net.Core.Web.Online.Models //--------------------------------------------------------------- // Country Region. - if (AccountRegionIdCountry != null && SysId.IsValid(AccountRegionIdCountry.ToSysId())) + SysId regionIdCountry = ExtractSysId(AccountRegionIdCountry); + if (AccountRegionIdCountry != null && SysId.IsValid(regionIdCountry)) { - SaxRegion regionCountry = Internals.GetRegion(AccountRegionIdCountry.ToSysId()); + SaxRegion regionCountry = Internals.GetRegion(regionIdCountry); if (regionCountry == null) responseData.SetControlError(nameof(AccountRegionIdCountry), Localiser["msg.validation.invalid.value"]); } @@ -138,7 +143,8 @@ namespace Saxonite.Net.Core.Web.Online.Models // Province Region. if (AccountRegionIdProvince != null) { - SaxRegion regionProvince = Internals.GetRegion(AccountRegionIdProvince.ToSysId()); + SysId regionIdProvince = ExtractSysId(AccountRegionIdProvince); + SaxRegion regionProvince = Internals.GetRegion(regionIdProvince); if (regionProvince == null) responseData.SetControlError(nameof(AccountRegionIdProvince), Localiser["msg.validation.invalid.value"]); } @@ -152,7 +158,7 @@ namespace Saxonite.Net.Core.Web.Online.Models // Sport. if (ProfileSportId != null) { - SysId profileSportId = ProfileSportId.ToSysId(); + SysId profileSportId = ExtractSysId(ProfileSportId); if (!SysId.IsValid(profileSportId)) responseData.SetControlError(nameof(ProfileSportId), Localiser["msg.validation.mandatory.value"]); } diff --git a/SaxoniteCoreWebOnline/Online/Models/Model_Article.cs b/SaxoniteCoreWebOnline/Online/Models/Model_Article.cs index 6cd015b..e50ab2d 100644 --- a/SaxoniteCoreWebOnline/Online/Models/Model_Article.cs +++ b/SaxoniteCoreWebOnline/Online/Models/Model_Article.cs @@ -108,7 +108,7 @@ namespace Saxonite.Net.Core.Web.Online.Models // Article sport. if (ArticleSportId != null) { - SysId articleSportId = ArticleSportId.ToSysId(); + SysId articleSportId = ExtractSysId(ArticleSportId); if (!SysId.IsValid(articleSportId)) responseData.SetControlError(nameof(ArticleSportId), Localiser["msg.validation.mandatory.value"]); } @@ -116,7 +116,7 @@ namespace Saxonite.Net.Core.Web.Online.Models // Article region. if (ArticleRegionId != null) { - SysId articleRegionId = ArticleRegionId.ToSysId(); + SysId articleRegionId = ExtractSysId(ArticleRegionId); if (!SysId.IsValid(articleRegionId)) responseData.SetControlError(nameof(ArticleRegionId), Localiser["msg.validation.mandatory.value"]); } diff --git a/SaxoniteCoreWebOnline/Online/Models/Model_Organisation.cs b/SaxoniteCoreWebOnline/Online/Models/Model_Organisation.cs index 8a55dd5..5e37684 100644 --- a/SaxoniteCoreWebOnline/Online/Models/Model_Organisation.cs +++ b/SaxoniteCoreWebOnline/Online/Models/Model_Organisation.cs @@ -107,12 +107,12 @@ namespace Saxonite.Net.Core.Web.Online.Models responseData.SetControlError(nameof(OrganisationName), Localiser["msg.validation.mandatory.value"]); else if (StringUtil.GetLength(OrganisationName) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Organisation_Name)) responseData.SetControlError(nameof(OrganisationName), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Organisation_Name)]); - else if (SysId.IsValid(OrganisationRegionIdCountry.ToSysId())) + else if (SysId.IsValid(ExtractSysId(OrganisationRegionIdCountry))) { // Ensure that the organisation name is unique within the country. SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params(); prmOrganisation.NameFull = OrganisationName; - prmOrganisation.RegionIdsIncluded.Add(OrganisationRegionIdCountry.ToSysId()); + prmOrganisation.RegionIdsIncluded.Add(ExtractSysId(OrganisationRegionIdCountry)); prmOrganisation.StatusCat = SaxOrganisation.StatusCat.Any; if (AccountMgr.GetOrganisationCount(prmOrganisation) > 0) responseData.SetControlError(nameof(OrganisationName), Localiser["msg.validation.duplicate.value"]); @@ -129,13 +129,13 @@ namespace Saxonite.Net.Core.Web.Online.Models // Organisation Sport - mandatory for certain organisation categories. if (StringUtil.IsEmpty(OrganisationSportId) && SaxOrganisation.IsSportMandatory(GetOrganisationCategory())) responseData.SetControlError(nameof(OrganisationSportId), Localiser["msg.validation.mandatory.value"]); - else if (!StringUtil.IsEmpty(OrganisationSportId) && !SysId.IsValid(OrganisationSportId.ToSysId())) + else if (!StringUtil.IsEmpty(OrganisationSportId) && !SysId.IsValid(ExtractSysId(OrganisationSportId))) responseData.SetControlError(nameof(OrganisationSportId), Localiser["msg.validation.invalid.value"]); // Organisation Region Country - mandatory. if (StringUtil.IsEmpty(OrganisationRegionIdCountry)) responseData.SetControlError(nameof(OrganisationRegionIdCountry), Localiser["msg.validation.mandatory.value"]); - else if (!SysId.IsValid(OrganisationRegionIdCountry.ToSysId())) + else if (!SysId.IsValid(ExtractSysId(OrganisationRegionIdCountry))) responseData.SetControlError(nameof(OrganisationRegionIdCountry), Localiser["msg.validation.invalid.value"]); // Organisation Address Line 1 - mandatory. diff --git a/SaxoniteCoreWebOnline/Online/Models/Model_Organisation_Opportunities.cs b/SaxoniteCoreWebOnline/Online/Models/Model_Organisation_Opportunities.cs index f35cf20..5841266 100644 --- a/SaxoniteCoreWebOnline/Online/Models/Model_Organisation_Opportunities.cs +++ b/SaxoniteCoreWebOnline/Online/Models/Model_Organisation_Opportunities.cs @@ -88,7 +88,7 @@ namespace Saxonite.Net.Core.Web.Online.Models // Opportunity sport. if (OpportunitySportId != null) { - SysId articleSportId = OpportunitySportId.ToSysId(); + SysId articleSportId = ExtractSysId(OpportunitySportId); if (!SysId.IsValid(articleSportId)) responseData.SetControlError(nameof(OpportunitySportId), Localiser["msg.validation.mandatory.value"]); } @@ -96,7 +96,7 @@ namespace Saxonite.Net.Core.Web.Online.Models // Opportunity region. if (OpportunityRegionId != null) { - SysId articleRegionId = OpportunityRegionId.ToSysId(); + SysId articleRegionId = ExtractSysId(OpportunityRegionId); if (!SysId.IsValid(articleRegionId)) responseData.SetControlError(nameof(OpportunityRegionId), Localiser["msg.validation.mandatory.value"]); } diff --git a/SaxoniteCoreWebOnline/Online/Models/Model_UserSportExperience.cs b/SaxoniteCoreWebOnline/Online/Models/Model_UserSportExperience.cs new file mode 100644 index 0000000..e181268 --- /dev/null +++ b/SaxoniteCoreWebOnline/Online/Models/Model_UserSportExperience.cs @@ -0,0 +1,117 @@ +using Microsoft.AspNetCore.Http; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using Saxonite.Base.App; +using Saxonite.Net.Core.Web.Base.App; +using Saxonite.Net.Core.Web.Base.Controllers; +using Saxonite.Net.Core.Web.Base.Models; +using Saxonite.Net.Standard.Base.App; +using Saxonite.Net.Standard.Base.Bus; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Saxonite.Net.Core.Web.Online.Models +{ + //======================================================================= + public class Model_UserSportExperience : SaxModel_Online + { + //------------------------------------------------------------------- + // Construction. + public Model_UserSportExperience(SaxLocaliser localiser) : + base(localiser) + { + } + + //------------------------------------------------------------------- + // User Sports Experience Properties. + public String UserSportExperienceId { get; set; } + public String UserSportExperienceExists { get; set; } + public String UserSportId { get; set; } + public String ExperiencePeriodFrom { get; set; } + public String ExperiencePeriodTo { get; set; } + public String ExperienceOrganisationId { get; set; } + public String ExperienceOrganisationName { get; set; } + public String ExperienceSummary { get; set; } + public String ExperienceTeam { get; set; } + public String ExperienceLeague { get; set; } + public String ExperienceSpeciality { get; set; } + // Regions. + public String ExperienceRegionIdNation { get; set; } + public String ExperienceRegionIdProvince { get; set; } + + //------------------------------------------------------------------- + // Validate User Sport Experience data. + public bool ValidateProfileSportData(SaxController_Base.AjaxResponse_Data responseData) + { + // Period dates. + DateTime periodFrom = ParseDateFromForm(ExperiencePeriodFrom); + DateTime periodTo = ParseDateFromForm(ExperiencePeriodTo); + + // Period From. + if (ExperiencePeriodFrom != null) + { + // Period from date is mandatory. + if (!DateUtil.IsValid(periodFrom)) + responseData.SetControlError(nameof(ExperiencePeriodFrom), Localiser["msg.validation.invalid.value"]); + } + + // Period To. + if (ExperiencePeriodTo != null) + { + // Period to date is optional must not be before the from date. + if (DateUtil.IsValid(periodTo) && DateUtil.IsValid(periodFrom) && periodTo.CompareTo(periodFrom) < 0) + responseData.SetControlError(nameof(ExperiencePeriodTo), Localiser["msg.validation.invalid.value"]); + } + + // Organisation name. + if (ExperienceOrganisationName != null) + { + responseData.SetControlValue(nameof(ExperienceOrganisationName), ExperienceOrganisationName); + if (StringUtil.GetLength(ExperienceOrganisationName) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName)) + responseData.SetControlError(nameof(ExperienceOrganisationName), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName)]); + } + + // Summary. + if (ExperienceSummary != null) + { + responseData.SetControlValue(nameof(ExperienceSummary), ExperienceSummary); + if (StringUtil.IsEmpty(ExperienceSummary)) + responseData.SetControlError(nameof(ExperienceSummary), Localiser["msg.validation.mandatory.value"]); + else if (StringUtil.GetLength(ExperienceSummary) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary)) + responseData.SetControlError(nameof(ExperienceSummary), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary)]); + } + + // Team. + if (ExperienceTeam != null) + { + responseData.SetControlValue(nameof(ExperienceTeam), ExperienceTeam); + if (StringUtil.GetLength(ExperienceTeam) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team)) + responseData.SetControlError(nameof(ExperienceTeam), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team)]); + } + + // League. + if (ExperienceLeague != null) + { + responseData.SetControlValue(nameof(ExperienceLeague), ExperienceLeague); + if (StringUtil.GetLength(ExperienceLeague) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_League)) + responseData.SetControlError(nameof(ExperienceLeague), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_League)]); + } + + // Speciality. + if (ExperienceSpeciality != null) + { + responseData.SetControlValue(nameof(ExperienceSpeciality), ExperienceSpeciality); + if (StringUtil.GetLength(ExperienceSpeciality) > GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality)) + responseData.SetControlError(nameof(ExperienceSpeciality), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality)]); + } + + return !responseData.HasControlErrors(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaxoniteCoreWebOnline/Online/Models/SaxModel_Online.cs b/SaxoniteCoreWebOnline/Online/Models/SaxModel_Online.cs index 1534f71..d8f611e 100644 --- a/SaxoniteCoreWebOnline/Online/Models/SaxModel_Online.cs +++ b/SaxoniteCoreWebOnline/Online/Models/SaxModel_Online.cs @@ -131,9 +131,11 @@ namespace Saxonite.Net.Core.Web.Online.Models idObfuscationParams.Add(ParamName_IdObfuscation_Id, SysId.ToString(id)); return SaxController_Base.EncryptParameters(idObfuscationParams, Base64IV_IdObfuscation, Base64Key_IdObfuscation); } - public SysId DecryptId(String encryptedParams) + public SysId DecryptId(String encryptedId) { - NameValueCollection idObfuscationParams = SaxController_Base.DecryptParameters(encryptedParams, Base64IV_IdObfuscation, Base64Key_IdObfuscation); + if (StringUtil.IsNumeric(encryptedId)) + return encryptedId.ToSysId(); + NameValueCollection idObfuscationParams = SaxController_Base.DecryptParameters(encryptedId, Base64IV_IdObfuscation, Base64Key_IdObfuscation); return idObfuscationParams.Get(ParamName_IdObfuscation_Id).ToSysId(); } diff --git a/SaxoniteCoreWebOnline/Views/Account/Profile-Contact.cshtml b/SaxoniteCoreWebOnline/Views/Account/Profile-Contact.cshtml index 41b2fca..83bac52 100644 --- a/SaxoniteCoreWebOnline/Views/Account/Profile-Contact.cshtml +++ b/SaxoniteCoreWebOnline/Views/Account/Profile-Contact.cshtml @@ -261,7 +261,7 @@ @Localiser["label.cancel"] - @Localiser["label.save"] + @Localiser["label.save"] } diff --git a/SaxoniteCoreWebOnline/Views/Account/Profile-SportExperiences.cshtml b/SaxoniteCoreWebOnline/Views/Account/Profile-SportExperiences.cshtml new file mode 100644 index 0000000..446a01c --- /dev/null +++ b/SaxoniteCoreWebOnline/Views/Account/Profile-SportExperiences.cshtml @@ -0,0 +1,229 @@ +@model SaxModel_Online +@inject SaxLocaliser Localiser +@* Sport Experience panel - list experience for sport *@ + + + + + @Localiser["account.caption.profile.sports.experience"] - + + @* Burger menu *@ + + + + + @(Localiser["label.add"]) + + + + @* Filter item templates *@ + + @* Filter Burger dropdown template - ul is ignored *@ + + ... + + + + + + + + + + + + + + + + + + + @* Burger menu *@ + + + + + + + + + + + + + + + + + + + + @* Filter Burger dropdown template - ul is ignored *@ + + ... + + + + + @* Action buttons *@ + + + @Localiser["label.close"] + + + + + + + +@using (Html.BeginForm(FormMethod.Post, new { @id = "frmSportExperienceId", @class = "sax-form", @onSubmit = "return false;" })) +{ + +} + + + + + + @using (Html.BeginForm(FormMethod.Post, new { @id = "frmSportExperience", @class = "sax-form", @onSubmit = "return false;" })) + { + + + + + @* Period *@ + + + + + @Localiser["label.period"] + + + + + + + @* Period From *@ + + + @Localiser["label.from"] * + + + + + + + + + + @* Period To *@ + + + @Localiser["label.to"] + + + + + + + + + + + + + @* Summary *@ + + + + + @Localiser["label.summary"] * + + + + + + + + + + + + @* Organisation *@ + + + + + @Localiser["label.club"] + + + + + + + + + + + + @* Speciality *@ + + + + + @Localiser["label.speciality"] + + + + + + + + + + + + @* Team *@ + + + + + @Localiser["label.team"] + + + + + + + + + + + + @* League *@ + + + + + @Localiser["label.league"] + + + + + + + + + + + + } + + + + + + diff --git a/SaxoniteCoreWebOnline/Views/Account/Profile-Sports.cshtml b/SaxoniteCoreWebOnline/Views/Account/Profile-Sports.cshtml index bbe0da7..0156ab7 100644 --- a/SaxoniteCoreWebOnline/Views/Account/Profile-Sports.cshtml +++ b/SaxoniteCoreWebOnline/Views/Account/Profile-Sports.cshtml @@ -20,7 +20,7 @@ @* Filter item templates *@ - @* Burger dropdown item template - ul is ignored *@ + @* Filter Burger dropdown template - ul is ignored *@ ... @@ -34,7 +34,9 @@ + @* Item templates *@ + @* Sport template *@ @@ -45,6 +47,7 @@ @(Localiser["label.update"]) + @(Localiser["label.experience"]) @@ -57,14 +60,20 @@ + @* Sport Burger dropdown template - ul is ignored *@ + + ... + - @using (Html.BeginForm(FormMethod.Post, new { @id = "frmProfileSportId", @class = "sax-form", @onSubmit = "return false;" })) - { - @Html.HiddenFor(model => model.UserSportId, new { @id = "", @class = "UserSportId" }) - } + + +@using (Html.BeginForm(FormMethod.Post, new { @id = "frmProfileSportId", @class = "sax-form", @onSubmit = "return false;" })) +{ + @Html.HiddenFor(model => model.UserSportId, new { @id = "", @class = "UserSportId" }) +} @@ -111,5 +120,3 @@ } - - diff --git a/SaxoniteCoreWebOnline/Views/Account/Profile.cshtml b/SaxoniteCoreWebOnline/Views/Account/Profile.cshtml index 44f6780..6a7d6f1 100644 --- a/SaxoniteCoreWebOnline/Views/Account/Profile.cshtml +++ b/SaxoniteCoreWebOnline/Views/Account/Profile.cshtml @@ -16,23 +16,27 @@ + + diff --git a/SaxoniteCoreWebOnline/wwwroot/css/sax-data.css b/SaxoniteCoreWebOnline/wwwroot/css/sax-data.css index 4ab6781..c60a024 100644 --- a/SaxoniteCoreWebOnline/wwwroot/css/sax-data.css +++ b/SaxoniteCoreWebOnline/wwwroot/css/sax-data.css @@ -154,6 +154,11 @@ font-weight: bold; } +.sax-panel-item > .sax-header ul.nav.sax-burger +{ + margin: 0; +} + .sax-panel-item > .sax-header .dropdown-menu { padding: 4px 8px; diff --git a/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css b/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css index 259d4c0..7c4bd62 100644 --- a/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css +++ b/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css @@ -178,6 +178,7 @@ .sax-form .sax-input.sax-calendar { + width:80%; max-width: 180px; } diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-account.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-account.js index 06f67d9..07639f4 100644 --- a/SaxoniteCoreWebOnline/wwwroot/js/sax-account.js +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-account.js @@ -17,339 +17,6 @@ setTimeout(sax.refreshProfileOrganisationsInfo, 50); } - //-------------------------------------------------------------- - sax.refreshProfileContactInfo = function () - { - var $section = $('.sax-panel-section.ProfileContact'); - $section.removeClass('sax-edit').addClass('sax-populating'); - $('.sax-property', $section).hide(); - sax.showDataRefreshingMsg($section); - sax.refreshProfileContact(sax.onRefreshProfileContactInfo); - } - sax.refreshProfileContactForm = function () - { - if (!sax.closeEditPanels()) return; - sax.refreshProfileContact(sax.onRefreshProfileContactForm); - } - sax.refreshProfileContact = function (callbackFn) - { - delete sax.page.profileContactChanged; - sax.ajax.profileContact = sax.ajax.profileContact || { url: sax.url.base + 'Account/Ajax/GetProfileContact', formId: 'frmNavigate', noWaitIcon: true }; - sax.ajax.profileContact.callbackFn = callbackFn; - sax.doAjaxRequest(sax.ajax.profileContact, 50); - } - sax.onRefreshProfileContactInfo = function (response) - { - sax.debug('onRefreshProfileContactInfo', response); - if (!response || !response.success || !response.contact) return; - $('.sax-panel-section').show(); - var $section = $('.sax-panel-section.ProfileContact'); - $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); - $('.sax-value', $section).empty(); - sax.refreshInfo($section, 'AccountEmailAddress', response.contact.emailAddress); - sax.refreshInfo($section, 'AccountName', response.contact.displayName); - sax.refreshInfo($section, 'AccountLocation', response.contact.locationCaption); - $('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime()); - sax.showNoInfoMsg($section); - $section.removeClass('sax-populating'); - } - sax.onRefreshProfileContactForm = function (response) - { - //sax.debug('onRefreshProfileContactForm', response); - if (!response || !response.success) return; - sax.data.genders = response.genders; - sax.data.months = response.months; - $('.sax-panel-section').hide(); - var $section = $('.sax-panel-section.ProfileContact').show(); - $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); - sax.refreshInput($section, 'AccountEmailAddress', response.contact.emailAddress); - sax.refreshSelect($section, 'AccountTitle', response.contact.title); - sax.refreshInput($section, 'AccountFirstName', response.contact.firstName); - sax.refreshInput($section, 'AccountLastName', response.contact.lastName); - let $selGender = $('#cbAccountGender'); - if (response.genders && response.genders.length) - sax.populateSelectCodeDesc($('#cbAccountGender'), response.genders); - sax.refreshSelect($section, 'AccountGender', response.contact.gender || ''); - sax.refreshDob(); - sax.refreshSelect($section, 'AccountDobYear', response.contact.dobYear); - sax.refreshDob(); - sax.refreshSelect($section, 'AccountDobMonth', response.contact.dobMonth); - sax.refreshDob(); - sax.refreshSelect($section, 'AccountDobDay', response.contact.dobDay); - sax.refreshInput($section, 'AccountRegionIdCountry', response.contact.regionIdCountry); - sax.refreshInput($section, 'AccountRegionCaptionCountry', response.contact.regionCaptionCountry); - sax.refreshInput($section, 'AccountRegionIdProvince', response.contact.regionIdProvince); - sax.refreshInput($section, 'AccountRegionCaptionProvince', response.contact.regionCaptionProvince); - $('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime()); - $section.addClass('sax-edit'); - } - sax.doStoreProfileContact = function () - { - sax.clearControlErrors(); - sax.ajax.storeProfileContact = sax.ajax.storeProfileContact || { url: sax.url.base + 'Account/Ajax/StoreProfileContact', formId: 'frmProfileContact', callbackFn: sax.onStoreProfileContact }; - sax.doAjaxRequest(sax.ajax.storeProfileContact, 50); - } - sax.onStoreProfileContact = function (response) - { - sax.refreshControlValues(response.controlValues); - if (!response || !response.success) - return; - sax.refreshProfileContactInfo(); - } - - //-------------------------------------------------------------- - sax.refreshDob = function () - { - //sax.debug('refreshDob', $('#cbAccountDobYear').val(), $('#cbAccountDobMonth').val(), $('#cbAccountDobDay').val()); - let now = new Date(); - let $selDobYear = $('#cbAccountDobYear'); - if (!$('option', $selDobYear).length) - { - $selDobYear.append($('')); - for (let y = now.getFullYear(); y >= now.getFullYear() - 110 - now.getFullYear() % 10; y--) - $selDobYear.append($('').prop('value', y).text(y)); - } - let yearVal = $selDobYear.val(); - let $selDobMonth = $('#cbAccountDobMonth'); - if (!$('option', $selDobMonth).length) - { - $selDobMonth.append($('')); - for (let m = 1; m <= sax.data.months.length; m++) - $selDobMonth.append($('').prop('value', m).text(sax.data.months[m - 1].desc)); - } - if (!yearVal) - $selDobMonth.val(''); - $selDobMonth.prop('disabled', !yearVal); - let monthVal = $selDobMonth.val(); - let $selDobDay = $('#cbAccountDobDay'); - let dayVal = $selDobDay.val(); - $selDobDay.empty(); - if (!!yearVal && !!monthVal) - { - $selDobDay.append($('')); - for (let dt = new Date(yearVal, monthVal - 1, 1); dt.getMonth() == monthVal - 1; dt.setDate(dt.getDate() + 1)) - $selDobDay.append($('').prop('value', dt.getDate()).text(dt.getDate())); - $selDobDay.val(dayVal); - } - if (!monthVal) - $selDobDay.val(''); - $selDobDay.prop('disabled', !monthVal); - } - - //-------------------------------------------------------------- - sax.selectRegionCountry = function () - { - sax.data.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegionCountry, regionId: $('#ifAccountRegionIdCountry').val(), fnCallback: sax.onSelectRegionCountry }) - } - sax.onSelectRegionCountry = function (region) - { - //sax.debug(region); - sax.clearControlError($('#ifAccountRegionIdCountry').val(region.id)); - $('#ifAccountRegionCaptionCountry').val(region ? region.name : ''); - } - - //-------------------------------------------------------------- - sax.onDropContactImage = function (evt) - { - //sax.debug('onDropContactImage', evt); - let files = evt.originalEvent.dataTransfer.files; - if (files.length < 1) return; - if (files.length > 1) return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadImageSingle); - sax.onDropContactImageFile(files[0], $('#frmProfileContact')); - } - sax.onDropContactImageFile = function (file, context) - { - //sax.debug('onDropContactImageFile', file, context); - if (file.size > sax.maxProfileImageSize) return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileSizeMax.format(sax.formatFileSize(sax.maxProfileImageSize))); - if (file.type != 'image/jpg' && file.type != 'image/jpeg' && file.type != 'image/png') return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileTypeInvalid.format(sax.getFileType(file))); - $(".UploadMessage", context).text(sax.msg.uploadingFile.format(file.name)); - $('img.ContactImageUploadProgress', context).fadeIn(200); - sax.clearControlError(sax.$pnl.contactImageDrag); - sax.data.contactImageUploadContext = context; - - sax.ajax.uploadContactImage = sax.ajax.uploadContactImage || { url: sax.url.base + 'Account/Ajax/UploadContactImage', callbackFn: sax.handleContactImageUploadResponse, noWaitIcon: true }; - sax.ajax.uploadContactImage.formData = new FormData(); - sax.ajax.uploadContactImage.formData.append("__RequestVerificationToken", $('#frmNavigate input[name="__RequestVerificationToken"]').val()); - sax.ajax.uploadContactImage.formData.append("AccountContactImage", file); - sax.doAjaxRequest(sax.ajax.uploadContactImage, 50); - } - sax.handleContactImageUploadResponse = function (response) - { - let context = sax.data.contactImageUploadContext; - //sax.debug('handleContactImageUploadResponse', response, context); - if (!response) return; - var $section = $('.sax-panel-section.ProfileContact'); - sax.refreshControlValues(response.controlValues, context); - $(".UploadMessage", context).empty(); - $('img.ContactImageUploadProgress', context).hide(); - if (response.success) - { - $dlg.selectContactImage.dialog('close'); - $('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime()); - } - } - sax.selectContactImage = function () - { - let $dlg = $dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload }); - $('#ifContactImage', $dlg).val(''); - sax.openDialog($dlg, 560, 240); - } - sax.uploadContactImage = function () - { - let $dlg = $dlg.selectContactImage; - let $fileCtrl = $('#ifContactImage', $dlg); - if (!$fileCtrl.length || !$fileCtrl[0].files.length) - return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileSelect); - let file = $fileCtrl[0].files[0]; - sax.onDropContactImageFile(file, $dlg); - } - - //-------------------------------------------------------------- - sax.refreshProfileSportsInfo = function (delay) - { - var $section = $('.sax-panel-section.ProfileSports'); - $section.removeClass('sax-edit').addClass('sax-populating'); - $('.sax-property', $section).hide(); - sax.showDataRefreshingMsg($section); - sax.refreshProfileSports(sax.onRefreshProfileSportsInfo); - } - sax.refreshProfileSports = function (callbackFn) - { - //sax.debug('refreshProfileSports'); - delete sax.page.profileSportsChanged; - sax.ajax.profileSports = sax.ajax.profileSports || { url: sax.url.base + 'Account/Ajax/GetProfileSports', formId: 'frmNavigate', noWaitIcon: true }; - sax.ajax.profileSports.callbackFn = callbackFn; - sax.doAjaxRequest(sax.ajax.profileSports, 50); - } - sax.onRefreshProfileSportsInfo = function (response) - { - //sax.debug('onRefreshProfileSportsInfo', response); - if (!response || !response.success) return; - var $section = $('.sax-panel-section.ProfileSports'); - $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); - sax.profile.sports.Ids = []; - let items = response.sports; - if (!items) return; - let $items = $('.sax-panel-results.ProfileSports', $section).empty(); - let $tmpl = $('.sax-panel-item-template .sax-panel-item.ProfileSport', $section); - for (let itemIdx = 0; itemIdx < items.length; itemIdx++) - { - let item = items[itemIdx]; - sax.profile.sports.Ids.push(item.sportId); - let $item = $tmpl.clone().prop('id', 'ProSpt_' + item.id); - $('.sax-header .sax-action.sax-edit', $item).on('click', function (evt) { sax.updateProfileSport(item.id); }); - $('.SportName', $item).text(item.sportName); - $('.SportParticipationValue', $item).text(item.sportParticipation); - $('.SportParticipation', $item).toggle(!!item.sportParticipation); - $('.SportOfficiatingValue', $item).text(item.sportOfficiating); - $('.SportOfficiating', $item).toggle(!!item.sportOfficiating); - $items.append($item); - } - $items.show(); - sax.showNoInfoMsg($section); - $section.removeClass('sax-populating'); - } - sax.addProfileSport = function () - { - //sax.debug('addProfileSport'); - let $dlg = $dlg.profileSport; - $('.UserSportId,.ProfileSportExists,#ifProfileSportId,input.sax-input,select.sax-select', $dlg).val(''); - $('.SelectSport', $dlg).show(); - $dlg.dialog('option', 'title', sax.dlg.title.addUserSport); - sax.openDialog($dlg, 480, 400); - } - sax.updateProfileSport = function (id) - { - //sax.debug('updateProfileSport', id); - $('#frmProfileSportId .UserSportId').val(id); - sax.ajax.profileSport = sax.ajax.profileSport || { url: sax.url.base + 'Account/Ajax/GetProfileSport', formId: 'frmProfileSportId', callbackFn: sax.doUpdateProfileSport }; - sax.doAjaxRequest(sax.ajax.profileSport, 50); - } - sax.doUpdateProfileSport = function (response) - { - //sax.debug('doUpdateProfileSport', response); - let $dlg = $dlg.profileSport; - let item = response.sport; - $('.UserSportId', $dlg).val(item.id); - $('.ProfileSportExists', $dlg).val(1); - $('#ifProfileSportId', $dlg).val(item.sportId); - $('#ifProfileSport', $dlg).val(item.sportName); - $('#cbProfileSportParticipation', $dlg).val(item.sportParticipationCode); - $('#cbProfileSportOfficiating', $dlg).val(item.sportOfficiatingCode); - $('.SelectSport', $dlg).hide(); - $dlg.dialog('option', 'title', sax.dlg.title.updateUserSport); - sax.openDialog($dlg, 480, 400); - } - sax.selectUserSport = function (sport) - { - //sax.debug('selectUserSport'); - let excludeIds = $.grep(sax.profile.sports.Ids, function (value) { return !sport || value != sport.id; }); - sax.data.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#frmProfileSport #ifProfileSportId').val(), excludeIds: excludeIds, fnCallback: sax.onSelectUserSport }) - } - sax.onSelectUserSport = function (sport) - { - sax.clearControlError($('#ifProfileSportId').val(sport ? sport.id : '')); - $('#ifProfileSport').val(sport ? sport.name : ''); - } - sax.storeProfileSport = function () - { - //sax.debug('storeProfileSport'); - sax.clearControlErrors(); - sax.ajax.storeProfileSport = sax.ajax.storeProfileSport || { url: sax.url.base + 'Account/Ajax/StoreProfileSport', formId: 'frmProfileSport', callbackFn: sax.onStoreProfileSport }; - sax.doAjaxRequest(sax.ajax.storeProfileSport, 50); - } - sax.onStoreProfileSport = function (response) - { - sax.refreshControlValues(response.controlValues); - if (!response || !response.success) return; - $dlg.profileSport.dialog('close'); - sax.refreshProfileSportsInfo(); - } - - //-------------------------------------------------------------- - sax.refreshProfileOrganisationsInfo = function (delay) - { - var $section = $('.sax-panel-section.ProfileOrganisations'); - $section.removeClass('sax-edit').addClass('sax-populating'); - $('.sax-property', $section).hide(); - sax.showDataRefreshingMsg($section); - sax.refreshProfileOrganisations(sax.onRefreshProfileOrganisationsInfo); - } - sax.refreshProfileOrganisations = function (callbackFn) - { - //sax.debug('refreshProfileOrganisations'); - delete sax.page.profileOrganisationsChanged; - sax.ajax.profileOrganisations = sax.ajax.profileOrganisations || { url: sax.url.base + 'Account/Ajax/GetProfileOrganisations', formId: 'frmNavigate', noWaitIcon: true }; - sax.ajax.profileOrganisations.callbackFn = callbackFn; - sax.doAjaxRequest(sax.ajax.profileOrganisations, 50); - } - sax.onRefreshProfileOrganisationsInfo = function (response) - { - //sax.debug('onRefreshProfileOrganisationsInfo', response); - if (!response || !response.success) return; - var $section = $('.sax-panel-section.ProfileOrganisations'); - $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); - - let items = response.organisations; - if (!items) return; - let $items = $('.sax-panel-results.Organisations', $section).empty(); - let $tmpl = $('.sax-panel-item-template .sax-panel-item.Organisation', $section); - for (let itemIdx = 0; itemIdx < items.length; itemIdx++) - { - let item = items[itemIdx]; - let $item = $tmpl.clone().prop('id', 'ProOrg_' + item.id); - $('.OrganisationName', $item).text(item.name); - $('.OrganisationSport', $item).text(item.sportName); - $('.OrganisationRegion', $item).text(item.regionName); - $('.OrganisationMemberCount', $item).toggle(!!item.memberCount).find('.MemberCount').text(item.memberCount); - $('.OrganisationOpportunityCount', $item).toggle(!!item.opportunityCount).find('.MemberCount').text(item.opportunityCount); - $items.append($item); - } - $items.show(); - sax.showNoInfoMsg($section); - $section.removeClass('sax-populating'); - } - //-------------------------------------------------------------- sax.showDataRefreshingMsg = function ($section) { @@ -392,28 +59,11 @@ //-------------------------------------------------------------- $(function () { - $('.sax-panel-section.ProfileContact .sax-action.sax-edit').on('click', function (evt) { sax.refreshProfileContactForm(); }); - $('input,textarea,select', '.sax-panel-section.ProfileContact').on('change', function () { sax.clearControlErrors(); sax.page.profileContactChanged = true; }); - - sax.$pnl.contactImageDrag = $('#pnlContactImageDrop') - .on("dragenter", function (evt) { sax.haltEvent(evt); }) - .on("dragover", function (evt) { sax.haltEvent(evt); if (!sax.$pnl.contactImageDrag.hasClass(sax.classFileDrag)) sax.$pnl.contactImageDrag.addClass(sax.classFileDrag); }) - .on("dragleave", function (evt) { sax.haltEvent(evt); sax.$pnl.contactImageDrag.removeClass(sax.classFileDrag); }) - .on("drop", function (evt) { sax.haltEvent(evt); sax.$pnl.contactImageDrag.removeClass(sax.classFileDrag); sax.onDropContactImage(evt); }); - - $('.sax-panel-section.ProfileSports .sax-action.sax-add').on('click', function (evt) { sax.addProfileSport(); }); - var opt = sax.dlgOpts(); - opt.buttons[sax.dlg.btn.ok] = function () { sax.storeProfileSport(); }; - opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; - $dlg.profileSport = $('#dlgProfileSport').dialog(opt); - var opt = sax.dlgOpts(); - opt.buttons[sax.dlg.btn.ok] = function () { sax.uploadContactImage(); }; - opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; - $dlg.selectContactImage = $('#dlgSelectContactImage').dialog(opt); - setTimeout(sax.refreshProfile, 200); }); + //-------------------------------------------------------------- + }(window, window.document)); /* The End */ \ No newline at end of file diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js index bf069d1..6c371c6 100644 --- a/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js @@ -44,7 +44,7 @@ } sax.populateItem = function ($item, item) { - sax.debug('populateItem', item); + //sax.debug('populateItem', item); if (!item) return; $item.prop('id', sax.itemIdPrefix + item.itemIdx).addClass(item.itemTypeClass).toggleClass('sax-activity-reaction-' + item.reaction, !!item.reaction); $('.ActivityOrganisation', $item).text(item.organisation); diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-main.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-main.js index 924b4bd..4b2685a 100644 --- a/SaxoniteCoreWebOnline/wwwroot/js/sax-main.js +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-main.js @@ -119,9 +119,19 @@ var sel = $(':selected', $sel).length; $('.sax-select-items-selected', $sel.closest('.sax-form-control')).text(sel == 0 ? sax.lbl.noneSelected : sax.lbl.numberSelected.replace(/\{0\}/g, sel)); } - sax.initCalendars = function (sel) + sax.initCalendars = function (sel, opt) { - return $(sel).datepicker(); + return $(sel).datepicker(opt || {}); + } + sax.allowClearCalendar = function(sel) + { + $(sel).datepicker().on('keyup', function (e) + { + if (e.keyCode == 8 || e.keyCode == 46) + { + $(this).datepicker('setDate', null); + } + }); } sax.refreshPaging = function (response, context, refreshFn) { @@ -207,7 +217,7 @@ opt.buttons[sax.dlg.btn.ok] = function () { $(this).dialog('close'); if (onOk) onOk(); }; sax.$dlg.alert = $('').dialog(opt); } - $('#dlgAlertMsg', sax.$dlg.alert).html(msg); + $('#dlgAlertMsg', sax.$dlg.alert).html(msg.replace(/\\n/g, '')); sax.$dlg.alert.dialog('option', { title: title || sax.dlg.title.alert }); sax.openDialog(sax.$dlg.alert); } @@ -227,7 +237,7 @@ buttons[sax.dlg.btn.yes] = function () { $(this).dialog('close'); if (onOk) onOk(); }; buttons[sax.dlg.btn.no] = function () { $(this).dialog('close'); if (onCancel) onCancel(); }; sax.$dlg.confirm.dialog('option', { title: title || sax.dlg.title.confirm, 'buttons': buttons }); - $('#dlgConfirmMsg').html(msg); + $('#dlgConfirmMsg').html(msg.replace(/\\n/g, '')); sax.openDialog(sax.$dlg.confirm); } sax.confirmItemRemove = function (fn) @@ -249,7 +259,7 @@ opt.hide = { effect: 'fade', duration: 200 }; sax.$dlg.progress = $('').dialog(opt); } - $('#dlgProgressMsg').html(msg); + $('#dlgProgressMsg').html(msg.replace(/\\n/g, '')); sax.$dlg.progress.dialog('option', { title: title || sax.dlg.title.progress }); if (delay > 0) sax.toShowProgress = setTimeout(function () { sax.$dlg.progress.dialog('open'); }, delay); else sax.$dlg.progress.dialog('open'); @@ -274,7 +284,7 @@ } var $hdr = $('.heading', $not).css({ 'background-color': 'rgba(247,217,0,0.7)' }); $('.title', $not).html(title); - $('.message', $not).html(msg); + $('.message', $not).html(msg.replace(/\\n/g, '')); var $bdy = $('#sax-page-body'); //sax.debug(sax.topMargin($bdy)); var fbr = $bdy[0].getBoundingClientRect(); @@ -521,7 +531,7 @@ buttonImage: '../img/action/calendar32.png', buttonText: sax.lbl.calendar, dateFormat: sax.form.calendarDateFormat, - changeMonth: true, + changeMonth: false, changeYear: false, yearRange: '-14:+01', firstDay: 1, diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-org.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-org.js new file mode 100644 index 0000000..3026f52 --- /dev/null +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-org.js @@ -0,0 +1,63 @@ +/* + * Account page scripts. + */ + +(function (win, doc, undef) +{ + "use strict"; + let $pnl = sax.$pnl, $dlg = sax.$dlg, $frm = sax.$frm; + + //-------------------------------------------------------------- + sax.refreshProfileOrganisationsInfo = function (delay) + { + var $section = $('.sax-panel-section.ProfileOrganisations'); + $section.removeClass('sax-edit').addClass('sax-populating'); + $('.sax-property', $section).hide(); + sax.showDataRefreshingMsg($section); + sax.refreshProfileOrganisations(sax.onRefreshProfileOrganisationsInfo); + } + sax.refreshProfileOrganisations = function (callbackFn) + { + //sax.debug('refreshProfileOrganisations'); + delete sax.page.profileOrganisationsChanged; + sax.ajax.profileOrganisations = sax.ajax.profileOrganisations || { url: sax.url.base + 'Account/Ajax/GetProfileOrganisations', formId: 'frmNavigate', noWaitIcon: true }; + sax.ajax.profileOrganisations.callbackFn = callbackFn; + sax.doAjaxRequest(sax.ajax.profileOrganisations, 50); + } + sax.onRefreshProfileOrganisationsInfo = function (response) + { + //sax.debug('onRefreshProfileOrganisationsInfo', response); + if (!response || !response.success) return; + var $section = $('.sax-panel-section.ProfileOrganisations'); + $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); + + let items = response.organisations; + if (!items) return; + let $items = $('.sax-panel-results.Organisations', $section).empty(); + let $tmpl = $('.sax-panel-item-template .sax-panel-item.Organisation', $section); + for (let itemIdx = 0; itemIdx < items.length; itemIdx++) + { + let item = items[itemIdx]; + let $item = $tmpl.clone().prop('id', 'ProOrg_' + item.id); + $('.OrganisationName', $item).text(item.name); + $('.OrganisationSport', $item).text(item.sportName); + $('.OrganisationRegion', $item).text(item.regionName); + $('.OrganisationMemberCount', $item).toggle(!!item.memberCount).find('.MemberCount').text(item.memberCount); + $('.OrganisationOpportunityCount', $item).toggle(!!item.opportunityCount).find('.MemberCount').text(item.opportunityCount); + $items.append($item); + } + $items.show(); + sax.showNoInfoMsg($section); + $section.removeClass('sax-populating'); + } + + //-------------------------------------------------------------- + $(function () + { + }); + + //-------------------------------------------------------------- + +}(window, window.document)); + +/* The End */ \ No newline at end of file diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-pro.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-pro.js new file mode 100644 index 0000000..d45cbac --- /dev/null +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-pro.js @@ -0,0 +1,219 @@ +/* + * Account page scripts. + */ + +(function (win, doc, undef) +{ + "use strict"; + let $pnl = sax.$pnl, $dlg = sax.$dlg, $frm = sax.$frm; + + //-------------------------------------------------------------- + sax.refreshProfileContactInfo = function () + { + var $section = $('.sax-panel-section.ProfileContact'); + $section.removeClass('sax-edit').addClass('sax-populating'); + $('.sax-property', $section).hide(); + sax.showDataRefreshingMsg($section); + sax.refreshProfileContact(sax.onRefreshProfileContactInfo); + } + sax.refreshProfileContactForm = function () + { + if (!sax.closeEditPanels()) return; + sax.refreshProfileContact(sax.onRefreshProfileContactForm); + } + sax.refreshProfileContact = function (callbackFn) + { + delete sax.page.profileContactChanged; + sax.ajax.profileContact = sax.ajax.profileContact || { url: sax.url.base + 'Account/Ajax/GetProfileContact', formId: 'frmNavigate', noWaitIcon: true }; + sax.ajax.profileContact.callbackFn = callbackFn; + sax.doAjaxRequest(sax.ajax.profileContact, 50); + } + sax.onRefreshProfileContactInfo = function (response) + { + //sax.debug('onRefreshProfileContactInfo', response); + if (!response || !response.success || !response.contact) return; + $('.sax-panel-section').show(); + var $section = $('.sax-panel-section.ProfileContact'); + $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); + $('.sax-value', $section).empty(); + sax.refreshInfo($section, 'AccountEmailAddress', response.contact.emailAddress); + sax.refreshInfo($section, 'AccountName', response.contact.displayName); + sax.refreshInfo($section, 'AccountLocation', response.contact.locationCaption); + $('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime()); + sax.showNoInfoMsg($section); + $section.removeClass('sax-populating'); + } + sax.onRefreshProfileContactForm = function (response) + { + //sax.debug('onRefreshProfileContactForm', response); + if (!response || !response.success) return; + sax.data.genders = response.genders; + sax.data.months = response.months; + $('.sax-panel-section').hide(); + var $section = $('.sax-panel-section.ProfileContact').show(); + $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); + sax.refreshInput($section, 'AccountEmailAddress', response.contact.emailAddress); + sax.refreshSelect($section, 'AccountTitle', response.contact.title); + sax.refreshInput($section, 'AccountFirstName', response.contact.firstName); + sax.refreshInput($section, 'AccountLastName', response.contact.lastName); + let $selGender = $('#cbAccountGender'); + if (response.genders && response.genders.length) + sax.populateSelectCodeDesc($('#cbAccountGender'), response.genders); + sax.refreshSelect($section, 'AccountGender', response.contact.gender || ''); + sax.refreshDob(); + sax.refreshSelect($section, 'AccountDobYear', response.contact.dobYear); + sax.refreshDob(); + sax.refreshSelect($section, 'AccountDobMonth', response.contact.dobMonth); + sax.refreshDob(); + sax.refreshSelect($section, 'AccountDobDay', response.contact.dobDay); + sax.refreshInput($section, 'AccountRegionIdCountry', response.contact.regionIdCountry); + sax.refreshInput($section, 'AccountRegionCaptionCountry', response.contact.regionCaptionCountry); + sax.refreshInput($section, 'AccountRegionIdProvince', response.contact.regionIdProvince); + sax.refreshInput($section, 'AccountRegionCaptionProvince', response.contact.regionCaptionProvince); + $('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime()); + $section.addClass('sax-edit'); + } + sax.storeProfileContact = function () + { + sax.clearControlErrors(); + sax.ajax.storeProfileContact = sax.ajax.storeProfileContact || { url: sax.url.base + 'Account/Ajax/StoreProfileContact', formId: 'frmProfileContact', callbackFn: sax.onStoreProfileContact }; + sax.doAjaxRequest(sax.ajax.storeProfileContact, 50); + } + sax.onStoreProfileContact = function (response) + { + sax.refreshControlValues(response.controlValues); + if (!response.success) return; + sax.refreshProfileContactInfo(); + } + + //-------------------------------------------------------------- + sax.refreshDob = function () + { + //sax.debug('refreshDob', $('#cbAccountDobYear').val(), $('#cbAccountDobMonth').val(), $('#cbAccountDobDay').val()); + let now = new Date(); + let $selDobYear = $('#cbAccountDobYear'); + if (!$('option', $selDobYear).length) + { + $selDobYear.append($('')); + for (let y = now.getFullYear(); y >= now.getFullYear() - 110 - now.getFullYear() % 10; y--) + $selDobYear.append($('').prop('value', y).text(y)); + } + let yearVal = $selDobYear.val(); + let $selDobMonth = $('#cbAccountDobMonth'); + if (!$('option', $selDobMonth).length) + { + $selDobMonth.append($('')); + for (let m = 1; m <= sax.data.months.length; m++) + $selDobMonth.append($('').prop('value', m).text(sax.data.months[m - 1].desc)); + } + if (!yearVal) + $selDobMonth.val(''); + $selDobMonth.prop('disabled', !yearVal); + let monthVal = $selDobMonth.val(); + let $selDobDay = $('#cbAccountDobDay'); + let dayVal = $selDobDay.val(); + $selDobDay.empty(); + if (!!yearVal && !!monthVal) + { + $selDobDay.append($('')); + for (let dt = new Date(yearVal, monthVal - 1, 1); dt.getMonth() == monthVal - 1; dt.setDate(dt.getDate() + 1)) + $selDobDay.append($('').prop('value', dt.getDate()).text(dt.getDate())); + $selDobDay.val(dayVal); + } + if (!monthVal) + $selDobDay.val(''); + $selDobDay.prop('disabled', !monthVal); + } + + //-------------------------------------------------------------- + sax.selectRegionCountry = function () + { + sax.data.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegionCountry, regionId: $('#ifAccountRegionIdCountry').val(), fnCallback: sax.onSelectRegionCountry }) + } + sax.onSelectRegionCountry = function (region) + { + //sax.debug(region); + sax.clearControlError($('#ifAccountRegionIdCountry').val(region.id)); + $('#ifAccountRegionCaptionCountry').val(region ? region.name : ''); + } + + //-------------------------------------------------------------- + sax.onDropContactImage = function (evt) + { + //sax.debug('onDropContactImage', evt); + let files = evt.originalEvent.dataTransfer.files; + if (files.length < 1) return; + if (files.length > 1) return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadImageSingle); + sax.onDropContactImageFile(files[0], $('#frmProfileContact')); + } + sax.onDropContactImageFile = function (file, context) + { + //sax.debug('onDropContactImageFile', file, context); + if (file.size > sax.maxProfileImageSize) return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileSizeMax.format(sax.formatFileSize(sax.maxProfileImageSize))); + if (file.type != 'image/jpg' && file.type != 'image/jpeg' && file.type != 'image/png') return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileTypeInvalid.format(sax.getFileType(file))); + $(".UploadMessage", context).text(sax.msg.uploadingFile.format(file.name)); + $('img.ContactImageUploadProgress', context).fadeIn(200); + sax.clearControlError(sax.$pnl.contactImageDrag); + sax.data.contactImageUploadContext = context; + + sax.ajax.uploadContactImage = sax.ajax.uploadContactImage || { url: sax.url.base + 'Account/Ajax/UploadContactImage', callbackFn: sax.handleContactImageUploadResponse, noWaitIcon: true }; + sax.ajax.uploadContactImage.formData = new FormData(); + sax.ajax.uploadContactImage.formData.append("__RequestVerificationToken", $('#frmNavigate input[name="__RequestVerificationToken"]').val()); + sax.ajax.uploadContactImage.formData.append("AccountContactImage", file); + sax.doAjaxRequest(sax.ajax.uploadContactImage, 50); + } + sax.handleContactImageUploadResponse = function (response) + { + let context = sax.data.contactImageUploadContext; + //sax.debug('handleContactImageUploadResponse', response, context); + if (!response) return; + var $section = $('.sax-panel-section.ProfileContact'); + sax.refreshControlValues(response.controlValues, context); + $(".UploadMessage", context).empty(); + $('img.ContactImageUploadProgress', context).hide(); + if (response.success) + { + $dlg.selectContactImage.dialog('close'); + $('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime()); + } + } + sax.selectContactImage = function () + { + let dlg = $dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload }); + $('#ifContactImage', dlg).val(''); + sax.openDialog(dlg, 560, 240); + } + sax.uploadContactImage = function () + { + let dlg = $dlg.selectContactImage; + let $fileCtrl = $('#ifContactImage', dlg); + if (!$fileCtrl.length || !$fileCtrl[0].files.length) + return sax.doAlert(sax.dlg.title.imageUpload, sax.msg.uploadFileSelect); + let file = $fileCtrl[0].files[0]; + sax.onDropContactImageFile(file, dlg); + } + + //-------------------------------------------------------------- + $(function () + { + sax.$pnl.proCon = $('.sax-panel-section.ProfileContact'); + $('.sax-action.sax-edit', sax.$pnl.proCon).on('click', function (evt) { sax.refreshProfileContactForm(); }); + $('input,textarea', sax.$pnl.proCon).on('input', function () { sax.clearControlErrors(); sax.page.profileContactChanged = true; }); + $('select', sax.$pnl.proCon).on('change', function () { sax.clearControlErrors(); sax.page.profileContactChanged = true; }); + + sax.$pnl.contactImageDrag = $('#pnlContactImageDrop') + .on("dragenter", function (evt) { sax.haltEvent(evt); }) + .on("dragover", function (evt) { sax.haltEvent(evt); if (!sax.$pnl.contactImageDrag.hasClass(sax.classFileDrag)) sax.$pnl.contactImageDrag.addClass(sax.classFileDrag); }) + .on("dragleave", function (evt) { sax.haltEvent(evt); sax.$pnl.contactImageDrag.removeClass(sax.classFileDrag); }) + .on("drop", function (evt) { sax.haltEvent(evt); sax.$pnl.contactImageDrag.removeClass(sax.classFileDrag); sax.onDropContactImage(evt); }); + var opt = sax.dlgOpts(); + opt.buttons[sax.dlg.btn.ok] = function () { sax.uploadContactImage(); }; + opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; + $dlg.selectContactImage = $('#dlgSelectContactImage').dialog(opt); + }); + + //-------------------------------------------------------------- + +}(window, window.document)); + +/* The End */ \ No newline at end of file diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-spt-exp.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-spt-exp.js new file mode 100644 index 0000000..93448a6 --- /dev/null +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-spt-exp.js @@ -0,0 +1,158 @@ +/* + * Account page scripts. + */ + +(function (win, doc, undef) +{ + "use strict"; + let se = sax.sportExperience = { fn: {}, $pnl: {}, $frm: {}, $dlg: {} }; + + //-------------------------------------------------------------- + sax.showSportExperience = function (usrSpt) + { + sax.debug('showSportExperience', usrSpt); + $('.sax-header .SportName', se.$pnl.sportExp).text(usrSpt.sportName); + $('.sax-panel-section').slideUp(750, function () { se.$pnl.sportExp.slideDown(750); }); + se.$dlg.sportExp.dialog('option', { 'title': sax.lbl.sportExperience + ' - ' + usrSpt.sportName }); + let frm = $('#frmProfileSportId'); + $('.UserSportId', frm).val(usrSpt.id); + $('.UserSportId', se.$frm.sportExp).val(usrSpt.id); + se.fn.refreshResults(); + } + se.fn.refreshResults = function() + { + let frm = $('#frmProfileSportId'); + sax.ajax.sportExperiences = sax.ajax.sportExperiences || { url: sax.url.base + 'UserSport/Ajax/GetExperienceList', formId: frm.prop('id'), callbackFn: se.fn.handleSportExperiencesResponse }; + sax.doAjaxRequest(sax.ajax.sportExperiences, 50); + } + se.fn.handleSportExperiencesResponse = function (response) + { + sax.debug('handleSportExperiencesResponse', response); + let $results = se.$pnl.results; + let $msgs = $('.sax-panel-messages', $results).empty(); + let $list = $('.sax-panel-item-list', $results).hide().empty(); + let items = response.experiences; + se.idx = 0; + for (let itemIdx = 0; itemIdx < items.length; itemIdx++) + { + let item = items[itemIdx]; + item.idx = ++se.idx; + let $item = se.fn.getItemTemplate(item.idx); + sax.debug(item, $item); + $('.ExperiencePeriod', $item).text(item.period); + $('.ExperienceSummary', $item).text(item.summary); + $('.ExperienceTeam', $item).text(item.team); + $('.ExperienceLeague', $item).text(item.league); + $('.ExperienceSpeciality', $item).text(item.speciality); + let $mnu = $('.sax-burger .sax-dropdown-menu', $item).empty(); + $mnu.append(se.fn.getMenuOption(se.fn.getItemActionTemplate(), sax.lbl.edit, function () { se.fn.updateSportExperience(item, $item); })); + $('.sax-header .sax-caption', $item).on('click', function () { se.fn.updateSportExperience(item, $item); }); + $('.sax-content', $item).on('dblclick', function () { se.fn.updateSportExperience(item, $item); }); + $list.append($item); + } + $list.show(); + } + se.fn.getItemId = function (idx) + { + return 'SptExp_' + idx; + } + se.fn.getItemActionTemplate = function () + { + return $('.sax-panel-item-template ul.sax-dropdown-menu.SportExperience li', se.$pnl.results).clone(); + } + se.fn.getItemTemplate = function (idx) + { + return $('.sax-panel-item-template .sax-panel-item.SportExperience', se.$pnl.results).clone().prop('id', se.fn.getItemId(idx)); + } + se.fn.getMenuOption = function ($opt, lbl, fn) + { + return $opt.find('div.sax-label').text(lbl).end().on('click', fn); + } + + //-------------------------------------------------------------- + sax.addSportExperience = function () + { + sax.debug('addSportExperience') + se.fn.clearSportExperience(); + sax.openDialog(se.$dlg.sportExp, 560, 600); + } + se.fn.clearSportExperience = function () + { + let frm = se.$frm.sportExp; + $('.sax-input,.sax-textarea,.sax-select,.UserSportExperienceId,.UserSportExperienceExists', frm).val('').prop('autofocus', null); + } + se.fn.updateSportExperience = function (item, $item) + { + sax.debug('updateSportExperience', item); + let frm = se.$frm.sportExpId; + $('.UserSportExperienceId', se.$frm.sportExpId).val(item.id); + sax.ajax.sportExp = sax.ajax.sportExp || { url: sax.url.base + 'UserSport/Ajax/GetExperience', formId: frm.prop('id'), callbackFn: se.fn.doUpdateSportExperience }; + sax.doAjaxRequest(sax.ajax.sportExp, 50); + } + se.fn.doUpdateSportExperience = function (response) + { + sax.debug('doUpdateSportExperience', response); + if (!response.success) return; + let item = response.experience; + let frm = se.$frm.sportExp; + se.fn.clearSportExperience(); + $('input.UserSportExperienceId', frm).val(item.id); + $('input.UserSportExperienceExists', frm).val(1); + sax.debug(Date.parse(item.periodFrom_YMD)); + $('.sax-input.ExperiencePeriodFrom', frm).datepicker('setDate', new Date(item.periodFrom_YMD)); + $('.sax-input.ExperiencePeriodTo', frm).datepicker('setDate', item.periodTo_YMD ? new Date(item.periodTo_YMD) : null); + $('.sax-textarea.ExperienceSummary', frm).val(item.summary).prop('autofocus', true); + $('.sax-input.ExperienceOrganisationName', frm).val(item.organisationName); + $('.sax-input.ExperienceTeam', frm).val(item.team); + $('.sax-input.ExperienceLeague', frm).val(item.league); + $('.sax-input.ExperienceSpeciality', frm).val(item.speciality); + sax.openDialog(se.$dlg.sportExp, 560, 600); + } + se.fn.storeSportExperience = function () + { + sax.debug('storeSportExperience'); + let frm = se.$frm.sportExp; + sax.ajax.storeSportExp = sax.ajax.storeSportExp || { url: sax.url.base + 'UserSport/Ajax/StoreExperience', formId: frm.prop('id'), callbackFn: se.fn.onStoreSportExperience }; + sax.doAjaxRequest(sax.ajax.storeSportExp, 50); + } + se.fn.onStoreSportExperience = function (response) + { + sax.debug('onStoreSportExperience', response); + sax.refreshControlValues(response.controlValues, se.$dlg.sprExp); + if (!response.success) return; + se.$dlg.sportExp.dialog('close'); + se.fn.refreshResults(); + } + sax.closeProfileSportExperience = function () + { + se.$pnl.sportExp.slideUp(750, function () { $('.sax-panel-section').slideDown(750); }); + sax.refreshProfileSportsInfo(50); + } + + //-------------------------------------------------------------- + $(function () + { + se.$pnl.sportExp = $('.sax-panel.ProfileSportExperience'); + se.$pnl.hdr = $('.sax-header', se.$pnl.sportExp); + se.$pnl.results = $('.sax-panel-results.ProfileSportExperiences', se.$pnl.sportExp); + sax.initCalendars('#dlgSportExperience .sax-calendar', { changeMonth: true, changeYear: true, yearRange: '-99:+00' }); + se.$dpPeriodFrom = $('#dlgSportExperience .sax-calendar.ExperiencePeriodFrom'); + se.$dpPeriodTo = $('#dlgSportExperience .sax-calendar.ExperiencePeriodTo'); + se.$dpPeriodFrom.datepicker({ onSelect: function () { $(this).change(); } }); + sax.allowClearCalendar('#dlgSportExperience .sax-calendar.ExperiencePeriodTo'); + + var opt = sax.dlgOpts(); + opt.buttons[sax.dlg.btn.ok] = function () { se.fn.storeSportExperience(); }; + opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; + se.$dlg.sportExp = $('#dlgSportExperience').dialog(opt); + se.$frm.sportExpId = $('#frmSportExperienceId'); + se.$frm.sportExp = $('#frmSportExperience', se.$dlg.sportExp); + $('input,textarea', se.$frm.sportExp).on('input', function () { sax.clearControlError(this); }).on('change', function () { sax.clearControlError(this); }); + $('select', se.$frm.sportExp).on('change', function () { sax.clearControlError(this); }); + }); + + //-------------------------------------------------------------- + +}(window, window.document)); + +/* The End */ \ No newline at end of file diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-spt.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-spt.js new file mode 100644 index 0000000..f898153 --- /dev/null +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-usr-spt.js @@ -0,0 +1,127 @@ +/* + * Account page scripts. + */ + +(function (win, doc, undef) +{ + "use strict"; + let $pnl = sax.$pnl, $dlg = sax.$dlg, $frm = sax.$frm; + + //-------------------------------------------------------------- + sax.refreshProfileSportsInfo = function (delay) + { + var $section = $('.sax-panel-section.ProfileSports'); + $section.removeClass('sax-edit').addClass('sax-populating'); + $('.sax-property', $section).hide(); + sax.showDataRefreshingMsg($section); + sax.refreshProfileSports(sax.onRefreshProfileSportsInfo); + } + sax.refreshProfileSports = function (callbackFn) + { + //sax.debug('refreshProfileSports'); + delete sax.page.profileSportsChanged; + sax.ajax.profileSports = sax.ajax.profileSports || { url: sax.url.base + 'Account/Ajax/GetProfileSports', formId: 'frmNavigate', noWaitIcon: true }; + sax.ajax.profileSports.callbackFn = callbackFn; + sax.doAjaxRequest(sax.ajax.profileSports, 50); + } + sax.onRefreshProfileSportsInfo = function (response) + { + //sax.debug('onRefreshProfileSportsInfo', response); + if (!response || !response.success) return; + var $section = $('.sax-panel-section.ProfileSports'); + $('.sax-message', $section).stop(true, false).fadeOut(200).empty(); + sax.profile.sports.Ids = []; + let items = response.sports; + if (!items) return; + let $items = $('.sax-panel-results.ProfileSports', $section).empty(); + let $tmpl = $('.sax-panel-item-template .sax-panel-item.ProfileSport', $section); + for (let itemIdx = 0; itemIdx < items.length; itemIdx++) + { + let item = items[itemIdx]; + sax.profile.sports.Ids.push(item.sportId); + let $item = $tmpl.clone().prop('id', 'ProSpt_' + item.id); + $('.sax-header .sax-action.sax-edit', $item).on('click', function (evt) { sax.updateProfileSport(item.id); }); + $('.sax-header .sax-action.sax-experience', $item).on('click', function (evt) { sax.showSportExperience(item); }); + $('.SportName', $item).text(item.sportName); + $('.SportParticipationValue', $item).text(item.sportParticipation); + $('.SportParticipation', $item).toggle(!!item.sportParticipation); + $('.SportOfficiatingValue', $item).text(item.sportOfficiating); + $('.SportOfficiating', $item).toggle(!!item.sportOfficiating); + $items.append($item); + } + $items.show(); + sax.showNoInfoMsg($section); + $section.removeClass('sax-populating'); + } + sax.addProfileSport = function () + { + //sax.debug('addProfileSport'); + let dlg = $dlg.profileSport; + $('.UserSportId,.ProfileSportExists,#ifProfileSportId,input.sax-input,select.sax-select', dlg).val(''); + $('.SelectSport', dlg).show(); + dlg.dialog('option', 'title', sax.dlg.title.addUserSport); + sax.openDialog(dlg, 480, 400); + } + sax.updateProfileSport = function (id) + { + //sax.debug('updateProfileSport', id); + $('#frmProfileSportId .UserSportId').val(id); + sax.ajax.profileSport = sax.ajax.profileSport || { url: sax.url.base + 'Account/Ajax/GetProfileSport', formId: 'frmProfileSportId', callbackFn: sax.doUpdateProfileSport }; + sax.doAjaxRequest(sax.ajax.profileSport, 50); + } + sax.doUpdateProfileSport = function (response) + { + //sax.debug('doUpdateProfileSport', response); + let dlg = $dlg.profileSport; + let item = response.sport; + $('.UserSportId', dlg).val(item.id); + $('.ProfileSportExists', dlg).val(1); + $('#ifProfileSportId', dlg).val(item.sportId); + $('#ifProfileSport', dlg).val(item.sportName); + $('#cbProfileSportParticipation', dlg).val(item.sportParticipationCode); + $('#cbProfileSportOfficiating', dlg).val(item.sportOfficiatingCode); + $('.SelectSport', dlg).hide(); + dlg.dialog('option', 'title', sax.dlg.title.updateUserSport); + sax.openDialog(dlg, 480, 400); + } + sax.selectUserSport = function (sport) + { + //sax.debug('selectUserSport'); + let excludeIds = $.grep(sax.profile.sports.Ids, function (value) { return !sport || value != sport.id; }); + sax.data.selectSport.fn.selectSport({ caption: sax.dlg.title.selectSport, sportId: $('#frmProfileSport #ifProfileSportId').val(), excludeIds: excludeIds, fnCallback: sax.onSelectUserSport }) + } + sax.onSelectUserSport = function (sport) + { + sax.clearControlError($('#ifProfileSportId').val(sport ? sport.id : '')); + $('#ifProfileSport').val(sport ? sport.name : ''); + } + sax.storeProfileSport = function () + { + //sax.debug('storeProfileSport'); + sax.clearControlErrors(); + sax.ajax.storeProfileSport = sax.ajax.storeProfileSport || { url: sax.url.base + 'Account/Ajax/StoreProfileSport', formId: 'frmProfileSport', callbackFn: sax.onStoreProfileSport }; + sax.doAjaxRequest(sax.ajax.storeProfileSport, 50); + } + sax.onStoreProfileSport = function (response) + { + sax.refreshControlValues(response.controlValues); + if (!response || !response.success) return; + $dlg.profileSport.dialog('close'); + sax.refreshProfileSportsInfo(); + } + + //-------------------------------------------------------------- + $(function () + { + $('.sax-panel-section.ProfileSports .sax-action.sax-add').on('click', function (evt) { sax.addProfileSport(); }); + var opt = sax.dlgOpts(); + opt.buttons[sax.dlg.btn.ok] = function () { sax.storeProfileSport(); }; + opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; + $dlg.profileSport = $('#dlgProfileSport').dialog(opt); + }); + + //-------------------------------------------------------------- + +}(window, window.document)); + +/* The End */ \ No newline at end of file diff --git a/SaxoniteStandardBase/Base/App/Sax-Version.cs b/SaxoniteStandardBase/Base/App/Sax-Version.cs index e72a973..341d186 100644 --- a/SaxoniteStandardBase/Base/App/Sax-Version.cs +++ b/SaxoniteStandardBase/Base/App/Sax-Version.cs @@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App //------------------------------------------------------------------- public static class Version { - private static String version { get; } = "1.1.4.1"; + private static String version { get; } = "1.1.5.1"; // Retrieve version. public static String GetFullVersion () { return version; } public static String GetAppVersion () @@ -40,9 +40,11 @@ namespace Saxonite.Net.Standard.Base.App //------------------------------------------------------------------- // Version history. //------------------------------------------------------------------- + // 1.1.5 19-Aug-2021 Profile Sport Experience. + // - Online Profile Sport Experience. // 1.1.4 9-Aug-2021 Organisation Articles. // - Journalist Article renamed Article and Organisation Id added. - // - Online Organisation Articles. + // - Online Organisation Articles. Contact Gender & DOB. // - Admin Send Emails for User. // 1.1.3 23-Jul-2021 Online Members. // - Online Members. diff --git a/SaxoniteStandardBase/Base/App/Sax.cs b/SaxoniteStandardBase/Base/App/Sax.cs index 753e56c..9984f7b 100644 --- a/SaxoniteStandardBase/Base/App/Sax.cs +++ b/SaxoniteStandardBase/Base/App/Sax.cs @@ -142,6 +142,7 @@ namespace Saxonite.Net.Standard.Base.App UserRole = 101, UserOrganisation = 102, UserSport = 103, + UserSportExperience = 104, Organisation = 120, // Activty data. ActivityIndex = 200, diff --git a/SaxoniteStandardBase/Base/App/SaxDbDfn_Core.cs b/SaxoniteStandardBase/Base/App/SaxDbDfn_Core.cs index 791f330..dca55eb 100644 --- a/SaxoniteStandardBase/Base/App/SaxDbDfn_Core.cs +++ b/SaxoniteStandardBase/Base/App/SaxDbDfn_Core.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Base.App { @@ -32,6 +32,7 @@ namespace Saxonite.Base.App UserRole, UserSession, UserSport, + UserSportExperience, } //------------------------------------------------------------------- @@ -304,12 +305,35 @@ namespace Saxonite.Base.App UserSport_UpdateOn, UserSport_UpdateBy, UserSport_UpdateHost, + UserSportExperience_Id, + UserSportExperience_UserSportId, + UserSportExperience_PeriodFrom, + UserSportExperience_PeriodTo, + UserSportExperience_OrganisationId, + UserSportExperience_OrganisationName, + UserSportExperience_Summary, + UserSportExperience_Team, + UserSportExperience_League, + UserSportExperience_Speciality, + UserSportExperience_SpecialitiesOther, + UserSportExperience_RegionIdNation, + UserSportExperience_RegionIdProvince, + UserSportExperience_UserSportExperienceData, + UserSportExperience_Notes, + UserSportExperience_Flags, + UserSportExperience_Status, + UserSportExperience_CreateOn, + UserSportExperience_CreateBy, + UserSportExperience_CreateHost, + UserSportExperience_UpdateOn, + UserSportExperience_UpdateBy, + UserSportExperience_UpdateHost, } //------------------------------------------------------------------- // Data members. - private static readonly int tableCount = 15; - private static readonly int columnCount = 265; + private static readonly int tableCount = 16; + private static readonly int columnCount = 288; private static ulong maxTextLen = 0; //------------------------------------------------------------------- @@ -470,6 +494,7 @@ namespace Saxonite.Base.App "UserRole", "UserSession", "UserSport", + "UserSportExperience", }; //------------------------------------------------------------------- @@ -746,7 +771,7 @@ namespace Saxonite.Base.App new ColumnDfn(14,"Flags",3,5,false,5), new ColumnDfn(14,"CreateOn",9,93,false,23), new ColumnDfn(14,"UpdateOn",9,93,false,23), - new ColumnDfn(15,"Id",4,4,true,10), + new ColumnDfn(15,"Id",5,-5,true,19), new ColumnDfn(15,"UserAccountId",4,4,false,10), new ColumnDfn(15,"SportId",4,4,false,10), new ColumnDfn(15,"Participation",3,5,false,5), @@ -761,6 +786,29 @@ namespace Saxonite.Base.App new ColumnDfn(15,"UpdateOn",9,93,false,23), new ColumnDfn(15,"UpdateBy",4,4,false,10), new ColumnDfn(15,"UpdateHost",0,12,false,100), + new ColumnDfn(16,"Id",5,-5,true,19), + new ColumnDfn(16,"UserSportId",5,-5,false,19), + new ColumnDfn(16,"PeriodFrom",9,93,false,16), + new ColumnDfn(16,"PeriodTo",9,93,false,16), + new ColumnDfn(16,"OrganisationId",4,4,false,10), + new ColumnDfn(16,"OrganisationName",0,-9,false,200), + new ColumnDfn(16,"Summary",0,-9,false,2000), + new ColumnDfn(16,"Team",0,-9,false,64), + new ColumnDfn(16,"League",0,-9,false,64), + new ColumnDfn(16,"Speciality",0,-9,false,64), + new ColumnDfn(16,"SpecialitiesOther",0,-9,false,1000), + new ColumnDfn(16,"RegionIdNation",4,4,false,10), + new ColumnDfn(16,"RegionIdProvince",4,4,false,10), + new ColumnDfn(16,"UserSportExperienceData",0,-9,false,0), + new ColumnDfn(16,"Notes",0,-9,false,2000), + new ColumnDfn(16,"Flags",3,5,false,5), + new ColumnDfn(16,"Status",0,12,false,3), + new ColumnDfn(16,"CreateOn",9,93,false,23), + new ColumnDfn(16,"CreateBy",4,4,false,10), + new ColumnDfn(16,"CreateHost",0,12,false,100), + new ColumnDfn(16,"UpdateOn",9,93,false,23), + new ColumnDfn(16,"UpdateBy",4,4,false,10), + new ColumnDfn(16,"UpdateHost",0,12,false,100), }; //------------------------------------------------------------------- diff --git a/SaxoniteStandardBase/Base/Bus/SaxUserSportExperience.cs b/SaxoniteStandardBase/Base/Bus/SaxUserSportExperience.cs new file mode 100644 index 0000000..5dc7608 --- /dev/null +++ b/SaxoniteStandardBase/Base/Bus/SaxUserSportExperience.cs @@ -0,0 +1,375 @@ +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using Saxonite.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; + +namespace Saxonite.Net.Standard.Base.Bus +{ + //======================================================================= + // UserSportExperience. + //======================================================================= + public abstract class SaxUserSportExperience : SacsHierarchyItem + { + //------------------------------------------------------------------- + // Columns. + public enum Column + { + Pos, + Id, + UserSportId, + // Period. + PeriodFrom, + PeriodTo, + // Organisation. + OrganisationId, + OrganisationName, + Organisation_Name, + // Properties. + Summary, + Team, + League, + Speciality, + SpecialitiesOther, + // Regions. + RegionIdNation, + Region_Nation_Name, + RegionIdProvince, + Region_Province_Name, + // Associated data. + // Common. + Notes, + Flags, + Status, + Status_Desc, + Status_Ind, + CreateOn_Date, + UpdateOn_Date, + } + + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId UserSportId { get; set; } + public DateTime PeriodFrom { get; set; } + public DateTime PeriodTo { get; set; } + public SysId OrganisationId { get; set; } + public String OrganisationName { get; set; } + public String Summary { get; set; } + public String Team { get; set; } + public String League { get; set; } + public String Speciality { get; set; } + public HashSet SpecialitiesOther { get; } = new HashSet(StringComparer.OrdinalIgnoreCase); + public SysId RegionIdNation { get; set; } + public SysId RegionIdProvince { get; set; } + public String UserSportExperienceData { get; set; } + } + + //------------------------------------------------------------------- + // Data. + public new class Data : SacsHierarchyItem.Data + { + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data() + { + Status = DefaultStatus; + } + // Properties. + public SysId UserSportId + { + get { return data.UserSportId; } + set { CheckChanged(data.UserSportId, value); data.UserSportId = value; } + } + public DateTime PeriodFrom + { + get { return data.PeriodFrom; } + set { CheckChanged(data.PeriodFrom, value); data.PeriodFrom = value; } + } + public DateTime PeriodTo + { + get { return data.PeriodTo; } + set { CheckChanged(data.PeriodTo, value); data.PeriodTo = value; } + } + public SysId OrganisationId + { + get { return data.OrganisationId; } + set { CheckChanged(data.OrganisationId, value); data.OrganisationId = value; } + } + public String OrganisationName + { + get { return data.OrganisationName; } + set { CheckChanged(data.OrganisationName, value); data.OrganisationName = value; } + } + public String Summary + { + get { return data.Summary; } + set { CheckChanged(data.Summary, value); data.Summary = value; } + } + public String Team + { + get { return data.Team; } + set { CheckChanged(data.Team, value); data.Team = value; } + } + public String League + { + get { return data.League; } + set { CheckChanged(data.League, value); data.League = value; } + } + public String Speciality + { + get { return data.Speciality; } + set { CheckChanged(data.Speciality, value); data.Speciality = value; } + } + public ReadOnlyCollection GetSpecialitiesOther() + { + return data.SpecialitiesOther.ToList().AsReadOnly(); + } + public List SpecialitiesOther + { + set + { + CheckChanged(data.SpecialitiesOther.ToList(), value); + data.SpecialitiesOther.Clear(); + foreach (String speciality in value) + { + if (StringUtil.IsEmpty(speciality.Trim())) continue; + data.SpecialitiesOther.Add(speciality.Trim()); + } + } + } + public SysId RegionIdNation + { + get { return data.RegionIdNation; } + set { CheckChanged(data.RegionIdNation, value); data.RegionIdNation = value; } + } + public SysId RegionIdProvince + { + get { return data.RegionIdProvince; } + set { CheckChanged(data.RegionIdProvince, value); data.RegionIdProvince = value; } + } + public String UserSportExperienceData + { + get { return data.UserSportExperienceData; } + set { CheckChanged(data.UserSportExperienceData, value); data.UserSportExperienceData = value; } + } + // Population. + internal void PopulateFrom(Data data) + { + UserSportId = data.UserSportId; + PeriodFrom = data.PeriodFrom; + PeriodTo = data.PeriodTo; + OrganisationId = data.OrganisationId; + Summary = data.Summary; + Team = data.Team; + League = data.League; + Speciality = data.Speciality; + SpecialitiesOther = data.GetSpecialitiesOther().ToList(); + RegionIdNation = data.RegionIdNation; + RegionIdProvince = data.RegionIdProvince; + UserSportExperienceData = data.UserSportExperienceData; + base.PopulateFrom(data); + } + public Data Clone() + { + Data data = new Data(); + data.PopulateFrom(this); + return data; + } + } + + //------------------------------------------------------------------- + // Error field - identify properties with validation error. + public new class ErrField : SacsHierarchyItem.ErrField + { + // Identifies the field that has invalid data. + public ValidValue UserSportId { get; set; } = ValidValue.Valid; + public ValidValue PeriodFrom { get; set; } = ValidValue.Valid; + public ValidValue PeriodTo { get; set; } = ValidValue.Valid; + public ValidValue OrganisationId { get; set; } = ValidValue.Valid; + public ValidValue OrganisationName { get; set; } = ValidValue.Valid; + public ValidValue Summary { get; set; } = ValidValue.Valid; + public ValidValue Team { get; set; } = ValidValue.Valid; + public ValidValue League { get; set; } = ValidValue.Valid; + public ValidValue Speciality { get; set; } = ValidValue.Valid; + public ValidValue SpecialitiesOther { get; set; } = ValidValue.Valid; + public ValidValue RegionIdNation { get; set; } = ValidValue.Valid; + public ValidValue RegionIdProvince { get; set; } = ValidValue.Valid; + public ValidValue UserSportExperienceData { get; set; } = ValidValue.Valid; + } + + //------------------------------------------------------------------- + // Data members. + private readonly Data data = new Data(); + public static readonly String SpecialitiesOtherDelim = "\n"; + + //------------------------------------------------------------------- + // Construction. + protected SaxUserSportExperience(SysId id, SysId userSportId) : base(id) + { + base.SetData(data); + UserSportId = userSportId; + Status = DefaultStatus; + } + + //------------------------------------------------------------------- + // Status. + private static readonly List validStatuses = new List() + { + SaStatus.Active, + SaStatus.Inactive, + SaStatus.Deleted, + }; + public static SaStatus DefaultStatus { get { return SaStatus.Active; } } + public static List ValidStatuses { get { return new List(validStatuses); } } + public static DataValue.TriStateType GetStatusTriState(SaStatus status) + { + if (status == SaStatus.Active) return DataValue.TriStateType.Green; + if (status == SaStatus.Inactive) return DataValue.TriStateType.Red; + if (status == SaStatus.Deleted) return DataValue.TriStateType.Purple; + return DataValue.TriStateType.Unknown; + } + + //------------------------------------------------------------------- + // Utilities. + public ItemId GetItemId() + { + return new ItemId((short)Sax.DataItemType.UserSportExperience, Id); + } + + //------------------------------------------------------------------- + // Properties. + public Data GetData() { return data.Clone(); } + public void SetData(Data data) + { + String fn = GetType().Name + ".SetData"; + // Properties that cannot be changed if previously specified. + if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id)) + throw new NotSupportedException(fn + " Id cannot be changed"); + if (SysId.IsValid(UserSportId) && SysId.ToInt(UserSportId) != SysId.ToInt(data.UserSportId)) + throw new NotSupportedException(fn + " User Sport Id cannot be changed"); + this.data.PopulateFrom(data); + } + public SysId UserSportId + { + get { return data.UserSportId; } + protected set { data.UserSportId = value; } + } + public DateTime PeriodFrom + { + get { return data.PeriodFrom; } + set { data.PeriodFrom = value; } + } + public DateTime PeriodTo + { + get { return data.PeriodTo; } + set { data.PeriodTo = value; } + } + public SysId OrganisationId + { + get { return data.OrganisationId; } + set { data.OrganisationId = value; } + } + public String OrganisationName + { + get { return data.OrganisationName; } + set { data.OrganisationName = value; } + } + public String Summary + { + get { return data.Summary; } + set { data.Summary = value; } + } + public String Team + { + get { return data.Team; } + set { data.Team = value; } + } + public String League + { + get { return data.League; } + set { data.League = value; } + } + public String Speciality + { + get { return data.Speciality; } + set { data.Speciality = value; } + } + public ReadOnlyCollection GetSpecialitiesOther() + { + return data.GetSpecialitiesOther(); + } + public List SpecialitiesOther + { + set { data.SpecialitiesOther = value; } + } + public SysId RegionIdNation + { + get { return data.RegionIdNation; } + set { data.RegionIdNation = value; } + } + public SysId RegionIdProvince + { + get { return data.RegionIdProvince; } + set { data.RegionIdProvince = value; } + } + public String UserSportExperienceData + { + get { return data.UserSportExperienceData; } + set { data.UserSportExperienceData = value; } + } + + //------------------------------------------------------------------- + // Flags - positions 1-16 available. + + //------------------------------------------------------------------- + // A s s o c i a t e d D a t a + //------------------------------------------------------------------- + + //------------------------------------------------------------------- + // P a r a m s + //------------------------------------------------------------------- + // List parameters. + public enum StatusCat + { + Any, + ActiveOnly, + InactiveOnly, + NotDeleted, + DeletedOnly, + } + /// + /// Item list parameters. + /// + public new class Params : SacsHierarchyItem.Params + { + // List filtering. + public List IdsIncluded { get; } = new List(); + public List IdsExcluded { get; } = new List(); + public List UserSportIdsIncluded { get; } = new List(); + public DateTime PeriodFrom { get; set; } + public DateTime PeriodTo { get; set; } + public List OrganisationIdsIncluded { get; } = new List(); + public List RegionIdsNationIncluded { get; } = new List(); + public List RegionIdsProvinceIncluded { get; } = new List(); + // Common properties. + public String NotesPartial { get; set; } + public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted; + } + + //------------------------------------------------------------------- + } + //======================================================================= + // Item list extension methods. + public static class SaxUserSportExperienceList + { + } + + //======================================================================= +} diff --git a/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserOrganisation.cs b/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserOrganisation.cs index 68dbb05..12eeaec 100644 --- a/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserOrganisation.cs +++ b/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserOrganisation.cs @@ -201,23 +201,29 @@ namespace Saxonite.Net.Standard.Base.Mgr } //--------------------------------------------------------------- - // User & Organisation combination must be unique. - if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore) + // Associated data - ignore for deleted items. + if (!data.IsStatusDeleted) { - if (SysId.IsValid(data.UserAccountId) && SysId.IsValid(data.OrganisationId)) + + // User & Organisation combination must be unique. + if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore) { - SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); - if (SysId.IsValid(data.Id)) - prmUserOrganisation.IdsExcluded.Add(data.Id); - prmUserOrganisation.UserAccountIdsIncluded.Add(data.UserAccountId); - prmUserOrganisation.OrganisationIdsIncluded.Add(data.OrganisationId); - prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any; - if (GetUserOrganisationCount(prmUserOrganisation) > 0) + if (SysId.IsValid(data.UserAccountId) && SysId.IsValid(data.OrganisationId)) { - errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid; - return SetErrorState("Organisation must be unique for user"); + SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); + if (SysId.IsValid(data.Id)) + prmUserOrganisation.IdsExcluded.Add(data.Id); + prmUserOrganisation.UserAccountIdsIncluded.Add(data.UserAccountId); + prmUserOrganisation.OrganisationIdsIncluded.Add(data.OrganisationId); + prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any; + if (GetUserOrganisationCount(prmUserOrganisation) > 0) + { + errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid; + return SetErrorState("Organisation must be unique for user"); + } } } + } //--------------------------------------------------------------- diff --git a/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserSportExperience.cs b/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserSportExperience.cs new file mode 100644 index 0000000..cfcb77b --- /dev/null +++ b/SaxoniteStandardBase/Base/Mgr/SaxAccountMgr-UserSportExperience.cs @@ -0,0 +1,260 @@ +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Utils; +using Saxonite.Base.App; +using Saxonite.Net.Standard.Base.App; +using Saxonite.Net.Standard.Base.Bus; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Saxonite.Net.Standard.Base.Mgr +{ + //======================================================================= + partial class SaxAccountMgr + { + //******************************************************************* + // Account Mgr - User Sport Experience + //******************************************************************* + // Utilities. + + //------------------------------------------------------------------- + // Create item. + public abstract SaxUserSportExperience CreateUserSportExperience(SysId userUserId); + + //------------------------------------------------------------------- + // Item exists. + public bool UserSportExperienceExistsById(SysId id) + { + ClearErrorState(); + if (!SysId.IsValid(id)) return false; + SaxUserSportExperience.Params prmUserSportExperience = new SaxUserSportExperience.Params(); + prmUserSportExperience.IdsIncluded.Add(id); + prmUserSportExperience.StatusCat = SaxUserSportExperience.StatusCat.Any; + return GetUserSportExperienceCount(prmUserSportExperience) == 1; + } + + //------------------------------------------------------------------- + // Retrieve individual items. + public abstract SaxUserSportExperience GetUserSportExperience(SaxUserSportExperience.Params prmUserSportExperience); + public SaxUserSportExperience GetUserSportExperienceById(SysId id) + { + ClearErrorState(); + if (!SysId.IsValid(id)) return null; + SaxUserSportExperience.Params prmUserSportExperience = new SaxUserSportExperience.Params(); + prmUserSportExperience.IdsIncluded.Add(id); + prmUserSportExperience.StatusCat = SaxUserSportExperience.StatusCat.Any; + return GetUserSportExperience(prmUserSportExperience); + } + + //------------------------------------------------------------------- + // Validate item data. + public bool IsValidUserSportExperience(SaxUserSportExperience userSportExperience) + { + ClearErrorState(); + if (userSportExperience == null) return SetErrorState(ErrorMessage.ItemNotSpecified); + return IsValidUserSportExperienceData(userSportExperience.GetData(), new SaxUserSportExperience.ErrField()); + } + public virtual bool IsValidUserSportExperienceData(SaxUserSportExperience.Data data, SaxUserSportExperience.ErrField errField) + { + ClearErrorState(); + + //--------------------------------------------------------------- + // User Sport. + if (errField.UserSportId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserSportId)) + { + errField.UserSportId = SacsHierarchyItem.ValidValue.Invalid; + return SetErrorState("User Sport Id must be specified"); + } + + //--------------------------------------------------------------- + // Organisation name. + if (errField.OrganisationName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.OrganisationName, "organisation name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName))) + { + errField.OrganisationName = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + + // Summary. + if (errField.Summary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Summary, "summary", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary))) + { + errField.Summary = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + + // Team. + if (errField.Team != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Team, "team", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team))) + { + errField.Team = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + + // League. + if (errField.League != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.League, "league", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_League))) + { + errField.League = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + + // Speciality. + if (errField.Speciality != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Speciality, "speciality", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality))) + { + errField.Speciality = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + + // Other specialities. + if (errField.SpecialitiesOther != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.GetSpecialitiesOther().ToList().Concat(SaxUserSportExperience.SpecialitiesOtherDelim), "other specialities", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_SpecialitiesOther))) + { + errField.Speciality = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + + //--------------------------------------------------------------- + // Regions. + if (errField.RegionIdNation != SacsHierarchyItem.ValidValue.Ignore) + { + } + if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore) + { + } + + //--------------------------------------------------------------- + // Common properties. + if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes))) + { + errField.Notes = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) + { + if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status), true, true)) + { + errField.Status = SacsHierarchyItem.ValidValue.Invalid; + return false; + } + if (!SaxUserSportExperience.ValidStatuses.Contains(data.Status)) + { + errField.Status = SacsHierarchyItem.ValidValue.Invalid; + return SetErrorState(ErrorMessage.InvalidStatus); + } + } + + //--------------------------------------------------------------- + // Associated data - ignore for deleted items. + if (!data.IsStatusDeleted) + { + + // User Sport must be valid. + if (errField.UserSportId != SacsHierarchyItem.ValidValue.Ignore && errField.UserSportId != SacsHierarchyItem.ValidValue.Invalid) + { + if (SysId.IsValid(data.UserSportId)) + { + if (!UserSportExistsById(data.UserSportId)) + { + errField.UserSportId = SacsHierarchyItem.ValidValue.Invalid; + return SetErrorState("User Sport does not exist"); + } + } + } + + // Regions. + if (errField.RegionIdNation != SacsHierarchyItem.ValidValue.Ignore && errField.RegionIdNation != SacsHierarchyItem.ValidValue.Invalid && SysId.IsValid(data.RegionIdNation)) + { + if (!ReferenceMgr.RegionExistsById(data.RegionIdNation)) + { + errField.RegionIdNation = SacsHierarchyItem.ValidValue.Invalid; + return SetErrorState("Invalid 'Nation' region"); + } + } + if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore && errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Invalid && SysId.IsValid(data.RegionIdProvince)) + { + if (!ReferenceMgr.RegionExistsById(data.RegionIdProvince)) + { + errField.RegionIdProvince = SacsHierarchyItem.ValidValue.Invalid; + return SetErrorState("Invalid 'Province' region"); + } + } + + } + //--------------------------------------------------------------- + + + //--------------------------------------------------------------- + return true; + } + + //------------------------------------------------------------------- + // Item database interface. + public abstract bool InsertUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo); + public abstract bool UpdateUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo); + public virtual bool UserSportExperienceCanBeDeleted(SaxUserSportExperience userSportExperience) + { + ClearErrorState(); + return true; + } + public abstract bool DeleteUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo); + + //------------------------------------------------------------------- + // Item list. + public abstract ColumnDfn GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column columnId, String caption = "", int width = 0); + public abstract List GetUserSportExperienceQueryFilter(SaxUserSportExperience.Params prmUserSportExperience); + public abstract long GetUserSportExperienceCount(SaxUserSportExperience.Params prmUserSportExperience); + public abstract List GetUserSportExperienceList(SaxUserSportExperience.Params prmUserSportExperience); + public abstract DbResultSet ExecuteUserSportExperienceQuery(List columns, SaxUserSportExperience.Params prmUserSportExperience); + + //------------------------------------------------------------------- + /// + /// Extract and format result set data value where specific handling is required. + /// Where response is an invalid data value, format value using column.FormatValue(values). + /// + public virtual DataValue GetUserSportExperienceDataValue(ColumnDfn column, NamedValue.Map values) + { + DataValue value = new DataValue(); + switch ((SaxUserSportExperience.Column)column.Id) + { + //----------------------------------------------------------- + // Organisation name. + case SaxUserSportExperience.Column.Organisation_Name: + { + String organisationName = values.GetString(column.DataName).TrimAll(); + if (StringUtil.IsEmpty(organisationName)) + organisationName = values.GetString(GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.OrganisationName).DataName).TrimAll(); + value = new DataValue(organisationName); + } + break; + + //----------------------------------------------------------- + // Notes. + case SaxUserSportExperience.Column.Notes: + { + value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); + } + break; + + //----------------------------------------------------------- + // Status. + case SaxUserSportExperience.Column.Status_Desc: + case SaxUserSportExperience.Column.Status_Ind: + { + String statusCode = values.GetValue(column.DataName).ToString(); + SaStatus status = SacsSystem.GetStatusForCode(statusCode); + if (column.Id == (int)SaxUserSportExperience.Column.Status_Desc) + value = new DataValue(SacsSystem.GetStatusDesc(status)); + else if (column.Id == (int)SaxUserSportExperience.Column.Status_Ind) + value = new DataValue(SaxUserSportExperience.GetStatusTriState(status)); + } + break; + + //----------------------------------------------------------- + } + return value; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaxoniteStandardDbas/Dbas/Bus/SaxUserSportExperience_Dbas.cs b/SaxoniteStandardDbas/Dbas/Bus/SaxUserSportExperience_Dbas.cs new file mode 100644 index 0000000..7c5beff --- /dev/null +++ b/SaxoniteStandardDbas/Dbas/Bus/SaxUserSportExperience_Dbas.cs @@ -0,0 +1,32 @@ +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Dbas; +using Saxonite.Net.Standard.Base.Bus; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Saxonite.Net.Standard.Dbas.Bus +{ + //======================================================================= + public class SaxUserSportExperience_Dbas : SaxUserSportExperience + { + //------------------------------------------------------------------- + // Data members. + private ISacsDatabase database; + + //------------------------------------------------------------------- + // Construction. + public SaxUserSportExperience_Dbas(ISacsDatabase database, SysId id, SysId userUserId, UInt16 flags) : + base(id, userUserId) + { + this.database = database; + Flags = flags; + } + + //------------------------------------------------------------------- + // Associated data. + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaxoniteStandardDbas/Dbas/Internal/ActivityIndex_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/ActivityIndex_Db.cs index 321f871..3c7a91c 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/ActivityIndex_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/ActivityIndex_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/Article_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Article_Db.cs index a136175..bd65cc2 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Article_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Article_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/ItemAddress_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/ItemAddress_Db.cs index 9c95d87..a999eee 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/ItemAddress_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/ItemAddress_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/ItemImage_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/ItemImage_Db.cs index ba84a52..bb2b4bf 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/ItemImage_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/ItemImage_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/ItemSport_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/ItemSport_Db.cs index cc44517..8a56870 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/ItemSport_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/ItemSport_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/OrganisationOpportunity_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/OrganisationOpportunity_Db.cs index 4122ef6..d6d9a52 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/OrganisationOpportunity_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/OrganisationOpportunity_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/Organisation_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Organisation_Db.cs index bf2177b..d4b77f3 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Organisation_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Organisation_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/Region_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Region_Db.cs index bab5d23..6175bb4 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Region_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Region_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/Sport_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Sport_Db.cs index 7ccc785..6408690 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Sport_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Sport_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserAccount_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserAccount_Db.cs index 6232a1c..197dc3d 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/UserAccount_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/UserAccount_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserActivity_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserActivity_Db.cs index 813e843..f91e952 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/UserActivity_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/UserActivity_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserOrganisation_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserOrganisation_Db.cs index 2834e22..eba0db1 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/UserOrganisation_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/UserOrganisation_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserRole_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserRole_Db.cs index bc4afb5..b42d091 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/UserRole_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/UserRole_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserSession_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserSession_Db.cs index f4fbb9d..a4cba6c 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/UserSession_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/UserSession_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserSportExperience_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserSportExperience_Db.cs new file mode 100644 index 0000000..77c29ab --- /dev/null +++ b/SaxoniteStandardDbas/Dbas/Internal/UserSportExperience_Db.cs @@ -0,0 +1,278 @@ +using Microsoft.Data.SqlClient; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Utils; +using Saxonite.Net.Standard.Dbas.Data; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; + +//--------------------------------------------------------------------------- +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 +//--------------------------------------------------------------------------- +namespace Saxonite.Net.Standard.Dbas.Internal +{ + internal class UserSportExperience_Db : SaxDbDataItem + { + //------------------------------------------------------------------- + // Column definitions. + public class ColumnsData + { + public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true); + public ColumnDataInt64 _UserSportId { get; } = new ColumnDataInt64("UserSportId"); + public ColumnDataDateTime _PeriodFrom { get; } = new ColumnDataDateTime("PeriodFrom"); + public ColumnDataDateTime _PeriodTo { get; } = new ColumnDataDateTime("PeriodTo"); + public ColumnDataInt32 _OrganisationId { get; } = new ColumnDataInt32("OrganisationId"); + public ColumnDataString _OrganisationName { get; } = new ColumnDataString("OrganisationName"); + public ColumnDataString _Summary { get; } = new ColumnDataString("Summary"); + public ColumnDataString _Team { get; } = new ColumnDataString("Team"); + public ColumnDataString _League { get; } = new ColumnDataString("League"); + public ColumnDataString _Speciality { get; } = new ColumnDataString("Speciality"); + public ColumnDataString _SpecialitiesOther { get; } = new ColumnDataString("SpecialitiesOther"); + public ColumnDataInt32 _RegionIdNation { get; } = new ColumnDataInt32("RegionIdNation"); + public ColumnDataInt32 _RegionIdProvince { get; } = new ColumnDataInt32("RegionIdProvince"); + public ColumnDataString _UserSportExperienceData { get; } = new ColumnDataString("UserSportExperienceData"); + public ColumnDataString _Notes { get; } = new ColumnDataString("Notes"); + public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags"); + public ColumnDataString _Status { get; } = new ColumnDataString("Status"); + public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn"); + public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy"); + public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost"); + public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn"); + public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy"); + public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost"); + } + + //------------------------------------------------------------------- + // Data members. + protected static List fields { get; } = new List() + { + "Id", + "UserSportId", + "PeriodFrom", + "PeriodTo", + "OrganisationId", + "OrganisationName", + "Summary", + "Team", + "League", + "Speciality", + "SpecialitiesOther", + "RegionIdNation", + "RegionIdProvince", + "UserSportExperienceData", + "Notes", + "Flags", + "Status", + "CreateOn", + "CreateBy", + "CreateHost", + "UpdateOn", + "UpdateBy", + "UpdateHost", + }; + protected static List fieldsId { get; } = new List() + { + "Id", + }; + protected static List fieldsPrimary { get; } = new List() + { + "Id", + }; + protected static List fieldsIgnoreOnUpdate { get; } = new List() + { + "CreateOn", + "CreateBy", + "CreateHost", + }; + + //------------------------------------------------------------------- + // Construction. + internal UserSportExperience_Db (IDatabaseInfo dbInfo) : base(dbInfo) + { + } + + //------------------------------------------------------------------- + // Properties. + public override String SchemaName { get; } = "dbo"; + public override String TableName { get; } = "UserSportExperience"; + public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } } + public static List Fields { get { return new List(fields); } } + public static List FieldsId { get { return new List(fieldsId); } } + public static List FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } } + // Columns. + public ColumnsData Cols { get; } = new ColumnsData(); + public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } } + public Int64 _UserSportId { get { return Cols._UserSportId.Value; } set { Cols._UserSportId.Value = value; } } + public DateTime _PeriodFrom { get { return Cols._PeriodFrom.Value; } set { Cols._PeriodFrom.Value = value; } } + public DateTime _PeriodTo { get { return Cols._PeriodTo.Value; } set { Cols._PeriodTo.Value = value; } } + public Int32 _OrganisationId { get { return Cols._OrganisationId.Value; } set { Cols._OrganisationId.Value = value; } } + public String _OrganisationName { get { return Cols._OrganisationName.Value; } set { Cols._OrganisationName.Value = value; } } + public String _Summary { get { return Cols._Summary.Value; } set { Cols._Summary.Value = value; } } + public String _Team { get { return Cols._Team.Value; } set { Cols._Team.Value = value; } } + public String _League { get { return Cols._League.Value; } set { Cols._League.Value = value; } } + public String _Speciality { get { return Cols._Speciality.Value; } set { Cols._Speciality.Value = value; } } + public String _SpecialitiesOther { get { return Cols._SpecialitiesOther.Value; } set { Cols._SpecialitiesOther.Value = value; } } + public Int32 _RegionIdNation { get { return Cols._RegionIdNation.Value; } set { Cols._RegionIdNation.Value = value; } } + public Int32 _RegionIdProvince { get { return Cols._RegionIdProvince.Value; } set { Cols._RegionIdProvince.Value = value; } } + public String _UserSportExperienceData { get { return Cols._UserSportExperienceData.Value; } set { Cols._UserSportExperienceData.Value = value; } } + public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } } + public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } } + public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } } + public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } } + public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } } + public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } } + public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } } + public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } } + public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } } + // Existing columns - confirmed on database if table exists. + public List ExistingColumnNames { get { return GetExistingColumnNames(Fields); } } + public List ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } } + + //------------------------------------------------------------------- + // Population. + public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter) + { + dbCommand.CommandText = + "SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " + + "FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " + + (!String.IsNullOrEmpty(filter) ? "WHERE " + filter : ""); + Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText); + using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) + { + dbDataReader.Read(); + PopulateFrom(dbDataReader); + } + } + public override void PopulateFrom (DbDataReader dbDataReader) + { + _Id = GetFieldInt64(dbDataReader, "Id", _Id); + _UserSportId = GetFieldInt64(dbDataReader, "UserSportId", _UserSportId); + _PeriodFrom = GetFieldDateTime(dbDataReader, "PeriodFrom", _PeriodFrom); + _PeriodTo = GetFieldDateTime(dbDataReader, "PeriodTo", _PeriodTo); + _OrganisationId = GetFieldInt32(dbDataReader, "OrganisationId", _OrganisationId); + _OrganisationName = GetFieldString(dbDataReader, "OrganisationName", _OrganisationName); + _Summary = GetFieldString(dbDataReader, "Summary", _Summary); + _Team = GetFieldString(dbDataReader, "Team", _Team); + _League = GetFieldString(dbDataReader, "League", _League); + _Speciality = GetFieldString(dbDataReader, "Speciality", _Speciality); + _SpecialitiesOther = GetFieldString(dbDataReader, "SpecialitiesOther", _SpecialitiesOther); + _RegionIdNation = GetFieldInt32(dbDataReader, "RegionIdNation", _RegionIdNation); + _RegionIdProvince = GetFieldInt32(dbDataReader, "RegionIdProvince", _RegionIdProvince); + _UserSportExperienceData = GetFieldString(dbDataReader, "UserSportExperienceData", _UserSportExperienceData); + _Notes = GetFieldString(dbDataReader, "Notes", _Notes); + _Flags = GetFieldInt16(dbDataReader, "Flags", _Flags); + _Status = GetFieldString(dbDataReader, "Status", _Status); + _CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn); + _CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy); + _CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost); + _UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn); + _UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy); + _UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost); + } + + //------------------------------------------------------------------- + // Insert command. + public override bool ExecuteInsertCommand (DbCommand dbCommand) + { + List columnNames = ExistingColumnNamesNonId; + // Avoid insert if Identity field is already valid. + if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id"); + // Construct query. + String query = + "INSERT INTO " + TableNameFmt + " " + + "("+columnNames.Concat(",","[","]")+") "; + query += "Output Inserted.Id "; + if (dbCommand is SqlCommand) + query += "VALUES (" + columnNames.Concat(",", "@", "") + ") "; + else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") "; + dbCommand.CommandText = query; + Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText); + // Populate parameters. + dbCommand.Parameters.Clear(); + if (columnNames.ContainsCI("UserSportId")) AddCommandParameter(dbCommand, "@UserSportId", _UserSportId); + if (columnNames.ContainsCI("PeriodFrom")) AddCommandParameter(dbCommand, "@PeriodFrom", _PeriodFrom); + if (columnNames.ContainsCI("PeriodTo")) AddCommandParameter(dbCommand, "@PeriodTo", _PeriodTo); + if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId); + if (columnNames.ContainsCI("OrganisationName")) AddCommandParameter(dbCommand, "@OrganisationName", _OrganisationName); + if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary); + if (columnNames.ContainsCI("Team")) AddCommandParameter(dbCommand, "@Team", _Team); + if (columnNames.ContainsCI("League")) AddCommandParameter(dbCommand, "@League", _League); + if (columnNames.ContainsCI("Speciality")) AddCommandParameter(dbCommand, "@Speciality", _Speciality); + if (columnNames.ContainsCI("SpecialitiesOther")) AddCommandParameter(dbCommand, "@SpecialitiesOther", _SpecialitiesOther); + if (columnNames.ContainsCI("RegionIdNation")) AddCommandParameter(dbCommand, "@RegionIdNation", _RegionIdNation); + if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince); + if (columnNames.ContainsCI("UserSportExperienceData")) AddCommandParameter(dbCommand, "@UserSportExperienceData", _UserSportExperienceData); + if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes); + if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags); + if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status); + if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn); + if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy); + if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost); + if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn); + if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy); + if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost); + // Execute insert command. + bool commandSuccess = false; + int executeNonQuery = dbCommand.ExecuteNonQuery(); + if (executeNonQuery == 1) + { + dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";"; + _Id = Convert.ToInt64(dbCommand.ExecuteScalar()); + commandSuccess = (_Id > 0); + } + return commandSuccess; + } + + //------------------------------------------------------------------- + // Update command. + public override bool ExecuteUpdateCommand (DbCommand dbCommand) + { + // Avoid update if Identity field isn't valid. + if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id"); + // Columns to update. + List columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); + // Construct query. + String query = "UPDATE " + TableNameFmt + " SET "; + if (dbCommand is SqlCommand) + { + query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " "; + query += "WHERE Id=@Id;"; + } + else + { + query += columnNames.Concat(", ", "", "=?") + " "; + query += "WHERE Id=?;"; + } + dbCommand.CommandText = query; + Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText); + // Populate parameters. + dbCommand.Parameters.Clear(); + if (columnNames.ContainsCI("UserSportId")) AddCommandParameter(dbCommand, "@UserSportId", _UserSportId); + if (columnNames.ContainsCI("PeriodFrom")) AddCommandParameter(dbCommand, "@PeriodFrom", _PeriodFrom); + if (columnNames.ContainsCI("PeriodTo")) AddCommandParameter(dbCommand, "@PeriodTo", _PeriodTo); + if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId); + if (columnNames.ContainsCI("OrganisationName")) AddCommandParameter(dbCommand, "@OrganisationName", _OrganisationName); + if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary); + if (columnNames.ContainsCI("Team")) AddCommandParameter(dbCommand, "@Team", _Team); + if (columnNames.ContainsCI("League")) AddCommandParameter(dbCommand, "@League", _League); + if (columnNames.ContainsCI("Speciality")) AddCommandParameter(dbCommand, "@Speciality", _Speciality); + if (columnNames.ContainsCI("SpecialitiesOther")) AddCommandParameter(dbCommand, "@SpecialitiesOther", _SpecialitiesOther); + if (columnNames.ContainsCI("RegionIdNation")) AddCommandParameter(dbCommand, "@RegionIdNation", _RegionIdNation); + if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince); + if (columnNames.ContainsCI("UserSportExperienceData")) AddCommandParameter(dbCommand, "@UserSportExperienceData", _UserSportExperienceData); + if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes); + if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags); + if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status); + if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn); + if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy); + if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost); + AddCommandParameter(dbCommand, "@Id", _Id); + int executeNonQueryResult = dbCommand.ExecuteNonQuery(); + return (executeNonQueryResult == 1); + } + + //------------------------------------------------------------------- + } +} diff --git a/SaxoniteStandardDbas/Dbas/Internal/UserSport_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/UserSport_Db.cs index e920519..ee7e582 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/UserSport_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/UserSport_Db.cs @@ -9,7 +9,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26 +// Code generated by Sarand Database Utilities Thu 19-Aug-2021 17:19:49 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal { @@ -19,7 +19,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal // Column definitions. public class ColumnsData { - public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true); + public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true); public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId"); public ColumnDataInt32 _SportId { get; } = new ColumnDataInt32("SportId"); public ColumnDataInt16 _Participation { get; } = new ColumnDataInt16("Participation"); @@ -87,7 +87,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal public static List FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } } // Columns. public ColumnsData Cols { get; } = new ColumnsData(); - public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } } + public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } } public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } } public Int32 _SportId { get { return Cols._SportId.Value; } set { Cols._SportId.Value = value; } } public Int16 _Participation { get { return Cols._Participation.Value; } set { Cols._Participation.Value = value; } } @@ -123,7 +123,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal } public override void PopulateFrom (DbDataReader dbDataReader) { - _Id = GetFieldInt32(dbDataReader, "Id", _Id); + _Id = GetFieldInt64(dbDataReader, "Id", _Id); _UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId); _SportId = GetFieldInt32(dbDataReader, "SportId", _SportId); _Participation = GetFieldInt16(dbDataReader, "Participation", _Participation); @@ -179,7 +179,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal if (executeNonQuery == 1) { dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";"; - _Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar()); + _Id = Convert.ToInt64(dbCommand.ExecuteScalar()); commandSuccess = (_Id > 0); } return commandSuccess; diff --git a/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSport.cs b/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSport.cs index 65e7df3..bb55d1e 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSport.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSport.cs @@ -211,7 +211,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr // Copy data properties to and from database. private void PopulateTo(UserSport_Db dbUserSport, SaxUserSport userSport, DbUpdateInfo dbUpdateInfo) { - dbUserSport._Id = SysId.ToInt(userSport.Id); + dbUserSport._Id = SysId.ToLong(userSport.Id); dbUserSport._UserAccountId = SysId.ToInt(userSport.UserAccountId); dbUserSport._SportId = SysId.ToInt(userSport.SportId); dbUserSport._Participation = (short)userSport.Participation; diff --git a/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSportExperience.cs b/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSportExperience.cs new file mode 100644 index 0000000..869f909 --- /dev/null +++ b/SaxoniteStandardDbas/Dbas/Mgr/SaxAccountMgr_Dbas-UserSportExperience.cs @@ -0,0 +1,651 @@ +using Sarand.Net.Standard.Dbas.Data; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Saxonite.Base.App; +using Saxonite.Net.Standard.Dbas.Bus; +using Saxonite.Net.Standard.Dbas.Internal; +using Saxonite.Net.Standard.Base.Bus; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Text; +using Saxonite.Net.Standard.Base.App; +using System.Linq; +using Sarand.Net.Standard.Base.Utils; + +namespace Saxonite.Net.Standard.Dbas.Mgr +{ + //======================================================================= + partial class SaxAccountMgr_Dbas + { + //******************************************************************* + // Account Mgr - User Sport Experience + //******************************************************************* + // Utilities. + private List GetLogProperties(SaxUserSportExperience userSportExperience) + { + return new List() + { + new StringPair("Id",SysId.ToString(userSportExperience.Id)), + new StringPair("UserSportId",SysId.ToString(userSportExperience.UserSportId)), + new StringPair("PeriodFrom",DateUtil.Format(userSportExperience.PeriodFrom, "d-MMM-yyyy")), + new StringPair("PeriodTo",DateUtil.Format(userSportExperience.PeriodTo, "d-MMM-yyyy")), + new StringPair("Status",userSportExperience.StatusCode) + }; + } + + //------------------------------------------------------------------- + // Create item. + public override SaxUserSportExperience CreateUserSportExperience(SysId userSportId) + { + ClearErrorState(); + return new SaxUserSportExperience_Dbas(CoreDatabase, null, userSportId, 0); + } + private SaxUserSportExperience_Dbas CreateUserSportExperience(UserSportExperience_Db dbUserSportExperience) + { + ClearErrorState(); + SaxUserSportExperience_Dbas userSportExperience = new SaxUserSportExperience_Dbas(CoreDatabase, new SysId(dbUserSportExperience._Id), new SysId(dbUserSportExperience._UserSportId), (ushort)dbUserSportExperience._Flags); + PopulateFrom(dbUserSportExperience, userSportExperience); + return userSportExperience; + } + + //------------------------------------------------------------------- + // Get item. + public override SaxUserSportExperience GetUserSportExperience(SaxUserSportExperience.Params prm) + { + ClearErrorState(); + return GetUserSportExperience(GetUserSportExperienceQueryFilter(prm).Concat(" And ", "(", ")")); + } + private SaxUserSportExperience GetUserSportExperience(String filter) + { + ClearErrorState(); + long count = GetUserSportExperienceCount(filter); + if (count == 0) return null; + if (count != 1) + { + SetErrorState("Multiple items found"); + return null; + } + SaxUserSportExperience userSportExperience = null; + // Query data. + using (var dbConnection = CoreDatabase.CreateConnection()) + using (var dbCommand = dbConnection.CreateCommand()) + { + try + { + dbConnection.Open(); + UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo); + dbUserSportExperience.PopulateFrom(dbCommand, aliasUserSportExperience, filter); + userSportExperience = CreateUserSportExperience(dbUserSportExperience); + } + catch (Exception exc) + { + SetErrorState("Database query exception"); + SaLogger.Warn(GetType().Name + ".GetUserSportExperience\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); + } + } + return userSportExperience; + } + + //------------------------------------------------------------------- + // Validate item. + public override bool IsValidUserSportExperienceData(SaxUserSportExperience.Data data, SaxUserSportExperience.ErrField errField) + { + ClearErrorState(); + if (!base.IsValidUserSportExperienceData(data, errField)) return false; + return true; + } + + //------------------------------------------------------------------- + // Insert item. + public override bool InsertUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo) + { + String fn = GetType().Name + ".InsertUserSportExperience"; + ClearErrorState(); + if (!IsValidUserSportExperience(userSportExperience)) return false; + if (SysId.IsValid(userSportExperience.Id)) return SetErrorState(ErrorMessage.ValiditemId); + using (var dbConnection = CoreDatabase.CreateConnection()) + using (var dbCommand = dbConnection.CreateCommand()) + { + try + { + dbConnection.Open(); + UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo); + PopulateTo(dbUserSportExperience, userSportExperience, dbUpdateInfo); + if (UserSportExperience_Db.FieldsNonId.Contains("Id")) + { + // Generate next Id. + dbUserSportExperience._Id = CoreDatabase.GetNextIdFromTable("UserSportExperience"); + } + dbUserSportExperience.ExecuteInsertCommand(dbCommand); + userSportExperience.Id = new SysId(dbUserSportExperience._Id); + userSportExperience.Changed = false; + if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t")); + } + catch (Exception exc) { SetErrorState(exc.Message); } + } + return !HasErrorState(); + } + + //------------------------------------------------------------------- + // Update item. + public override bool UpdateUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo) + { + String fn = GetType().Name + ".UpdateUserSportExperience"; + ClearErrorState(); + if (!IsValidUserSportExperience(userSportExperience)) return false; + if (!SysId.IsValid(userSportExperience.Id)) return SetErrorState(ErrorMessage.InvalidItemId); + if (!userSportExperience.Changed) + { + if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t")); + return true; + } + using (var dbConnection = CoreDatabase.CreateConnection()) + using (var dbCommand = dbConnection.CreateCommand()) + { + try + { + // Retrieve item. + dbConnection.Open(); + UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo); + dbUserSportExperience.PopulateFrom(dbCommand, aliasUserSportExperience, "Id=" + SysId.ToString(userSportExperience.Id)); + // ToDo SaxUpdateLogItemMonitor_UserSportExperience updateLogMonitor = new SaxUpdateLogItemMonitor_UserSportExperience(SessionContext, CreateUserSportExperience(dbUserSportExperience), dbUpdateInfo); + // Update item. + PopulateTo(dbUserSportExperience, userSportExperience, dbUpdateInfo); + dbUserSportExperience.ExecuteUpdateCommand(dbCommand); + userSportExperience.Changed = false; + if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t")); + // Record updates. + // ToDo updateLogMonitor.RecordUpdatedValues(userSportExperience); + // ToDo updateLogMonitor.LogUpdates(); + } + catch (Exception exc) { SetErrorState(exc.Message); } + } + return !HasErrorState(); + } + + //------------------------------------------------------------------- + // Delete item. + public override bool UserSportExperienceCanBeDeleted(SaxUserSportExperience userSportExperience) + { + ClearErrorState(); + if (!base.UserSportExperienceCanBeDeleted(userSportExperience)) return false; + return true; + } + public override bool DeleteUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo) + { + String fn = GetType().Name + ".DeleteUserSportExperience"; + ClearErrorState(); + if (!UserSportExperienceCanBeDeleted(userSportExperience)) return false; + + // User Sports are logically deleted by changing the status. + userSportExperience.Status = SaStatus.Deleted; + return UpdateUserSportExperience(userSportExperience, dbUpdateInfo); + + /* + * Physical deletion. + using (var dbConnection = CoreDatabase.CreateConnection()) + using (var dbCommand = dbConnection.CreateCommand()) + { + try + { + // Retrieve item. + dbConnection.Open(); + UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo); + dbUserSportExperience.PopulateFrom(dbCommand, aliasUserSportExperience, "Id=" + userSportExperience.Id.ToString()); + // Delete item. + dbCommand.CommandType = System.Data.CommandType.Text; + dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience) + " WHERE Id=" + SysId.ToString(userSportExperience.Id) + ";"; + dbCommand.ExecuteNonQuery(); + userSportExperience.Changed = false; + if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t")); + } + catch (Exception exc) { SetErrorState(exc.Message); } + } + return !HasErrorState(); + */ + } + + //------------------------------------------------------------------- + // Copy data properties to and from database. + private void PopulateTo(UserSportExperience_Db dbUserSportExperience, SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo) + { + dbUserSportExperience._Id = SysId.ToLong(userSportExperience.Id); + dbUserSportExperience._UserSportId = SysId.ToLong(userSportExperience.UserSportId); + dbUserSportExperience._PeriodFrom = userSportExperience.PeriodFrom; + dbUserSportExperience._PeriodTo = userSportExperience.PeriodTo; + dbUserSportExperience._OrganisationId = SysId.ToInt(userSportExperience.OrganisationId); + dbUserSportExperience._OrganisationName = StringUtil.EmptyOnNull(userSportExperience.OrganisationName); + dbUserSportExperience._Summary = StringUtil.EmptyOnNull(userSportExperience.Summary); + dbUserSportExperience._Team = StringUtil.EmptyOnNull(userSportExperience.Team); + dbUserSportExperience._League = StringUtil.EmptyOnNull(userSportExperience.League); + dbUserSportExperience._Speciality = StringUtil.EmptyOnNull(userSportExperience.Speciality); + dbUserSportExperience._SpecialitiesOther = userSportExperience.GetSpecialitiesOther().ToList().Concat(SaxUserSportExperience.SpecialitiesOtherDelim); + dbUserSportExperience._RegionIdNation = SysId.ToInt(userSportExperience.RegionIdNation); + dbUserSportExperience._RegionIdProvince = SysId.ToInt(userSportExperience.RegionIdProvince); + dbUserSportExperience._UserSportExperienceData = StringUtil.EmptyOnNull(userSportExperience.UserSportExperienceData); + // Common. + dbUserSportExperience._Notes = userSportExperience.Notes; + dbUserSportExperience._Status = SacsSystem.GetStatusCode(userSportExperience.Status); + dbUserSportExperience._Flags = (short)userSportExperience.Flags; + if (!SysId.IsValid(userSportExperience.Id)) + { + dbUserSportExperience._CreateOn = DateTime.Now; + dbUserSportExperience._CreateBy = dbUpdateInfo.UserId.ToInt(); + dbUserSportExperience._CreateHost = dbUpdateInfo.Host; + } + dbUserSportExperience._UpdateOn = DateTime.Now; + dbUserSportExperience._UpdateBy = dbUpdateInfo.UserId.ToInt(); + dbUserSportExperience._UpdateHost = dbUpdateInfo.Host; + } + private void PopulateFrom(UserSportExperience_Db dbUserSportExperience, SaxUserSportExperience userSportExperience) + { + //userSportExperience.Id = new SysId(dbUserSportExperience._Id); + //userSportExperience.UserSportId = new SysId(dbUserSportExperience._UserSportId); + userSportExperience.PeriodFrom = dbUserSportExperience._PeriodFrom; + userSportExperience.PeriodTo = dbUserSportExperience._PeriodTo; + userSportExperience.OrganisationId = new SysId(dbUserSportExperience._OrganisationId); + userSportExperience.OrganisationName = dbUserSportExperience._OrganisationName; + userSportExperience.Summary = dbUserSportExperience._Summary; + userSportExperience.Team = dbUserSportExperience._Team; + userSportExperience.League = dbUserSportExperience._League; + userSportExperience.Speciality = dbUserSportExperience._Speciality; + userSportExperience.SpecialitiesOther = StringListUtil.Split(dbUserSportExperience._SpecialitiesOther, SaxUserSportExperience.SpecialitiesOtherDelim); + userSportExperience.RegionIdNation = new SysId(dbUserSportExperience._RegionIdNation); + userSportExperience.UserSportExperienceData = dbUserSportExperience._UserSportExperienceData; + // Common. + userSportExperience.Notes = dbUserSportExperience._Notes; + userSportExperience.Status = SacsSystem.GetStatusForCode(dbUserSportExperience._Status); + userSportExperience.SetCreateStamp(dbUserSportExperience._CreateOn, new SysId(dbUserSportExperience._CreateBy), dbUserSportExperience._CreateHost); + userSportExperience.SetUpdateStamp(dbUserSportExperience._UpdateOn, new SysId(dbUserSportExperience._UpdateBy), dbUserSportExperience._UpdateHost); + userSportExperience.AcceptChanges(); + } + + //------------------------------------------------------------------- + // Item column definitions. + private static readonly String aliasUserSportExperience = "UsrSpt"; + private static readonly String aliasUserSportExperience_Organisation = "UsrSpt_Org"; + private static readonly String prefixUserSportExperience_Organisation = "UsrSpt_Org_"; + private static readonly String aliasUserSportExperience_Region_Nation = "UsrSpt_Rgn_Nat"; + private static readonly String prefixUserSportExperience_Region_Nation = "UsrSpt_Rgn_Nat_"; + private static readonly String aliasUserSportExperience_Region_Province = "UsrSpt_Rgn_Pro"; + private static readonly String prefixUserSportExperience_Region_Province = "UsrSpt_Rgn_Pro_"; + private void SetUserSportExperienceColDfn + (ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol, + ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, + String alias = "", String prefix = "") + { + if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserSportExperience) + alias = aliasUserSportExperience; + col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align); + if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown) + col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol); + } + public override ColumnDfn GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column columnId, string caption = "", int width = 0) + { + ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); + switch (columnId) + { + //----------------------------------------------------------- + case SaxUserSportExperience.Column.Pos: + SetUserSportExperienceColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); + columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; + columnDfn.ReadOnly = true; + columnDfn.Resizable = false; + break; + case SaxUserSportExperience.Column.Id: + SetUserSportExperienceColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, ColumnAlignment.Right, DataValue.DataType.Long); + columnDfn.ReadOnly = true; + break; + + //------------------------------------------------------- + // User Sport. + case SaxUserSportExperience.Column.UserSportId: + SetUserSportExperienceColDfn(columnDfn, "User Sport Id", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, ColumnAlignment.Right, DataValue.DataType.Long); + columnDfn.ReadOnly = true; + break; + + //------------------------------------------------------- + // Period. + case SaxUserSportExperience.Column.PeriodFrom: + SetUserSportExperienceColDfn(columnDfn, "From", 90, SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodFrom, ColumnAlignment.Center, DataValue.DataType.Date); + break; + case SaxUserSportExperience.Column.PeriodTo: + SetUserSportExperienceColDfn(columnDfn, "To", 90, SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodTo, ColumnAlignment.Center, DataValue.DataType.Date); + break; + + //------------------------------------------------------- + // Organisation. + case SaxUserSportExperience.Column.OrganisationId: + SetUserSportExperienceColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long); + break; + case SaxUserSportExperience.Column.OrganisationName: + SetUserSportExperienceColDfn(columnDfn, "Organisation Name", 160, SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName); + break; + case SaxUserSportExperience.Column.Organisation_Name: + SetUserSportExperienceColDfn(columnDfn, "Organisation", 160, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSportExperience_Organisation, prefixUserSportExperience_Organisation); + columnDfn.ReadOnly = true; + break; + + //------------------------------------------------------- + // Summary. + case SaxUserSportExperience.Column.Summary: + SetUserSportExperienceColDfn(columnDfn, "Summary", 240, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary); + break; + + // Team. + case SaxUserSportExperience.Column.Team: + SetUserSportExperienceColDfn(columnDfn, "Team", 120, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team); + break; + + // League. + case SaxUserSportExperience.Column.League: + SetUserSportExperienceColDfn(columnDfn, "League", 120, SaxDbDfn_Core.ColumnIdx.UserSportExperience_League); + break; + + // Speciality. + case SaxUserSportExperience.Column.Speciality: + SetUserSportExperienceColDfn(columnDfn, "Speciality", 120, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality); + break; + + //------------------------------------------------------- + // Regions. + case SaxUserSportExperience.Column.RegionIdNation: + SetUserSportExperienceColDfn(columnDfn, "Region Id - Nation", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdNation, ColumnAlignment.Right, DataValue.DataType.Long); + break; + case SaxUserSportExperience.Column.Region_Nation_Name: + SetUserSportExperienceColDfn(columnDfn, "Nation", 140, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSportExperience_Region_Nation, prefixUserSportExperience_Region_Nation); + columnDfn.ReadOnly = true; + break; + case SaxUserSportExperience.Column.RegionIdProvince: + SetUserSportExperienceColDfn(columnDfn, "Region Id - Province", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdProvince, ColumnAlignment.Right, DataValue.DataType.Long); + break; + case SaxUserSportExperience.Column.Region_Province_Name: + SetUserSportExperienceColDfn(columnDfn, "Province", 140, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSportExperience_Region_Province, prefixUserSportExperience_Region_Province); + columnDfn.ReadOnly = true; + break; + + //----------------------------------------------------------- + // Derived properties. + + //----------------------------------------------------------- + // Common properties. + case SaxUserSportExperience.Column.Notes: + SetUserSportExperienceColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes); + break; + case SaxUserSportExperience.Column.Flags: + SetUserSportExperienceColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Flags, ColumnAlignment.Center, DataValue.DataType.Long); + break; + case SaxUserSportExperience.Column.Status: + SetUserSportExperienceColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, ColumnAlignment.Center); + break; + case SaxUserSportExperience.Column.Status_Desc: + SetUserSportExperienceColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, ColumnAlignment.Center); + break; + case SaxUserSportExperience.Column.Status_Ind: + SetUserSportExperienceColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, ColumnAlignment.Center, DataValue.DataType.TriState); + columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; + break; + case SaxUserSportExperience.Column.CreateOn_Date: + SetUserSportExperienceColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); + columnDfn.ReadOnly = true; + break; + case SaxUserSportExperience.Column.UpdateOn_Date: + SetUserSportExperienceColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); + columnDfn.ReadOnly = true; + break; + //----------------------------------------------------------- + } + if (!String.IsNullOrEmpty(caption)) + columnDfn.Caption = caption; + if (width > 0) + columnDfn.Width = width; + return columnDfn; + } + + //------------------------------------------------------------------- + // Item query filter. + public override List GetUserSportExperienceQueryFilter(SaxUserSportExperience.Params prm) + { + List filter = new List(); + + // Ids. + String idsIncluded = prm.IdsIncluded.Concat(","); + if (!idsIncluded.IsEmpty()) + filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience) + " IN (" + idsIncluded + ")"); + String idsxcluded = prm.IdsExcluded.Concat(","); + if (!idsxcluded.IsEmpty()) + filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience) + " NOT IN (" + idsxcluded + ")"); + + // User sports. + String userSportIdsIncluded = prm.UserSportIdsIncluded.Concat(","); + if (!userSportIdsIncluded.IsEmpty()) + filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, aliasUserSportExperience) + " IN (" + userSportIdsIncluded + ")"); + + // Organisations. + String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(","); + if (!organisationIdsIncluded.IsEmpty()) + filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience) + " IN (" + organisationIdsIncluded + ")"); + + // Notes. + if (!StringUtil.IsEmpty(prm.NotesPartial)) + filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes, aliasUserSportExperience) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'"); + + // Status. + if (prm.StatusCat != SaxUserSportExperience.StatusCat.Any) + filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, aliasUserSportExperience) + GetUserSportExperienceStatusCatFilterCondition(prm.StatusCat)); + + if (filter.Count < 1) filter.Add("1=1"); + return filter; + } + internal static String GetUserSportExperienceStatusCatFilterCondition(SaxUserSportExperience.StatusCat statusCat) + { + if (statusCat == SaxUserSportExperience.StatusCat.ActiveOnly) + return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"; + if (statusCat == SaxUserSportExperience.StatusCat.InactiveOnly) + return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'"; + if (statusCat == SaxUserSportExperience.StatusCat.NotDeleted) + return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; + if (statusCat == SaxUserSportExperience.StatusCat.DeletedOnly) + return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; + return ""; + } + // Item sort columns. + public List GetUserSportExperienceSortColumns(SaxUserSportExperience.Params prm) + { + // Sort sequence: + List sortColumnNames = new List(); + foreach (var columnDfn in prm.SortColumns) + { + // Need to ensure correct alias used for UserSportExperience columns in case of conflict. + String sortCol = String.Empty; + if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserSportExperience) + { + sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserSportExperience); + } + else + { + sortCol = columnDfn.DataName; + if (!StringUtil.IsEmpty(columnDfn.SortDataName)) + sortCol = columnDfn.SortDataName; + } + if (!sortCol.IsEmpty()) + { + DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls + sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", ")); + } + } + sortColumnNames.RemoveBlanks(); + if (sortColumnNames.IsEmpty()) + { + // Default sort columns. + sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience) + " ASC"); + } + return sortColumnNames; + } + + //------------------------------------------------------------------- + // Item count. + private long GetUserSportExperienceCount(String filter) + { + ClearErrorState(); + return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience) + " As " + aliasUserSportExperience, filter); + } + public override long GetUserSportExperienceCount(SaxUserSportExperience.Params prm) + { + ClearErrorState(); + return GetUserSportExperienceCount(GetUserSportExperienceQueryFilter(prm).Concat(" AND ", "(", ")")); + } + + //------------------------------------------------------------------- + // Item list. + public override List GetUserSportExperienceList(SaxUserSportExperience.Params prm) + { + List userSportExperiences = new List(); + DbQuery qry = new DbQuery(CoreDatabase.DbmsType); + qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience), aliasUserSportExperience); + UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo); + qry.Columns.AddRange(dbUserSportExperience.ExistingColumnNames); + qry.Filters.AddRange(GetUserSportExperienceQueryFilter(prm)); + qry.OrderBy.AddRange(GetUserSportExperienceSortColumns(prm)); + // Query data. + using (var dbConnection = CoreDatabase.CreateConnection()) + using (var dbCommand = dbConnection.CreateCommand()) + { + try + { + dbConnection.Open(); + dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging); + using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) + { + while (dbDataReader.Read()) + { + dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo); + dbUserSportExperience.PopulateFrom(dbDataReader); + userSportExperiences.Add(CreateUserSportExperience(dbUserSportExperience)); + } + } + } + catch (Exception exc) + { + SaLogger.Warn(GetType().Name + ".GetUserSportExperienceList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); + } + } + return userSportExperiences; + } + + //------------------------------------------------------------------- + // Item query execution. + public override DbResultSet ExecuteUserSportExperienceQuery(List columns, SaxUserSportExperience.Params prm) + { + ClearErrorState(); + + //--------------------------------------------------------------------- + // Construct query. + DbQuery query = new DbQuery(CoreDatabase.DbmsType); + query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience), aliasUserSportExperience); + + // Add columns as defined in query list. + if (columns.HasId(SaxUserSportExperience.Column.Id)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.UserSportId)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.PeriodFrom)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodFrom, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.PeriodTo)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodTo, aliasUserSportExperience)); + bool hasOrganisationCols = (columns.HasId(SaxUserSportExperience.Column.Organisation_Name)); + if (columns.HasId(SaxUserSportExperience.Column.OrganisationId) || hasOrganisationCols) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.OrganisationName) || columns.HasId(SaxUserSportExperience.Column.Organisation_Name)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.Summary)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.Team)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.League)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_League, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.Speciality)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality, aliasUserSportExperience)); + bool hasRegionNationCols = (columns.HasId(SaxUserSportExperience.Column.Region_Nation_Name)); + if (columns.HasId(SaxUserSportExperience.Column.RegionIdNation) || hasRegionNationCols) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdNation, aliasUserSportExperience)); + bool hasRegionProvinceCols = (columns.HasId(SaxUserSportExperience.Column.Region_Province_Name)); + if (columns.HasId(SaxUserSportExperience.Column.RegionIdProvince) || hasRegionProvinceCols) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdProvince, aliasUserSportExperience)); + // Common properties. + if (columns.HasId(SaxUserSportExperience.Column.Notes)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.Flags)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Flags, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.Status) || columns.HasId(SaxUserSportExperience.Column.Status_Desc) || columns.HasId(SaxUserSportExperience.Column.Status_Ind)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.CreateOn_Date)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_CreateOn, aliasUserSportExperience)); + if (columns.HasId(SaxUserSportExperience.Column.UpdateOn_Date)) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UpdateOn, aliasUserSportExperience)); + + //--------------------------------------------------------------------- + // Organisation. + if (hasOrganisationCols) + { + DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter); + joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserSportExperience_Organisation); + joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserSportExperience_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience)); + query.Joins.Add(joinOrganisation); + List cols = new List(); + cols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name); + foreach (var col in cols) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_Organisation), prefixUserSportExperience_Organisation + SaxDbDfn_Core.GetColumnName(col, false)); + } + + //--------------------------------------------------------------------- + // Region - Nation. + if (hasRegionNationCols) + { + DbQueryJoin joinRegionNation = new DbQueryJoin(DbJoinType.LeftOuter); + joinRegionNation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserSportExperience_Region_Nation); + joinRegionNation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserSportExperience_Region_Nation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience)); + query.Joins.Add(joinRegionNation); + List cols = new List(); + cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name); + foreach (var col in cols) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_Region_Nation), prefixUserSportExperience_Region_Nation + SaxDbDfn_Core.GetColumnName(col, false)); + } + + //--------------------------------------------------------------------- + // Region - Province. + if (hasRegionProvinceCols) + { + DbQueryJoin joinRegionProvince = new DbQueryJoin(DbJoinType.LeftOuter); + joinRegionProvince.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserSportExperience_Region_Province); + joinRegionProvince.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserSportExperience_Region_Province) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience)); + query.Joins.Add(joinRegionProvince); + List cols = new List(); + cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name); + foreach (var col in cols) + query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_Region_Province), prefixUserSportExperience_Region_Province + SaxDbDfn_Core.GetColumnName(col, false)); + } + + //--------------------------------------------------------------------- + // Populate filter. + query.Filters.AddRange(GetUserSportExperienceQueryFilter(prm)); + + if (prm.IdsIncluded.Count != 1) + { + // Configure sort sequence. + foreach (String sortColumn in GetUserSportExperienceSortColumns(prm)) + query.OrderBy.Add(sortColumn); + } + + //--------------------------------------------------------------------- + //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); + return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaxoniteStandardDbas/Dbas/Mgr/SaxActivityMgr_Dbas-UserActivity.cs b/SaxoniteStandardDbas/Dbas/Mgr/SaxActivityMgr_Dbas-UserActivity.cs index 34f5ef7..3031181 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/SaxActivityMgr_Dbas-UserActivity.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/SaxActivityMgr_Dbas-UserActivity.cs @@ -263,10 +263,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr private static readonly String aliasUserActivity = "UsrAct"; private static readonly String aliasUserActivity_UserAccount = "UsrAct_UsrAct"; private static readonly String prefixUserActivity_UserAccount = "UsrAct_UsrAct_"; - private static readonly String aliasUserActivity_Article = "UsrAct_JrnArt"; - private static readonly String prefixUserActivity_Article = "UsrAct_JrnArt_"; - private static readonly String aliasUserActivity_Opportunity = "UsrAct_OrgOpp"; - private static readonly String prefixUserActivity_Opportunity = "UsrAct_OrgOpp_"; + //private static readonly String aliasUserActivity_Article = "UsrAct_JrnArt"; + //private static readonly String prefixUserActivity_Article = "UsrAct_JrnArt_"; + //private static readonly String aliasUserActivity_Opportunity = "UsrAct_OrgOpp"; + //private static readonly String prefixUserActivity_Opportunity = "UsrAct_OrgOpp_"; private void SetUserActivityColDfn (ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol, ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, diff --git a/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Core.xml b/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Core.xml index 4f5b2b4..1245d2a 100644 --- a/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Core.xml +++ b/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Core.xml @@ -5447,13 +5447,13 @@ UserSport 1 Id - Int + BigInt - 4 - int + -5 + bigint true - 10 - 4 + 19 + 8 0 NoNulls false @@ -5786,5 +5786,445 @@ + + dbo + UserSportExperience + + + + dbo + UserSportExperience + 1 + Id + BigInt + + -5 + bigint + true + 19 + 8 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 2 + UserSportId + BigInt + + -5 + bigint + false + 19 + 8 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 3 + PeriodFrom + DateTime + + 93 + smalldatetime + false + 16 + 16 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 4 + PeriodTo + DateTime + + 93 + smalldatetime + false + 16 + 16 + 0 + Nullable + true + + + + dbo + UserSportExperience + 5 + OrganisationId + Int + + 4 + int + false + 10 + 4 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 6 + OrganisationName + VarChar + + -9 + nvarchar + false + 200 + 400 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 7 + Summary + VarChar + + -9 + nvarchar + false + 2000 + 4000 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 8 + Team + VarChar + + -9 + nvarchar + false + 64 + 128 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 9 + League + VarChar + + -9 + nvarchar + false + 64 + 128 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 10 + Speciality + VarChar + + -9 + nvarchar + false + 64 + 128 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 11 + SpecialitiesOther + VarChar + + -9 + nvarchar + false + 1000 + 2000 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 12 + RegionIdNation + Int + + 4 + int + false + 10 + 4 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 13 + RegionIdProvince + Int + + 4 + int + false + 10 + 4 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 14 + UserSportExperienceData + VarChar + + -9 + nvarchar + false + 0 + 0 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 15 + Notes + VarChar + + -9 + nvarchar + false + 2000 + 4000 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 16 + Flags + SmallInt + + 5 + smallint + false + 5 + 2 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 17 + Status + VarChar + + 12 + varchar + false + 3 + 3 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 18 + CreateOn + DateTime + + 93 + datetime + false + 23 + 16 + 3 + NoNulls + false + + + + dbo + UserSportExperience + 19 + CreateBy + Int + + 4 + int + false + 10 + 4 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 20 + CreateHost + VarChar + + 12 + varchar + false + 100 + 100 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 21 + UpdateOn + DateTime + + 93 + datetime + false + 23 + 16 + 3 + NoNulls + false + + + + dbo + UserSportExperience + 22 + UpdateBy + Int + + 4 + int + false + 10 + 4 + 0 + NoNulls + false + + + + dbo + UserSportExperience + 23 + UpdateHost + VarChar + + 12 + varchar + false + 100 + 100 + 0 + NoNulls + false + + + + + + dbo + UserSportExperience + PK_UserSportExperience + 1 + true + false + false + false + 1 + 2 + false + + + 1 + Id + true + + + + + dbo + UserSportExperience + IDX_UserSportExperience_UserSport + 3 + false + false + false + false + 0 + 0 + false + + + 1 + UserSportId + true + + + + + \ No newline at end of file