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 GetRegionQueryFilter(SaxRegion.Params prmRegion); public abstract long GetRegionCount(SaxRegion.Params prmRegion); public abstract List GetRegionList(SaxRegion.Params prmRegion); public List GetRegionListByIds(List regionIds) { if (regionIds.IsEmpty()) return new List(); SaxRegion.Params prmRegion = new SaxRegion.Params(); prmRegion.IdsIncluded.AddIds(regionIds); prmRegion.StatusCat = SaxRegion.StatusCat.Any; return GetRegionList(prmRegion); } public abstract DbResultSet ExecuteRegionQuery(List columns, SaxRegion.Params prmRegion); //------------------------------------------------------------------- /// /// 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 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; } //------------------------------------------------------------------- } //======================================================================= }