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 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 GetItemAddressQueryFilter(SaxItemAddress.Params prmItemAddress); public abstract long GetItemAddressCount(SaxItemAddress.Params prmItemAddress); public abstract List GetItemAddressList(SaxItemAddress.Params prmItemAddress); public abstract DbResultSet ExecuteItemAddressQuery(List columns, SaxItemAddress.Params prmItemAddress); //------------------------------------------------------------------- /// /// 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 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; } //------------------------------------------------------------------- } //======================================================================= }