using System; using System.Collections.Generic; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Dbas; namespace Sarand.Net.Standard.Base.ReferenceData { //======================================================================= // Reference Data manager - Regions. //======================================================================= public abstract partial class SaReferenceDataMgr : SacsItemMgr { //------------------------------------------------------------------- // Utilities. /// Return the valid parent type for the specified Region type. public static SaRegionType ParentTypeFor(SaRegionType regionType) { if (regionType == SaRegionType.Country) return SaRegionType.Continent; if (regionType == SaRegionType.Province) return SaRegionType.Country; if (regionType == SaRegionType.Town) return SaRegionType.Province; return SaRegionType.Unknown; } /// Return the valid subordinate Region type for the specified Region type. public static SaRegionType SubordinateTypeFor(SaRegionType regionType) { if (regionType == SaRegionType.Continent) return SaRegionType.Country; if (regionType == SaRegionType.Country) return SaRegionType.Province; if (regionType == SaRegionType.Province) return SaRegionType.Town; return SaRegionType.Unknown; } //------------------------------------------------------------------- // Retrieve individual regions. public abstract bool RegionExistsById(SysId id); public abstract bool RegionExistsByType(String type); public abstract SaRegion GetRegionById(SysId id); public abstract SaRegion GetRegionByType(String type); public abstract SaRegion GetRegion(SaRegion.Params prm); // Create region. public abstract SaRegion CreateRegion(SaRegionType regionType); //------------------------------------------------------------------- // Validate region data. public bool IsValidRegion(SaRegion region) { ClearErrorState(); if (region == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidRegionData(region.GetData(), new SaRegion.ErrField()); } public virtual bool IsValidRegionData(SaRegion.Data data, SaRegion.ErrField errField) { ClearErrorState(); // Region properties. if (errField.RegionType != SacsHierarchyItem.ValidValue.Ignore) { if ((int)data.RegionType < 1) { errField.RegionType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Region type must be supplied"); } } if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SaReferenceDataDbDfn.GetColTextLen(SaReferenceDataDbDfn.ColumnIdx.Region_Name), true)) { errField.Name = SacsHierarchyItem.ValidValue.Invalid; return false; } // Common properties. if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaReferenceDataDbDfn.GetColTextLen(SaReferenceDataDbDfn.ColumnIdx.Region_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore && !SaRegion.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } // Validate associated data. if (errField.RegionIdParent != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdParent)) { if (!RegionExistsById(data.RegionIdParent)) { errField.RegionIdParent = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Region's parent not found"); } } return true; } //------------------------------------------------------------------- // Region database interface. public abstract bool InsertRegion(SaRegion region, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateRegion(SaRegion region, DbUpdateInfo dbUpdateInfo); public virtual bool RegionCanBeDeleted(SaRegion region) { ClearErrorState(); if (region == null) return SetErrorState(ErrorMessage.InvalidStatus); if (region.HasDependentRegions()) return SetErrorState("Has dependent regions"); if (region.HasDependentCurrencies()) return SetErrorState("Has dependent currencies"); if (region.HasDependentTaxCodes()) return SetErrorState("Has dependent tax codes"); return true; } public abstract bool DeleteRegion(SaRegion region, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Region list. public abstract ColumnDfn GetRegionColumnDfn(SaRegion.Column columnId, String caption = "", int width = 0); public abstract List GetRegionQueryFilter(SaRegion.Params prm); public abstract long GetRegionCount(SaRegion.Params prm); public abstract List GetRegionList(SaRegion.Params prm); public abstract DbResultSet ExecuteRegionQuery(List columns, SaRegion.Params prm); //------------------------------------------------------------------- /// /// 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 ((SaRegion.Column)column.Id) { //----------------------------------------------------------- // Notes. case SaRegion.Column.Notes: value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; //----------------------------------------------------------- // Status. case SaRegion.Column.Status_Desc: case SaRegion.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaRegion.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SaRegion.Column.Status_Ind) value = new DataValue(SaRegion.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }