v1.3.0 Restructure Saxonite workspace and upgrade to .NET 10 (#1)

Move Saxonite’s projects into a dedicated `Workspace` folder and align the solution with .NET 10 and the current Common workspace. Update encryption integration, test project structure and coverage, and repository guidance and upgrade notes.

- Relocate application and library projects while retaining Git rename history.
- Split tests into Admin, Online, and Shared projects; add representative behavioral and serialization tests.
- Update Common integration, application version, and repository documentation.

Application version: 1.3.0

Reviewed-on: #1
Co-authored-by: andy <andy@sarand.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-10-16 18:24:16 +01:00
committed by andy
parent 2c3fb146ab
commit 9f22b522df
1996 changed files with 1992 additions and 1179 deletions
@@ -0,0 +1,43 @@
using NPOI.SS.Formula.Functions;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
public class SaxItemMgr_Reference : SaxItemMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
protected SaxItemMgr_Reference(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
public ISacsDatabase ReferenceDatabase { get { return SaxGlobals.App.GetDatabase(SessionContext, Sax.Database.Reference); } }
public IDatabaseInfo ReferenceDbInfo { get { return SaxGlobals.App.CreateDbInfo(SessionContext, Sax.Database.Reference); } }
// Managers.
public SaxReferenceGolfMgr ReferenceGolfMgr { get { return Internals.ReferenceGolfMgr; } }
// Application codes.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,187 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
using System.Collections.Generic;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr
{
//*******************************************************************
// Reference Mgr - Golf - USGA Country
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxGolfUsgaCountry CreateUsgaCountry();
//-------------------------------------------------------------------
// Item exists.
public bool UsgaCountryExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxGolfUsgaCountry.Params prmUsgaCountry = new SaxGolfUsgaCountry.Params();
prmUsgaCountry.IdsIncluded.Add(id);
prmUsgaCountry.StatusCat = SaxGolfUsgaCountry.StatusCat.Any;
return GetUsgaCountryCount(prmUsgaCountry) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxGolfUsgaCountry GetUsgaCountry(SaxGolfUsgaCountry.Params prmUsgaCountry);
public SaxGolfUsgaCountry GetUsgaCountryById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxGolfUsgaCountry.Params prmUsgaCountry = new SaxGolfUsgaCountry.Params();
prmUsgaCountry.IdsIncluded.Add(id);
prmUsgaCountry.StatusCat = SaxGolfUsgaCountry.StatusCat.Any;
return GetUsgaCountry(prmUsgaCountry);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUsgaCountry(SaxGolfUsgaCountry usgaCountry)
{
ClearErrorState();
if (usgaCountry == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUsgaCountryData(usgaCountry.GetData(), new SaxGolfUsgaCountry.ErrField());
}
public virtual bool IsValidUsgaCountryData(SaxGolfUsgaCountry.Data data, SaxGolfUsgaCountry.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Country code.
if (errField.CountryCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.CountryCode, "code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode), true))
{
errField.CountryCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// ENT Country code.
if (errField.EntCountryCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.EntCountryCode, "ent code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_EntCountryCode)))
{
errField.EntCountryCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Country name.
if (errField.CountryName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.CountryName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName), true))
{
errField.CountryName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxGolfUsgaCountry.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUsgaCountry(SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUsgaCountry(SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo);
public virtual bool UsgaCountryCanBeDeleted(SaxGolfUsgaCountry usgaCountry)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUsgaCountry(SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Bulk updates.
public class UsgaCountryData
{
public String CountryCode { get; set; }
public String EntCountryCode { get; set; } = null;
public String CountryName { get; set; } = null;
}
/// <summary>
/// Bulk update USGA Countries.
/// <para>- Country code must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per country rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public abstract bool BulkUpdateUsgaCountries(List<UsgaCountryData> countries, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUsgaCountryColumnDfn(SaxGolfUsgaCountry.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUsgaCountryQueryFilter(SaxGolfUsgaCountry.Params prmUsgaCountry);
public abstract long GetUsgaCountryCount(SaxGolfUsgaCountry.Params prmUsgaCountry);
public long GetActiveUsgaCountryCount() { return GetUsgaCountryCount(new SaxGolfUsgaCountry.Params()); }
public abstract List<SaxGolfUsgaCountry> GetUsgaCountryList(SaxGolfUsgaCountry.Params prmUsgaCountry);
public abstract DbResultSet ExecuteUsgaCountryQuery(List<ColumnDfn> columns, SaxGolfUsgaCountry.Params prmUsgaCountry);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUsgaCountryDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxGolfUsgaCountry.Column)column.Id)
{
//-----------------------------------------------------------
// Notes.
case SaxGolfUsgaCountry.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxGolfUsgaCountry.Column.Status_Desc:
case SaxGolfUsgaCountry.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxGolfUsgaCountry.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxGolfUsgaCountry.Column.Status_Ind)
value = new DataValue(SaxGolfUsgaCountry.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,264 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
using System.Collections.Generic;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr
{
//*******************************************************************
// Reference Mgr - Golf - USGA Course
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxGolfUsgaCourse CreateUsgaCourse(SysId facilityId);
//-------------------------------------------------------------------
// Item exists.
public bool UsgaCourseExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxGolfUsgaCourse.Params prmUsgaCourse = new SaxGolfUsgaCourse.Params();
prmUsgaCourse.IdsIncluded.Add(id);
prmUsgaCourse.StatusCat = SaxGolfUsgaCourse.StatusCat.Any;
return GetUsgaCourseCount(prmUsgaCourse) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxGolfUsgaCourse GetUsgaCourse(SaxGolfUsgaCourse.Params prmUsgaCourse);
public SaxGolfUsgaCourse GetUsgaCourseById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxGolfUsgaCourse.Params prmUsgaCourse = new SaxGolfUsgaCourse.Params();
prmUsgaCourse.IdsIncluded.Add(id);
prmUsgaCourse.StatusCat = SaxGolfUsgaCourse.StatusCat.Any;
return GetUsgaCourse(prmUsgaCourse);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUsgaCourse(SaxGolfUsgaCourse usgaCourse)
{
ClearErrorState();
if (usgaCourse == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUsgaCourseData(usgaCourse.GetData(), new SaxGolfUsgaCourse.ErrField());
}
public virtual bool IsValidUsgaCourseData(SaxGolfUsgaCourse.Data data, SaxGolfUsgaCourse.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Facility.
if (errField.FacilityId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.FacilityId))
{
errField.FacilityId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Facility must be specified");
}
// Course Id.
if (errField.CourseId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UsgaCourseId))
{
errField.CourseId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Course Id must be specified");
}
// Caption.
if (errField.Caption != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Caption, "caption", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Caption), true))
{
errField.Caption = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Course name.
if (errField.CourseName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.CourseName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName), true))
{
errField.CourseName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Full name.
if (errField.FullName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.FullName, "full name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FullName)))
{
errField.FullName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Address line 1.
if (errField.Address1 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Address1, "address line 1", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address1)))
{
errField.Address1 = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Address line 2.
if (errField.Address2 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Address2, "address line 2", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address2)))
{
errField.Address2 = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// City.
if (errField.City != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.City, "city", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_City)))
{
errField.City = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Postal Code.
if (errField.PostalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PostalCode, "postal code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_PostalCode)))
{
errField.PostalCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Email.
if (errField.Email != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Email, "email", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Email)))
{
errField.Email = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Telephone.
if (errField.Telephone != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Telephone, "telephone", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Telephone)))
{
errField.Telephone = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxGolfUsgaCourse.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Facility.
if (errField.FacilityId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.FacilityId))
{
SaxGolfUsgaFacility.Params prmFacility = new SaxGolfUsgaFacility.Params();
prmFacility.IdsIncluded.Add(data.FacilityId);
prmFacility.StatusCat = SaxGolfUsgaFacility.StatusCat.NotDeleted;
if (ReferenceGolfMgr.GetUsgaFacilityCount(prmFacility) < 1)
{
errField.FacilityId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid course specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUsgaCourse(SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUsgaCourse(SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo);
public virtual bool UsgaCourseCanBeDeleted(SaxGolfUsgaCourse usgaCourse)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUsgaCourse(SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Bulk updates.
public class UsgaCourseData
{
public SysId UsgaFacilityId { get; set; }
public SysId UsgaCourseId { get; set; }
public SysId LegacyCrpCourseId { get; set; }
public string Caption { get; set; } = null;
public string CourseName { get; set; } = null;
public string FullName { get; set; } = null;
public string Address1 { get; set; } = null;
public string Address2 { get; set; } = null;
public string City { get; set; } = null;
public string PostalCode { get; set; } = null;
public string Email { get; set; } = null;
public string Telephone { get; set; } = null;
}
/// <summary>
/// Bulk update USGA Courses.
/// <para>- Facility code must be supplied to identify parent.</para>
/// <para>- Course Id must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per province rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public abstract bool BulkUpdateUsgaCourses(List<UsgaCourseData> courses, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUsgaCourseColumnDfn(SaxGolfUsgaCourse.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUsgaCourseQueryFilter(SaxGolfUsgaCourse.Params prmUsgaCourse);
public abstract long GetUsgaCourseCount(SaxGolfUsgaCourse.Params prmUsgaCourse);
public abstract List<SaxGolfUsgaCourse> GetUsgaCourseList(SaxGolfUsgaCourse.Params prmUsgaCourse);
public abstract DbResultSet ExecuteUsgaCourseQuery(List<ColumnDfn> columns, SaxGolfUsgaCourse.Params prmUsgaCourse);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUsgaCourseDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxGolfUsgaCourse.Column)column.Id)
{
//-----------------------------------------------------------
// Notes.
case SaxGolfUsgaCourse.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxGolfUsgaCourse.Column.Status_Desc:
case SaxGolfUsgaCourse.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxGolfUsgaCourse.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxGolfUsgaCourse.Column.Status_Ind)
value = new DataValue(SaxGolfUsgaCourse.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,213 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
using System.Collections.Generic;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr
{
//*******************************************************************
// Reference Mgr - Golf - USGA Facility
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxGolfUsgaFacility CreateUsgaFacility(SysId provinceId);
//-------------------------------------------------------------------
// Item exists.
public bool UsgaFacilityExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxGolfUsgaFacility.Params prmUsgaFacility = new SaxGolfUsgaFacility.Params();
prmUsgaFacility.IdsIncluded.Add(id);
prmUsgaFacility.StatusCat = SaxGolfUsgaFacility.StatusCat.Any;
return GetUsgaFacilityCount(prmUsgaFacility) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxGolfUsgaFacility GetUsgaFacility(SaxGolfUsgaFacility.Params prmUsgaFacility);
public SaxGolfUsgaFacility GetUsgaFacilityById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxGolfUsgaFacility.Params prmUsgaFacility = new SaxGolfUsgaFacility.Params();
prmUsgaFacility.IdsIncluded.Add(id);
prmUsgaFacility.StatusCat = SaxGolfUsgaFacility.StatusCat.Any;
return GetUsgaFacility(prmUsgaFacility);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUsgaFacility(SaxGolfUsgaFacility usgaFacility)
{
ClearErrorState();
if (usgaFacility == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUsgaFacilityData(usgaFacility.GetData(), new SaxGolfUsgaFacility.ErrField());
}
public virtual bool IsValidUsgaFacilityData(SaxGolfUsgaFacility.Data data, SaxGolfUsgaFacility.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Province.
if (errField.ProvinceId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.ProvinceId))
{
errField.ProvinceId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Province must be specified");
}
// Facility code.
if (errField.UsgaFacilityId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UsgaFacilityId))
{
errField.UsgaFacilityId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Facility Id must be specified");
}
// Facility name.
if (errField.FacilityName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.FacilityName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName), true))
{
errField.FacilityName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxGolfUsgaFacility.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Province.
if (errField.ProvinceId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.ProvinceId))
{
SaxGolfUsgaProvince.Params prmProvince = new SaxGolfUsgaProvince.Params();
prmProvince.IdsIncluded.Add(data.ProvinceId);
prmProvince.StatusCat = SaxGolfUsgaProvince.StatusCat.NotDeleted;
if (ReferenceGolfMgr.GetUsgaProvinceCount(prmProvince) < 1)
{
errField.ProvinceId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid province specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUsgaFacility(SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUsgaFacility(SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo);
public virtual bool UsgaFacilityCanBeDeleted(SaxGolfUsgaFacility usgaFacility)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUsgaFacility(SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Bulk updates.
public class UsgaFacilityData
{
public String ProvinceCode { get; set; }
public SysId UsgaFacilityId { get; set; }
public String FacilityName { get; set; } = null;
public string Address1 { get; set; } = null;
public string Address2 { get; set; } = null;
public string City { get; set; } = null;
public string PostalCode { get; set; } = null;
public string Email { get; set; } = null;
public string Telephone { get; set; } = null;
}
/// <summary>
/// Bulk update USGA Facilities.
/// <para>- Province code must be supplied to identify parent.</para>
/// <para>- Facility Id must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per province rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public abstract bool BulkUpdateUsgaFacilities(List<UsgaFacilityData> facilities, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUsgaFacilityColumnDfn(SaxGolfUsgaFacility.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUsgaFacilityQueryFilter(SaxGolfUsgaFacility.Params prmUsgaFacility);
public abstract long GetUsgaFacilityCount(SaxGolfUsgaFacility.Params prmUsgaFacility);
public abstract List<SaxGolfUsgaFacility> GetUsgaFacilityList(SaxGolfUsgaFacility.Params prmUsgaFacility);
public abstract DbResultSet ExecuteUsgaFacilityQuery(List<ColumnDfn> columns, SaxGolfUsgaFacility.Params prmUsgaFacility);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUsgaFacilityDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxGolfUsgaFacility.Column)column.Id)
{
//-----------------------------------------------------------
// Notes.
case SaxGolfUsgaFacility.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxGolfUsgaFacility.Column.Status_Desc:
case SaxGolfUsgaFacility.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxGolfUsgaFacility.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxGolfUsgaFacility.Column.Status_Ind)
value = new DataValue(SaxGolfUsgaFacility.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,258 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
using System.Collections.Generic;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr
{
//*******************************************************************
// Reference Mgr - Golf - USGA Marker
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxGolfUsgaMarker CreateUsgaMarker(SysId courseId);
//-------------------------------------------------------------------
// Item exists.
public bool UsgaMarkerExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxGolfUsgaMarker.Params prmUsgaMarker = new SaxGolfUsgaMarker.Params();
prmUsgaMarker.IdsIncluded.Add(id);
prmUsgaMarker.StatusCat = SaxGolfUsgaMarker.StatusCat.Any;
return GetUsgaMarkerCount(prmUsgaMarker) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxGolfUsgaMarker GetUsgaMarker(SaxGolfUsgaMarker.Params prmUsgaMarker);
public SaxGolfUsgaMarker GetUsgaMarkerById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxGolfUsgaMarker.Params prmUsgaMarker = new SaxGolfUsgaMarker.Params();
prmUsgaMarker.IdsIncluded.Add(id);
prmUsgaMarker.StatusCat = SaxGolfUsgaMarker.StatusCat.Any;
return GetUsgaMarker(prmUsgaMarker);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUsgaMarker(SaxGolfUsgaMarker usgaMarker)
{
ClearErrorState();
if (usgaMarker == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUsgaMarkerData(usgaMarker.GetData(), new SaxGolfUsgaMarker.ErrField());
}
public virtual bool IsValidUsgaMarkerData(SaxGolfUsgaMarker.Data data, SaxGolfUsgaMarker.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Course.
if (errField.CourseId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.CourseId))
{
errField.CourseId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Course must be specified");
}
// Marker Id.
if (errField.UsgaMarkerId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UsgaMarkerId))
{
errField.UsgaMarkerId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Marker Id must be specified");
}
// Caption.
if (errField.Caption != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Caption, "caption", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Caption), true))
{
errField.Caption = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Holes.
if (errField.Holes != SacsHierarchyItem.ValidValue.Ignore && data.Holes < 1)
{
errField.HolesCaption = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Holes must be specified");
}
// Holes caption.
if (errField.HolesCaption != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.HolesCaption, "holes caption", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_HolesCaption), true))
{
errField.HolesCaption = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Tee.
if (errField.Tee != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Tee, "tee", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Tee), true))
{
errField.Tee = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Gender.
if (errField.Gender != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Gender, "gender", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Gender)))
{
errField.Gender = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Slope Rating.
if (errField.SlopeRating != SacsHierarchyItem.ValidValue.Ignore && data.SlopeRating < 1)
{
errField.SlopeRating = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Slope rating must be specified");
}
// Par.
if (errField.Par != SacsHierarchyItem.ValidValue.Ignore && data.Par < 1)
{
errField.Par = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Par must be specified");
}
// Course Rating.
if (errField.CourseRating != SacsHierarchyItem.ValidValue.Ignore && data.CourseRating < 1)
{
errField.CourseRating = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Course rating must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxGolfUsgaMarker.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Course.
if (errField.CourseId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.CourseId))
{
SaxGolfUsgaCourse.Params prmCourse = new SaxGolfUsgaCourse.Params();
prmCourse.IdsIncluded.Add(data.CourseId);
prmCourse.StatusCat = SaxGolfUsgaCourse.StatusCat.NotDeleted;
if (ReferenceGolfMgr.GetUsgaCourseCount(prmCourse) < 1)
{
errField.CourseId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid marker specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUsgaMarker(SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUsgaMarker(SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo);
public virtual bool UsgaMarkerCanBeDeleted(SaxGolfUsgaMarker usgaMarker)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUsgaMarker(SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Bulk updates.
public class UsgaMarkerData
{
public SysId UsgaCourseId { get; set; }
public SysId UsgaMarkerId { get; set; }
public string Caption { get; set; }
public short Holes { get; set; }
public string HolesCaption { get; set; }
public string Tee { get; set; }
public string Gender { get; set; }
public short SlopeRating { get; set; }
public short Par { get; set; }
public decimal CourseRating { get; set; }
public decimal BogeyRating { get; set; }
public short Length { get; set; }
}
/// <summary>
/// Bulk update USGA Markers.
/// <para>- Course Id must be supplied to identify parent.</para>
/// <para>- Marker Id must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per merker rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public abstract bool BulkUpdateUsgaMarkers(List<UsgaMarkerData> markers, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUsgaMarkerColumnDfn(SaxGolfUsgaMarker.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUsgaMarkerQueryFilter(SaxGolfUsgaMarker.Params prmUsgaMarker);
public abstract long GetUsgaMarkerCount(SaxGolfUsgaMarker.Params prmUsgaMarker);
public abstract List<SaxGolfUsgaMarker> GetUsgaMarkerList(SaxGolfUsgaMarker.Params prmUsgaMarker);
public abstract DbResultSet ExecuteUsgaMarkerQuery(List<ColumnDfn> columns, SaxGolfUsgaMarker.Params prmUsgaMarker);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUsgaMarkerDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxGolfUsgaMarker.Column)column.Id)
{
//-----------------------------------------------------------
// Notes.
case SaxGolfUsgaMarker.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxGolfUsgaMarker.Column.Status_Desc:
case SaxGolfUsgaMarker.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxGolfUsgaMarker.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxGolfUsgaMarker.Column.Status_Ind)
value = new DataValue(SaxGolfUsgaMarker.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,214 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
using System.Collections.Generic;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr
{
//*******************************************************************
// Reference Mgr - Golf - USGA Province
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxGolfUsgaProvince CreateUsgaProvince(SysId countryId);
//-------------------------------------------------------------------
// Item exists.
public bool UsgaProvinceExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxGolfUsgaProvince.Params prmUsgaProvince = new SaxGolfUsgaProvince.Params();
prmUsgaProvince.IdsIncluded.Add(id);
prmUsgaProvince.StatusCat = SaxGolfUsgaProvince.StatusCat.Any;
return GetUsgaProvinceCount(prmUsgaProvince) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxGolfUsgaProvince GetUsgaProvince(SaxGolfUsgaProvince.Params prmUsgaProvince);
public SaxGolfUsgaProvince GetUsgaProvinceById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxGolfUsgaProvince.Params prmUsgaProvince = new SaxGolfUsgaProvince.Params();
prmUsgaProvince.IdsIncluded.Add(id);
prmUsgaProvince.StatusCat = SaxGolfUsgaProvince.StatusCat.Any;
return GetUsgaProvince(prmUsgaProvince);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUsgaProvince(SaxGolfUsgaProvince usgaProvince)
{
ClearErrorState();
if (usgaProvince == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUsgaProvinceData(usgaProvince.GetData(), new SaxGolfUsgaProvince.ErrField());
}
public virtual bool IsValidUsgaProvinceData(SaxGolfUsgaProvince.Data data, SaxGolfUsgaProvince.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Country.
if (errField.CountryId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.CountryId))
{
errField.CountryId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Country must be specified");
}
// Province code.
if (errField.ProvinceCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ProvinceCode, "code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode), true))
{
errField.ProvinceCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// ENT Province code.
if (errField.EntProvinceCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.EntProvinceCode, "ENT code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_EntProvinceCode)))
{
errField.EntProvinceCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Province name.
if (errField.ProvinceName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ProvinceName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName), true))
{
errField.ProvinceName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxGolfUsgaProvince.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Country.
if (errField.CountryId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.CountryId))
{
SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params();
prmCountry.IdsIncluded.Add(data.CountryId);
prmCountry.StatusCat = SaxGolfUsgaCountry.StatusCat.NotDeleted;
if (ReferenceGolfMgr.GetUsgaCountryCount(prmCountry) < 1)
{
errField.CountryId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid country specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUsgaProvince(SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUsgaProvince(SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo);
public virtual bool UsgaProvinceCanBeDeleted(SaxGolfUsgaProvince usgaProvince)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUsgaProvince(SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Bulk updates.
public class UsgaProvinceData
{
public String CountryCode { get; set; }
public String ProvinceCode { get; set; }
public String EntProvinceCode { get; set; } = null;
public String ProvinceName { get; set; } = null;
}
/// <summary>
/// Bulk update USGA Provinces.
/// <para>- Country code must be supplied to identify parent.</para>
/// <para>- Province code must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per province rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public abstract bool BulkUpdateUsgaProvinces(List<UsgaProvinceData> provinces, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUsgaProvinceColumnDfn(SaxGolfUsgaProvince.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUsgaProvinceQueryFilter(SaxGolfUsgaProvince.Params prmUsgaProvince);
public abstract long GetUsgaProvinceCount(SaxGolfUsgaProvince.Params prmUsgaProvince);
public abstract List<SaxGolfUsgaProvince> GetUsgaProvinceList(SaxGolfUsgaProvince.Params prmUsgaProvince);
public abstract DbResultSet ExecuteUsgaProvinceQuery(List<ColumnDfn> columns, SaxGolfUsgaProvince.Params prmUsgaProvince);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUsgaProvinceDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxGolfUsgaProvince.Column)column.Id)
{
//-----------------------------------------------------------
// Notes.
case SaxGolfUsgaProvince.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxGolfUsgaProvince.Column.Status_Desc:
case SaxGolfUsgaProvince.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxGolfUsgaProvince.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxGolfUsgaProvince.Column.Status_Ind)
value = new DataValue(SaxGolfUsgaProvince.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,22 @@
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Saxonite.Net.Standard.Base.Mgr.Reference
{
//=======================================================================
public abstract partial class SaxReferenceGolfMgr : SaxItemMgr_Reference
{
//-------------------------------------------------------------------
protected SaxReferenceGolfMgr(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,318 @@
using NPOI.SS.Formula.Functions;
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - Organisation
//*******************************************************************
// Utilities.
/// <summary>Get number of active members for Organisation.</summary>
public long GetOrganisationMemberCount(SysId organisationId)
{
if (!SysId.IsValid(organisationId)) return 0;
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId);
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.UserAccountStatusCat = SaxUserAccount.StatusCat.ActiveOnly;
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly;
return GetUserOrganisationCount(prmUserOrganisation);
}
/// <summary>Get number of active opportunities for organisation.</summary>
public long GetOrganisationOpportunityCount(SysId organisationId)
{
if (!SysId.IsValid(organisationId)) return 0;
SaxOrganisationOpportunity.Params prmOrganisationOpportunity = new SaxOrganisationOpportunity.Params();
prmOrganisationOpportunity.OrganisationIdsIncluded.Add(organisationId);
prmOrganisationOpportunity.StatusCat = SaxOrganisationOpportunity.StatusCat.ActiveOnly;
return ActivityMgr.GetOrganisationOpportunityCount(prmOrganisationOpportunity);
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxOrganisation CreateOrganisation();
//-------------------------------------------------------------------
// Item exists.
public bool OrganisationExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
prmOrganisation.IdsIncluded.Add(id);
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.Any;
return GetOrganisationCount(prmOrganisation) == 1;
}
public bool OrganisationExistsByName(String name)
{
ClearErrorState();
if (StringUtil.IsEmpty(name)) return false;
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
prmOrganisation.NameFull = name;
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.Any;
return GetOrganisationCount(prmOrganisation) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxOrganisation GetOrganisation(SaxOrganisation.Params prmOrganisation);
public SaxOrganisation GetOrganisationById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
prmOrganisation.IdsIncluded.Add(id);
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.Any;
return GetOrganisation(prmOrganisation);
}
public SaxOrganisation GetOrganisationByName(String name)
{
ClearErrorState();
if (StringUtil.IsEmpty(name)) return null;
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
prmOrganisation.NameFull = name;
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.Any;
return GetOrganisation(prmOrganisation);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidOrganisation(SaxOrganisation organisation)
{
ClearErrorState();
if (organisation == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidOrganisationData(organisation.GetData(), new SaxOrganisation.ErrField());
}
public virtual bool IsValidOrganisationData(SaxOrganisation.Data data, SaxOrganisation.ErrField errField)
{
ClearErrorState();
// Name.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Organisation_Name), true))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Organisation type.
if (errField.OrganisationType != SacsHierarchyItem.ValidValue.Ignore && data.OrganisationType == 0)
{
errField.OrganisationType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Organisation type must be specified.");
}
// Organisation category.
if (errField.OrganisationCategory != SacsHierarchyItem.ValidValue.Ignore && data.OrganisationCategory == 0)
{
errField.OrganisationCategory = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Organisation category must be specified.");
}
// Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore)
{
if (!SysId.IsValid(data.SportIdPrimary) && SaxOrganisation.IsSportMandatory(data.OrganisationCategory))
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be specified.");
}
}
// Primary Region.
if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore)
{
if (!SysId.IsValid(data.RegionIdPrimary))
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Region must be specified.");
}
}
// About.
if (errField.About != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.About, "about", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Organisation_About)))
{
errField.About = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Facilities.
if (errField.Facilities != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Facilities, "facilities", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Organisation_Facilities)))
{
errField.Facilities = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Contact data.
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Organisation_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.Organisation_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxOrganisation.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdPrimary))
{
if (!ReferenceMgr.SportExistsById(data.SportIdPrimary))
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid sport specified");
}
}
// Region.
if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdPrimary))
{
SaxRegion region = ReferenceMgr.GetRegionById(data.RegionIdPrimary);
if (region == null)
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid region specified");
}
if (region.RegionType != App.Sax.RegionType.Country && region.RegionType != App.Sax.RegionType.Continent && region.RegionType != App.Sax.RegionType.World)
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Region must be a country or international region");
}
}
// Region & name must be unique.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !StringUtil.IsEmpty(data.Name) && errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdPrimary))
{
// Name must be unique within region.
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
if (SysId.IsValid(data.Id))
prmOrganisation.IdsExcluded.Add(data.Id);
prmOrganisation.NameFull = data.Name;
prmOrganisation.RegionIdsIncluded.Add(data.RegionIdPrimary);
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.Any;
if (AccountMgr.GetOrganisationCount(prmOrganisation) > 0)
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Name must be unique within region");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Organisation database interface.
public abstract bool InsertOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo);
public virtual bool OrganisationCanBeDeleted(SaxOrganisation organisation)
{
ClearErrorState();
return true;
}
public abstract bool DeleteOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Organisation list:
public abstract ColumnDfn GetOrganisationColumnDfn(SaxOrganisation.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetOrganisationQueryFilter(SaxOrganisation.Params prmOrganisation);
public abstract long GetOrganisationCount(SaxOrganisation.Params prmOrganisation);
public abstract List<SaxOrganisation> GetOrganisationList(SaxOrganisation.Params prmOrganisation);
public abstract DbResultSet ExecuteOrganisationQuery(List<ColumnDfn> columns, SaxOrganisation.Params prmOrganisation);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetOrganisationDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxOrganisation.Column)column.Id)
{
//-----------------------------------------------------------
// Organisation type.
case SaxOrganisation.Column.OrganisationType_Desc:
{
String organisationTypeCode = values.GetValue(column.DataName).ToString();
TypeCodeDesc organisationType = OrganisationTypeCodes.Find(item => item.Code.Equals(organisationTypeCode));
if (!StringUtil.IsBlank(organisationType?.Desc ?? ""))
value = new DataValue(organisationType.Desc);
else
value = new DataValue(organisationTypeCode);
}
break;
//-----------------------------------------------------------
// Organisation category.
case SaxOrganisation.Column.OrganisationCategory_Desc:
{
String organisationCategoryCode = values.GetValue(column.DataName).ToString();
TypeCodeDesc organisationCategory = OrganisationCategoryCodes.Find(item => item.Code.Equals(organisationCategoryCode));
if (!StringUtil.IsBlank(organisationCategory?.Desc ?? ""))
value = new DataValue(organisationCategory.Desc);
else
value = new DataValue(organisationCategoryCode);
}
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxOrganisation.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxOrganisation.Column.Status_Desc:
case SaxOrganisation.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxOrganisation.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxOrganisation.Column.Status_Ind)
value = new DataValue(SaxOrganisation.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
{
value = values.GetValue(column.DataName);
}
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,314 @@
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.Helpers;
using Sarand.Net.Standard.Base.Utils;
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;
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)
{
if (!IsValidValue(data.EmailAddress, "email", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress), true))
{
errField.EmailAddress = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SacsDataValidationHelper.IsValidEmailAddress(data.EmailAddress))
{
errField.EmailAddress = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid email address");
}
}
// 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), true))
{
errField.LastName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// About.
if (errField.About != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.About, "about", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_About)))
{
errField.About = 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;
}
// Gender other.
if (errField.GenderOther != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.GenderOther, "gender", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserAccount_GenderOther)))
{
errField.GenderOther = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// 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 year 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<SaxRegion.Data> regions = Internals.GetRegions(new List<SysId>() { data.RegionIdCountry, data.RegionIdProvince });
SaxRegion.Data regionCountry = regions.Find(item => item.Id.Equals(data.RegionIdCountry));
SaxRegion.Data regionProvince = regions.Find(item => item.Id.Equals(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<String> GetUserAccountQueryFilter(SaxUserAccount.Params prmUserAccount);
public abstract long GetUserAccountCount(SaxUserAccount.Params prmUserAccount);
public abstract List<SaxUserAccount> GetUserAccountList(SaxUserAccount.Params prmUserAccount);
public abstract DbResultSet ExecuteUserAccountQuery(List<ColumnDfn> columns, SaxUserAccount.Params prmUserAccount);
//-------------------------------------------------------------------
/// <summary>
/// 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, 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:
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;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,139 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.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 Config
//*******************************************************************
// Utilities.
public List<SaxUserConfig> GetConfigsForUser(SysId userAccountId)
{
SaxUserConfig.Params prmUserConfig = new SaxUserConfig.Params();
prmUserConfig.UserAccountIdsIncluded.Add(userAccountId);
List<SaxUserConfig> userConfigs = AccountMgr.GetUserConfigList(prmUserConfig);
return userConfigs;
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserConfig CreateUserConfig(SysId userAccountId, Sax.UserConfigType configType);
//-------------------------------------------------------------------
// Item exists.
public bool UserConfigExists(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return false;
SaxUserConfig.Params prmUserConfig = new SaxUserConfig.Params();
prmUserConfig.UserAccountIdsIncluded.Add(userAccountId);
return GetUserConfigCount(prmUserConfig) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserConfig GetUserConfig(SaxUserConfig.Params prmUserConfig);
public SaxUserConfig GetUserConfig(SysId userAccountId, Sax.UserConfigType configType)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId) || configType <= 0) return null;
SaxUserConfig.Params prmUserConfig = new SaxUserConfig.Params();
prmUserConfig.UserAccountIdsIncluded.Add(userAccountId);
prmUserConfig.ConfigType = configType;
return GetUserConfig(prmUserConfig);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserConfig(SaxUserConfig userConfig)
{
ClearErrorState();
if (userConfig == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserConfigData(userConfig.GetData(), new SaxUserConfig.ErrField());
}
public virtual bool IsValidUserConfigData(SaxUserConfig.Data data, SaxUserConfig.ErrField errField)
{
ClearErrorState();
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Config Type.
if (errField.ConfigType != SacsHierarchyItem.ValidValue.Ignore && data.ConfigType <= 0)
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Config type must be specified");
}
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo);
public virtual bool UserConfigCanBeDeleted(SaxUserConfig userConfig)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserConfigColumnDfn(SaxUserConfig.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserConfigQueryFilter(SaxUserConfig.Params prmUserConfig);
public abstract long GetUserConfigCount(SaxUserConfig.Params prmUserConfig);
public abstract List<SaxUserConfig> GetUserConfigList(SaxUserConfig.Params prmUserConfig);
public abstract DbResultSet ExecuteUserConfigQuery(List<ColumnDfn> columns, SaxUserConfig.Params prmUserConfig);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserConfigDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserConfig.Column)column.Id)
{
//-----------------------------------------------------------
// User Display Name.
case SaxUserConfig.Column.User_DisplayName:
{
String userTitle = values.GetValue(GetUserConfigColumnDfn(SaxUserConfig.Column.User_Title).DataName).ToString();
String userFirstName = values.GetValue(GetUserConfigColumnDfn(SaxUserConfig.Column.User_FirstName).DataName).ToString();
String userLastName = values.GetValue(GetUserConfigColumnDfn(SaxUserConfig.Column.User_LastName).DataName).ToString();
value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,257 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - User Eligibility
//*******************************************************************
// Utilities.
public bool UserRegionHasEligibility(SysId userAccountId, SysId regionId, DateTime validOn, SaxUserEligibility.StatusCat statusCat = SaxUserEligibility.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId) || !SysId.IsValid(regionId)) return false;
SaxUserEligibility.Params prmEligibilityType = new SaxUserEligibility.Params();
prmEligibilityType.UserAccountIdsIncluded.Add(userAccountId);
prmEligibilityType.RegionIdsIncluded.Add(regionId);
prmEligibilityType.ValidOn = validOn;
prmEligibilityType.StatusCat = statusCat;
return GetUserEligibilityCount(prmEligibilityType) > 0;
}
/// <summary>
/// Retrievethe eligibility entries for the specified user.
/// <para>- Optional region can be supplied to restrict results.</para>
/// <para>- Optional valid on date can be supplied to restrict results.</para>
/// <para>- Eligibility status defaults to active.</para>
/// </summary>
/// <param name="userAccountId">User account</param>
/// <param name="regionId"></param>
/// <param name="statusCat"></param>
/// <returns></returns>
public List<SaxUserEligibility> GetUserEligibility(SysId userAccountId, SysId regionId = null, DateTime? validOn = null, SaxUserEligibility.StatusCat statusCat = SaxUserEligibility.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId)) return new List<SaxUserEligibility>();
SaxUserEligibility.Params prmEligibilityType = new SaxUserEligibility.Params();
prmEligibilityType.UserAccountIdsIncluded.Add(userAccountId);
if (SysId.IsValid(regionId))
prmEligibilityType.RegionIdsIncluded.Add(regionId);
if (DateUtil.IsValid(validOn))
prmEligibilityType.ValidOn = (DateTime)validOn;
prmEligibilityType.StatusCat = statusCat;
return GetUserEligibilityList(prmEligibilityType);
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserEligibility CreateUserEligibility(SysId userAccountId, SysId regionId, Sax.EligibilityType userEligibility);
//-------------------------------------------------------------------
// Item exists.
public bool UserEligibilityExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxUserEligibility.Params prmEligibilityType = new SaxUserEligibility.Params();
prmEligibilityType.IdsIncluded.Add(id);
prmEligibilityType.StatusCat = SaxUserEligibility.StatusCat.Any;
return GetUserEligibilityCount(prmEligibilityType) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserEligibility GetUserEligibility(SaxUserEligibility.Params prmEligibilityType);
public SaxUserEligibility GetUserEligibilityById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxUserEligibility.Params prmEligibilityType = new SaxUserEligibility.Params();
prmEligibilityType.IdsIncluded.Add(id);
prmEligibilityType.StatusCat = SaxUserEligibility.StatusCat.Any;
return GetUserEligibility(prmEligibilityType);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserEligibility(SaxUserEligibility userEligibility)
{
ClearErrorState();
if (userEligibility == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserEligibilityData(userEligibility.GetData(), new SaxUserEligibility.ErrField());
}
public virtual bool IsValidUserEligibilityData(SaxUserEligibility.Data data, SaxUserEligibility.ErrField errField)
{
ClearErrorState();
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Region.
if (errField.RegionId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionId))
{
errField.RegionId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Region Id must be specified");
}
// Eligibility Type.
if (errField.EligibilityType != SacsHierarchyItem.ValidValue.Ignore && (int)data.EligibilityType < 1)
{
errField.EligibilityType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Eligibility must be specified");
}
// Info.
if (errField.Info != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Info, "info", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserEligibility_Info)))
{
errField.Info = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Expires on.
if (errField.ExpiresOn != SacsHierarchyItem.ValidValue.Ignore)
{
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserEligibility_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.UserEligibility_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserEligibility.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// User & Eligibility combination must be unique.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.RegionId != SacsHierarchyItem.ValidValue.Ignore && errField.EligibilityType != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.UserAccountId) && SysId.IsValid(data.RegionId) && data.EligibilityType > 0)
{
SaxUserEligibility.Params prmEligibilityType = new SaxUserEligibility.Params();
if (SysId.IsValid(data.Id))
prmEligibilityType.IdsExcluded.Add(data.Id);
prmEligibilityType.UserAccountIdsIncluded.Add(data.UserAccountId);
prmEligibilityType.RegionIdsIncluded.Add(data.RegionId);
prmEligibilityType.EligibilityTypesIncluded.Add(data.EligibilityType);
prmEligibilityType.StatusCat = SaxUserEligibility.StatusCat.Any;
if (GetUserEligibilityCount(prmEligibilityType) > 0)
{
errField.EligibilityType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Eligibility must be unique for user, region and type");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserEligibility(SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserEligibility(SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo);
public virtual bool UserEligibilityCanBeDeleted(SaxUserEligibility userEligibility)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserEligibility(SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserEligibilityColumnDfn(SaxUserEligibility.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserEligibilityQueryFilter(SaxUserEligibility.Params prmEligibilityType);
public abstract long GetUserEligibilityCount(SaxUserEligibility.Params prmEligibilityType);
public abstract List<SaxUserEligibility> GetUserEligibilityList(SaxUserEligibility.Params prmEligibilityType);
public abstract DbResultSet ExecuteUserEligibilityQuery(List<ColumnDfn> columns, SaxUserEligibility.Params prmEligibilityType);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserEligibilityDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserEligibility.Column)column.Id)
{
//-----------------------------------------------------------
// Eligibility Type.
case SaxUserEligibility.Column.EligibilityType_Desc:
{
Sax.EligibilityType eligibilityType = (Sax.EligibilityType)values.GetValue(column.DataName).AsLong();
value = new DataValue(EligibilityTypeCodes.GetDescForType(eligibilityType));
}
break;
//-----------------------------------------------------------
// Region Type.
case SaxUserEligibility.Column.Region_Type_Desc:
{
Sax.RegionType regionType = (Sax.RegionType)values.GetValue(column.DataName).AsLong();
value = new DataValue(RegionTypeCodes.GetDescForType(regionType));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxUserEligibility.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserEligibility.Column.Status_Desc:
case SaxUserEligibility.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserEligibility.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserEligibility.Column.Status_Ind)
value = new DataValue(SaxUserEligibility.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,131 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - User Online
//*******************************************************************
// Utilities.
public abstract bool CommitUsersOnline(IEnumerable <SaxUserOnline.DataProperties> usersOnline);
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserOnline CreateUserOnline(SysId userAccountId);
//-------------------------------------------------------------------
// Item exists.
public bool UserOnlineExistsByUserAccountId(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return false;
SaxUserOnline.Params prmUserOnline = new SaxUserOnline.Params();
prmUserOnline.UserAccountIdsIncluded.Add(userAccountId);
return GetUserOnlineCount(prmUserOnline) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserOnline GetUserOnline(SaxUserOnline.Params prmUserOnline);
public SaxUserOnline GetUserOnlineByUserAccountId(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return null;
SaxUserOnline.Params prmUserOnline = new SaxUserOnline.Params();
prmUserOnline.UserAccountIdsIncluded.Add(userAccountId);
return GetUserOnline(prmUserOnline);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserOnline(SaxUserOnline userRole)
{
ClearErrorState();
if (userRole == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserOnlineData(userRole.GetData(), new SaxUserOnline.ErrField());
}
public virtual bool IsValidUserOnlineData(SaxUserOnline.Data data, SaxUserOnline.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Online at.
if (errField.OnlineAt != SacsHierarchyItem.ValidValue.Ignore && !DateUtil.IsValid(data.OnlineAt))
{
errField.OnlineAt = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("last online time must be specified");
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserOnline(SaxUserOnline userRole, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserOnline(SaxUserOnline userRole, DbUpdateInfo dbUpdateInfo);
public virtual bool UserOnlineCanBeDeleted(SaxUserOnline userRole)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserOnline(SaxUserOnline userRole, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserOnlineColumnDfn(SaxUserOnline.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserOnlineQueryFilter(SaxUserOnline.Params prmUserOnline);
public abstract long GetUserOnlineCount(SaxUserOnline.Params prmUserOnline);
public abstract List<SaxUserOnline> GetUserOnlineList(SaxUserOnline.Params prmUserOnline);
public abstract DbResultSet ExecuteUserOnlineQuery(List<ColumnDfn> columns, SaxUserOnline.Params prmUserOnline);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserOnlineDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
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;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,340 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - User Organisation
//*******************************************************************
// Utilities.
/// <summary>
/// Is the user a member of the organisation - excluding relationships which just indicate an 'interest'.
/// </summary>
public bool UserIsOrganisationMember(SysId userAccountId, SysId organisationId, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId)) return false;
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId);
prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId);
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.StatusCat = statusCat;
return GetUserOrganisationCount(prmUserOrganisation) > 0;
}
/// <summary>
/// Does the user have the specified role with the organisation.
/// </summary>
public bool UserHasOrganisationRole(SysId userAccountId, SysId organisationId, Sax.OrganisationRole organisationRole, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly)
{
return UserHasAnyOrganisationRole(userAccountId, organisationId, new [] { organisationRole }, statusCat);
}
/// <summary>
/// Does the user have any of the specified roles with the organisation.
/// </summary>
public bool UserHasAnyOrganisationRole(SysId userAccountId, SysId organisationId, IEnumerable<Sax.OrganisationRole> organisationRoles, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId) || organisationRoles.IsEmpty() || !organisationRoles.Any(item => item > 0)) return false;
return GetOrganisationRolesForUser(userAccountId, organisationId, statusCat).Any(item => organisationRoles.Contains(item));
}
/// <summary>
/// Retrieve the roles that a user has with the organisation.
/// </summary>
public List<Sax.OrganisationRole> GetOrganisationRolesForUser(SysId userAccountId, SysId organisationId, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly)
{
List<Sax.OrganisationRole> organisationRoles = new List<Sax.OrganisationRole>();
if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId)) return organisationRoles;
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId);
prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId);
prmUserOrganisation.StatusCat = statusCat;
using (SaxUserOrganisation userOrganisation = GetUserOrganisation(prmUserOrganisation))
if (userOrganisation != null)
organisationRoles = userOrganisation.GetOrganisationRoles().ToList();
return organisationRoles;
}
public class OrganisationIdName
{
public SysId Id { get; internal set; }
public String Name { get; internal set; }
}
/// <summary>
/// Get list of organisation Ids and names that the user has the specified role with.
/// </summary>
public List<OrganisationIdName> GetOrganisationsForUserRole(SysId userAccountId, Sax.OrganisationRole organisationRole, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly)
{
return GetOrganisationsForAnyUserRole(userAccountId, new [] { organisationRole }, statusCat);
}
/// <summary>
/// Get list of organisation Ids and names that the user has any of the specified roles with.
/// </summary>
public List<OrganisationIdName> GetOrganisationsForAnyUserRole(SysId userAccountId, IEnumerable<Sax.OrganisationRole> organisationRoles, SaxUserOrganisation.StatusCat statusCat = SaxUserOrganisation.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId) || organisationRoles.IsEmpty() || !organisationRoles.Any(item => item > 0)) return null;
// Filter.
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId);
prmUserOrganisation.OrganisationStatusCat = SaxOrganisation.StatusCat.ActiveOnly;
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.OrganisationRolesAny.UnionWith(organisationRoles);
prmUserOrganisation.StatusCat = statusCat;
return GetOrganisations(prmUserOrganisation);
}
/// <summary>
/// Get list of organisation Ids and names that matc the specified parameters.
/// </summary>
public List<OrganisationIdName> GetOrganisations(SaxUserOrganisation.Params prmUserOrganisation)
{
List<OrganisationIdName> organisationsData = new List<OrganisationIdName>();
// Columns.
ColumnDfn colOrganisationId = GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId);
ColumnDfn colOrganisationName = GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name);
if (prmUserOrganisation.SortColumns.IsEmpty())
prmUserOrganisation.SortColumns.Add(colOrganisationName);
// Query.
using (DbResultSet resultSet = ExecuteUserOrganisationQuery(new List<ColumnDfn>() { colOrganisationId, colOrganisationName }, prmUserOrganisation))
{
while (resultSet != null && resultSet.NextRecord())
{
NamedValue.Map values = resultSet.GetRecordValues();
SysId organisationId = new SysId(values.GetLong(colOrganisationId.DataName));
String organisationName = values.GetString(colOrganisationName.DataName);
if (SysId.IsValid(organisationId) && !StringUtil.IsEmpty(organisationName))
{
OrganisationIdName organisationData = new OrganisationIdName()
{
Id = organisationId,
Name = organisationName
};
organisationsData.Add(organisationData);
}
}
}
return organisationsData;
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserOrganisation CreateUserOrganisation(SysId userAccountId, SysId OrganisationId);
//-------------------------------------------------------------------
// Item exists.
public bool UserOrganisationExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.IdsIncluded.Add(id);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any;
return GetUserOrganisationCount(prmUserOrganisation) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserOrganisation GetUserOrganisation(SaxUserOrganisation.Params prmUserOrganisation);
public SaxUserOrganisation GetUserOrganisationById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.IdsIncluded.Add(id);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any;
return GetUserOrganisation(prmUserOrganisation);
}
public SaxUserOrganisation GetUserOrganisationByUserOrganisation(SysId userAccountId, SysId organisationId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId) || !SysId.IsValid(organisationId)) return null;
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.UserAccountIdsIncluded.Add(userAccountId);
prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any;
return GetUserOrganisation(prmUserOrganisation);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserOrganisation(SaxUserOrganisation userOrganisation)
{
ClearErrorState();
if (userOrganisation == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserOrganisationData(userOrganisation.GetData(), new SaxUserOrganisation.ErrField());
}
public virtual bool IsValidUserOrganisationData(SaxUserOrganisation.Data data, SaxUserOrganisation.ErrField errField)
{
ClearErrorState();
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Organisation.
if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.OrganisationId))
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Organisation Id must be specified");
}
// Admin comment.
if (errField.AdminComment != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AdminComment, "comment", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment)))
{
errField.AdminComment = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserOrganisation_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.UserOrganisation_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserOrganisation.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// User & Organisation combination must be unique.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.UserAccountId) && SysId.IsValid(data.OrganisationId))
{
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
if (SysId.IsValid(data.Id))
prmUserOrganisation.IdsExcluded.Add(data.Id);
prmUserOrganisation.UserAccountIdsIncluded.Add(data.UserAccountId);
prmUserOrganisation.OrganisationIdsIncluded.Add(data.OrganisationId);
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.Any;
if (GetUserOrganisationCount(prmUserOrganisation) > 0)
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Organisation must be unique for user");
}
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo);
public virtual bool UserOrganisationCanBeDeleted(SaxUserOrganisation userOrganisation)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserOrganisationColumnDfn(SaxUserOrganisation.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserOrganisationQueryFilter(SaxUserOrganisation.Params prmUserOrganisation);
public abstract long GetUserOrganisationCount(SaxUserOrganisation.Params prmUserOrganisation);
public abstract List<SaxUserOrganisation> GetUserOrganisationList(SaxUserOrganisation.Params prmUserOrganisation);
public abstract DbResultSet ExecuteUserOrganisationQuery(List<ColumnDfn> columns, SaxUserOrganisation.Params prmUserOrganisation);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserOrganisationDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserOrganisation.Column)column.Id)
{
//-----------------------------------------------------------
// User Display Name.
case SaxUserOrganisation.Column.User_DisplayName:
{
String userTitle = values.GetValue(GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.User_Title).DataName).ToString();
String userFirstName = values.GetValue(GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.User_FirstName).DataName).ToString();
String userLastName = values.GetValue(GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.User_LastName).DataName).ToString();
value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName));
}
break;
/*
//-----------------------------------------------------------
// User Role.
case SaxUserOrganisation.Column.UserOrganisation_Desc:
{
String userOrganisationCode = values.GetValue(column.DataName).ToString();
value = new DataValue(UserOrganisations.GetDescForCode(userOrganisationCode));
}
break;
*/
//-----------------------------------------------------------
// Notes.
case SaxUserOrganisation.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserOrganisation.Column.Status_Desc:
case SaxUserOrganisation.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserOrganisation.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserOrganisation.Column.Status_Ind)
value = new DataValue(SaxUserOrganisation.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,249 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - User Role
//*******************************************************************
// Utilities.
public bool UserHasRole(SysId userAccountId, Sax.UserRole userRole, SaxUserRole.StatusCat statusCat = SaxUserRole.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId) || userRole <= 0) return false;
SaxUserRole.Params prmUserRole = new SaxUserRole.Params();
prmUserRole.UserAccountIdsIncluded.Add(userAccountId);
prmUserRole.UserRolesIncluded.Add(userRole);
prmUserRole.StatusCat = statusCat;
return GetUserRoleCount(prmUserRole) > 0;
}
public List<SaxUserRole> GetRolesForUser(SysId userAccountId, SaxUserRole.StatusCat statusCat = SaxUserRole.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId)) return new List<SaxUserRole>();
SaxUserRole.Params prmUserRole = new SaxUserRole.Params();
prmUserRole.UserAccountIdsIncluded.Add(userAccountId);
prmUserRole.StatusCat = statusCat;
return GetUserRoleList(prmUserRole);
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserRole CreateUserRole(SysId userAccountId, Sax.UserRole userRole);
//-------------------------------------------------------------------
// Item exists.
public bool UserRoleExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxUserRole.Params prmUserRole = new SaxUserRole.Params();
prmUserRole.IdsIncluded.Add(id);
prmUserRole.StatusCat = SaxUserRole.StatusCat.Any;
return GetUserRoleCount(prmUserRole) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserRole GetUserRole(SaxUserRole.Params prmUserRole);
public SaxUserRole GetUserRoleById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxUserRole.Params prmUserRole = new SaxUserRole.Params();
prmUserRole.IdsIncluded.Add(id);
prmUserRole.StatusCat = SaxUserRole.StatusCat.Any;
return GetUserRole(prmUserRole);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserRole(SaxUserRole userRole)
{
ClearErrorState();
if (userRole == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserRoleData(userRole.GetData(), new SaxUserRole.ErrField());
}
public virtual bool IsValidUserRoleData(SaxUserRole.Data data, SaxUserRole.ErrField errField)
{
ClearErrorState();
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// User Role.
if (errField.UserRole != SacsHierarchyItem.ValidValue.Ignore && (int)data.UserRole < 1)
{
errField.UserRole = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Role must be specified");
}
// Login - Admin application for System users.
if (errField.LastLogin != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.LastLoginAt))
{
if (data.UserRole != Sax.UserRole.SystemAdmin)
{
errField.LastLogin = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Last Login can only be set for System Admin role");
}
}
if (errField.LastInvalidLogin != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.LastInvalidLoginAt))
{
if (data.UserRole != Sax.UserRole.SystemAdmin)
{
errField.LastLogin = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Last Invalid Login can only be set for System Admin role");
}
}
if (errField.InvalidLoginCount != SacsHierarchyItem.ValidValue.Ignore && data.InvalidLoginCount > 0)
{
if (data.UserRole != Sax.UserRole.SystemAdmin)
{
errField.LastLogin = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid Login Count can only be set for System Admin role");
}
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserRole_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.UserRole_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserRole.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// User & Role combination must be unique.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.UserRole != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.UserAccountId) && data.UserRole > 0)
{
SaxUserRole.Params prmUserRole = new SaxUserRole.Params();
if (SysId.IsValid(data.Id))
prmUserRole.IdsExcluded.Add(data.Id);
prmUserRole.UserAccountIdsIncluded.Add(data.UserAccountId);
prmUserRole.UserRolesIncluded.Add(data.UserRole);
prmUserRole.StatusCat = SaxUserRole.StatusCat.Any;
if (GetUserRoleCount(prmUserRole) > 0)
{
errField.UserRole = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Role must be unique for user");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserRole(SaxUserRole userRole, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserRole(SaxUserRole userRole, DbUpdateInfo dbUpdateInfo);
public virtual bool UserRoleCanBeDeleted(SaxUserRole userRole)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserRole(SaxUserRole userRole, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserRoleColumnDfn(SaxUserRole.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserRoleQueryFilter(SaxUserRole.Params prmUserRole);
public abstract long GetUserRoleCount(SaxUserRole.Params prmUserRole);
public abstract List<SaxUserRole> GetUserRoleList(SaxUserRole.Params prmUserRole);
public abstract DbResultSet ExecuteUserRoleQuery(List<ColumnDfn> columns, SaxUserRole.Params prmUserRole);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserRoleDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserRole.Column)column.Id)
{
//-----------------------------------------------------------
// User Display Name.
case SaxUserRole.Column.User_DisplayName:
{
String userTitle = values.GetValue(GetUserRoleColumnDfn(SaxUserRole.Column.User_Title).DataName).ToString();
String userFirstName = values.GetValue(GetUserRoleColumnDfn(SaxUserRole.Column.User_FirstName).DataName).ToString();
String userLastName = values.GetValue(GetUserRoleColumnDfn(SaxUserRole.Column.User_LastName).DataName).ToString();
value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName));
}
break;
//-----------------------------------------------------------
// User Role.
case SaxUserRole.Column.UserRole_Desc:
{
String userRoleCode = values.GetValue(column.DataName).ToString();
value = new DataValue(UserRoleCodes.GetDescForCode(userRoleCode));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxUserRole.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserRole.Column.Status_Desc:
case SaxUserRole.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserRole.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserRole.Column.Status_Ind)
value = new DataValue(SaxUserRole.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,124 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.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 Session
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserSession CreateUserSession(SysId userAccountId);
//-------------------------------------------------------------------
// Item exists.
public bool UserSessionExists(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return false;
SaxUserSession.Params prmUserSession = new SaxUserSession.Params();
prmUserSession.UserAccountIdsIncluded.Add(userAccountId);
return GetUserSessionCount(prmUserSession) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserSession GetUserSession(SaxUserSession.Params prmUserSession);
public SaxUserSession GetUserSession(SysId userAccountId)
{
ClearErrorState();
if (!SysId.IsValid(userAccountId)) return null;
SaxUserSession.Params prmUserSession = new SaxUserSession.Params();
prmUserSession.UserAccountIdsIncluded.Add(userAccountId);
return GetUserSession(prmUserSession);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserSession(SaxUserSession userSession)
{
ClearErrorState();
if (userSession == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserSessionData(userSession.GetData(), new SaxUserSession.ErrField());
}
public virtual bool IsValidUserSessionData(SaxUserSession.Data data, SaxUserSession.ErrField errField)
{
ClearErrorState();
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserSession(SaxUserSession userSession, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserSession(SaxUserSession userSession, DbUpdateInfo dbUpdateInfo);
public virtual bool UserSessionCanBeDeleted(SaxUserSession userSession)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserSession(SaxUserSession userSession, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserSessionColumnDfn(SaxUserSession.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserSessionQueryFilter(SaxUserSession.Params prmUserSession);
public abstract long GetUserSessionCount(SaxUserSession.Params prmUserSession);
public abstract List<SaxUserSession> GetUserSessionList(SaxUserSession.Params prmUserSession);
public abstract DbResultSet ExecuteUserSessionQuery(List<ColumnDfn> columns, SaxUserSession.Params prmUserSession);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserSessionDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserSession.Column)column.Id)
{
//-----------------------------------------------------------
// User Display Name.
case SaxUserSession.Column.User_DisplayName:
{
String userTitle = values.GetValue(GetUserSessionColumnDfn(SaxUserSession.Column.User_Title).DataName).ToString();
String userFirstName = values.GetValue(GetUserSessionColumnDfn(SaxUserSession.Column.User_FirstName).DataName).ToString();
String userLastName = values.GetValue(GetUserSessionColumnDfn(SaxUserSession.Column.User_LastName).DataName).ToString();
value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,282 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - User Sport
//*******************************************************************
// Utilities.
public bool UserHasSport(SysId userAccountId, SysId sportId, SaxUserSport.StatusCat statusCat = SaxUserSport.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId) || !SysId.IsValid(sportId)) return false;
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.UserAccountIdsIncluded.Add(userAccountId);
prmUserSport.SportIdsIncluded.Add(sportId);
prmUserSport.StatusCat = statusCat;
return GetUserSportCount(prmUserSport) > 0;
}
public List<SaxUserSport> GetSportsForUser(SysId userAccountId, SaxUserSport.StatusCat statusCat = SaxUserSport.StatusCat.ActiveOnly)
{
if (!SysId.IsValid(userAccountId)) return new List<SaxUserSport>();
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.UserAccountIdsIncluded.Add(userAccountId);
prmUserSport.StatusCat = statusCat;
return GetUserSportList(prmUserSport);
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserSport CreateUserSport(SysId userAccountId, SysId sportId);
//-------------------------------------------------------------------
// Item exists.
public bool UserSportExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.IdsIncluded.Add(id);
prmUserSport.StatusCat = SaxUserSport.StatusCat.Any;
return GetUserSportCount(prmUserSport) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserSport GetUserSport(SaxUserSport.Params prmUserSport);
public SaxUserSport GetUserSportById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.IdsIncluded.Add(id);
prmUserSport.StatusCat = SaxUserSport.StatusCat.Any;
return GetUserSport(prmUserSport);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserSport(SaxUserSport userSport)
{
ClearErrorState();
if (userSport == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserSportData(userSport.GetData(), new SaxUserSport.ErrField());
}
public virtual bool IsValidUserSportData(SaxUserSport.Data data, SaxUserSport.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Sport.
if (errField.SportId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportId))
{
errField.SportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Sport must be specified");
}
// About.
if (errField.About != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.About, "about", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSport_About)))
{
errField.About = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSport_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.UserSport_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserSport.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
// User & Sport combination must be unique.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && errField.SportId != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.UserAccountId) && SysId.IsValid(data.SportId))
{
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
if (SysId.IsValid(data.Id))
prmUserSport.IdsExcluded.Add(data.Id);
prmUserSport.UserAccountIdsIncluded.Add(data.UserAccountId);
prmUserSport.SportIdsIncluded.Add(data.SportId);
prmUserSport.StatusCat = SaxUserSport.StatusCat.Any;
if (GetUserSportCount(prmUserSport) > 0)
{
errField.SportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be unique for user");
}
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// User must exist.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.UserAccountId))
{
SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params();
prmUserAccount.IdsIncluded.Add(data.UserAccountId);
prmUserAccount.StatusCat = SaxUserAccount.StatusCat.NotDeleted;
if (GetUserAccountCount(prmUserAccount) < 1)
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid user specified");
}
}
}
// Sport must exist.
if (errField.SportId != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.SportId))
{
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.Add(data.SportId);
prmSport.StatusCat = SaxSport.StatusCat.NotDeleted;
if (ReferenceMgr.GetSportCount(prmSport) < 1)
{
errField.SportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid sport specified");
}
}
}
}
//---------------------------------------------------------------
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserSport(SaxUserSport userSport, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserSport(SaxUserSport userSport, DbUpdateInfo dbUpdateInfo);
public virtual bool UserSportCanBeDeleted(SaxUserSport userSport)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserSport(SaxUserSport userSport, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserSportColumnDfn(SaxUserSport.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserSportQueryFilter(SaxUserSport.Params prmUserSport);
public abstract long GetUserSportCount(SaxUserSport.Params prmUserSport);
public abstract List<SaxUserSport> GetUserSportList(SaxUserSport.Params prmUserSport);
public abstract DbResultSet ExecuteUserSportQuery(List<ColumnDfn> columns, SaxUserSport.Params prmUserSport);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserSportDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserSport.Column)column.Id)
{
//-----------------------------------------------------------
// Sport Participating.
case SaxUserSport.Column.SportParticipating_Code:
case SaxUserSport.Column.SportParticipating_Desc:
Sax.SportParticipating sportParticipating = (Sax.SportParticipating)values.GetLong(column.DataName);
if (column.Id == (int)SaxUserSport.Column.SportParticipating_Code)
value = new DataValue(SportParticipatingCodes.GetCodeForType(sportParticipating));
else
value = new DataValue(SportParticipatingCodes.GetDescForType(sportParticipating));
break;
//-----------------------------------------------------------
// Sport Preparing.
case SaxUserSport.Column.SportPreparing_Code:
case SaxUserSport.Column.SportPreparing_Desc:
Sax.SportPreparing sportPreparing = (Sax.SportPreparing)values.GetLong(column.DataName);
if (column.Id == (int)SaxUserSport.Column.SportPreparing_Code)
value = new DataValue(SportPreparingCodes.GetCodeForType(sportPreparing));
else
value = new DataValue(SportPreparingCodes.GetDescForType(sportPreparing));
break;
//-----------------------------------------------------------
// Sport Officiating.
case SaxUserSport.Column.SportOfficiating_Code:
case SaxUserSport.Column.SportOfficiating_Desc:
Sax.SportOfficiating sportOfficiating = (Sax.SportOfficiating)values.GetLong(column.DataName);
if (column.Id == (int)SaxUserSport.Column.SportOfficiating_Code)
value = new DataValue(SportOfficiatingCodes.GetCodeForType(sportOfficiating));
else
value = new DataValue(SportOfficiatingCodes.GetDescForType(sportOfficiating));
break;
//-----------------------------------------------------------
// Notes.
case SaxUserSport.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserSport.Column.Status_Desc:
case SaxUserSport.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserSport.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserSport.Column.Status_Ind)
value = new DataValue(SaxUserSport.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,271 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxAccountMgr
{
//*******************************************************************
// Account Mgr - User Sport Experience
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserSportExperience CreateUserSportExperience(SysId userUserId);
//-------------------------------------------------------------------
// Item exists.
public bool UserSportExperienceExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxUserSportExperience.Params prmUserSportExperience = new SaxUserSportExperience.Params();
prmUserSportExperience.IdsIncluded.Add(id);
prmUserSportExperience.StatusCat = SaxUserSportExperience.StatusCat.Any;
return GetUserSportExperienceCount(prmUserSportExperience) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserSportExperience GetUserSportExperience(SaxUserSportExperience.Params prmUserSportExperience);
public SaxUserSportExperience GetUserSportExperienceById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxUserSportExperience.Params prmUserSportExperience = new SaxUserSportExperience.Params();
prmUserSportExperience.IdsIncluded.Add(id);
prmUserSportExperience.StatusCat = SaxUserSportExperience.StatusCat.Any;
return GetUserSportExperience(prmUserSportExperience);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserSportExperience(SaxUserSportExperience userSportExperience)
{
ClearErrorState();
if (userSportExperience == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserSportExperienceData(userSportExperience.GetData(), new SaxUserSportExperience.ErrField());
}
public virtual bool IsValidUserSportExperienceData(SaxUserSportExperience.Data data, SaxUserSportExperience.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// User Sport.
if (errField.UserSportId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserSportId))
{
errField.UserSportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Sport Id must be specified");
}
//---------------------------------------------------------------
// Organisation name.
if (errField.OrganisationName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.OrganisationName, "organisation name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName)))
{
errField.OrganisationName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Summary.
if (errField.Summary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Summary, "summary", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary)))
{
errField.Summary = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Team.
if (errField.Team != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Team, "team", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team)))
{
errField.Team = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// League.
if (errField.League != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.League, "league", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_League)))
{
errField.League = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Speciality.
if (errField.Speciality != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Speciality, "speciality", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality)))
{
errField.Speciality = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Other specialities.
if (errField.SpecialitiesOther != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.GetSpecialitiesOther().ToList().Concat(SaxUserSportExperience.SpecialitiesOtherDelim), "other specialities", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_SpecialitiesOther)))
{
errField.Speciality = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Awards.
if (errField.Awards != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Awards, "Awards", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Awards)))
{
errField.Awards = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Regions.
if (errField.RegionIdNation != SacsHierarchyItem.ValidValue.Ignore)
{
}
if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore)
{
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserSportExperience.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// User Sport must be valid.
if (errField.UserSportId != SacsHierarchyItem.ValidValue.Ignore && errField.UserSportId != SacsHierarchyItem.ValidValue.Invalid)
{
if (SysId.IsValid(data.UserSportId))
{
if (!UserSportExistsById(data.UserSportId))
{
errField.UserSportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Sport does not exist");
}
}
}
// Regions.
if (errField.RegionIdNation != SacsHierarchyItem.ValidValue.Ignore && errField.RegionIdNation != SacsHierarchyItem.ValidValue.Invalid && SysId.IsValid(data.RegionIdNation))
{
if (!ReferenceMgr.RegionExistsById(data.RegionIdNation))
{
errField.RegionIdNation = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid 'Nation' region");
}
}
if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore && errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Invalid && SysId.IsValid(data.RegionIdProvince))
{
if (!ReferenceMgr.RegionExistsById(data.RegionIdProvince))
{
errField.RegionIdProvince = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid 'Province' region");
}
}
}
//---------------------------------------------------------------
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo);
public virtual bool UserSportExperienceCanBeDeleted(SaxUserSportExperience userSportExperience)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserSportExperienceQueryFilter(SaxUserSportExperience.Params prmUserSportExperience);
public abstract long GetUserSportExperienceCount(SaxUserSportExperience.Params prmUserSportExperience);
public abstract List<SaxUserSportExperience> GetUserSportExperienceList(SaxUserSportExperience.Params prmUserSportExperience);
public abstract DbResultSet ExecuteUserSportExperienceQuery(List<ColumnDfn> columns, SaxUserSportExperience.Params prmUserSportExperience);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserSportExperienceDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserSportExperience.Column)column.Id)
{
//-----------------------------------------------------------
// Organisation name.
case SaxUserSportExperience.Column.Organisation_Name:
{
String organisationName = values.GetString(column.DataName).TrimAll();
if (StringUtil.IsEmpty(organisationName))
organisationName = values.GetString(GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column.OrganisationName).DataName).TrimAll();
value = new DataValue(organisationName);
}
break;
//-----------------------------------------------------------
// Notes.
case SaxUserSportExperience.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserSportExperience.Column.Status_Desc:
case SaxUserSportExperience.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserSportExperience.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserSportExperience.Column.Status_Ind)
value = new DataValue(SaxUserSportExperience.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,20 @@
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SaxAccountMgr : SaxItemMgr
{
//-------------------------------------------------------------------
protected SaxAccountMgr(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,194 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxActivityMgr
{
//*******************************************************************
// Activity Mgr - Activity Index
//*******************************************************************
// Utilities.
public Boolean IsValidItemForFeedback(ItemId itemId)
{
if (!ItemId.IsValid(itemId))
return false;
if (!SaxActivityFeedback.ValidItemTypes.Contains((Sax.DataItemType)itemId.Type))
return false;
return true;
}
//-------------------------------------------------------------------
public SaxActivityFeedback GetActivityFeedbackForItem(ItemId itemId)
{
ClearErrorState();
if (!ItemId.IsValid(itemId))
return null;
SaxActivityFeedback.Params prmActivityFeedback = new SaxActivityFeedback.Params();
prmActivityFeedback.ItemIdsIncluded.Add(itemId);
return GetActivityFeedback(prmActivityFeedback);
}
//-------------------------------------------------------------------
public Boolean UpdateActivityFeedback(ItemId itemId, int viewCountIncrement, int feedbackCountIncrement, int feedbackTotalIncrement, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemId.IsValid(itemId))
return SetErrorState("Unable to update activity feedback - Item Id must be supplied");
if (viewCountIncrement == 0 && feedbackCountIncrement == 0 && feedbackTotalIncrement == 0)
return true;
if (DebugMode)
SaLogger.Info($"{SysUtil.Fn} View count incr: {viewCountIncrement}. Feedback count incr: {feedbackCountIncrement}. Feedback total incr: {feedbackTotalIncrement}.");
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
bool activityFeedbackCreated = false;
SaxActivityFeedback activityFeedback = GetActivityFeedbackForItem(itemId);
if (activityFeedback == null)
{
activityFeedback = CreateActivityFeedback(itemId);
activityFeedbackCreated = true;
}
disposableItems.Add(activityFeedback);
// Update properties.
activityFeedback.ViewCount = Math.Max(0, activityFeedback.ViewCount + viewCountIncrement);
activityFeedback.FeedbackCount = Math.Max(0, activityFeedback.FeedbackCount + feedbackCountIncrement);
activityFeedback.FeedbackTotal = Math.Max(0, activityFeedback.FeedbackTotal + feedbackTotalIncrement);
activityFeedback.FeedbackAverage = activityFeedback.FeedbackCount > 0 ? (decimal)activityFeedback.FeedbackTotal / activityFeedback.FeedbackCount : 0;
// Store feedback.
if (activityFeedbackCreated)
InsertActivityFeedback(activityFeedback, dbUpdateInfo);
else
UpdateActivityFeedback(activityFeedback, dbUpdateInfo);
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxActivityFeedback CreateActivityFeedback(ItemId itemId);
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxActivityFeedback GetActivityFeedback(SaxActivityFeedback.Params prmActivityFeedback);
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidActivityFeedback(SaxActivityFeedback activityIndex)
{
ClearErrorState();
if (activityIndex == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidActivityFeedbackData(activityIndex.GetData(), new SaxActivityFeedback.ErrField());
}
public virtual bool IsValidActivityFeedbackData(SaxActivityFeedback.Data data, SaxActivityFeedback.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Item Id.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore)
{
if (!ItemId.IsValid(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("item id must be specified");
}
if (!IsValidItemForFeedback(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid item type specified");
}
}
// View Count.
if (errField.ViewCount != SacsHierarchyItem.ValidValue.Ignore && data.ViewCount < 0)
{
errField.ViewCount = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("View count must not be negative");
}
// Feedback Count.
if (errField.FeedbackCount != SacsHierarchyItem.ValidValue.Ignore && data.FeedbackCount < 0)
{
errField.FeedbackCount = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Feedback count must not be negative");
}
// Feedback Total.
if (errField.FeedbackTotal != SacsHierarchyItem.ValidValue.Ignore && data.FeedbackTotal < 0)
{
errField.FeedbackTotal = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Feedback count must not be negative");
}
// Feedback Average.
if (errField.FeedbackAverage != SacsHierarchyItem.ValidValue.Ignore && data.FeedbackAverage < 0)
{
errField.FeedbackAverage = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Feedback count must not be negative");
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// ActivityFeedback database interface.
public abstract bool InsertActivityFeedback(SaxActivityFeedback activityIndex, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateActivityFeedback(SaxActivityFeedback activityIndex, DbUpdateInfo dbUpdateInfo);
public virtual bool ActivityFeedbackCanBeDeleted(SaxActivityFeedback activityIndex)
{
ClearErrorState();
return true;
}
public abstract bool DeleteActivityFeedback(SaxActivityFeedback activityIndex, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// ActivityFeedback list:
public abstract ColumnDfn GetActivityFeedbackColumnDfn(SaxActivityFeedback.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetActivityFeedbackQueryFilter(SaxActivityFeedback.Params prmActivityFeedback);
public abstract long GetActivityFeedbackCount(SaxActivityFeedback.Params prmActivityFeedback);
public abstract List<SaxActivityFeedback> GetActivityFeedbackList(SaxActivityFeedback.Params prmActivityFeedback);
public abstract DbResultSet ExecuteActivityFeedbackQuery(List<ColumnDfn> columns, SaxActivityFeedback.Params prmActivityFeedback);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetActivityFeedbackDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxActivityFeedback.Column)column.Id)
{
//-----------------------------------------------------------
// Data item type.
case SaxActivityFeedback.Column.ItemType_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxActivityFeedback.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,206 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxActivityMgr
{
//*******************************************************************
// Activity Mgr - Activity Index
//*******************************************************************
// Utilities.
public Boolean IsValidItemForIndex(ItemId itemId)
{
if (!ItemId.IsValid(itemId))
return false;
if (!SaxActivityFeedback.ValidItemTypes.Contains((Sax.DataItemType)itemId.Type))
return false;
return true;
}
//-------------------------------------------------------------------
public List<SaxActivityIndex> GetActivityIndexListForItem(ItemId itemId)
{
ClearErrorState();
List<SaxActivityIndex> activityIndexEntries = new List<SaxActivityIndex>();
if (!IsValidItemForIndex(itemId)) return activityIndexEntries;
SaxActivityIndex.Params prmActivityIndex = new SaxActivityIndex.Params();
prmActivityIndex.ItemIdsIncluded.Add(itemId);
return GetActivityIndexList(prmActivityIndex);
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId);
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxActivityIndex GetActivityIndex(SaxActivityIndex.Params prmActivityIndex);
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidActivityIndex(SaxActivityIndex activityIndex)
{
ClearErrorState();
if (activityIndex == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidActivityIndexData(activityIndex.GetData(), new SaxActivityIndex.ErrField());
}
public virtual bool IsValidActivityIndexData(SaxActivityIndex.Data data, SaxActivityIndex.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Item Id.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore)
{
if (!ItemId.IsValid(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("item id must be specified");
}
if (!IsValidItemForIndex(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid item type specified");
}
}
// Sport.
if (errField.SportId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportId))
{
errField.SportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be specified");
}
// Region.
if (errField.RegionId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionId))
{
errField.RegionId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Region must be specified");
}
// Effective date.
if (errField.EffectiveOn != SacsHierarchyItem.ValidValue.Ignore && !DateUtil.IsValid(data.EffectiveOn))
{
errField.EffectiveOn = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Effective date must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ActivityIndex_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.ActivityIndex_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxActivityIndex.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
// 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;
}
//-------------------------------------------------------------------
// ActivityIndex database interface.
public abstract bool InsertActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo);
public virtual bool ActivityIndexCanBeDeleted(SaxActivityIndex activityIndex)
{
ClearErrorState();
return true;
}
public abstract bool DeleteActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// ActivityIndex list:
public abstract ColumnDfn GetActivityIndexColumnDfn(SaxActivityIndex.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetActivityIndexQueryFilter(SaxActivityIndex.Params prmActivityIndex);
public abstract long GetActivityIndexCount(SaxActivityIndex.Params prmActivityIndex);
public abstract List<SaxActivityIndex> GetActivityIndexList(SaxActivityIndex.Params prmActivityIndex);
public abstract DbResultSet ExecuteActivityIndexQuery(List<ColumnDfn> columns, SaxActivityIndex.Params prmActivityIndex);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetActivityIndexDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxActivityIndex.Column)column.Id)
{
//-----------------------------------------------------------
// Data item type.
case SaxActivityIndex.Column.ItemType_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxActivityIndex.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxActivityIndex.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxActivityIndex.Column.Status_Desc:
case SaxActivityIndex.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxActivityIndex.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxActivityIndex.Column.Status_Ind)
value = new DataValue(SaxActivityIndex.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,271 @@
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxActivityMgr
{
//*******************************************************************
// Activity Mgr - Article
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxArticle CreateArticle(SysId userAccountIdAuthor, SysId organisationId);
//-------------------------------------------------------------------
// Item exists.
public bool ArticleExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxArticle.Params prmArticle = new SaxArticle.Params();
prmArticle.IdsIncluded.Add(id);
prmArticle.StatusCat = SaxArticle.StatusCat.Any;
return GetArticleCount(prmArticle) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxArticle GetArticle(SaxArticle.Params prmArticle);
public SaxArticle GetArticleById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxArticle.Params prmArticle = new SaxArticle.Params();
prmArticle.IdsIncluded.Add(id);
prmArticle.StatusCat = SaxArticle.StatusCat.Any;
return GetArticle(prmArticle);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidArticle(SaxArticle article)
{
ClearErrorState();
if (article == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidArticleData(article.GetData(), new SaxArticle.ErrField());
}
public virtual bool IsValidArticleData(SaxArticle.Data data, SaxArticle.ErrField errField)
{
ClearErrorState();
// User Account - Author.
if (errField.UserAccountIdAuthor != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountIdAuthor))
{
errField.UserAccountIdAuthor = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Author must be specified");
}
// Primary Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportIdPrimary))
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be specified");
}
// Primary Region.
if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionIdPrimary))
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Region must be specified");
}
// Headline.
if (errField.Headline != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Headline, "headline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_Headline), true))
{
errField.Headline = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Summary.
if (errField.Summary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Summary, "summary", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_Summary), true))
{
errField.Summary = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_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.Article_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxArticle.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// User Account - Author.
if (errField.UserAccountIdAuthor != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.UserAccountIdAuthor))
{
if (SysId.IsValid(data.OrganisationId))
{
// Validate user.
if (!AccountMgr.UserAccountExistsById(data.UserAccountIdAuthor))
{
errField.UserAccountIdAuthor = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid Author specified");
}
}
else
{
// Organisation not specified - user must be a journalist.
SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params();
prmUserAccount.IdsIncluded.Add(data.UserAccountIdAuthor);
prmUserAccount.ActiveRoles.Add(App.Sax.UserRole.Journalist);
prmUserAccount.StatusCat = SaxUserAccount.StatusCat.NotDeleted;
if (AccountMgr.GetUserAccountCount(prmUserAccount) < 1)
{
errField.UserAccountIdAuthor = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User must be active Journalist");
}
}
}
// Organisation.
if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationId))
{
// Validate organisation.
if (!AccountMgr.OrganisationExistsById(data.OrganisationId))
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid Organisation specified");
}
}
// Primary Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdPrimary))
{
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.Add(data.SportIdPrimary);
prmSport.StatusCat = SaxSport.StatusCat.NotDeleted;
if (ReferenceMgr.GetSportCount(prmSport) < 1)
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid sport specified");
}
}
// Primary Region.
if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdPrimary))
{
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.IdsIncluded.Add(data.RegionIdPrimary);
prmRegion.StatusCat = SaxRegion.StatusCat.NotDeleted;
if (ReferenceMgr.GetRegionCount(prmRegion) < 1)
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid region specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Article database interface.
public abstract bool InsertArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo);
public virtual bool ArticleCanBeDeleted(SaxArticle article)
{
ClearErrorState();
return true;
}
public abstract bool DeleteArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Article list:
public abstract ColumnDfn GetArticleColumnDfn(SaxArticle.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetArticleQueryFilter(SaxArticle.Params prmArticle);
public abstract long GetArticleCount(SaxArticle.Params prmArticle);
public abstract List<SaxArticle> GetArticleList(SaxArticle.Params prmArticle);
public abstract DbResultSet ExecuteArticleQuery(List<ColumnDfn> columns, SaxArticle.Params prmArticle);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetArticleDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxArticle.Column)column.Id)
{
//-----------------------------------------------------------
// Author display name.
case SaxArticle.Column.Author_DisplayName:
{
String userTitle = values.GetValue(GetArticleColumnDfn(SaxArticle.Column.Author_Title).DataName).ToString();
String userFirstName = values.GetValue(GetArticleColumnDfn(SaxArticle.Column.Author_FirstName).DataName).ToString();
String userLastName = values.GetValue(GetArticleColumnDfn(SaxArticle.Column.Author_LastName).DataName).ToString();
value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName));
}
break;
//-----------------------------------------------------------
// Summary - limit to 200 chars.
case SaxArticle.Column.Summary:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxArticle.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxArticle.Column.Status_Desc:
case SaxArticle.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxArticle.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxArticle.Column.Status_Ind)
value = new DataValue(SaxArticle.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,264 @@
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxActivityMgr
{
//*******************************************************************
// Activity Mgr - Organisation Event
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxOrganisationEvent CreateOrganisationEvent(SysId organisationId);
//-------------------------------------------------------------------
// Item exists.
public bool OrganisationEventExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxOrganisationEvent.Params prmOrganisationEvent = new SaxOrganisationEvent.Params();
prmOrganisationEvent.IdsIncluded.Add(id);
prmOrganisationEvent.StatusCat = SaxOrganisationEvent.StatusCat.Any;
return GetOrganisationEventCount(prmOrganisationEvent) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxOrganisationEvent GetOrganisationEvent(SaxOrganisationEvent.Params prmOrganisationEvent);
public SaxOrganisationEvent GetOrganisationEventById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxOrganisationEvent.Params prmOrganisationEvent = new SaxOrganisationEvent.Params();
prmOrganisationEvent.IdsIncluded.Add(id);
prmOrganisationEvent.StatusCat = SaxOrganisationEvent.StatusCat.Any;
return GetOrganisationEvent(prmOrganisationEvent);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidOrganisationEvent(SaxOrganisationEvent organisationEvent)
{
ClearErrorState();
if (organisationEvent == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidOrganisationEventData(organisationEvent.GetData(), new SaxOrganisationEvent.ErrField());
}
public virtual bool IsValidOrganisationEventData(SaxOrganisationEvent.Data data, SaxOrganisationEvent.ErrField errField)
{
ClearErrorState();
// Organisation.
if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.OrganisationId))
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Organisation must be specified");
}
// Primary Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportIdPrimary))
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be specified");
}
// Country Region.
if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionIdCountry))
{
errField.RegionIdCountry = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Country Region must be specified");
}
// Event date and time.
if (errField.EventAt != SacsHierarchyItem.ValidValue.Ignore && !DateUtil.IsValid(data.EventAt))
{
errField.EventType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Event data and time must be specified.");
}
// Event type.
if (errField.EventType != SacsHierarchyItem.ValidValue.Ignore && data.EventType <= 0)
{
errField.EventType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Event type must be specified.");
}
// Summary.
if (errField.Summary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Summary, "outline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary), true))
{
errField.Summary = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Details.
if (errField.Details != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Details, "details", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details)))
{
errField.Details = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_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.OrganisationEvent_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxOrganisationEvent.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Organisation.
if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationId))
{
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
prmOrganisation.IdsIncluded.Add(data.OrganisationId);
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.NotDeleted;
if (AccountMgr.GetOrganisationCount(prmOrganisation) < 1)
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid organisation specified");
}
}
// Primary Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdPrimary))
{
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.Add(data.SportIdPrimary);
prmSport.StatusCat = SaxSport.StatusCat.NotDeleted;
if (ReferenceMgr.GetSportCount(prmSport) < 1)
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid sport specified");
}
}
// Country Region.
if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdCountry))
{
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.IdsIncluded.Add(data.RegionIdCountry);
prmRegion.StatusCat = SaxRegion.StatusCat.NotDeleted;
if (ReferenceMgr.GetRegionCount(prmRegion) < 1)
{
errField.RegionIdCountry = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid region specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// OrganisationEvent database interface.
public abstract bool InsertOrganisationEvent(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateOrganisationEvent(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo);
public virtual bool OrganisationEventCanBeDeleted(SaxOrganisationEvent organisationEvent)
{
ClearErrorState();
return true;
}
public abstract bool DeleteOrganisationEvent(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// OrganisationEvent list:
public abstract ColumnDfn GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetOrganisationEventQueryFilter(SaxOrganisationEvent.Params prmOrganisationEvent);
public abstract long GetOrganisationEventCount(SaxOrganisationEvent.Params prmOrganisationEvent);
public abstract List<SaxOrganisationEvent> GetOrganisationEventList(SaxOrganisationEvent.Params prmOrganisationEvent);
public abstract DbResultSet ExecuteOrganisationEventQuery(List<ColumnDfn> columns, SaxOrganisationEvent.Params prmOrganisationEvent);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetOrganisationEventDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxOrganisationEvent.Column)column.Id)
{
//-----------------------------------------------------------
// Event type desc.
case SaxOrganisationEvent.Column.EventType_Desc:
{
String code = values.GetValue(column.DataName).ToString();
value = new DataValue(EventTypeCodes.GetDescForCode(code, code));
}
break;
//-----------------------------------------------------------
// Summary - limit to 200 chars.
case SaxOrganisationEvent.Column.Summary:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Details - limit to 200 chars.
case SaxOrganisationEvent.Column.Details:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxOrganisationEvent.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxOrganisationEvent.Column.Status_Desc:
case SaxOrganisationEvent.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxOrganisationEvent.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxOrganisationEvent.Column.Status_Ind)
value = new DataValue(SaxOrganisationEvent.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,250 @@
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxActivityMgr
{
//*******************************************************************
// Activity Mgr - Organisation Opportunity
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxOrganisationOpportunity CreateOrganisationOpportunity(SysId organisationId);
//-------------------------------------------------------------------
// Item exists.
public bool OrganisationOpportunityExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxOrganisationOpportunity.Params prmOrganisationOpportunity = new SaxOrganisationOpportunity.Params();
prmOrganisationOpportunity.IdsIncluded.Add(id);
prmOrganisationOpportunity.StatusCat = SaxOrganisationOpportunity.StatusCat.Any;
return GetOrganisationOpportunityCount(prmOrganisationOpportunity) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxOrganisationOpportunity GetOrganisationOpportunity(SaxOrganisationOpportunity.Params prmOrganisationOpportunity);
public SaxOrganisationOpportunity GetOrganisationOpportunityById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxOrganisationOpportunity.Params prmOrganisationOpportunity = new SaxOrganisationOpportunity.Params();
prmOrganisationOpportunity.IdsIncluded.Add(id);
prmOrganisationOpportunity.StatusCat = SaxOrganisationOpportunity.StatusCat.Any;
return GetOrganisationOpportunity(prmOrganisationOpportunity);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity)
{
ClearErrorState();
if (organisationOpportunity == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidOrganisationOpportunityData(organisationOpportunity.GetData(), new SaxOrganisationOpportunity.ErrField());
}
public virtual bool IsValidOrganisationOpportunityData(SaxOrganisationOpportunity.Data data, SaxOrganisationOpportunity.ErrField errField)
{
ClearErrorState();
// Organisation.
if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.OrganisationId))
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Organisation must be specified");
}
// Primary Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportIdPrimary))
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be specified");
}
// Primary Region.
if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionIdPrimary))
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Region must be specified");
}
// Opportunity type.
if (errField.OpportunityType != SacsHierarchyItem.ValidValue.Ignore && data.OpportunityType <= 0)
{
errField.OpportunityType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Opportunity type must be specified.");
}
// Position.
if (errField.Position != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Position, "position", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position), true))
{
errField.Position = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Summary.
if (errField.Outline != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Outline, "outline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline), true))
{
errField.Outline = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_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.OrganisationOpportunity_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxOrganisationOpportunity.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// Organisation.
if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationId))
{
SaxOrganisation.Params prmOrganisation = new SaxOrganisation.Params();
prmOrganisation.IdsIncluded.Add(data.OrganisationId);
prmOrganisation.StatusCat = SaxOrganisation.StatusCat.NotDeleted;
if (AccountMgr.GetOrganisationCount(prmOrganisation) < 1)
{
errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid organisation specified");
}
}
// Primary Sport.
if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdPrimary))
{
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.Add(data.SportIdPrimary);
prmSport.StatusCat = SaxSport.StatusCat.NotDeleted;
if (ReferenceMgr.GetSportCount(prmSport) < 1)
{
errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid sport specified");
}
}
// Primary Region.
if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdPrimary))
{
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.IdsIncluded.Add(data.RegionIdPrimary);
prmRegion.StatusCat = SaxRegion.StatusCat.NotDeleted;
if (ReferenceMgr.GetRegionCount(prmRegion) < 1)
{
errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid region specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// OrganisationOpportunity database interface.
public abstract bool InsertOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo);
public virtual bool OrganisationOpportunityCanBeDeleted(SaxOrganisationOpportunity organisationOpportunity)
{
ClearErrorState();
return true;
}
public abstract bool DeleteOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// OrganisationOpportunity list:
public abstract ColumnDfn GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetOrganisationOpportunityQueryFilter(SaxOrganisationOpportunity.Params prmOrganisationOpportunity);
public abstract long GetOrganisationOpportunityCount(SaxOrganisationOpportunity.Params prmOrganisationOpportunity);
public abstract List<SaxOrganisationOpportunity> GetOrganisationOpportunityList(SaxOrganisationOpportunity.Params prmOrganisationOpportunity);
public abstract DbResultSet ExecuteOrganisationOpportunityQuery(List<ColumnDfn> columns, SaxOrganisationOpportunity.Params prmOrganisationOpportunity);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetOrganisationOpportunityDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxOrganisationOpportunity.Column)column.Id)
{
//-----------------------------------------------------------
// Opportunity type desc.
case SaxOrganisationOpportunity.Column.OpportunityType_Desc:
{
String code = values.GetValue(column.DataName).ToString();
value = new DataValue(OpportunityTypeCodes.GetDescForCode(code, code));
}
break;
//-----------------------------------------------------------
// Summary - limit to 200 chars.
case SaxOrganisationOpportunity.Column.Outline:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxOrganisationOpportunity.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxOrganisationOpportunity.Column.Status_Desc:
case SaxOrganisationOpportunity.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxOrganisationOpportunity.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxOrganisationOpportunity.Column.Status_Ind)
value = new DataValue(SaxOrganisationOpportunity.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,187 @@
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxActivityMgr
{
//*******************************************************************
// Activity Mgr - User Activity
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserActivity CreateUserActivity(SysId userAccountId, ItemId itemId);
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserActivity GetUserActivity(SaxUserActivity.Params prmUserActivity);
public SaxUserActivity GetUserActivityForUserItem(SysId userAccountId, ItemId itemId)
{
if (!SysId.IsValid(userAccountId) || !ItemId.IsValid(itemId)) return null;
SaxUserActivity.Params prmUserActivity = new SaxUserActivity.Params();
prmUserActivity.UserAccountIdsIncluded.Add(userAccountId);
prmUserActivity.ItemIdsIncluded.Add(itemId);
prmUserActivity.StatusCat = SaxUserActivity.StatusCat.Any;
return ActivityMgr.GetUserActivity(prmUserActivity);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserActivity(SaxUserActivity userActivity)
{
ClearErrorState();
if (userActivity == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserActivityData(userActivity.GetData(), new SaxUserActivity.ErrField());
}
public virtual bool IsValidUserActivityData(SaxUserActivity.Data data, SaxUserActivity.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Item Id.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && !ItemId.IsValid(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserActivity_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.UserActivity_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserActivity.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for existing or deleted items.
if (!SysId.IsValid(data.Id) && !data.IsStatusDeleted)
{
// User must exist.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore)
{
if (SysId.IsValid(data.UserAccountId))
{
SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params();
prmUserAccount.IdsIncluded.Add(data.UserAccountId);
prmUserAccount.StatusCat = SaxUserAccount.StatusCat.NotDeleted;
if (AccountMgr.GetUserAccountCount(prmUserAccount) < 1)
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid user specified");
}
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// UserActivity database interface.
public abstract bool InsertUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo);
public virtual bool UserActivityCanBeDeleted(SaxUserActivity userActivity)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// UserActivity list:
public abstract ColumnDfn GetUserActivityColumnDfn(SaxUserActivity.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserActivityQueryFilter(SaxUserActivity.Params prmUserActivity);
public abstract long GetUserActivityCount(SaxUserActivity.Params prmUserActivity);
public abstract List<SaxUserActivity> GetUserActivityList(SaxUserActivity.Params prmUserActivity);
public abstract DbResultSet ExecuteUserActivityQuery(List<ColumnDfn> columns, SaxUserActivity.Params prmUserActivity);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserActivityDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserActivity.Column)column.Id)
{
//-----------------------------------------------------------
// Data item type.
case SaxUserActivity.Column.ItemType_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxUserActivity.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxUserActivity.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserActivity.Column.Status_Desc:
case SaxUserActivity.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserActivity.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserActivity.Column.Status_Ind)
value = new DataValue(SaxUserActivity.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,20 @@
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SaxActivityMgr : SaxItemMgr
{
//-------------------------------------------------------------------
protected SaxActivityMgr(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,277 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.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 SaxItemDataMgr
{
//*******************************************************************
// Item Data Mgr - Item Address
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxItemAddress CreateItemAddress(ItemId itemId, Sax.AddressType addressType);
//-------------------------------------------------------------------
// Item exists.
public bool ItemAddressExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxItemAddress.Params prmItemAddress = new SaxItemAddress.Params();
prmItemAddress.IdsIncluded.Add(id);
prmItemAddress.StatusCat = SaxItemAddress.StatusCat.Any;
return GetItemAddressCount(prmItemAddress) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxItemAddress GetItemAddress(SaxItemAddress.Params prmItemAddress);
public SaxItemAddress GetItemAddressById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxItemAddress.Params prmItemAddress = new SaxItemAddress.Params();
prmItemAddress.IdsIncluded.Add(id);
prmItemAddress.StatusCat = SaxItemAddress.StatusCat.Any;
return GetItemAddress(prmItemAddress);
}
public SaxItemAddress GetFirstItemAddressByItemAndType(ItemId itemId, Sax.AddressType addressType = Sax.AddressType.Unknown)
{
ClearErrorState();
if (!ItemId.IsValid(itemId)) return null;
SaxItemAddress.Params prmItemAddress = new SaxItemAddress.Params();
prmItemAddress.AddressType = addressType;
prmItemAddress.ItemIdsIncluded.Add(itemId);
prmItemAddress.StatusCat = SaxItemAddress.StatusCat.Any;
List<SaxItemAddress> addresses = GetItemAddressList(prmItemAddress);
return addresses.Count > 0 ? addresses[0] : null;
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidItemAddress(SaxItemAddress itemAddress)
{
ClearErrorState();
if (itemAddress == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidItemAddressData(itemAddress.GetData(), new SaxItemAddress.ErrField());
}
public virtual bool IsValidItemAddressData(SaxItemAddress.Data data, SaxItemAddress.ErrField errField)
{
ClearErrorState();
// Some mandatory properties become optional if the address is deleted.
bool deleted = data.IsStatusDeleted;
//---------------------------------------------------------------
// Item Id.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && !ItemId.IsValid(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be specified");
}
// Address.
if (errField.Caption != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Caption, "caption", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Caption)))
{
errField.Caption = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Line1 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Line1, "line 1", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1)))
{
errField.Line1 = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Line2 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Line2, "line 2", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2)))
{
errField.Line2 = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Line3 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Line3, "line 3", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3)))
{
errField.Line3 = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Town != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Town, "town", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Town), !deleted))
{
errField.Town = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionIdProvince))
{
// Province is not mandatory.
}
if (errField.Province != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Province, "province", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Province)))
{
errField.Province = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionIdCountry))
{
errField.RegionIdCountry = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Country region must be specified");
}
if (errField.Country != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Country, "country", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_Country), !deleted))
{
errField.Country = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PostalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PostalCode, "postal code", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode)))
{
errField.PostalCode = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneMain != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMain, "country", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_PhoneMain)))
{
errField.PhoneMain = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Location.
if (errField.LocationSource != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.LocationSource, "location source", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_LocationSource)))
{
errField.LocationSource = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.LocationData != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.LocationData, "location data", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_LocationData)))
{
errField.LocationData = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.LocationFormattedAddress != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.LocationFormattedAddress, "location source", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_LocationFormattedAddress)))
{
errField.LocationFormattedAddress = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAddress_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.ItemAddress_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxItemAddress.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data.
if (!data.IsStatusDeleted)
{
// Item must exists.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && ItemId.IsValid(data.ItemId))
{
switch ((Sax.DataItemType)data.ItemId.Type)
{
case Sax.DataItemType.Organisation:
if (!AccountMgr.OrganisationExistsById(data.ItemId.Id))
return SetErrorState("Invalid organisation specified");
break;
default:
return SetErrorState("Invalid Item Type specified");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo);
public virtual bool ItemAddressCanBeDeleted(SaxItemAddress itemAddress)
{
ClearErrorState();
return true;
}
public abstract bool DeleteItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetItemAddressColumnDfn(SaxItemAddress.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetItemAddressQueryFilter(SaxItemAddress.Params prmItemAddress);
public abstract long GetItemAddressCount(SaxItemAddress.Params prmItemAddress);
public abstract List<SaxItemAddress> GetItemAddressList(SaxItemAddress.Params prmItemAddress);
public abstract DbResultSet ExecuteItemAddressQuery(List<ColumnDfn> columns, SaxItemAddress.Params prmItemAddress);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetItemAddressDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxItemAddress.Column)column.Id)
{
//-----------------------------------------------------------
// Data item type.
case SaxItemAddress.Column.ItemType_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxItemAddress.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxItemAddress.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
//-----------------------------------------------------------
// Status.
case SaxItemAddress.Column.Status_Desc:
case SaxItemAddress.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxItemAddress.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxItemAddress.Column.Status_Ind)
value = new DataValue(SaxItemAddress.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,218 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.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 SaxItemDataMgr
{
//*******************************************************************
// Item Data Mgr - Item Sport
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxItemAssociation CreateItemAssociation(ItemId itemIdFrom, ItemId itemIdTo, Sax.AssociationType associationType);
//-------------------------------------------------------------------
// Item exists.
public bool ItemAssociationExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxItemAssociation.Params prmItemAssociation = new SaxItemAssociation.Params();
prmItemAssociation.IdsIncluded.Add(id);
prmItemAssociation.StatusCat = SaxItemAssociation.StatusCat.Any;
return GetItemAssociationCount(prmItemAssociation) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxItemAssociation GetItemAssociation(SaxItemAssociation.Params prmItemAssociation);
public SaxItemAssociation GetItemAssociationById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxItemAssociation.Params prmItemAssociation = new SaxItemAssociation.Params();
prmItemAssociation.IdsIncluded.Add(id);
prmItemAssociation.StatusCat = SaxItemAssociation.StatusCat.Any;
return GetItemAssociation(prmItemAssociation);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidItemAssociation(SaxItemAssociation itemAssociation)
{
ClearErrorState();
if (itemAssociation == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidItemAssociationData(itemAssociation.GetData(), new SaxItemAssociation.ErrField());
}
public virtual bool IsValidItemAssociationData(SaxItemAssociation.Data data, SaxItemAssociation.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Item Id From.
if (errField.ItemIdFrom != SacsHierarchyItem.ValidValue.Ignore && !ItemId.IsValid(data.ItemIdFrom))
{
errField.ItemIdFrom = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id From must be specified");
}
// Item Id To.
if (errField.ItemIdTo != SacsHierarchyItem.ValidValue.Ignore && !ItemId.IsValid(data.ItemIdTo))
{
errField.ItemIdTo = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id To must be specified");
}
// Item Ids must differ.
if (errField.ItemIdFrom != SacsHierarchyItem.ValidValue.Ignore && errField.ItemIdTo != SacsHierarchyItem.ValidValue.Ignore)
{
if (data.ItemIdFrom.Equals(data.ItemIdTo))
{
errField.ItemIdTo = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Ids must differ");
}
}
// Association type.
if (errField.AssociationType != SacsHierarchyItem.ValidValue.Ignore && (int)data.AssociationType < 1)
{
errField.AssociationType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Association type must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemAssociation_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.ItemAssociation_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxItemAssociation.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertItemAssociation(SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateItemAssociation(SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo);
public virtual bool ItemAssociationCanBeDeleted(SaxItemAssociation itemAssociation)
{
ClearErrorState();
return true;
}
public abstract bool DeleteItemAssociation(SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetItemAssociationColumnDfn(SaxItemAssociation.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetItemAssociationQueryFilter(SaxItemAssociation.Params prmItemAssociation);
public abstract long GetItemAssociationCount(SaxItemAssociation.Params prmItemAssociation);
public abstract List<SaxItemAssociation> GetItemAssociationList(SaxItemAssociation.Params prmItemAssociation);
public abstract DbResultSet ExecuteItemAssociationQuery(List<ColumnDfn> columns, SaxItemAssociation.Params prmItemAssociation);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetItemAssociationDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxItemAssociation.Column)column.Id)
{
//-----------------------------------------------------------
// From item type.
case SaxItemAssociation.Column.ItemTypeFrom_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxItemAssociation.Column.ItemTypeFrom_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// To item type.
case SaxItemAssociation.Column.ItemTypeTo_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxItemAssociation.Column.ItemTypeTo_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// Association type.
case SaxItemAssociation.Column.AssociationType_Code:
case SaxItemAssociation.Column.AssociationType_Desc:
{
Sax.AssociationType associationType = (Sax.AssociationType)values.GetLong(column.DataName);
if (column.Id == (int)SaxItemAssociation.Column.AssociationType_Code)
value = new DataValue(AssociationTypeCodes.GetCodeForType(associationType));
else
value = new DataValue(AssociationTypeCodes.GetDescForType(associationType));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxItemAssociation.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
//-----------------------------------------------------------
// Status.
case SaxItemAssociation.Column.Status_Desc:
case SaxItemAssociation.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxItemAssociation.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxItemAssociation.Column.Status_Ind)
value = new DataValue(SaxItemAssociation.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,236 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.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 SaxItemDataMgr
{
//*******************************************************************
// Item Data Mgr - Item Image
//*******************************************************************
// Utilities.
public bool ItemHasActiveImage(ItemId itemId, Sax.ImageType imageType)
{
ClearErrorState();
if (!ItemId.IsValid(itemId) || (int)imageType < 1) return false;
SaxItemImage.Params prmItemImage = new SaxItemImage.Params();
prmItemImage.ItemIdsIncluded.Add(itemId);
prmItemImage.ImageTypesIncluded.Add(imageType);
prmItemImage.StatusCat = SaxItemImage.StatusCat.ActiveOnly;
return GetItemImageCount(prmItemImage) == 1;
}
//-------------------------------------------------------------------
// Create item.
public abstract SaxItemImage CreateItemImage(ItemId itemId, Sax.ImageType imageType);
//-------------------------------------------------------------------
// Item exists.
public bool ItemImageExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxItemImage.Params prmItemImage = new SaxItemImage.Params();
prmItemImage.IdsIncluded.Add(id);
prmItemImage.StatusCat = SaxItemImage.StatusCat.Any;
return GetItemImageCount(prmItemImage) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxItemImage GetItemImage(SaxItemImage.Params prmItemImage);
public SaxItemImage GetItemImageById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxItemImage.Params prmItemImage = new SaxItemImage.Params();
prmItemImage.IdsIncluded.Add(id);
prmItemImage.StatusCat = SaxItemImage.StatusCat.Any;
return GetItemImage(prmItemImage);
}
public SaxItemImage GetItemImage(ItemId itemId, Sax.ImageType imageType, SaxItemImage.StatusCat statusCat)
{
if (!ItemId.IsValid(itemId) || imageType <= 0) return null;
SaxItemImage.Params prmItemImage = new SaxItemImage.Params();
prmItemImage.ItemIdsIncluded.Add(itemId);
prmItemImage.ImageTypesIncluded.Add(imageType);
prmItemImage.StatusCat = statusCat;
return GetItemImage(prmItemImage);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidItemImage(SaxItemImage itemImage)
{
ClearErrorState();
if (itemImage == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidItemImageData(itemImage.GetData(), new SaxItemImage.ErrField());
}
public virtual bool IsValidItemImageData(SaxItemImage.Data data, SaxItemImage.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Item Id.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore)
{
if (!ItemId.IsValid(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be specified");
}
if (!SaxItemImage.ValidItemTypes.Contains((Sax.DataItemType)data.ItemId.Type))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid item type specified");
}
}
// Image type.
if (errField.ImageType != SacsHierarchyItem.ValidValue.Ignore && (int)data.ImageType < 1)
{
errField.ImageType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Image type must be specified");
}
// Filename
if (errField.Filename != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Filename, "filename", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemImage_Filename), true))
{
errField.Filename = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Mime
if (errField.Mime != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Mime, "mime", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemImage_Mime), true))
{
errField.Mime = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Content Type
if (errField.ContentType != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContentType, "content type", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemImage_ContentType), true))
{
errField.ContentType = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Image data.
if (errField.ImageData != SacsHierarchyItem.ValidValue.Ignore && (data.ImageData == null || data.ImageData.Length < 1))
{
errField.ImageData = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Image data must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemImage_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.ItemImage_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxItemImage.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Dependencies - only tested if not deleted.
if (data.Status != SaStatus.Deleted)
{
// Item must exist.
// ...
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertItemImage(SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateItemImage(SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo);
public virtual bool ItemImageCanBeDeleted(SaxItemImage itemImage)
{
ClearErrorState();
return true;
}
public abstract bool DeleteItemImage(SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetItemImageColumnDfn(SaxItemImage.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetItemImageQueryFilter(SaxItemImage.Params prmItemImage);
public abstract long GetItemImageCount(SaxItemImage.Params prmItemImage);
public abstract List<SaxItemImage> GetItemImageList(SaxItemImage.Params prmItemImage);
public abstract DbResultSet ExecuteItemImageQuery(List<ColumnDfn> columns, SaxItemImage.Params prmItemImage);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetItemImageDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxItemImage.Column)column.Id)
{
//-----------------------------------------------------------
// Data item type.
case SaxItemImage.Column.ItemType_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxItemImage.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxItemImage.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
//-----------------------------------------------------------
// Status.
case SaxItemImage.Column.Status_Desc:
case SaxItemImage.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxItemImage.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxItemImage.Column.Status_Ind)
value = new DataValue(SaxItemImage.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,196 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxItemDataMgr
{
//*******************************************************************
// Item Data Mgr - Item Sport
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxItemProcess CreateItemSport();
//-------------------------------------------------------------------
// Item exists.
public bool ItemSportExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxItemProcess.Params prmItemSport = new SaxItemProcess.Params();
prmItemSport.IdsIncluded.Add(id);
prmItemSport.StatusCat = SaxItemProcess.StatusCat.Any;
return GetItemSportCount(prmItemSport) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxItemProcess GetItemSport(SaxItemProcess.Params prmItemSport);
public SaxItemProcess GetItemSportById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxItemProcess.Params prmItemSport = new SaxItemProcess.Params();
prmItemSport.IdsIncluded.Add(id);
prmItemSport.StatusCat = SaxItemProcess.StatusCat.Any;
return GetItemSport(prmItemSport);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidItemSport(SaxItemProcess itemSport)
{
ClearErrorState();
if (itemSport == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidItemSportData(itemSport.GetData(), new SaxItemProcess.ErrField());
}
public virtual bool IsValidItemSportData(SaxItemProcess.Data data, SaxItemProcess.ErrField errField)
{
ClearErrorState();
//---------------------------------------------------------------
// Item Id.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && !ItemId.IsValid(data.ItemId))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be specified");
}
// Sport.
if (errField.SportId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportId))
{
errField.SportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.ItemSport_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.ItemSport_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxItemProcess.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Item & Sport combination must be unique.
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && errField.SportId != SacsHierarchyItem.ValidValue.Ignore)
{
if (ItemId.IsValid(data.ItemId) && SysId.IsValid(data.SportId))
{
SaxItemProcess.Params prmItemSport = new SaxItemProcess.Params();
if (SysId.IsValid(data.Id))
prmItemSport.IdsExcluded.Add(data.Id);
prmItemSport.ItemIdsIncluded.Add(data.ItemId);
prmItemSport.SportIdsIncluded.Add(data.SportId);
prmItemSport.StatusCat = SaxItemProcess.StatusCat.Any;
if (GetItemSportCount(prmItemSport) > 0)
{
errField.SportId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sport must be unique for item");
}
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertItemSport(SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateItemSport(SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo);
public virtual bool ItemSportCanBeDeleted(SaxItemProcess itemSport)
{
ClearErrorState();
return true;
}
public abstract bool DeleteItemSport(SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetItemSportColumnDfn(SaxItemProcess.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetItemSportQueryFilter(SaxItemProcess.Params prmItemSport);
public abstract long GetItemSportCount(SaxItemProcess.Params prmItemSport);
public abstract List<SaxItemProcess> GetItemSportList(SaxItemProcess.Params prmItemSport);
public abstract DbResultSet ExecuteItemSportQuery(List<ColumnDfn> columns, SaxItemProcess.Params prmItemSport);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetItemSportDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxItemProcess.Column)column.Id)
{
//-----------------------------------------------------------
// Data item type.
case SaxItemProcess.Column.ItemType_Code:
{
value = new DataValue(DataItemTypeCodes.GetCodeForType(values.GetLong(column.DataName)));
}
break;
case SaxItemProcess.Column.ItemType_Desc:
{
value = new DataValue(DataItemTypeCodes.GetDescForType(values.GetLong(column.DataName)));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxItemProcess.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
//-----------------------------------------------------------
// Status.
case SaxItemProcess.Column.Status_Desc:
case SaxItemProcess.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxItemProcess.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxItemProcess.Column.Status_Ind)
value = new DataValue(SaxItemProcess.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,20 @@
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SaxItemDataMgr : SaxItemMgr
{
//-------------------------------------------------------------------
protected SaxItemDataMgr(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,92 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Consoles;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
public class SaxItemMgr : SacsItemMgr
{
//-------------------------------------------------------------------
// Data members.
private class DataMembers
{
public SaxInternals internals = null;
public bool internalsCreatedHere = false;
}
private DataMembers data = new DataMembers();
//-------------------------------------------------------------------
protected SaxItemMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
data.internals = internals;
SessionContext = sessionContext;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (data.internals != null && data.internalsCreatedHere)
data.internals.Dispose();
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
public Boolean DebugMode { get { return SacsSystem.DebugMode; } }
public SaxSessionContext SessionContext { get; }
public ISacsDatabase CoreDatabase { get { return Internals.CoreDatabase; } }
public IDatabaseInfo CoreDbInfo { get { return Internals.CreateCoreDbInfo(); } }
// Business components.
protected SaxInternals Internals
{
get
{
if (data.internals == null)
{
data.internals = new SaxInternals(SessionContext);
data.internalsCreatedHere = true;
}
return data.internals;
}
}
// Consoles.
public SaxDataCacheConsole DataCacheConsole { get { return Internals.DataCacheConsole; } }
public SaxActivityConsole ActivityConsole { get { return Internals.ActivityConsole; } }
// Managers.
public SaxReferenceMgr ReferenceMgr { get { return Internals.ReferenceMgr; } }
public SaxAccountMgr AccountMgr { get { return Internals.AccountMgr; } }
public SaxActivityMgr ActivityMgr { get { return Internals.ActivityMgr; } }
public SaxItemDataMgr ItemDataMgr { get { return Internals.ItemDataMgr; } }
// Application codes.
public List<TypeCodeDesc> DataItemTypeCodes { get { return Internals.DataItemTypeCodes; } }
public List<TypeCodeDesc> SportGroupingCodes { get { return Internals.SportGroupingCodes; } }
public List<TypeCodeDesc> SportSpecialityLabelCodes { get { return Internals.SportSpecialityLabelCodes; } }
public List<TypeCodeDesc> SportContactTypeCodes { get { return Internals.SportContactTypeCodes; } }
public List<TypeCodeDesc> SportParticipatingCodes { get { return Internals.SportParticipatingCodes; } }
public List<TypeCodeDesc> SportPreparingCodes { get { return Internals.SportPreparingCodes; } }
public List<TypeCodeDesc> SportOfficiatingCodes { get { return Internals.SportOfficiatingCodes; } }
public List<TypeCodeDesc> RegionTypeCodes { get { return Internals.RegionTypeCodes; } }
public List<TypeCodeDesc> EligibilityTypeCodes { get { return Internals.EligibilityTypeCodes; } }
public List<TypeCodeDesc> UserRoleCodes { get { return Internals.UserRoleCodes; } }
public List<TypeCodeDesc> OrganisationTypeCodes { get { return Internals.OrganisationTypeCodes; } }
public List<TypeCodeDesc> OrganisationCategoryCodes { get { return Internals.OrganisationCategoryCodes; } }
public List<TypeCodeDesc> OrganisationRoleCodes { get { return Internals.OrganisationRoleCodes; } }
public List<TypeCodeDesc> AssociationTypeCodes { get { return Internals.AssociationTypeCodes; } }
public List<TypeCodeDesc> AddressTypeCodes { get { return Internals.AddressTypeCodes; } }
public List<TypeCodeDesc> ContactMethodCodes { get { return Internals.ContactMethodCodes; } }
public List<TypeCodeDesc> EventTypeCodes { get { return Internals.EventTypeCodes; } }
public List<TypeCodeDesc> OpportunityTypeCodes { get { return Internals.OpportunityTypeCodes; } }
public List<TypeCodeDesc> ActivityReactionCodes { get { return Internals.ActivityReactionCodes; } }
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,224 @@
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxReferenceMgr
{
//*******************************************************************
// Reference Mgr - Region
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxRegion CreateRegion();
//-------------------------------------------------------------------
// Item exists.
public bool RegionExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.IdsIncluded.Add(id);
prmRegion.StatusCat = SaxRegion.StatusCat.Any;
return GetRegionCount(prmRegion) == 1;
}
public bool RegionExistsByName(String name)
{
ClearErrorState();
if (StringUtil.IsEmpty(name)) return false;
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.NameFull = name;
prmRegion.StatusCat = SaxRegion.StatusCat.Any;
return GetRegionCount(prmRegion) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxRegion GetRegion(SaxRegion.Params prmRegion);
public SaxRegion GetRegionById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.IdsIncluded.Add(id);
prmRegion.StatusCat = SaxRegion.StatusCat.Any;
return GetRegion(prmRegion);
}
public SaxRegion GetRegionByName(String name)
{
ClearErrorState();
if (StringUtil.IsEmpty(name)) return null;
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.NameFull = name;
prmRegion.StatusCat = SaxRegion.StatusCat.Any;
return GetRegion(prmRegion);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidRegion(SaxRegion region)
{
ClearErrorState();
if (region == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidRegionData(region.GetData(), new SaxRegion.ErrField());
}
public virtual bool IsValidRegionData(SaxRegion.Data data, SaxRegion.ErrField errField)
{
ClearErrorState();
// Region type.
if (errField.RegionType != SacsHierarchyItem.ValidValue.Ignore && (int)data.RegionType < 1)
{
errField.RegionType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("type must be specified");
}
// ISO 2 code.
if (errField.CountryIso2Code != SacsHierarchyItem.ValidValue.Ignore)
{
if (data.RegionType == App.Sax.RegionType.Country && !IsValidValue(data.CountryIso2Code, "ISO2 code", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code), true, true))
{
errField.CountryIso2Code = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
else if ((int)data.RegionType > 0 && data.RegionType != App.Sax.RegionType.Country && !StringUtil.IsEmpty(data.CountryIso2Code))
{
errField.CountryIso2Code = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("ISO2 code is only relevant to countries");
}
}
// Name.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Region_Name), true))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Parent region.
if (errField.RegionIdParent != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdParent))
{
SaxRegion parentRegion = GetRegionById(data.RegionIdParent);
if (parentRegion == null)
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Parent region doesn't exist");
}
if (!SaxRegion.IsValidParentRegionType(data.RegionType, parentRegion.RegionType))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid parent region type");
}
}
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Region_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.Region_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxRegion.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
// Associated data - ignore for deleted items.
if (!data.IsStatusDeleted)
{
// ToDo Parent region.
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Region database interface.
public abstract bool InsertRegion(SaxRegion region, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateRegion(SaxRegion region, DbUpdateInfo dbUpdateInfo);
public virtual bool RegionCanBeDeleted(SaxRegion region)
{
ClearErrorState();
return true;
}
public abstract bool DeleteRegion(SaxRegion region, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Region list:
public abstract ColumnDfn GetRegionColumnDfn(SaxRegion.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetRegionQueryFilter(SaxRegion.Params prmRegion);
public abstract long GetRegionCount(SaxRegion.Params prmRegion);
public abstract List<SaxRegion> GetRegionList(SaxRegion.Params prmRegion);
public List<SaxRegion> GetRegionListByIds(List<SysId> regionIds)
{
if (regionIds.IsEmpty()) return new List<SaxRegion>();
SaxRegion.Params prmRegion = new SaxRegion.Params();
prmRegion.IdsIncluded.AddIds(regionIds);
prmRegion.StatusCat = SaxRegion.StatusCat.Any;
return GetRegionList(prmRegion);
}
public abstract DbResultSet ExecuteRegionQuery(List<ColumnDfn> columns, SaxRegion.Params prmRegion);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetRegionDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxRegion.Column)column.Id)
{
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxRegion.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
//-----------------------------------------------------------
// Status.
case SaxRegion.Column.Status_Desc:
case SaxRegion.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxRegion.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxRegion.Column.Status_Ind)
value = new DataValue(SaxRegion.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,216 @@
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.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SaxReferenceMgr
{
//*******************************************************************
// Reference Mgr - Sport
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxSport CreateSport();
//-------------------------------------------------------------------
// Item exists.
public bool SportExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.Add(id);
prmSport.StatusCat = SaxSport.StatusCat.Any;
return GetSportCount(prmSport) == 1;
}
public bool SportExistsByName(String name)
{
ClearErrorState();
if (StringUtil.IsEmpty(name)) return false;
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.NameFull = name;
prmSport.StatusCat = SaxSport.StatusCat.Any;
return GetSportCount(prmSport) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxSport GetSport(SaxSport.Params prmSport);
public SaxSport GetSportById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.Add(id);
prmSport.StatusCat = SaxSport.StatusCat.Any;
return GetSport(prmSport);
}
public SaxSport GetSportByName(String name)
{
ClearErrorState();
if (StringUtil.IsEmpty(name)) return null;
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.NameFull = name;
prmSport.StatusCat = SaxSport.StatusCat.Any;
return GetSport(prmSport);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidSport(SaxSport sport)
{
ClearErrorState();
if (sport == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidSportData(sport.GetData(), new SaxSport.ErrField());
}
public virtual bool IsValidSportData(SaxSport.Data data, SaxSport.ErrField errField)
{
ClearErrorState();
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
// Name.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Sport_Name), true))
{
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))
{
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.");
}
}
}
}
return true;
}
//-------------------------------------------------------------------
// Sport database interface.
public abstract bool InsertSport(SaxSport sport, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateSport(SaxSport sport, DbUpdateInfo dbUpdateInfo);
public virtual bool SportCanBeDeleted(SaxSport sport)
{
ClearErrorState();
return true;
}
public abstract bool DeleteSport(SaxSport sport, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Sport list:
public abstract ColumnDfn GetSportColumnDfn(SaxSport.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetSportQueryFilter(SaxSport.Params prmSport);
public abstract long GetSportCount(SaxSport.Params prmSport);
public abstract List<SaxSport> GetSportList(SaxSport.Params prmSport);
public List<SaxSport> GetSportListByIds(List<SysId> sportIds)
{
if (sportIds.IsEmpty()) return new List<SaxSport>();
SaxSport.Params prmSport = new SaxSport.Params();
prmSport.IdsIncluded.AddIds(sportIds);
prmSport.StatusCat = SaxSport.StatusCat.Any;
return GetSportList(prmSport);
}
public abstract DbResultSet ExecuteSportQuery(List<ColumnDfn> columns, SaxSport.Params prmSport);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetSportDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxSport.Column)column.Id)
{
//-----------------------------------------------------------
// Grouping.
case SaxSport.Column.Grouping_Desc:
value = new DataValue(Internals.SportGroupingCodes.GetDescForType(values.GetValue(column.DataName).AsLong()));
break;
//-----------------------------------------------------------
// Speciality label.
case SaxSport.Column.SpecialityLabel_Desc:
value = new DataValue(Internals.SportSpecialityLabelCodes.GetDescForType(values.GetValue(column.DataName).AsLong()));
break;
//-----------------------------------------------------------
// Notes - limit to 200 chars.
case SaxSport.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
//-----------------------------------------------------------
// Status.
case SaxSport.Column.Status_Desc:
case SaxSport.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxSport.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxSport.Column.Status_Ind)
value = new DataValue(SaxSport.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,20 @@
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr
{
//=======================================================================
public abstract partial class SaxReferenceMgr : SaxItemMgr
{
//-------------------------------------------------------------------
protected SaxReferenceMgr(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,42 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Consoles;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr.Support
{
//=======================================================================
public class SaxItemMgr_Support : SaxItemMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
protected SaxItemMgr_Support(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
public ISacsDatabase SupportDatabase { get { return SaxGlobals.App.GetDatabase(SessionContext, Sax.Database.Support); } }
public IDatabaseInfo SupportDbInfo { get { return SaxGlobals.App.CreateDbInfo(SessionContext, Sax.Database.Support); } }
// Support.
public List<TypeCodeDesc> UserReportTypeCodes { get { return Internals.UserReportTypeCodes; } }
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,194 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Support;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr.Support
{
//=======================================================================
partial class SaxSupportMgr
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
//-------------------------------------------------------------------
// Create item.
public abstract SaxUserReport CreateUserReport(SysId userAccountId);
//-------------------------------------------------------------------
// Item exists.
public bool UserReportExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SaxUserReport.Params prmUserReport = new SaxUserReport.Params();
prmUserReport.IdsIncluded.Add(id);
prmUserReport.StatusCat = SaxUserReport.StatusCat.Any;
return GetUserReportCount(prmUserReport) == 1;
}
//-------------------------------------------------------------------
// Retrieve individual items.
public abstract SaxUserReport GetUserReport(SaxUserReport.Params prmUserReport);
public SaxUserReport GetUserReportById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SaxUserReport.Params prmUserReport = new SaxUserReport.Params();
prmUserReport.IdsIncluded.Add(id);
prmUserReport.StatusCat = SaxUserReport.StatusCat.Any;
return GetUserReport(prmUserReport);
}
//-------------------------------------------------------------------
// Validate item data.
public bool IsValidUserReport(SaxUserReport userReport)
{
ClearErrorState();
if (userReport == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidUserReportData(userReport.GetData(), new SaxUserReport.ErrField());
}
public virtual bool IsValidUserReportData(SaxUserReport.Data data, SaxUserReport.ErrField errField)
{
ClearErrorState();
// User Account.
if (errField.UserAccountId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountId))
{
errField.UserAccountId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("User Account Id must be specified");
}
// Report Type.
if (errField.ReportType != SacsHierarchyItem.ValidValue.Ignore && (int)data.ReportType < 1)
{
errField.ReportType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Report type must be specified");
}
// Title.
if (errField.Title != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Title, "title", (long)SaxDbDfn_Support.GetColTextLen(SaxDbDfn_Support.ColumnIdx.UserReport_Title), true))
{
errField.Title = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Report.
if (errField.Report != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Report, "report", (long)SaxDbDfn_Support.GetColTextLen(SaxDbDfn_Support.ColumnIdx.UserReport_Report)))
{
errField.Report = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Recorded On.
if (errField.RecordedOn != SacsHierarchyItem.ValidValue.Ignore && !DateUtil.IsValid(data.RecordedOn))
{
errField.RecordedOn = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Recorded on date must be specified");
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Support.GetColTextLen(SaxDbDfn_Support.ColumnIdx.UserReport_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Support.GetColTextLen(SaxDbDfn_Support.ColumnIdx.UserReport_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaxUserReport.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
//---------------------------------------------------------------
return true;
}
//-------------------------------------------------------------------
// Item database interface.
public abstract bool InsertUserReport(SaxUserReport userReport, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateUserReport(SaxUserReport userReport, DbUpdateInfo dbUpdateInfo);
public virtual bool UserReportCanBeDeleted(SaxUserReport userReport)
{
ClearErrorState();
return true;
}
public abstract bool DeleteUserReport(SaxUserReport userReport, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetUserReportColumnDfn(SaxUserReport.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetUserReportQueryFilter(SaxUserReport.Params prmUserReport);
public abstract long GetUserReportCount(SaxUserReport.Params prmUserReport);
public abstract List<SaxUserReport> GetUserReportList(SaxUserReport.Params prmUserReport);
public abstract DbResultSet ExecuteUserReportQuery(List<ColumnDfn> columns, SaxUserReport.Params prmUserReport);
//-------------------------------------------------------------------
/// <summary>
/// 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 GetUserReportDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaxUserReport.Column)column.Id)
{
//-----------------------------------------------------------
// Report Type.
case SaxUserReport.Column.ReportType_Desc:
{
Sax.UserReportType userReportType = (Sax.UserReportType)values.GetValue(column.DataName).AsLong();
value = new DataValue(UserReportTypeCodes.GetDescForType(userReportType));
}
break;
//-----------------------------------------------------------
// Notes.
case SaxUserReport.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaxUserReport.Column.Status_Desc:
case SaxUserReport.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaxUserReport.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SaxUserReport.Column.Status_Ind)
value = new DataValue(SaxUserReport.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,20 @@
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Base.Mgr.Support
{
//=======================================================================
public abstract partial class SaxSupportMgr : SaxItemMgr_Support
{
//-------------------------------------------------------------------
protected SaxSupportMgr(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
}
//=======================================================================
}