using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Utils; using Saxonite.Base.App; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Saxonite.Net.Standard.Base.Mgr { //======================================================================= partial class SaxAccountMgr { //******************************************************************* // Account Mgr - User Account //******************************************************************* // Utilities. //------------------------------------------------------------------- // Create item. public abstract SaxUserAccount CreateUserAccount(); //------------------------------------------------------------------- // Item exists. public bool UserAccountExistsById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return false; SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params(); prmUserAccount.IdsIncluded.Add(id); prmUserAccount.StatusCat = SaxUserAccount.StatusCat.Any; return GetUserAccountCount(prmUserAccount) == 1; } public bool UserAccountExistsByEmailAddress(string emailAddress) { ClearErrorState(); if (StringUtil.IsEmpty(emailAddress)) return false; SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params(); prmUserAccount.EmailAddress = emailAddress; prmUserAccount.StatusCat = SaxUserAccount.StatusCat.Any; return GetUserAccountCount(prmUserAccount) == 1; } //------------------------------------------------------------------- // Retrieve individual items. public abstract SaxUserAccount GetUserAccount(SaxUserAccount.Params prmUserAccount); public SaxUserAccount GetUserAccountById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return null; SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params(); prmUserAccount.IdsIncluded.Add(id); prmUserAccount.StatusCat = SaxUserAccount.StatusCat.Any; return GetUserAccount(prmUserAccount); } public SaxUserAccount GetUserAccountByEmailAddress(string emailAddress) { ClearErrorState(); if (StringUtil.IsEmpty(emailAddress)) return null; SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params(); prmUserAccount.EmailAddress = emailAddress; prmUserAccount.StatusCat = SaxUserAccount.StatusCat.Any; return GetUserAccount(prmUserAccount); } //------------------------------------------------------------------- // Validate item data. public bool IsValidUserAccount(SaxUserAccount userAccount) { ClearErrorState(); if (userAccount == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidUserAccountData(userAccount.GetData(), new SaxUserAccount.ErrField()); } public virtual bool IsValidUserAccountData(SaxUserAccount.Data data, SaxUserAccount.ErrField errField) { ClearErrorState(); // Email address. if (errField.EmailAddress != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.EmailAddress, "email", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress), true)) { errField.EmailAddress = SacsHierarchyItem.ValidValue.Invalid; return false; } // Title. if (errField.Title != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Title, "Title", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_Title))) { errField.Title = SacsHierarchyItem.ValidValue.Invalid; return false; } // First name. if (errField.FirstName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.FirstName, "first name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName))) { errField.FirstName = SacsHierarchyItem.ValidValue.Invalid; return false; } // Initials. if (errField.Initials != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Initials, "initials", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_Initials))) { errField.Initials = SacsHierarchyItem.ValidValue.Invalid; return false; } // Last name. if (errField.LastName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.LastName, "last name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName))) { errField.LastName = SacsHierarchyItem.ValidValue.Invalid; return false; } // Phone - main. if (errField.PhoneMain != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMain, "phone", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMain))) { errField.PhoneMain = SacsHierarchyItem.ValidValue.Invalid; return false; } // Phone - mobile. if (errField.PhoneMobile != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMobile, "mobile", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile))) { 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) { errField.PhoneMobile = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Date of birth must not be in the future"); } //--------------------------------------------------------------- // Regions. if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore) { } if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore) { } //--------------------------------------------------------------- // Security. // Password token. if (errField.PasswordToken != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PasswordToken, "password token", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_PasswordToken))) { errField.PasswordToken = SacsHierarchyItem.ValidValue.Invalid; return false; } //--------------------------------------------------------------- // Common properties. if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaxUserAccount.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } } // Email Address must be unique. if (errField.EmailAddress != SacsHierarchyItem.ValidValue.Ignore) { SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params(); if (SysId.IsValid(data.Id)) prmUserAccount.IdsExcluded.Add(data.Id); prmUserAccount.EmailAddress = data.EmailAddress; prmUserAccount.StatusCat = SaxUserAccount.StatusCat.Any; if (GetUserAccountCount(prmUserAccount) > 0) { errField.EmailAddress = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Email must unique"); } } //--------------------------------------------------------------- // Associated data - ignore for deleted items. if (!data.IsStatusDeleted) { // Regions. if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore || errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore) { List regions = Internals.GetRegions(new List() { data.RegionIdCountry, data.RegionIdProvince }); SaxRegion regionCountry = regions.GetRegionById(data.RegionIdCountry); SaxRegion regionProvince = regions.GetRegionById(data.RegionIdProvince); if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore) { if (SysId.IsValid(data.RegionIdCountry) && regionCountry == null) return SetErrorState("Invalid country specified"); } if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore) { if (SysId.IsValid(data.RegionIdCountry) && regionCountry == null) return SetErrorState("Invalid country specified"); } } } //--------------------------------------------------------------- return true; } //------------------------------------------------------------------- // Item database interface. public abstract bool InsertUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo); public virtual bool UserAccountCanBeDeleted(SaxUserAccount userAccount) { ClearErrorState(); return true; } public abstract bool DeleteUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Item list. public abstract ColumnDfn GetUserAccountColumnDfn(SaxUserAccount.Column columnId, String caption = "", int width = 0); public abstract List GetUserAccountQueryFilter(SaxUserAccount.Params prmUserAccount); public abstract long GetUserAccountCount(SaxUserAccount.Params prmUserAccount); public abstract List GetUserAccountList(SaxUserAccount.Params prmUserAccount); public abstract DbResultSet ExecuteUserAccountQuery(List columns, SaxUserAccount.Params prmUserAccount); //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// public virtual DataValue GetUserAccountDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaxUserAccount.Column)column.Id) { //----------------------------------------------------------- // Notes. case SaxUserAccount.Column.Notes: value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; //----------------------------------------------------------- // Status. case SaxUserAccount.Column.Status_Desc: case SaxUserAccount.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaxUserAccount.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDesc(status)); else if (column.Id == (int)SaxUserAccount.Column.Status_Ind) value = new DataValue(SaxUserAccount.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }