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. /// Get number of active members for Organisation. 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); } /// Get number of active opportunities for organisation. 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 GetOrganisationQueryFilter(SaxOrganisation.Params prmOrganisation); public abstract long GetOrganisationCount(SaxOrganisation.Params prmOrganisation); public abstract List GetOrganisationList(SaxOrganisation.Params prmOrganisation); public abstract DbResultSet ExecuteOrganisationQuery(List columns, SaxOrganisation.Params prmOrganisation); //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// public virtual DataValue 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; } //------------------------------------------------------------------- } //======================================================================= }