This commit is contained in:
2021-08-12 18:58:03 +01:00
parent 5e5ef7190b
commit 6a682ff9ea
51 changed files with 657 additions and 192 deletions
+11
View File
@@ -137,6 +137,7 @@ namespace Saxonite.Net.Core.Web.Base.App
//-------------------------------------------------------------------
private class CodeCache
{
public List<TypeCodeDesc> genderCodes;
public List<TypeCodeDesc> sportParticipationCodes;
public List<TypeCodeDesc> sportOfficiatingCodes;
public List<TypeCodeDesc> regionTypeCodes;
@@ -155,6 +156,16 @@ namespace Saxonite.Net.Core.Web.Base.App
return SacsSystem.GetStatusDesc(status);
}
// Gender.
public String GetGenderCaption(Sax.Gender gender)
{
if ((int)gender < 1) return "";
if (codes.genderCodes == null)
codes.genderCodes = SaxSystem.GetCodesOfType(Sax.CodeType.Gender);
// ToDo Opportunity Type localisation.
return codes.genderCodes.GetDescForType(gender);
}
// Sport Participation.
public String GetSportParticipationTypeCaption(Sax.SportParticipation participation)
{
+5
View File
@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Microsoft.Net.Http.Headers;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core;
@@ -160,6 +161,10 @@ namespace Saxonite.Net.Core.Web.Base.App
//config.app.UseAuthorization();
config.app.UseAntiforgeryTokens();
// Localisation.
IOptions<RequestLocalizationOptions> localizationOptions = config.app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
config.app.UseRequestLocalization(localizationOptions.Value);
config.app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
@@ -23,6 +23,7 @@ using Saxonite.Net.Standard.Base.Mgr;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
@@ -70,7 +71,23 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
/// <para>Some actions such as scoring a password's complexity don't need to.</para>
/// </summary>
public virtual bool StoreSessionData { get; protected set; } = true;
//-------------------------------------------------------------------
// Culture.
private CultureInfo sessionCulture;
private CultureInfo RequestCulture { get { return Request.HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture ?? CultureInfo.InvariantCulture; } }
public CultureInfo SessionCulture
{
get
{
if (sessionCulture == null)
{
sessionCulture = RequestCulture;
// ToDo Adjust culture if needed.
}
return sessionCulture;
}
}
private string LanguageIso2
{
get
@@ -79,6 +96,8 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
return feature.RequestCulture.UICulture.TwoLetterISOLanguageName.ToLower();
}
}
//-------------------------------------------------------------------
// Business components.
public SaxInternals Internals { get { if (internals == null) internals = new SaxInternals(SessionContext); return internals; } }
// Consoles.
@@ -191,6 +210,7 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
if (model == null) return;
// Session data.
model.Controller = this;
model.SessionData = SessionData;
// Redirect locations.
+10 -4
View File
@@ -6,12 +6,14 @@ using Sarand.Net.Standard.Base.Dbas;
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.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Consoles;
using Saxonite.Net.Standard.Base.Mgr;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace Saxonite.Net.Core.Web.Base.Models
{
@@ -38,11 +40,15 @@ namespace Saxonite.Net.Core.Web.Base.Models
protected SaxAppConfig AppConfig { get { return App.AppConfig; } }
protected SaxSystem_Web System { get { return App.System_Web; } }
public String SessionCookieName { get { return App.SessionCookieName; } }
public SaxLocaliser Localiser { get; }
public bool DebugMode { get { return SaxSystem.DebugMode; } }
// Session properties.
public SaxSessionData SessionData { get; set; }
public SaxSessionContext SessionContext { get { return SessionData?.SessionContext ?? App.SessionContext; } }
public DbUpdateInfo DbUpdateInfo { get { return SessionData?.DbUpdateInfo ?? new DbUpdateInfo(null, "", SaxSystem.ComputerName); } }
public bool DebugMode { get { return SaxSystem.DebugMode; } }
public SaxLocaliser Localiser { get; }
// Request properties.
public SaxController_Base Controller { get; set; }
public CultureInfo SessionCulture { get { return Controller?.SessionCulture ?? CultureInfo.InvariantCulture; } }
//-------------------------------------------------------------------
// Page configuration.
@@ -190,11 +196,11 @@ namespace Saxonite.Net.Core.Web.Base.Models
}
public String FormatDateForForm(DateTime value)
{
return DateUtil.Format(value, "dd-MMM-yyyy");
return DateUtil.Format(value, "dd-MMM-yyyy", SessionCulture);
}
public DateTime ParseDateFromForm(String value)
{
return DateUtil.ParseExact(value, "dd-MMM-yyyy");
return DateUtil.ParseExact(value, "dd-MMM-yyyy", SessionCulture);
}
//-------------------------------------------------------------------
+2 -2
View File
@@ -17,8 +17,8 @@
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxDbSchema = sax.ajaxDbSchema || { url: sax.url.base + 'System/Ajax/ValidateDatabaseSchema', formId: 'frmNavigate', callbackFn: sax.handleDbSchemaResponse, noWaitIcon: true };
sax.doAjaxRequest(sax.ajaxDbSchema, delay || 50);
sax.ajax.dbSchema = sax.ajax.dbSchema || { url: sax.url.base + 'System/Ajax/ValidateDatabaseSchema', formId: 'frmNavigate', callbackFn: sax.handleDbSchemaResponse, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.dbSchema, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.handleDbSchemaResponse = function (response)
@@ -16,8 +16,8 @@
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Organisation/Ajax/GetMemberList', formId: 'frmMemberFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetMemberList', formId: 'frmMemberFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
@@ -90,8 +90,8 @@
if (!response || !response.success || !response.user) return;
$mbrName.val(response.user.displayName);
}
sax.ajaxUserByEmail = sax.ajaxUserByEmail || { url: sax.url.base + 'User/Ajax/GetUserByEmail', formId: 'frmUserEmail', callbackFn: fn };
sax.doAjaxRequest(sax.ajaxUserByEmail, 100);
sax.ajax.userByEmail = sax.ajax.userByEmail || { url: sax.url.base + 'User/Ajax/GetUserByEmail', formId: 'frmUserEmail', callbackFn: fn };
sax.doAjaxRequest(sax.ajax.userByEmail, 100);
}
//--------------------------------------------------------------
@@ -146,8 +146,8 @@
sax.updateItem = function (id)
{
$('.UserOrganisationId', sax.$frm.memberId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Organisation/Ajax/GetMember', formId: 'frmMemberId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetMember', formId: 'frmMemberId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
@@ -175,8 +175,8 @@
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Organisation/Ajax/StoreMember', formId: 'frmMember', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreMember', formId: 'frmMember', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
sax.onStoreItem = function (response)
{
@@ -16,8 +16,8 @@
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Region/Ajax/GetList', formId: 'frmRegionFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Region/Ajax/GetList', formId: 'frmRegionFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
@@ -110,8 +110,8 @@
sax.updateItem = function (id)
{
$('.RegionId', sax.$frm.regionId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Region/Ajax/GetItem', formId: 'frmRegionId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Region/Ajax/GetItem', formId: 'frmRegionId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
@@ -139,8 +139,8 @@
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Region/Ajax/StoreItem', formId: 'frmRegion', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Region/Ajax/StoreItem', formId: 'frmRegion', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
sax.onStoreItem = function (response)
{
@@ -10,8 +10,8 @@
sax.doSignin = function ()
{
sax.clearControlErrors();
sax.ajaxSignin = sax.ajaxSignin || { url: sax.url.base + 'Security/Ajax/Signin', formId: 'frmSignIn', callbackFn: sax.onSignin };
sax.doAjaxRequest(sax.ajaxSignin, 50);
sax.ajax.signin = sax.ajax.signin || { url: sax.url.base + 'Security/Ajax/Signin', formId: 'frmSignIn', callbackFn: sax.onSignin };
sax.doAjaxRequest(sax.ajax.signin, 50);
}
sax.onSignin = function (response)
{
@@ -24,8 +24,8 @@
//--------------------------------------------------------------
sax.doScorePassword = function ()
{
sax.ajaxScorePassword = sax.ajaxScorePassword || { url: sax.url.base + 'Security/Ajax/ScorePassword', formId: 'frmChangePassword', callbackFn: sax.onScorePassword, noWaitIcon: true };
sax.doAjaxRequest(sax.ajaxScorePassword, 250);
sax.ajax.scorePassword = sax.ajax.scorePassword || { url: sax.url.base + 'Security/Ajax/ScorePassword', formId: 'frmChangePassword', callbackFn: sax.onScorePassword, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.scorePassword, 250);
}
sax.onScorePassword = function (response)
{
@@ -37,8 +37,8 @@
sax.doChangePassword = function ()
{
sax.clearControlErrors();
sax.ajaxChangePassword = sax.ajaxChangePassword || { url: sax.url.base + 'Security/Ajax/StorePassword', formId: 'frmChangePassword', callbackFn: sax.onChangePassword };
sax.doAjaxRequest(sax.ajaxChangePassword, 50);
sax.ajax.changePassword = sax.ajax.changePassword || { url: sax.url.base + 'Security/Ajax/StorePassword', formId: 'frmChangePassword', callbackFn: sax.onChangePassword };
sax.doAjaxRequest(sax.ajax.changePassword, 50);
}
sax.onChangePassword = function (response)
{
@@ -53,8 +53,8 @@
sax.doRequestPassword = function ()
{
sax.clearControlErrors();
sax.ajaxRequestPassword = sax.ajaxRequestPassword || { url: sax.url.base + 'Security/Ajax/RequestNewPassword', formId: 'frmRequestPassword', callbackFn: sax.onRequestPassword };
sax.doAjaxRequest(sax.ajaxRequestPassword, 50);
sax.ajax.requestPassword = sax.ajax.requestPassword || { url: sax.url.base + 'Security/Ajax/RequestNewPassword', formId: 'frmRequestPassword', callbackFn: sax.onRequestPassword };
sax.doAjaxRequest(sax.ajax.requestPassword, 50);
}
sax.onRequestPassword = function (response)
{
+6 -6
View File
@@ -16,8 +16,8 @@
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmSportFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmSportFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
@@ -78,8 +78,8 @@
sax.updateItem = function (id)
{
$('.SportId', sax.$frm.sportId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Sport/Ajax/GetItem', formId: 'frmSportId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Sport/Ajax/GetItem', formId: 'frmSportId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
@@ -103,8 +103,8 @@
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Sport/Ajax/StoreItem', formId: 'frmSport', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Sport/Ajax/StoreItem', formId: 'frmSport', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
sax.onStoreItem = function (response)
{
@@ -16,8 +16,8 @@
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'System/Ajax/GetDatabaseTables', formId: 'frmDatabaseFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'System/Ajax/GetDatabaseTables', formId: 'frmDatabaseFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
@@ -60,8 +60,8 @@
sax.viewItem = function (id)
{
$('.DatabaseTableName', sax.$frm.dbTableName).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'System/Ajax/GetDatabaseTable', formId: 'frmDatabaseTableName', callbackFn: sax.onViewItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'System/Ajax/GetDatabaseTable', formId: 'frmDatabaseTableName', callbackFn: sax.onViewItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onViewItem = function (response)
{
@@ -258,6 +258,12 @@
<data name="label.created" xml:space="preserve">
<value>Created</value>
</data>
<data name="label.date.of.birth" xml:space="preserve">
<value>Date of birth</value>
</data>
<data name="label.day" xml:space="preserve">
<value>Day</value>
</data>
<data name="label.delete" xml:space="preserve">
<value>Delete</value>
</data>
@@ -282,6 +288,9 @@
<data name="label.forgotten.password" xml:space="preserve">
<value>Forgotten password?</value>
</data>
<data name="label.gender" xml:space="preserve">
<value>Gender</value>
</data>
<data name="label.good" xml:space="preserve">
<value>Good</value>
</data>
@@ -306,12 +315,18 @@
<data name="label.members" xml:space="preserve">
<value>Members</value>
</data>
<data name="label.month" xml:space="preserve">
<value>Month</value>
</data>
<data name="label.name" xml:space="preserve">
<value>Name</value>
</data>
<data name="label.no" xml:space="preserve">
<value>No</value>
</data>
<data name="label.not.specified" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="label.officiating" xml:space="preserve">
<value>Officiating</value>
</data>
@@ -441,6 +456,9 @@
<data name="label.very.good" xml:space="preserve">
<value>Very Good</value>
</data>
<data name="label.year" xml:space="preserve">
<value>Year</value>
</data>
<data name="label.yes" xml:space="preserve">
<value>Yes</value>
</data>
@@ -35,6 +35,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public String Title { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public byte Gender { get; set; }
public String GenderCaption{ get; set; }
public byte DobDay { get; set; }
public byte DobMonth{ get; set; }
public short DobYear{ get; set; }
// Regions.
public int RegionIdCountry { get; set; }
public String RegionCaptionCountry { get; set; }
@@ -49,6 +54,12 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
data.Title = userAccount.Title;
data.FirstName = userAccount.FirstName;
data.LastName = userAccount.LastName;
data.Gender = (byte)userAccount.Gender;
data.GenderCaption = Localiser.GetGenderCaption(userAccount.Gender);
data.DobDay= (byte)userAccount.DateOfBirthDay;
data.DobMonth = (byte)userAccount.DateOfBirthMonth;
data.DobYear = (short)userAccount.DateOfBirthYear;
// Regions.
data.RegionIdCountry = SysId.ToInt(userAccount.RegionIdCountry);
data.RegionIdProvince = SysId.ToInt(userAccount.RegionIdProvince);
using (SaxRegion regionCountry = Internals.GetRegion(userAccount.RegionIdCountry))
@@ -77,6 +88,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
public AjaxResponse_AccountContactData(SaxModel_Online model) : base(model) { }
// Contact details.
public ContactResponseData Contact { get; set; }
// Reference data.
public List<CodeDesc> Genders { get; } = new List<CodeDesc>();
public List<CodeDesc> Months { get; } = new List<CodeDesc>();
}
// Ajax request.
[HttpPost]
@@ -92,6 +106,15 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData);
RefreshModel(model);
// Reference data - Genders.
responseData.Genders.Add("", Localiser["label.not.specified"]);
foreach (TypeCodeDesc gender in Internals.GenderCodes)
responseData.Genders.Add(gender.Type.ToString(), Localiser.GetGenderCaption((Sax.Gender)gender.Type));
// Reference data - Months.
for (int month= 1; month <= 12; month++)
responseData.Months.Add(month.ToString(), DateUtil.Format(new DateTime(DateTime.Today.Year, month, 1), "MMMM", SessionCulture));
// Retrieve user details.
SaxUserAccount userAccount = AccountMgr.GetUserAccountById(SessionData.User.UserAccountId);
if (userAccount == null)
@@ -101,7 +124,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
}
// Logically delete any previous 'Uploaded' Avatar image.
ItemId userItemId = GetUserItemId(SessionData.User.UserAccountId);
ItemId userItemId = userAccount.GetItemId();
SaxItemImage itemImageAvatarUploaded = ItemDataMgr.GetItemImage(userItemId, Sax.ImageType.AvatarUpload, SaxItemImage.StatusCat.ActiveOnly);
if (itemImageAvatarUploaded != null)
{
@@ -257,6 +280,27 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
userAccount.FirstName = model.AccountFirstName;
if (model.AccountLastName != null)
userAccount.LastName = model.AccountLastName;
if (model.AccountGender != null)
userAccount.Gender = model.GetAccountGender();
// Date of birth.
if (model.AccountDobYear != null)
userAccount.DateOfBirthYear = StringUtil.ToShort(model.AccountDobYear);
if (userAccount.DateOfBirthYear > 0)
{
if (model.AccountDobMonth != null)
userAccount.DateOfBirthMonth = (byte)StringUtil.ToShort(model.AccountDobMonth);
if (userAccount.DateOfBirthMonth > 0)
{
if (model.AccountDobDay != null)
userAccount.DateOfBirthDay = (byte)StringUtil.ToShort(model.AccountDobDay);
}
else userAccount.DateOfBirthDay = 0;
}
else
{
userAccount.DateOfBirthMonth = 0;
userAccount.DateOfBirthDay= 0;
}
// Regions.
if (model.AccountRegionIdCountry != null)
userAccount.RegionIdCountry = model.AccountRegionIdCountry.ToSysId();
@@ -279,7 +323,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
RefreshSessionProfileContact(userAccount);
// Check for uploaded profile image.
ItemId userItemId = GetUserItemId(SessionData.User.UserAccountId);
ItemId userItemId = userAccount.GetItemId();
SaxItemImage itemImageAvatarUploaded = ItemDataMgr.GetItemImage(userItemId, Sax.ImageType.AvatarUpload, SaxItemImage.StatusCat.ActiveOnly);
if (itemImageAvatarUploaded != null)
{
@@ -33,6 +33,14 @@ namespace Saxonite.Net.Core.Web.Online.Models
public String AccountTitle { get; set; }
public String AccountFirstName { get; set; }
public String AccountLastName { get; set; }
public String AccountGender { get; set; }
public Sax.Gender GetAccountGender()
{
return (Sax.Gender)StringUtil.ToShort(AccountGender);
}
public String AccountDobDay { get; set; }
public String AccountDobMonth{ get; set; }
public String AccountDobYear{ get; set; }
// Regions.
public String AccountRegionIdCountry { get; set; }
public String AccountRegionCaptionCountry { get; }
@@ -60,8 +68,10 @@ namespace Saxonite.Net.Core.Web.Online.Models
}
//-------------------------------------------------------------------
// Validate users's contact details.
public bool ValidateContactDetails(SaxController_Base.AjaxResponse_Data responseData)
{
//---------------------------------------------------------------
// Title.
if (AccountTitle != null)
{
@@ -92,6 +102,31 @@ namespace Saxonite.Net.Core.Web.Online.Models
responseData.SetControlError(nameof(AccountLastName), Localiser["msg.validation.maximum.length", GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName)]);
}
//---------------------------------------------------------------
// Date of birth.
if (AccountDobYear != null)
{
responseData.SetControlValue(nameof(AccountDobYear), AccountDobYear);
short dobYear = StringUtil.ToShort(AccountDobYear);
if (!StringUtil.IsNumeric(AccountDobYear) || dobYear > DateTime.Today.Year)
responseData.SetControlError(nameof(AccountDobYear), Localiser["msg.validation.invalid.value"]);
}
if (AccountDobMonth != null)
{
responseData.SetControlValue(nameof(AccountDobMonth), AccountDobMonth);
short dobMonth = StringUtil.ToShort(AccountDobMonth);
if (!StringUtil.IsEmpty(AccountDobMonth) && (!StringUtil.IsNumeric(AccountDobMonth) || dobMonth < 0 || dobMonth > 12))
responseData.SetControlError(nameof(AccountDobMonth), Localiser["msg.validation.invalid.value"]);
}
if (AccountDobDay != null)
{
responseData.SetControlValue(nameof(AccountDobDay), AccountDobDay);
short dobDay = StringUtil.ToShort(AccountDobDay);
if (!StringUtil.IsEmpty(AccountDobDay) && (!StringUtil.IsNumeric(AccountDobDay) || dobDay < 0 || dobDay > 31))
responseData.SetControlError(nameof(AccountDobDay), Localiser["msg.validation.invalid.value"]);
}
//---------------------------------------------------------------
// Country Region.
if (AccountRegionIdCountry != null && SysId.IsValid(AccountRegionIdCountry.ToSysId()))
{
@@ -7,7 +7,7 @@
<div class="sax-header">
<div class="row">
<div class="col"><div class="sax-caption">@Localiser["account.caption.profile.contact"]</div></div>
<div class="col sax-action sax-edit"><div class="sax-caption">@Localiser["account.caption.profile.contact"]</div></div>
<div class="fixed">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sax-burger">
@@ -86,7 +86,7 @@
@* User email *@
<div class="sax-form-control AccountEmailAddress">
<div class="sax-label">
<label for="ifAccountEmailAddress"><span><span class="required">*</span> @Localiser["label.email"]</span></label>
<label for="ifAccountEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.AccountEmailAddress, new { @id = "ifAccountEmailAddress", @class = "AccountEmailAddress sax-input", @readonly = "readonly", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress) })
@@ -100,7 +100,7 @@
@* User first Title *@
<div class="sax-form-control AccountTitle pr8">
<div class="sax-label">
<label for="cbAccountTitle"><span><span class="required"></span> @Localiser["label.title"]</span></label>
<label for="cbAccountTitle"><span>@Localiser["label.title"]</span></label>
</div>
<div class="sax-control">
@Html.DropDownListFor(model => model.AccountTitle, Model.TitlesForSelect, Localiser["label.select"], new { @id = "cbAccountTitle", @class = "AccountTitle sax-select" })
@@ -113,7 +113,7 @@
@* User first name *@
<div class="sax-form-control AccountFirstName pr8">
<div class="sax-label">
<label for="ifAccountFirstName"><span><span class="required">*</span> @Localiser["label.first.name"]</span></label>
<label for="ifAccountFirstName"><span>@Localiser["label.first.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.AccountFirstName, new { @id = "ifAccountFirstName", @class = "AccountFirstName sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName) })
@@ -126,7 +126,7 @@
@* User last name *@
<div class="sax-form-control AccountLastName">
<div class="sax-label">
<label for="ifAccountLastName"><span><span class="required">*</span> @Localiser["label.last.name"]</span></label>
<label for="ifAccountLastName"><span>@Localiser["label.last.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.AccountLastName, new { @id = "ifAccountLastName", @class = "AccountLastName sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName) })
@@ -137,11 +137,91 @@
</div>
@* Gender *@
<div class="sax-form-control AccountGender">
<div class="row">
<div class="col-sm-4">
<div class="sax-label">
<label for="cbAccountGender"><span>@Localiser["label.gender"]</span></label>
</div>
</div>
<div class="col-sm-8">
<div class="sax-control">
<select name="AccountGender" id="cbAccountGender" class="AccountGender sax-select"></select>
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
@* Date of birth *@
<div class="row">
<div class="col-sm-4">
<div class="sax-form-control AccountDob">
<div class="sax-label">
<label for="ifAccountRegionIdCountry"><span>@Localiser["label.date.of.birth"]</span></label>
</div>
</div>
</div>
<div class="col-sm-8">
<div class="row">
@* DOB Day *@
<div class="col-4">
<div class="sax-form-control AccountDobDay pr8">
<div class="sax-label">
<label for="cbAccountDobDay"><span>@Localiser["label.day"]</span></label>
</div>
<div class="sax-control">
<select name="AccountDobDay" id="cbAccountDobDay" class="AccountDobDay sax-select" onchange="sax.refreshDob();"></select>
</div>
<div class="sax-message"></div>
</div>
</div>
@* DOB Month *@
<div class="col-4">
<div class="sax-form-control AccountDobMonth pr8">
<div class="sax-label">
<label for="cbAccountDobMonth"><span>@Localiser["label.month"]</span></label>
</div>
<div class="sax-control">
<select name="AccountDobMonth" id="cbAccountDobMonth" class="AccountDobMonth sax-select" onchange="sax.refreshDob();"></select>
</div>
<div class="sax-message"></div>
</div>
</div>
@* DOB Year *@
<div class="col-4">
<div class="sax-form-control AccountDobYear">
<div class="sax-label">
<label for="cbAccountDobYear"><span>@Localiser["label.year"]</span></label>
</div>
<div class="sax-control">
<select name="AccountDobYear" id="cbAccountDobYear" class="AccountDobYear sax-select" onchange="sax.refreshDob();"></select>
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
</div>
</div>
@* Country Region *@
<div class="sax-form-control AccountRegionIdCountry">
<div class="row">
<div class="col-sm-4">
<div class="sax-label">
<label for="ifAccountRegionIdCountry"><span><span class="required">*</span> @Localiser["label.country"]</span></label>
<label for="ifAccountRegionIdCountry"><span>@Localiser["label.country"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-8">
<div class="sax-control row">
@Html.HiddenFor(model => model.AccountRegionIdCountry, new { @id = "ifAccountRegionIdCountry", @class = "AccountRegionIdCountry" })
<div class="col"><input type="text" id="ifAccountRegionCaptionCountry" class="AccountRegionCaptionCountry sax-input" readonly="readonly" onDblClick="sax.selectRegionCountry()" /></div>
@@ -149,6 +229,8 @@
</div>
<div class="sax-message"></div>
</div>
</div>
</div>
@* Account image *@
<div class="sax-form-control AccountContactImage">
@@ -206,6 +288,8 @@
}
</div>
<div class="spacer2"></div>
</div>
</div>
@@ -76,7 +76,7 @@
@* Sport *@
<div class="sax-form-control ProfileSportId">
<div class="sax-label">
<label for="ifProfileSport"><span><span class="required">*</span> @Localiser["label.sport"]</span></label>
<label for="ifProfileSport"><span>@Localiser["label.sport"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<input type="hidden" id="ifProfileSportId" class="ProfileSportId" name="ProfileSportId" />
@@ -89,7 +89,7 @@
@* Sport Participation *@
<div class="sax-form-control ProfileSportParticipation">
<div class="sax-label">
<label for="cbProfileSportParticipation"><span><span class="required">*</span> @Localiser["label.participation"]</span></label>
<label for="cbProfileSportParticipation"><span>@Localiser["label.participation"]</span></label>
</div>
<div class="sax-control">
@Html.DropDownListFor(model => model.ProfileSportParticipationCode, Model.SportParticipationCodesForSelect, "", new { @id = "cbProfileSportParticipation", @class = "ProfileSportParticipation sax-select" })
@@ -100,7 +100,7 @@
@* Sport Officiating *@
<div class="sax-form-control ProfileSportOfficiating">
<div class="sax-label">
<label for="cbProfileSportOfficiating"><span><span class="required">*</span> @Localiser["label.officiating"]</span></label>
<label for="cbProfileSportOfficiating"><span>@Localiser["label.officiating"]</span></label>
</div>
<div class="sax-control">
@Html.DropDownListFor(model => model.ProfileSportOfficiatingCode, Model.SportOfficiatingCodesForSelect, "", new { @id = "cbProfileSportOfficiating", @class = "ProfileSportOfficiating sax-select" })
@@ -29,7 +29,7 @@
@* Contact Email Address *@
<div class="sax-form-control ContactEmailAddress">
<div class="sax-label">
<label for="ifContactEmailAddress"><span><span class="required">*</span> @Localiser["label.email"]</span></label>
<label for="ifContactEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifContactEmailAddress" name="ContactEmailAddress" class="ContactEmailAddress sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress)" />
@@ -44,7 +44,7 @@
@* Contact First Name *@
<div class="sax-form-control ContactFirstName pr4">
<div class="sax-label">
<label for="cbContactFirstName"><span><span class="required">*</span> @Localiser["label.first.name"]</span></label>
<label for="cbContactFirstName"><span>@Localiser["label.first.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifContactFirstName" name="ContactFirstName" class="ContactFirstName sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName)" />
@@ -59,7 +59,7 @@
@* Contact Last Name *@
<div class="sax-form-control ContactLastName pr4">
<div class="sax-label">
<label for="cbContactLastName"><span><span class="required">*</span> @Localiser["label.last.name"]</span></label>
<label for="cbContactLastName"><span>@Localiser["label.last.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifContactLastName" name="ContactLastName" class="ContactLastName sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName)" />
@@ -82,7 +82,7 @@
@* Organisation name *@
<div class="sax-form-control OrganisationName">
<div class="sax-label">
<label for="ifOrganisationName"><span><span class="required">*</span> @Localiser["label.name"]</span></label>
<label for="ifOrganisationName"><span>@Localiser["label.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifOrganisationName" name="OrganisationName" class="OrganisationName sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Organisation_Name)" />
@@ -97,7 +97,7 @@
@* Organisation category *@
<div class="sax-form-control OrganisationCategory pr4">
<div class="sax-label">
<label for="cbOrganisationCategory"><span><span class="required">*</span> @Localiser["label.category"]</span></label>
<label for="cbOrganisationCategory"><span>@Localiser["label.category"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.DropDownList("", Model.OrganisationCategoriesForSelect, Localiser["label.select"], new { @id = "cbOrganisationCategory", @name = "OrganisationCategory", @class = "OrganisationCategory sax-select" })
@@ -112,7 +112,7 @@
@* Organisation type *@
<div class="sax-form-control OrganisationType">
<div class="sax-label">
<label for="cbOrganisationType"><span><span class="required">*</span> @Localiser["label.type"]</span></label>
<label for="cbOrganisationType"><span>@Localiser["label.type"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.DropDownList("", Model.OrganisationTypesForSelect, Localiser["label.select"], new { @id = "cbOrganisationType", @name = "OrganisationType", @class = "OrganisationType sax-select" })
@@ -127,7 +127,7 @@
@* Organisation sport *@
<div class="sax-form-control OrganisationSportId">
<div class="sax-label">
<label for="ifOrganisationSportCaption"><span><span class="required">*</span> @Localiser["label.sport"]</span></label>
<label for="ifOrganisationSportCaption"><span>@Localiser["label.sport"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<input type="hidden" id="ifOrganisationSportId" name="OrganisationSportId" OrganisationSportId"" class="OrganisationSportId" />
@@ -140,7 +140,7 @@
@* Organisation country *@
<div class="sax-form-control OrganisationRegionIdCountry">
<div class="sax-label">
<label for="ifOrganisationRegionCaption"><span><span class="required">*</span> @Localiser["label.country"]</span></label>
<label for="ifOrganisationRegionCaption"><span>@Localiser["label.country"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<input type="hidden" id="ifOrganisationRegionIdCountry" name="OrganisationRegionIdCountry" OrganisationRegionIdCountry"" class="OrganisationRegionIdCountry" />
@@ -153,7 +153,7 @@
@* Organisation address - Line 1 *@
<div class="sax-form-control OrganisationAddressLine1">
<div class="sax-caption">
<label for="ifOrganisationAddressLine1"><span><span class="required">*</span> @Localiser["label.organisation.address"]</span></label>
<label for="ifOrganisationAddressLine1"><span>@Localiser["label.organisation.address"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<div class="col"><input type="text" id="ifOrganisationAddressLine1" name="OrganisationAddressLine1" class="OrganisationAddressLine1 sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1)" /> </div>
@@ -180,7 +180,7 @@
@* Organisation address - Town *@
<div class="sax-form-control OrganisationAddressTown">
<div class="sax-label">
<label for="ifOrganisationAddressTown"><span><span class="required">*</span> @Localiser["label.town"]</span></label>
<label for="ifOrganisationAddressTown"><span>@Localiser["label.town"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<div class="col"><input type="text" id="ifOrganisationAddressTown" name="OrganisationAddressTown" class="OrganisationAddressTown sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.ItemAddress_Town)" /> </div>
@@ -191,7 +191,7 @@
@* Organisation address - Province *@
<div class="sax-form-control OrganisationAddressProvince">
<div class="sax-label">
<label for="ifOrganisationAddressProvince"><span><span class="required">*</span> @Localiser["label.province"]</span></label>
<label for="ifOrganisationAddressProvince"><span>@Localiser["label.province"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<div class="col"><input type="text" id="ifOrganisationAddressProvince" name="OrganisationAddressProvince" class="OrganisationAddressProvince sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.ItemAddress_Province)" /> </div>
@@ -202,7 +202,7 @@
@* Organisation address - PostalCode *@
<div class="sax-form-control OrganisationAddressPostalCode">
<div class="sax-label">
<label for="ifOrganisationAddressPostalCode"><span><span class="required">*</span> @Localiser["label.postalCode"]</span></label>
<label for="ifOrganisationAddressPostalCode"><span>@Localiser["label.postalCode"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
<div class="col"><input type="text" id="ifOrganisationAddressPostalCode" name="OrganisationAddressPostalCode" class="OrganisationAddressPostalCode sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode)" /> </div>
@@ -214,7 +214,7 @@
@*
<div class="sax-form-control OrganisationPhoneMain">
<div class="sax-label">
<label for="ifOrganisationPhoneMain"><span><span class="required">*</span> @Localiser["label.phone"]</span></label>
<label for="ifOrganisationPhoneMain"><span>@Localiser["label.phone"]</span></label>
</div>
<div class="sax-control row">
<div class="col"><input type="text" id="ifOrganisationPhoneMain" name="OrganisationPhoneMain" class="OrganisationPhoneMain sax-input" autocomplete="off" maxlength="@Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Item_PhoneMain)" /> </div>
@@ -47,18 +47,21 @@ else
</div>
</div>
@* Activities *@
@* Results panel *@
<div class="sax-panel-results">
<div class="sax-panel-messages"></div>
<div class="sax-panel-item-list"></div>
@* Item templates *@
<div class="sax-panel-item-template">
@* Activity template *@
<div class="sax-panel-item Activity">
<div class="sax-header row">
<div class="col">
<div class="sax-caption">
<div class="row">
<div class="col"><div class="sax-action ActivityCaption"></div></div>
<div class="col right"><div class="sax-action ActivityOrganisation"></div></div>
<div class="col center"><div class="sax-action ActivityOrganisation"></div></div>
</div>
</div>
</div>
@@ -27,7 +27,7 @@
@* Member Email Address *@
<div class="sax-form-control MemberEmailAddress">
<div class="sax-label">
<label for="ifMemberEmailAddress"><span><span class="required">*</span> @Localiser["label.email"]</span></label>
<label for="ifMemberEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" name="MemberEmailAddress" class="MemberEmailAddress sax-input" autocomplete="off" readonly="readonly" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress))" />
@@ -53,7 +53,7 @@
@* User Title *@
<div class="sax-form-control MemberTitle">
<div class="sax-label">
<label for="cbMemberTitle"><span><span class="required">*</span> @Localiser["label.title"]</span></label>
<label for="cbMemberTitle"><span>@Localiser["label.title"]</span></label>
</div>
<div class="sax-control">
<select id="cbMemberTitle" name="MemberTitle" class="MemberTitle sax-input"></select>
@@ -66,7 +66,7 @@
@* User First Name *@
<div class="sax-form-control MemberFirstName">
<div class="sax-label">
<label for="ifMemberFirstName"><span><span class="required">*</span> @Localiser["label.first.name"]</span></label>
<label for="ifMemberFirstName"><span>@Localiser["label.first.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifMemberFirstName" name="MemberFirstName" class="MemberFirstName sax-input" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName))" />
@@ -79,7 +79,7 @@
@* User Last Name *@
<div class="sax-form-control MemberLastName">
<div class="sax-label">
<label for="ifMemberLastName"><span><span class="required">*</span> @Localiser["label.last.name"]</span></label>
<label for="ifMemberLastName"><span>@Localiser["label.last.name"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<input type="text" id="ifMemberLastName" name="MemberLastName" class="MemberLastName sax-input" autocomplete="off" maxlength="@(Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName))" />
@@ -25,7 +25,7 @@
@* Opportunity type *@
<div class="sax-form-control OpportunityTypeCode">
<div class="sax-label">
<label for="cbOpportunityType"><span><span class="required">*</span> @Localiser["label.type"]</span></label>
<label for="cbOpportunityType"><span>@Localiser["label.type"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
<select id="cbOpportunityType" class="OpportunityType sax-select" name="OpportunityTypeCode"></select>
@@ -36,7 +36,7 @@
@* Opportunity position *@
<div class="sax-form-control OpportunityPosition">
<div class="sax-label">
<label for="ifOpportunityPosition"><span><span class="required">*</span> @Localiser["label.position"]</span></label>
<label for="ifOpportunityPosition"><span>@Localiser["label.position"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.OpportunityPosition, new { @id = "ifOpportunityPosition", @class = "OpportunityPosition sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position) })
@@ -47,7 +47,7 @@
@* Opportunity outline *@
<div class="sax-form-control OpportunityOutline">
<div class="sax-label">
<label for="ifOpportunityOutline"><span><span class="required">*</span> @Localiser["label.outline"]</span></label>
<label for="ifOpportunityOutline"><span>@Localiser["label.outline"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextAreaFor(model => model.OpportunityOutline, new { @id = "ifOpportunityOutline", @class = "OpportunityOutline sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline) })
@@ -58,7 +58,7 @@
@* Sport *@
<div class="sax-form-control OpportunitySportId">
<div class="sax-label">
<label for="ifOpportunitySportCaption"><span><span class="required">*</span> @Localiser["label.sport"]</span></label>
<label for="ifOpportunitySportCaption"><span>@Localiser["label.sport"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
@Html.HiddenFor(model => model.OpportunitySportId, new { @id = "ifOpportunitySportId", @class = "OpportunitySportId" })
@@ -71,7 +71,7 @@
@* Region *@
<div class="sax-form-control OpportunityRegionId">
<div class="sax-label">
<label for="ifOpportunityRegionCaption"><span><span class="required">*</span> @Localiser["label.region"]</span></label>
<label for="ifOpportunityRegionCaption"><span>@Localiser["label.region"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control row">
@Html.HiddenFor(model => model.OpportunityRegionId, new { @id = "ifOpportunityRegionId", @class = "OpportunityRegionId" })
@@ -20,7 +20,7 @@
/* Current password - required when setting password within user session. */
<div class="spacer4"></div>
<div class="sax-form-control PasswordCurrent">
<div class="sax-label"><label for="ifPasswordCurrent"><span><span class="required">*</span> @Localiser["label.password.current"]</span></label></div>
<div class="sax-label"><label for="ifPasswordCurrent"><span>@Localiser["label.password.current"]</span><span class="required">&nbsp;*</span></label></div>
<div class="sax-control">
@Html.PasswordFor(model => model.PasswordCurrent, new { @id = "ifPasswordCurrent", @class = "sax-input", @maxlength = Model.PasswordMaxLength })
</div>
@@ -35,7 +35,7 @@
<div class="spacer4"></div>
<div class="sax-form-control Password">
<div class="sax-label"><label for="ifPassword"><span><span class="required">*</span> @Localiser["label.password"]</span></label></div>
<div class="sax-label"><label for="ifPassword"><span>@Localiser["label.password"]</span><span class="required">&nbsp;*</span></label></div>
<div class="sax-control">
@Html.PasswordFor(model => model.Password, new { @id = "ifPassword", @class = "sax-input", @maxlength = Model.PasswordMaxLength })
</div>
@@ -48,7 +48,7 @@
<div class="spacer4"></div>
<div class="sax-form-control PasswordConfirm">
<div class="sax-label"><label for="ifPasswordConfirm"><span><span class="required">*</span> @Localiser["label.password.confirm"]</span></label></div>
<div class="sax-label"><label for="ifPasswordConfirm"><span>@Localiser["label.password.confirm"]</span><span class="required">&nbsp;*</span></label></div>
<div class="sax-control">
@Html.PasswordFor(model => model.PasswordConfirm, new { @id = "ifPasswordConfirm", @class = "sax-input", @maxlength = Model.PasswordMaxLength })
</div>
@@ -17,7 +17,7 @@
<div class="spacer4"></div>
<div class="sax-form-control EmailAddress">
<div class="sax-label">
<label for="ifEmailAddress"><span><span class="required">*</span> @Localiser["label.email.address"]</span></label>
<label for="ifEmailAddress"><span>@Localiser["label.email.address"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.EmailAddress, new { @id = "ifEmailAddress", @class = "sax-input lower", @maxlength = "128" })
@@ -18,7 +18,7 @@
<div class="spacer4"></div>
<div class="sax-form-control EmailAddress">
<div class="sax-label">
<label for="ifEmailAddress"><span><span class="required">*</span> @Localiser["label.email.address"]</span></label>
<label for="ifEmailAddress"><span>@Localiser["label.email.address"]</span><span class="required">&nbsp;*</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.EmailAddress, new { @id = "ifEmailAddress", @class = "sax-input lower", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress) })
@@ -31,7 +31,7 @@
<div class="row">
<div class="col-6">
<div class="sax-label">
<label for="ifPassword"><span><span class="required">*</span> @Localiser["label.password"]</span></label>
<label for="ifPassword"><span>@Localiser["label.password"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
</div>
@@ -6,6 +6,7 @@
{
"use strict";
sax.classFileDrag = 'sax-file-drag';
let $pnl = sax.$pnl, $dlg = sax.$dlg, $frm = sax.$frm;
sax.profile = { contact: {}, sports: {}, organisations: {} };
//--------------------------------------------------------------
@@ -39,7 +40,7 @@
}
sax.onRefreshProfileContactInfo = function (response)
{
//sax.debug('onRefreshProfileContactInfo', response);
sax.debug('onRefreshProfileContactInfo', response);
if (!response || !response.success || !response.contact) return;
$('.sax-panel-section').show();
var $section = $('.sax-panel-section.ProfileContact');
@@ -56,6 +57,8 @@
{
//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();
@@ -63,6 +66,16 @@
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);
@@ -84,6 +97,45 @@
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($('<option>'));
for (let y = now.getFullYear(); y >= now.getFullYear() - 110 - now.getFullYear() % 10; y--)
$selDobYear.append($('<option>').prop('value', y).text(y));
}
let yearVal = $selDobYear.val();
let $selDobMonth = $('#cbAccountDobMonth');
if (!$('option', $selDobMonth).length)
{
$selDobMonth.append($('<option>'));
for (let m = 1; m <= sax.data.months.length; m++)
$selDobMonth.append($('<option>').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($('<option>'));
for (let dt = new Date(yearVal, monthVal - 1, 1); dt.getMonth() == monthVal - 1; dt.setDate(dt.getDate() + 1))
$selDobDay.append($('<option>').prop('value', dt.getDate()).text(dt.getDate()));
$selDobDay.val(dayVal);
}
if (!monthVal)
$selDobDay.val('');
$selDobDay.prop('disabled', !monthVal);
}
//--------------------------------------------------------------
sax.selectRegionCountry = function ()
{
@@ -132,19 +184,19 @@
$('img.ContactImageUploadProgress', context).hide();
if (response.success)
{
sax.$dlg.selectContactImage.dialog('close');
$dlg.selectContactImage.dialog('close');
$('img.AccountContact', $section).prop('src', 'Image/Account/Contact/Profile?' + (new Date()).getTime());
}
}
sax.selectContactImage = function ()
{
let $dlg = sax.$dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload });
let $dlg = $dlg.selectContactImage.dialog('option', { title: sax.dlg.title.imageUpload });
$('#ifContactImage', $dlg).val('');
sax.openDialog($dlg, 560, 240);
}
sax.uploadContactImage = function ()
{
let $dlg = sax.$dlg.selectContactImage;
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);
@@ -200,7 +252,7 @@
sax.addProfileSport = function ()
{
//sax.debug('addProfileSport');
let $dlg = sax.$dlg.profileSport;
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);
@@ -216,7 +268,7 @@
sax.doUpdateProfileSport = function (response)
{
//sax.debug('doUpdateProfileSport', response);
let $dlg = sax.$dlg.profileSport;
let $dlg = $dlg.profileSport;
let item = response.sport;
$('.UserSportId', $dlg).val(item.id);
$('.ProfileSportExists', $dlg).val(1);
@@ -250,7 +302,7 @@
{
sax.refreshControlValues(response.controlValues);
if (!response || !response.success) return;
sax.$dlg.profileSport.dialog('close');
$dlg.profileSport.dialog('close');
sax.refreshProfileSportsInfo();
}
@@ -353,11 +405,11 @@
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.storeProfileSport(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.profileSport = $('#dlgProfileSport').dialog(opt);
$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'); };
sax.$dlg.selectContactImage = $('#dlgSelectContactImage').dialog(opt);
$dlg.selectContactImage = $('#dlgSelectContactImage').dialog(opt);
setTimeout(sax.refreshProfile, 200);
});
+6 -6
View File
@@ -19,8 +19,8 @@
var $items = $('.sax-panel-item-list', $pnl.results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Article/Ajax/GetList', formId: 'frmArticleFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Article/Ajax/GetList', formId: 'frmArticleFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
@@ -321,8 +321,8 @@
sax.updateItem = function (id)
{
$('.ArticleId', $frm.articleId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Article/Ajax/GetItem', formId: 'frmArticleId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Article/Ajax/GetItem', formId: 'frmArticleId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
@@ -383,8 +383,8 @@
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Article/Ajax/StoreItem', formId: 'frmArticle', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Article/Ajax/StoreItem', formId: 'frmArticle', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
sax.onStoreItem = function (response)
{
@@ -17,8 +17,8 @@
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Organisation/Ajax/GetOpportunityList', formId: 'frmOpportunityFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Organisation/Ajax/GetOpportunityList', formId: 'frmOpportunityFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
@@ -88,8 +88,8 @@
sax.data.memberOrganisations = response.organisations;
if (fnCallback) fnCallback();
}
sax.ajaxUserOrgs = sax.ajaxUserOrgs || { url: sax.url.base + 'Organisation/Ajax/GetMemberOrganisationList', formId: 'frmNavigate', callbackFn: handleMemberOrganisationsResponse };
sax.doAjaxRequest(sax.ajaxUserOrgs);
sax.ajax.userOrgs = sax.ajax.userOrgs || { url: sax.url.base + 'Organisation/Ajax/GetMemberOrganisationList', formId: 'frmNavigate', callbackFn: handleMemberOrganisationsResponse };
sax.doAjaxRequest(sax.ajax.userOrgs);
}
sax.showSelectOrganisation = function ()
{
@@ -149,8 +149,8 @@
{
if (!sax.data.userCanManageOpportunities) return;
$('.OpportunityId', sax.$frm.opportunityId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Organisation/Ajax/GetOpportunity', formId: 'frmOpportunityId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Organisation/Ajax/GetOpportunity', formId: 'frmOpportunityId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajax.updateItem, 50);
}
sax.onUpdateItem = function (response)
{
@@ -181,8 +181,8 @@
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Organisation/Ajax/StoreOpportunity', formId: 'frmOpportunity', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Organisation/Ajax/StoreOpportunity', formId: 'frmOpportunity', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajax.storeItem, 50);
}
sax.onStoreItem = function (response)
{
@@ -10,8 +10,8 @@
sax.doSignin = function ()
{
sax.clearControlErrors();
sax.ajaxSignin = sax.ajaxSignin || { url: sax.url.base + 'Security/Ajax/Signin', formId: 'frmSignIn', callbackFn: sax.onSignin };
sax.doAjaxRequest(sax.ajaxSignin, 50);
sax.ajax.signin = sax.ajax.signin || { url: sax.url.base + 'Security/Ajax/Signin', formId: 'frmSignIn', callbackFn: sax.onSignin };
sax.doAjaxRequest(sax.ajax.signin, 50);
}
sax.onSignin = function (response)
{
@@ -23,8 +23,8 @@
//--------------------------------------------------------------
sax.doScorePassword = function ()
{
sax.ajaxScorePassword = sax.ajaxScorePassword || { url: sax.url.base + 'Security/Ajax/ScorePassword', formId: 'frmChangePassword', callbackFn: sax.onScorePassword, noWaitIcon: true };
sax.doAjaxRequest(sax.ajaxScorePassword, 250);
sax.ajax.scorePassword = sax.ajax.scorePassword || { url: sax.url.base + 'Security/Ajax/ScorePassword', formId: 'frmChangePassword', callbackFn: sax.onScorePassword, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.scorePassword, 250);
}
sax.onScorePassword = function (response)
{
@@ -36,8 +36,8 @@
sax.doChangePassword = function ()
{
sax.clearControlErrors();
sax.ajaxChangePassword = sax.ajaxChangePassword || { url: sax.url.base + 'Security/Ajax/StorePassword', formId: 'frmChangePassword', callbackFn: sax.onChangePassword };
sax.doAjaxRequest(sax.ajaxChangePassword, 50);
sax.ajax.changePassword = sax.ajax.changePassword || { url: sax.url.base + 'Security/Ajax/StorePassword', formId: 'frmChangePassword', callbackFn: sax.onChangePassword };
sax.doAjaxRequest(sax.ajax.changePassword, 50);
}
sax.onChangePassword = function (response)
{
@@ -52,8 +52,8 @@
sax.doRequestPassword = function ()
{
sax.clearControlErrors();
sax.ajaxRequestPassword = sax.ajaxRequestPassword || { url: sax.url.base + 'Security/Ajax/RequestNewPassword', formId: 'frmRequestPassword', callbackFn: sax.onRequestPassword };
sax.doAjaxRequest(sax.ajaxRequestPassword, 50);
sax.ajax.requestPassword = sax.ajax.requestPassword || { url: sax.url.base + 'Security/Ajax/RequestNewPassword', formId: 'frmRequestPassword', callbackFn: sax.onRequestPassword };
sax.doAjaxRequest(sax.ajax.requestPassword, 50);
}
sax.onRequestPassword = function (response)
{
+1 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.1.4.0";
private static String version { get; } = "1.1.4.1";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
+14
View File
@@ -89,6 +89,7 @@ namespace Saxonite.Net.Standard.Base.App
{
YesNo,
DataItemType,
Gender,
SportParticipation,
SportOfficiating,
RegionType,
@@ -154,6 +155,19 @@ namespace Saxonite.Net.Standard.Base.App
ItemSport = 420,
}
//-------------------------------------------------------------------
public enum Gender
{
Unknown = 0,
/* Do not change the numeric values - tied to database. */
Female = 1,
Male = 2,
TransFemale = 10,
TransMale = 11,
Nonconforming = 20,
PreferNotToSay = 99,
}
//-------------------------------------------------------------------
public enum RegionType
{
+10 -4
View File
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Base.App
{
@@ -212,7 +212,10 @@ namespace Saxonite.Base.App
UserAccount_PhoneMain,
UserAccount_PhoneMobile,
UserAccount_PhoneAlt,
UserAccount_DateOfBirth,
UserAccount_Gender,
UserAccount_DateOfBirthDay,
UserAccount_DateOfBirthMonth,
UserAccount_DateOfBirthYear,
UserAccount_RegionIdCountry,
UserAccount_RegionIdProvince,
UserAccount_PasswordToken,
@@ -306,7 +309,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 15;
private static readonly int columnCount = 262;
private static readonly int columnCount = 265;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -666,7 +669,10 @@ namespace Saxonite.Base.App
new ColumnDfn(10,"PhoneMain",0,-9,false,50),
new ColumnDfn(10,"PhoneMobile",0,-9,false,50),
new ColumnDfn(10,"PhoneAlt",0,-9,false,50),
new ColumnDfn(10,"DateOfBirth",9,93,false,16),
new ColumnDfn(10,"Gender",2,-6,false,3),
new ColumnDfn(10,"DateOfBirthDay",2,-6,false,3),
new ColumnDfn(10,"DateOfBirthMonth",2,-6,false,3),
new ColumnDfn(10,"DateOfBirthYear",3,5,false,5),
new ColumnDfn(10,"RegionIdCountry",4,4,false,10),
new ColumnDfn(10,"RegionIdProvince",4,4,false,10),
new ColumnDfn(10,"PasswordToken",0,12,false,32),
@@ -88,6 +88,7 @@ namespace Saxonite.Net.Standard.Base.App
// System codes.
private readonly Dictionary<Sax.CodeType, List<TypeCodeDesc>> codeTypes = new Dictionary<Sax.CodeType, List<TypeCodeDesc>>();
public List<TypeCodeDesc> DataItemTypeCodes { get { return GetCodesOfType(Sax.CodeType.DataItemType); } }
public List<TypeCodeDesc> GenderCodes { get { return GetCodesOfType(Sax.CodeType.Gender); } }
public List<TypeCodeDesc> SportParticipationCodes { get { return GetCodesOfType(Sax.CodeType.SportParticipation); } }
public List<TypeCodeDesc> SportOfficiatingCodes { get { return GetCodesOfType(Sax.CodeType.SportOfficiating); } }
public List<TypeCodeDesc> RegionTypeCodes { get { return GetCodesOfType(Sax.CodeType.RegionType); } }
@@ -16,6 +16,7 @@ namespace Saxonite.Net.Standard.Base.App
// Code types.
private static readonly List<TypeCodeDesc> yesNoCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> dataItemTypeCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> genderCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> sportParticipationCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> sportOfficiatingCodes = new List<TypeCodeDesc>();
private static readonly List<TypeCodeDesc> regionTypeCodes = new List<TypeCodeDesc>();
@@ -59,6 +60,15 @@ namespace Saxonite.Net.Standard.Base.App
dataItemTypeCodes.Add(Sax.DataItemType.ItemSport, "ItemSport", "Item Sport");
dataItemTypeCodes.Add(Sax.DataItemType.ItemImage, "ItemImage", "Item Image");
//---------------------------------------------------------------
// Gender.
genderCodes.Add(Sax.Gender.Female, "Female", "Female");
genderCodes.Add(Sax.Gender.Male, "Male", "Male");
genderCodes.Add(Sax.Gender.TransFemale, "TransFemale", "TransFemale");
genderCodes.Add(Sax.Gender.TransMale, "TransMale", "TransMale");
genderCodes.Add(Sax.Gender.Nonconforming, "Nonconforming", "Nonconforming");
genderCodes.Add(Sax.Gender.PreferNotToSay, "PreferNotToSay", "Prefer not to say");
//---------------------------------------------------------------
// Sport participation.
sportParticipationCodes.Add(Sax.SportParticipation.Professional, "PRO", "Professional");
@@ -40,6 +40,8 @@ namespace Saxonite.Net.Standard.Base.App
return new List<TypeCodeDesc>(yesNoCodes);
case Sax.CodeType.DataItemType:
return new List<TypeCodeDesc>(dataItemTypeCodes);
case Sax.CodeType.Gender:
return new List<TypeCodeDesc>(genderCodes);
case Sax.CodeType.SportParticipation:
return new List<TypeCodeDesc>(sportParticipationCodes);
case Sax.CodeType.SportOfficiating:
@@ -24,6 +24,9 @@ namespace Saxonite.Net.Standard.Base.Bus
LastName,
PhoneMain,
PhoneMobile,
DateOfBirthDay,
DateOfBirthMonth,
DateOfBirthYear,
DateOfBirth,
// Regions.
RegionIdCountry,
@@ -64,7 +67,10 @@ namespace Saxonite.Net.Standard.Base.Bus
public String LastName { get; set; } = String.Empty;
public String PhoneMain { get; set; } = String.Empty;
public String PhoneMobile { get; set; } = String.Empty;
public DateTime DateOfBirth { get; set; }
public Sax.Gender Gender { get; set; }
public byte DateOfBirthDay { get; set; }
public byte DateOfBirthMonth { get; set; }
public short DateOfBirthYear { get; set; }
public SysId RegionIdCountry { get; set; }
public SysId RegionIdProvince{ get; set; }
// Security.
@@ -125,10 +131,25 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.PhoneMobile; }
set { CheckChanged(data.PhoneMobile, value); data.PhoneMobile = value; }
}
public DateTime DateOfBirth
public Sax.Gender Gender
{
get { return data.DateOfBirth; }
set { CheckChanged(data.DateOfBirth, value); data.DateOfBirth = value; }
get { return data.Gender; }
set { CheckChanged((int)data.Gender, (int)value); data.Gender = value; }
}
public byte DateOfBirthDay
{
get { return data.DateOfBirthDay; }
set { CheckChanged(data.DateOfBirthDay, value); data.DateOfBirthDay = value; }
}
public byte DateOfBirthMonth
{
get { return data.DateOfBirthMonth; }
set { CheckChanged(data.DateOfBirthMonth, value); data.DateOfBirthMonth = value; }
}
public short DateOfBirthYear
{
get { return data.DateOfBirthYear; }
set { CheckChanged(data.DateOfBirthYear, value); data.DateOfBirthYear = value; }
}
public SysId RegionIdCountry
{
@@ -192,7 +213,10 @@ namespace Saxonite.Net.Standard.Base.Bus
LastName = data.LastName;
PhoneMain = data.PhoneMain;
PhoneMobile = data.PhoneMobile;
DateOfBirth = data.DateOfBirth;
Gender = data.Gender;
DateOfBirthDay = data.DateOfBirthDay;
DateOfBirthMonth = data.DateOfBirthMonth;
DateOfBirthYear = data.DateOfBirthYear;
RegionIdCountry = data.RegionIdCountry;
RegionIdProvince = data.RegionIdProvince;
// Security.
@@ -226,7 +250,10 @@ namespace Saxonite.Net.Standard.Base.Bus
public ValidValue LastName { get; set; } = ValidValue.Valid;
public ValidValue PhoneMain { get; set; } = ValidValue.Valid;
public ValidValue PhoneMobile { get; set; } = ValidValue.Valid;
public ValidValue DateOfBirth { get; set; } = ValidValue.Valid;
public ValidValue Gender { get; set; } = ValidValue.Valid;
public ValidValue DateOfBirthDay { get; set; } = ValidValue.Valid;
public ValidValue DateOfBirthMonth { get; set; } = ValidValue.Valid;
public ValidValue DateOfBirthYear { get; set; } = ValidValue.Valid;
public ValidValue RegionIdCountry { get; set; } = ValidValue.Valid;
public ValidValue RegionIdProvince { get; set; } = ValidValue.Valid;
// Security.
@@ -339,10 +366,25 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.PhoneMobile; }
set { data.PhoneMobile = value; }
}
public DateTime DateOfBirth
public Sax.Gender Gender
{
get { return data.DateOfBirth; }
set { data.DateOfBirth = value; }
get { return data.Gender; }
set { data.Gender = value; }
}
public byte DateOfBirthDay
{
get { return data.DateOfBirthDay; }
set { data.DateOfBirthDay = value; }
}
public byte DateOfBirthMonth
{
get { return data.DateOfBirthMonth; }
set { data.DateOfBirthMonth = value; }
}
public short DateOfBirthYear
{
get { return data.DateOfBirthYear; }
set { data.DateOfBirthYear = value; }
}
public SysId RegionIdCountry
{
@@ -8,6 +8,7 @@ using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
@@ -130,11 +131,11 @@ namespace Saxonite.Net.Standard.Base.Mgr
errField.PhoneMobile = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Date of birth.
if (errField.DateOfBirth != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.DateOfBirth) && data.DateOfBirth.CompareTo(DateTime.Today) > 0)
// Date of birth year.
if (errField.DateOfBirthYear != SacsHierarchyItem.ValidValue.Ignore && data.DateOfBirthYear > DateTime.Today.Year)
{
errField.PhoneMobile = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Date of birth must not be in the future");
return SetErrorState("Date of birth year must not be in the future");
}
//---------------------------------------------------------------
@@ -244,11 +245,34 @@ namespace Saxonite.Net.Standard.Base.Mgr
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public virtual DataValue GetUserAccountDataValue(ColumnDfn column, NamedValue.Map values)
public virtual DataValue GetUserAccountDataValue(ColumnDfn column, NamedValue.Map values, CultureInfo cultureInfo = null)
{
DataValue value = new DataValue();
switch ((SaxUserAccount.Column)column.Id)
{
//-----------------------------------------------------------
case SaxUserAccount.Column.DateOfBirth:
{
byte dobDay = (byte)values.GetValue(GetUserAccountColumnDfn(SaxUserAccount.Column.DateOfBirthDay).DataName).AsLong();
byte dobMonth = (byte)values.GetValue(GetUserAccountColumnDfn(SaxUserAccount.Column.DateOfBirthMonth).DataName).AsLong();
short dobYear = (short)values.GetValue(GetUserAccountColumnDfn(SaxUserAccount.Column.DateOfBirthYear).DataName).AsLong();
List<String> dobParts = new List<string>();
if (dobYear > 0)
{
if (dobMonth > 0)
{
if (dobDay > 0)
dobParts.Add(dobDay.ToString());
// Format date with month to extract name.
DateTime monthDate = new DateTime(DateTime.Today.Year, dobMonth, 1);
dobParts.Add(DateUtil.Format(monthDate, "MMM", cultureInfo));
}
dobParts.Add(dobYear.ToString());
}
value = new DataValue(dobParts.Concat("-"));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxUserAccount.Column.Notes:
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -28,7 +28,10 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public ColumnDataString _PhoneMain { get; } = new ColumnDataString("PhoneMain");
public ColumnDataString _PhoneMobile { get; } = new ColumnDataString("PhoneMobile");
public ColumnDataString _PhoneAlt { get; } = new ColumnDataString("PhoneAlt");
public ColumnDataDateTime _DateOfBirth { get; } = new ColumnDataDateTime("DateOfBirth");
public ColumnDataByte _Gender { get; } = new ColumnDataByte("Gender");
public ColumnDataByte _DateOfBirthDay { get; } = new ColumnDataByte("DateOfBirthDay");
public ColumnDataByte _DateOfBirthMonth { get; } = new ColumnDataByte("DateOfBirthMonth");
public ColumnDataInt16 _DateOfBirthYear { get; } = new ColumnDataInt16("DateOfBirthYear");
public ColumnDataInt32 _RegionIdCountry { get; } = new ColumnDataInt32("RegionIdCountry");
public ColumnDataInt32 _RegionIdProvince { get; } = new ColumnDataInt32("RegionIdProvince");
public ColumnDataString _PasswordToken { get; } = new ColumnDataString("PasswordToken");
@@ -62,7 +65,10 @@ namespace Saxonite.Net.Standard.Dbas.Internal
"PhoneMain",
"PhoneMobile",
"PhoneAlt",
"DateOfBirth",
"Gender",
"DateOfBirthDay",
"DateOfBirthMonth",
"DateOfBirthYear",
"RegionIdCountry",
"RegionIdProvince",
"PasswordToken",
@@ -122,7 +128,10 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public String _PhoneMain { get { return Cols._PhoneMain.Value; } set { Cols._PhoneMain.Value = value; } }
public String _PhoneMobile { get { return Cols._PhoneMobile.Value; } set { Cols._PhoneMobile.Value = value; } }
public String _PhoneAlt { get { return Cols._PhoneAlt.Value; } set { Cols._PhoneAlt.Value = value; } }
public DateTime _DateOfBirth { get { return Cols._DateOfBirth.Value; } set { Cols._DateOfBirth.Value = value; } }
public Byte _Gender { get { return Cols._Gender.Value; } set { Cols._Gender.Value = value; } }
public Byte _DateOfBirthDay { get { return Cols._DateOfBirthDay.Value; } set { Cols._DateOfBirthDay.Value = value; } }
public Byte _DateOfBirthMonth { get { return Cols._DateOfBirthMonth.Value; } set { Cols._DateOfBirthMonth.Value = value; } }
public Int16 _DateOfBirthYear { get { return Cols._DateOfBirthYear.Value; } set { Cols._DateOfBirthYear.Value = value; } }
public Int32 _RegionIdCountry { get { return Cols._RegionIdCountry.Value; } set { Cols._RegionIdCountry.Value = value; } }
public Int32 _RegionIdProvince { get { return Cols._RegionIdProvince.Value; } set { Cols._RegionIdProvince.Value = value; } }
public String _PasswordToken { get { return Cols._PasswordToken.Value; } set { Cols._PasswordToken.Value = value; } }
@@ -171,7 +180,10 @@ namespace Saxonite.Net.Standard.Dbas.Internal
_PhoneMain = GetFieldString(dbDataReader, "PhoneMain", _PhoneMain);
_PhoneMobile = GetFieldString(dbDataReader, "PhoneMobile", _PhoneMobile);
_PhoneAlt = GetFieldString(dbDataReader, "PhoneAlt", _PhoneAlt);
_DateOfBirth = GetFieldDateTime(dbDataReader, "DateOfBirth", _DateOfBirth);
_Gender = GetFieldByte(dbDataReader, "Gender", _Gender);
_DateOfBirthDay = GetFieldByte(dbDataReader, "DateOfBirthDay", _DateOfBirthDay);
_DateOfBirthMonth = GetFieldByte(dbDataReader, "DateOfBirthMonth", _DateOfBirthMonth);
_DateOfBirthYear = GetFieldInt16(dbDataReader, "DateOfBirthYear", _DateOfBirthYear);
_RegionIdCountry = GetFieldInt32(dbDataReader, "RegionIdCountry", _RegionIdCountry);
_RegionIdProvince = GetFieldInt32(dbDataReader, "RegionIdProvince", _RegionIdProvince);
_PasswordToken = GetFieldString(dbDataReader, "PasswordToken", _PasswordToken);
@@ -219,7 +231,10 @@ namespace Saxonite.Net.Standard.Dbas.Internal
if (columnNames.ContainsCI("PhoneMain")) AddCommandParameter(dbCommand, "@PhoneMain", _PhoneMain);
if (columnNames.ContainsCI("PhoneMobile")) AddCommandParameter(dbCommand, "@PhoneMobile", _PhoneMobile);
if (columnNames.ContainsCI("PhoneAlt")) AddCommandParameter(dbCommand, "@PhoneAlt", _PhoneAlt);
if (columnNames.ContainsCI("DateOfBirth")) AddCommandParameter(dbCommand, "@DateOfBirth", _DateOfBirth);
if (columnNames.ContainsCI("Gender")) AddCommandParameter(dbCommand, "@Gender", _Gender);
if (columnNames.ContainsCI("DateOfBirthDay")) AddCommandParameter(dbCommand, "@DateOfBirthDay", _DateOfBirthDay);
if (columnNames.ContainsCI("DateOfBirthMonth")) AddCommandParameter(dbCommand, "@DateOfBirthMonth", _DateOfBirthMonth);
if (columnNames.ContainsCI("DateOfBirthYear")) AddCommandParameter(dbCommand, "@DateOfBirthYear", _DateOfBirthYear);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("PasswordToken")) AddCommandParameter(dbCommand, "@PasswordToken", _PasswordToken);
@@ -282,7 +297,10 @@ namespace Saxonite.Net.Standard.Dbas.Internal
if (columnNames.ContainsCI("PhoneMain")) AddCommandParameter(dbCommand, "@PhoneMain", _PhoneMain);
if (columnNames.ContainsCI("PhoneMobile")) AddCommandParameter(dbCommand, "@PhoneMobile", _PhoneMobile);
if (columnNames.ContainsCI("PhoneAlt")) AddCommandParameter(dbCommand, "@PhoneAlt", _PhoneAlt);
if (columnNames.ContainsCI("DateOfBirth")) AddCommandParameter(dbCommand, "@DateOfBirth", _DateOfBirth);
if (columnNames.ContainsCI("Gender")) AddCommandParameter(dbCommand, "@Gender", _Gender);
if (columnNames.ContainsCI("DateOfBirthDay")) AddCommandParameter(dbCommand, "@DateOfBirthDay", _DateOfBirthDay);
if (columnNames.ContainsCI("DateOfBirthMonth")) AddCommandParameter(dbCommand, "@DateOfBirthMonth", _DateOfBirthMonth);
if (columnNames.ContainsCI("DateOfBirthYear")) AddCommandParameter(dbCommand, "@DateOfBirthYear", _DateOfBirthYear);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("PasswordToken")) AddCommandParameter(dbCommand, "@PasswordToken", _PasswordToken);
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 6-Aug-2021 19:02:06
// Code generated by Sarand Database Utilities Wed 11-Aug-2021 17:31:26
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -218,7 +218,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
dbUserAccount._LastName = userAccount.LastName;
dbUserAccount._PhoneMain = StringUtil.EmptyOnNull(userAccount.PhoneMain);
dbUserAccount._PhoneMobile = StringUtil.EmptyOnNull(userAccount.PhoneMobile);
dbUserAccount._DateOfBirth = userAccount.DateOfBirth;
dbUserAccount._Gender = (byte)userAccount.Gender;
dbUserAccount._DateOfBirthDay = userAccount.DateOfBirthDay;
dbUserAccount._DateOfBirthMonth = userAccount.DateOfBirthMonth;
dbUserAccount._DateOfBirthYear = userAccount.DateOfBirthYear;
dbUserAccount._RegionIdCountry = SysId.ToInt(userAccount.RegionIdCountry);
dbUserAccount._RegionIdProvince = SysId.ToInt(userAccount.RegionIdProvince);
// Security
@@ -254,7 +257,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
userAccount.LastName = dbUserAccount._LastName;
userAccount.PhoneMain = dbUserAccount._PhoneMain;
userAccount.PhoneMobile = dbUserAccount._PhoneMobile;
userAccount.DateOfBirth = dbUserAccount._DateOfBirth;
userAccount.Gender = (Sax.Gender)dbUserAccount._Gender;
userAccount.DateOfBirthDay = dbUserAccount._DateOfBirthDay;
userAccount.DateOfBirthMonth = dbUserAccount._DateOfBirthMonth;
userAccount.DateOfBirthYear = dbUserAccount._DateOfBirthYear;
userAccount.RegionIdCountry = new SysId(dbUserAccount._RegionIdCountry);
userAccount.RegionIdProvince = new SysId(dbUserAccount._RegionIdProvince);
// Security.
@@ -332,8 +338,17 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
case SaxUserAccount.Column.PhoneMobile:
SetUserAccountColDfn(columnDfn, "PhoneMobile", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile);
break;
case SaxUserAccount.Column.DateOfBirthDay:
SetUserAccountColDfn(columnDfn, "DOB day", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthDay, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserAccount.Column.DateOfBirthMonth:
SetUserAccountColDfn(columnDfn, "DOB month", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthMonth, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserAccount.Column.DateOfBirthYear:
SetUserAccountColDfn(columnDfn, "DOB year", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthYear, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserAccount.Column.DateOfBirth:
SetUserAccountColDfn(columnDfn, "DOB", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirth, ColumnAlignment.Center, DataValue.DataType.Date);
SetUserAccountColDfn(columnDfn, "DOB", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
break;
//-------------------------------------------------------
@@ -499,7 +514,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserAccountStatusCatFilterCondition (SaxUserAccount.StatusCat statusCat)
internal static String GetUserAccountStatusCatFilterCondition(SaxUserAccount.StatusCat statusCat)
{
if (statusCat == SaxUserAccount.StatusCat.AwaitingOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "'";
@@ -627,8 +642,12 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMain, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.PhoneMobile))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirth, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirthDay) || columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthDay, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirthMonth) || columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthMonth, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirthYear) || columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthYear, aliasUserAccount));
// Regions.
bool hasCountryRegionCols = columns.HasId(SaxUserAccount.Column.RegionCountry_Name);
if (columns.HasId(SaxUserAccount.Column.RegionIdCountry) || hasCountryRegionCols)
@@ -256,7 +256,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>8</UniqueValues>
<UniqueValues>9</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -395,8 +395,8 @@
<Size>10</Size>
<BufferLen>4</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Nullable>NoNulls</Nullable>
<IsNullable>false</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
@@ -666,7 +666,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>2</Pages>
<UniqueValues>9</UniqueValues>
<UniqueValues>11</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -1717,7 +1717,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>9</UniqueValues>
<UniqueValues>11</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -3697,14 +3697,14 @@
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>10</Pos>
<Name>DateOfBirth</Name>
<DataType>DateTime</DataType>
<Name>Gender</Name>
<DataType>TinyInt</DataType>
<DataTypeName />
<DataTypeNative>93</DataTypeNative>
<DataTypeNameNative>smalldatetime</DataTypeNameNative>
<DataTypeNative>-6</DataTypeNative>
<DataTypeNameNative>tinyint</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>16</Size>
<BufferLen>16</BufferLen>
<Size>3</Size>
<BufferLen>1</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
@@ -3714,6 +3714,57 @@
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>11</Pos>
<Name>DateOfBirthDay</Name>
<DataType>TinyInt</DataType>
<DataTypeName />
<DataTypeNative>-6</DataTypeNative>
<DataTypeNameNative>tinyint</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>3</Size>
<BufferLen>1</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>12</Pos>
<Name>DateOfBirthMonth</Name>
<DataType>TinyInt</DataType>
<DataTypeName />
<DataTypeNative>-6</DataTypeNative>
<DataTypeNameNative>tinyint</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>3</Size>
<BufferLen>1</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>13</Pos>
<Name>DateOfBirthYear</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
<DataTypeNative>5</DataTypeNative>
<DataTypeNameNative>smallint</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>5</Size>
<BufferLen>2</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>14</Pos>
<Name>RegionIdCountry</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -3730,7 +3781,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>12</Pos>
<Pos>15</Pos>
<Name>RegionIdProvince</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -3747,7 +3798,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>13</Pos>
<Pos>16</Pos>
<Name>PasswordToken</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3764,7 +3815,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>14</Pos>
<Pos>17</Pos>
<Name>PasswordHashed</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3781,7 +3832,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>15</Pos>
<Pos>18</Pos>
<Name>PasswordHistory</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3798,7 +3849,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>16</Pos>
<Pos>19</Pos>
<Name>PasswordChangedAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3815,7 +3866,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>17</Pos>
<Pos>20</Pos>
<Name>LastLoginAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3832,7 +3883,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>18</Pos>
<Pos>21</Pos>
<Name>LastInvalidLoginAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3849,7 +3900,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>19</Pos>
<Pos>22</Pos>
<Name>InvalidLoginCount</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
@@ -3866,7 +3917,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>20</Pos>
<Pos>23</Pos>
<Name>Notes</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3883,7 +3934,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>21</Pos>
<Pos>24</Pos>
<Name>Flags</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
@@ -3900,7 +3951,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>22</Pos>
<Pos>25</Pos>
<Name>Status</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3917,7 +3968,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>23</Pos>
<Pos>26</Pos>
<Name>CreateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3934,7 +3985,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>24</Pos>
<Pos>27</Pos>
<Name>CreateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -3951,7 +4002,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>25</Pos>
<Pos>28</Pos>
<Name>CreateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -3968,7 +4019,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>26</Pos>
<Pos>29</Pos>
<Name>UpdateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -3985,7 +4036,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>27</Pos>
<Pos>30</Pos>
<Name>UpdateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -4002,7 +4053,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserAccount</Table>
<Pos>28</Pos>
<Pos>31</Pos>
<Name>UpdateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -4491,7 +4542,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>11</UniqueValues>
<UniqueValues>16</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>
@@ -5658,7 +5709,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>7</UniqueValues>
<UniqueValues>9</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>