This commit is contained in:
2022-03-03 18:46:08 +00:00
parent 1ac4c7f51a
commit 122056a9da
59 changed files with 1259 additions and 474 deletions
+4 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.2.3.2";
private static String version { get; } = "1.2.4";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
@@ -40,6 +40,9 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
// Version history.
//-------------------------------------------------------------------
// 1.2.4 3-Mar-2022 View own articles.
// - Online Home page lists own articlesregardless of sport/region.
// - Admin System Database Table info.
// 1.2.3 16-Feb-2022 User online activity.
// - Record user last online.
// - Online Organisation category select - remove Partner/Other.
+10 -2
View File
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Sat 15-Jan-2022 16:34:34
// Code generated by Sarand Database Utilities Thu 3-Mar-2022 16:50:00
//---------------------------------------------------------------------------
namespace Saxonite.Base.App
{
@@ -47,6 +47,9 @@ namespace Saxonite.Base.App
ActivityIndex_SportId,
ActivityIndex_RegionId,
ActivityIndex_EffectiveOn,
ActivityIndex_UserAccountIdOwner,
ActivityIndex_OrganisationIdOwner,
ActivityIndex_ExpiresOn,
ActivityIndex_Notes,
ActivityIndex_Flags,
ActivityIndex_Status,
@@ -216,6 +219,7 @@ namespace Saxonite.Base.App
Region_UpdateBy,
Region_UpdateHost,
Sport_Id,
Sport_SportIdParent,
Sport_Name,
Sport_SpecialityLabel,
Sport_Notes,
@@ -360,7 +364,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 18;
private static readonly int columnCount = 313;
private static readonly int columnCount = 317;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -555,6 +559,9 @@ namespace Saxonite.Base.App
new ColumnDfn(1,"SportId",4,4,false,10),
new ColumnDfn(1,"RegionId",4,4,false,10),
new ColumnDfn(1,"EffectiveOn",9,93,false,16),
new ColumnDfn(1,"UserAccountIdOwner",4,4,false,10),
new ColumnDfn(1,"OrganisationIdOwner",4,4,false,10),
new ColumnDfn(1,"ExpiresOn",9,93,false,16),
new ColumnDfn(1,"Notes",0,-9,false,2000),
new ColumnDfn(1,"Flags",3,5,false,5),
new ColumnDfn(1,"Status",0,12,false,3),
@@ -724,6 +731,7 @@ namespace Saxonite.Base.App
new ColumnDfn(9,"UpdateBy",4,4,false,10),
new ColumnDfn(9,"UpdateHost",0,12,false,100),
new ColumnDfn(10,"Id",4,4,true,10),
new ColumnDfn(10,"SportIdParent",4,4,false,10),
new ColumnDfn(10,"Name",0,-9,false,100),
new ColumnDfn(10,"SpecialityLabel",3,5,false,5),
new ColumnDfn(10,"Notes",0,-9,false,2000),
@@ -43,6 +43,7 @@ namespace Saxonite.Net.Standard.Base.Bus
Region_Name,
// Properties.
EffectiveOn,
ExpiresOn,
// Associated data.
// Common.
Notes,
@@ -59,9 +60,12 @@ namespace Saxonite.Net.Standard.Base.Bus
public class DataProperties
{
public ItemId ItemId { get; set; }
public SysId UserAccountIdOwner { get; set; }
public SysId OrganisationIdOwner { get; set; }
public SysId SportId { get; set; }
public SysId RegionId { get; set; }
public DateTime EffectiveOn { get; set; }
public DateTime ExpiresOn { get; set; }
}
//-------------------------------------------------------------------
@@ -81,6 +85,16 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.ItemId; }
set { CheckChanged(data.ItemId, value); data.ItemId = value; }
}
public SysId UserAccountIdOwner
{
get { return data.UserAccountIdOwner; }
set { CheckChanged(data.UserAccountIdOwner, value); data.UserAccountIdOwner = value; }
}
public SysId OrganisationIdOwner
{
get { return data.OrganisationIdOwner; }
set { CheckChanged(data.OrganisationIdOwner, value); data.OrganisationIdOwner = value; }
}
public SysId SportId
{
get { return data.SportId; }
@@ -101,13 +115,26 @@ namespace Saxonite.Net.Standard.Base.Bus
data.EffectiveOn = value.Date;
}
}
public DateTime ExpiresOn
{
get { return data.ExpiresOn; }
set
{
// Values are restricted to whole date, ie. no time.
CheckChanged(data.ExpiresOn, value.Date);
data.ExpiresOn = value.Date;
}
}
// Population.
internal void PopulateFrom(Data data)
{
ItemId = data.ItemId;
UserAccountIdOwner = data.UserAccountIdOwner;
OrganisationIdOwner = data.OrganisationIdOwner;
SportId = data.SportId;
RegionId = data.RegionId;
EffectiveOn = data.EffectiveOn;
ExpiresOn = data.ExpiresOn;
base.PopulateFrom(data);
}
public Data Clone()
@@ -124,9 +151,12 @@ namespace Saxonite.Net.Standard.Base.Bus
{
// Identifies the field that has invalid data.
public ValidValue ItemId { get; set; } = ValidValue.Valid;
public ValidValue UserAccountIdOwner { get; set; } = ValidValue.Valid;
public ValidValue OrganisationIdOwner { get; set; } = ValidValue.Valid;
public ValidValue SportId { get; set; } = ValidValue.Valid;
public ValidValue RegionId { get; set; } = ValidValue.Valid;
public ValidValue EffectiveOn { get; set; } = ValidValue.Valid;
public ValidValue ExpiresOn { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
@@ -135,13 +165,12 @@ namespace Saxonite.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Construction.
protected SaxActivityIndex(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn) : base()
protected SaxActivityIndex(ItemId itemId, SysId sportId, SysId regionId) : base()
{
base.SetData(data);
ItemId = itemId;
SportId = sportId;
RegionId = regionId;
EffectiveOn = effectiveOn;
Status = DefaultStatus;
}
@@ -164,13 +193,12 @@ namespace Saxonite.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Utilities.
/// <summary>
/// Match the item to the sport, region and effective date.
/// Match the item to the sport and region.
/// </summary>
public bool MatchesSportRegionEffective(SysId sportId, SysId regionId, DateTime effectiveOn)
public bool MatchesSportRegion(SysId sportId, SysId regionId)
{
if (!SportId.Equals(sportId)) return false;
if (!RegionId.Equals(regionId)) return false;
if (!EffectiveOn.Equals(effectiveOn.Date)) return false;
return true;
}
@@ -197,6 +225,16 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.ItemId; }
protected set { data.ItemId = value; }
}
public SysId UserAccountIdOwner
{
get { return data.UserAccountIdOwner; }
set { data.UserAccountIdOwner = value; }
}
public SysId OrganisationIdOwner
{
get { return data.OrganisationIdOwner; }
set { data.OrganisationIdOwner = value; }
}
public SysId SportId
{
get { return data.SportId; }
@@ -212,6 +250,11 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.EffectiveOn; }
set { data.EffectiveOn = value; }
}
public DateTime ExpiresOn
{
get { return data.ExpiresOn; }
set { data.ExpiresOn = value; }
}
//-------------------------------------------------------------------
// Flags - positions 1-16 available.
@@ -224,6 +267,19 @@ namespace Saxonite.Net.Standard.Base.Bus
// P a r a m s
//-------------------------------------------------------------------
/// <summary>
/// Combination Sport and Region Ids to index activities.
/// </summary>
public class SportRegionIds
{
public SportRegionIds(SysId sportId, SysId regionId)
{
SportId = sportId;
RegionId = regionId;
}
public SysId SportId { get; }
public SysId RegionId { get; }
}
/// <summary>
/// Item list parameters.
/// </summary>
public new class Params : SacsHierarchyItem.Params
@@ -232,12 +288,18 @@ namespace Saxonite.Net.Standard.Base.Bus
public List<SysId> IdsIncluded { get; } = new List<SysId>();
public List<SysId> IdsExcluded { get; } = new List<SysId>();
public List<ItemId> ItemIdsIncluded { get; } = new List<ItemId>();
public List<SysId> SportIdsIncluded { get; } = new List<SysId>();
public List<SysId> RegionIdsIncluded { get; } = new List<SysId>();
public DateTime EffectiveFrom { get; set; }
public DateTime EffectiveTo { get; set; }
/// <summary>Activities must match one of the sport/region combinations specified.</summary>
public List<SportRegionIds> SportRegionIdsIncluded { get; } = new List<SportRegionIds>();
/// <summary>Owner User Accounts - to include activities in result for users regardless of sports/regions.</summary>
public List<SysId> UserAccountIdsOwnerIncluded { get; } = new List<SysId>();
/// <summary>Owner Organisations - to include activities in result for organisations regardless of sport/region combinations.</summary>
public List<SysId> OrganisationIdsOwnerIncluded { get; } = new List<SysId>();
/// <summary>User Account - to include User Activity data in result.</summary>
public SysId UserAccountId { get; set; }
public DateTime EffectiveFrom { get; set; }
public DateTime EffectiveTo { get; set; }
/// <summary>Not Expired - either Expiry date not set or is after specified date.</summary>
public DateTime NotExpiredOn { get; set; }
// Table aliases - blank if not linked.
public String Alias_ActivityIndex { get; set; }
}
@@ -249,11 +311,11 @@ namespace Saxonite.Net.Standard.Base.Bus
public static class SaxActivityIndexList
{
/// <summary>
/// Get first entry that matcehs the sport, region and effective date.
/// Get first entry that matches the sport and region.
/// </summary>
public static SaxActivityIndex GetActivityIndexBySportRegionEffective(this List<SaxActivityIndex> values, SysId sportId, SysId regionId, DateTime effectiveOn)
public static SaxActivityIndex GetActivityIndexBySportRegion(this List<SaxActivityIndex> values, SysId sportId, SysId regionId)
{
return values.Find(item => item.MatchesSportRegionEffective(sportId, regionId, effectiveOn));
return values.Find(item => item.MatchesSportRegion(sportId, regionId));
}
}
+16
View File
@@ -18,6 +18,8 @@ namespace Saxonite.Net.Standard.Base.Bus
{
Pos,
Id,
SportIdParent,
ParentSport_Name,
Name,
SpecialityLabel,
SpecialityLabel_Desc,
@@ -36,6 +38,7 @@ namespace Saxonite.Net.Standard.Base.Bus
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public SysId SportIdParent { get; set; }
public String Name { get; set; } = String.Empty;
public Sax.SportSpecialityLabel SpecialityLabel { get; set; }
}
@@ -52,6 +55,11 @@ namespace Saxonite.Net.Standard.Base.Bus
Status = DefaultStatus;
}
// Properties.
public SysId SportIdParent
{
get { return data.SportIdParent; }
set { CheckChanged(data.SportIdParent, value); data.SportIdParent = value; }
}
public String Name
{
get { return data.Name; }
@@ -65,6 +73,7 @@ namespace Saxonite.Net.Standard.Base.Bus
// Population.
internal void PopulateFrom (Data data)
{
SportIdParent = data.SportIdParent;
Name = data.Name;
SpecialityLabel = data.SpecialityLabel;
base.PopulateFrom(data);
@@ -82,6 +91,7 @@ namespace Saxonite.Net.Standard.Base.Bus
public new class ErrField : SacsHierarchyItem.ErrField
{
// Identifies the field that has invalid data.
public ValidValue SportIdParent { get; set; } = ValidValue.Valid;
public ValidValue Name { get; set; } = ValidValue.Valid;
public ValidValue SpecialityLabel { get; set; } = ValidValue.Valid;
}
@@ -134,6 +144,11 @@ namespace Saxonite.Net.Standard.Base.Bus
throw new NotSupportedException(fn + " Id cannot be changed");
this.data.PopulateFrom(data);
}
public SysId SportIdParent
{
get { return data.SportIdParent; }
set { data.SportIdParent = value; }
}
public String Name
{
get { return data.Name; }
@@ -172,6 +187,7 @@ namespace Saxonite.Net.Standard.Base.Bus
// List filtering.
public List<SysId> IdsIncluded { get; } = new List<SysId>();
public List<SysId> IdsExcluded { get; } = new List<SysId>();
public SysId SportIdParent {get; set; }
/// <summary>Generic filter - partial sport name, or other matching value (tbd).</summary>
public String SportFilter { get; set; }
public String NameFull { get; set; }
@@ -22,7 +22,8 @@ namespace Saxonite.Net.Standard.Base.Bus
OnlineAt,
// User properties.
EmailAddress,
Title, FirstName, LastName,
DisplayName, Title, FirstName, LastName,
LastLoginOn,
LastLoginAt,
}
@@ -25,21 +25,35 @@ namespace Saxonite.Net.Standard.Base.Consoles
public class IndexContext
{
// ToDo Include Localiser.
/// <summary>
/// Index Context - high level activity filter.
/// <para>User Account allows User specific information about the activities to be included.</para>
/// </summary>
public IndexContext(SysId userAccountId)
{
UserAccountId = userAccountId;
}
public SysId UserAccountId { get; }
public List<SysId> SportIds { get; } = new List<SysId>();
public List<SysId> RegionIds { get; } = new List<SysId>();
// Todo: Default period is ~12 months ago up to ~3 months in the future.
/// <summary>Activities must match one of the sport/region combinations specified.</summary>
public List<SaxActivityIndex.SportRegionIds> SportRegionIdsIncluded { get; } = new List<SaxActivityIndex.SportRegionIds>();
/// <summary>
/// Owner Users - eg. journalist for articles.
/// <para>Allows the users' activities to be queried without relying on matching sport/region combinations.</para>
/// </summary>
public List<SysId> UserAccountIdsOwner { get; } = new List<SysId>();
/// <summary>
/// Owner Organisations - for articles, events and opportunities.
/// <para>Allows the organisations' own activities to be queried without relying on matching sport/region combinations.</para>
/// </summary>
public List<SysId> OrganisationIdsOwner { get; } = new List<SysId>();
// Todo: Default effective period for Activities.
public DateTime EffectiveFrom { get; set; } = DateUtil.IncrementDate(DateTime.Today, -365);
public DateTime EffectiveTo { get; set; } = DateUtil.IncrementDate(DateTime.Today, 30);
public DateTime NotExpiredOn { get; set; } = DateTime.Today;
public bool IsValid()
{
// Context must contain at least a sport, a region and a valid effective period.
if (!SportIds.HasValidIds()) return false;
if (!RegionIds.HasValidIds()) return false;
if (!SportRegionIdsIncluded.Exists(item => SysId.IsValid(item.SportId) && SysId.IsValid(item.RegionId)) && !UserAccountIdsOwner.HasValidIds() && !OrganisationIdsOwner.HasValidIds()) return false;
if (!DateUtil.IsValid(EffectiveFrom) || EffectiveTo < EffectiveFrom) return false;
return true;
}
@@ -138,6 +152,8 @@ namespace Saxonite.Net.Standard.Base.Consoles
{
// Activity Index properties.
IndexData indexData = new IndexData(article.GetItemId());
indexData.UserAccountIdOwner = article.UserAccountIdAuthor;
indexData.OrganisationIdOwner = article.OrganisationId;
indexData.SportIds.Add(article.SportIdPrimary);
indexData.RegionIds.Add(article.RegionIdPrimary);
indexData.EffectiveOn = DateUtil.OnInvalid(article.PublishedAt.Date, article.CreateStamp.On.Date);
@@ -165,9 +181,11 @@ namespace Saxonite.Net.Standard.Base.Consoles
// Activity Index properties.
IndexData indexData = new IndexData(organisationEvent.GetItemId());
indexData.OrganisationIdOwner = organisationEvent.OrganisationId;
indexData.SportIds.Add(organisationEvent.SportIdPrimary);
indexData.RegionIds.Add(organisationEvent.RegionIdCountry);
indexData.EffectiveOn = DateUtil.OnInvalid(organisationEvent.PublishedAt.Date, organisationEvent.CreateStamp.On.Date);
indexData.ExpiresOn = DateUtil.OnInvalid(organisationEvent.ExpiresAt.Date, DateUtil.IncrementDate(indexData.EffectiveOn, 7));
return StoreActivityIndexData(indexData, dbUpdateInfo);
}
public bool ClearActivityIndex(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
@@ -190,9 +208,11 @@ namespace Saxonite.Net.Standard.Base.Consoles
// Activity Index properties.
IndexData indexData = new IndexData(opportunity.GetItemId());
indexData.OrganisationIdOwner = opportunity.OrganisationId;
indexData.SportIds.Add(opportunity.SportIdPrimary);
indexData.RegionIds.Add(opportunity.RegionIdPrimary);
indexData.EffectiveOn = DateUtil.OnInvalid(opportunity.PublishedAt.Date, opportunity.CreateStamp.On.Date);
indexData.ExpiresOn = DateUtil.OnInvalid(opportunity.ExpiresAt.Date, DateUtil.IncrementDate(indexData.EffectiveOn, 28));
return StoreActivityIndexData(indexData, dbUpdateInfo);
}
public bool ClearActivityIndex(SaxOrganisationOpportunity opportunity, DbUpdateInfo dbUpdateInfo)
@@ -211,9 +231,12 @@ namespace Saxonite.Net.Standard.Base.Consoles
ItemId = itemId;
}
public ItemId ItemId { get; }
public SysId UserAccountIdOwner { get; set; }
public SysId OrganisationIdOwner { get; set; }
public List<SysId> SportIds { get; } = new List<SysId>();
public List<SysId> RegionIds { get; } = new List<SysId>();
public DateTime EffectiveOn { get; set; }
public DateTime ExpiresOn { get; set; }
public bool IsValid()
{
if (!ItemId.IsValid(ItemId)) return false;
@@ -226,17 +249,23 @@ namespace Saxonite.Net.Standard.Base.Consoles
/// <summary>Single entry in the index for an activity.</summary>
protected class IndexEntryData
{
public IndexEntryData(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn)
public IndexEntryData(ItemId itemId, SysId userAccountIdOwner, SysId organisationIdOwner, SysId sportId, SysId regionId, DateTime effectiveOn, DateTime expiresOn)
{
ItemId = itemId;
UserAccountIdOwner = userAccountIdOwner;
OrganisationIdOwner = organisationIdOwner;
SportId = sportId;
RegionId = regionId;
EffectiveOn = effectiveOn;
ExpiresOn = expiresOn;
}
public ItemId ItemId { get; }
public SysId UserAccountIdOwner { get; }
public SysId OrganisationIdOwner { get; }
public SysId SportId { get; }
public SysId RegionId { get; }
public DateTime EffectiveOn { get; }
public DateTime ExpiresOn { get; }
public bool IsValid()
{
if (!ItemId.IsValid(ItemId)) return false;
@@ -279,7 +308,7 @@ namespace Saxonite.Net.Standard.Base.Consoles
{
foreach (SysId regionId in indexData.RegionIds.FindAll(item => SysId.IsValid(item)))
{
IndexEntryData indexEntry = new IndexEntryData(indexData.ItemId, sportId, regionId, indexData.EffectiveOn);
IndexEntryData indexEntry = new IndexEntryData(indexData.ItemId, indexData.UserAccountIdOwner, indexData.OrganisationIdOwner, sportId, regionId, indexData.EffectiveOn, indexData.ExpiresOn);
if (indexEntry.IsValid())
indexEntries.Add(indexEntry);
}
@@ -109,6 +109,13 @@ namespace Saxonite.Net.Standard.Base.Mgr
switch ((SaxUserOnline.Column)column.Id)
{
//-----------------------------------------------------------
case SaxUserOnline.Column.DisplayName:
String title = values.GetValue(GetUserOnlineColumnDfn(SaxUserOnline.Column.Title).DataName).ToString();
String firstName = values.GetValue(GetUserOnlineColumnDfn(SaxUserOnline.Column.FirstName).DataName).ToString();
String lastName = values.GetValue(GetUserOnlineColumnDfn(SaxUserOnline.Column.LastName).DataName).ToString();
value = new DataValue(SaxUserAccount.GetDisplayName(title, firstName, lastName));
break;
//-----------------------------------------------------------
}
return value;
@@ -30,7 +30,7 @@ namespace Saxonite.Net.Standard.Base.Mgr
//-------------------------------------------------------------------
// Create item.
public abstract SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId, DateTime effectiveOn);
public abstract SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId);
//-------------------------------------------------------------------
// Retrieve individual items.
@@ -95,7 +95,14 @@ namespace Saxonite.Net.Standard.Base.Mgr
}
}
// NB Associated data items aren't validated as these should be valid on the 'parent' object.
// NB Associated data items shouldn't need to be validated as these should be valid on the 'parent' object.
if (errField.OrganisationIdOwner != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationIdOwner))
{
}
if (errField.OrganisationIdOwner != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationIdOwner))
{
}
//---------------------------------------------------------------
return true;
@@ -78,29 +78,54 @@ namespace Saxonite.Net.Standard.Base.Mgr
{
ClearErrorState();
// Name.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Sport_Name), true))
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Sport_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.Sport_Status), true, true))
// Name.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Sport_Name), true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxSport.ValidStatuses.Contains(data.Status))
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Sport_Notes)))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
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.Sport_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxSport.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
// Associated data.
if (data.Status != SaStatus.Deleted)
{
if (errField.SportIdParent != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdParent))
{
SaxSport sport = GetSportById(data.SportIdParent);
disposableItems.Add(sport);
if (sport == null)
{
errField.SportIdParent = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid parent");
}
if (SysId.IsValid(sport.SportIdParent))
{
errField.SportIdParent = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("parent already has a parent.");
}
}
}
}