using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; 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 System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { //======================================================================= // Price manager - Price Sets. //======================================================================= partial class SbmPriceMgr { //------------------------------------------------------------------- // Utilities. // Associated data. public abstract bool PriceSetHasPrices(SysId priceSetId); //------------------------------------------------------------------- // Create priceSet. public abstract SbmPriceSet CreatePriceSet(String reference, Sbm.PriceType priceType); //------------------------------------------------------------------- // Item exists. public bool PriceSetExistsById(SysId priceSetId) { ClearErrorState(); if (!SysId.IsValid(priceSetId)) return false; SbmPriceSet.Params prmPriceSet = new SbmPriceSet.Params(); prmPriceSet.IdsIncluded.Add(priceSetId); prmPriceSet.StatusCat = SbmPriceSet.StatusCat.Any; return GetPriceSetCount(prmPriceSet) == 1; } public bool PriceSetExistsByRef(String reference) { ClearErrorState(); if (StringUtil.IsEmpty(reference)) return false; SbmPriceSet.Params prmPriceSet = new SbmPriceSet.Params(); prmPriceSet.Reference = reference; prmPriceSet.StatusCat = SbmPriceSet.StatusCat.Any; return GetPriceSetCount(prmPriceSet) == 1; } //------------------------------------------------------------------- // Get item. public abstract SbmPriceSet GetPriceSet(SbmPriceSet.Params prm); public SbmPriceSet GetPriceSetById(SysId priceSetId) { ClearErrorState(); if (!SysId.IsValid(priceSetId)) return null; SbmPriceSet.Params prmPriceSet = new SbmPriceSet.Params(); prmPriceSet.IdsIncluded.Add(priceSetId); prmPriceSet.StatusCat = SbmPriceSet.StatusCat.Any; return GetPriceSet(prmPriceSet); } public SbmPriceSet GetPriceSetByReference(String reference) { ClearErrorState(); if (StringUtil.IsEmpty(reference)) return null; SbmPriceSet.Params prmPriceSet = new SbmPriceSet.Params(); prmPriceSet.Reference = reference; prmPriceSet.StatusCat = SbmPriceSet.StatusCat.Any; return GetPriceSet(prmPriceSet); } //------------------------------------------------------------------- // Validate priceSet data. public bool IsValidPriceSet(SbmPriceSet priceSet) { ClearErrorState(); if (priceSet == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidPriceSetData(priceSet.GetData(), new SbmPriceSet.ErrField()); } public virtual bool IsValidPriceSetData(SbmPriceSet.Data data, SbmPriceSet.ErrField errField) { // PriceSet properties. ClearErrorState(); if (data == null) return SetErrorState(Msg_ItemNotSpecified); // Validate the type. if (errField.PriceType != SacsHierarchyItem.ValidValue.Ignore) { if ((int)data.PriceType < 1) { errField.PriceType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Price type must be supplied"); } } if (errField.Reference != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Reference, "reference", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.SaPriceSet_Ref), true)) { errField.Name = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.SaPriceSet_Name), true)) { errField.Name = SacsHierarchyItem.ValidValue.Invalid; return false; } // Common properties. if (!IsValidValue(data.Notes, "notes", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.SaPriceSet_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.SaPriceSet_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SbmPriceSet.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } } return true; } //------------------------------------------------------------------- // PriceSet database interface. public abstract bool InsertPriceSet(SbmPriceSet priceSet, DbUpdateInfo dbUpdateInfo); public abstract bool UpdatePriceSet(SbmPriceSet priceSet, DbUpdateInfo dbUpdateInfo); public virtual bool PriceSetCanBeDeleted(SbmPriceSet priceSet) { ClearErrorState(); if (priceSet == null) return SetErrorState(Msg_ItemNotSpecified); if (PriceMgr.PriceSetHasPrices(priceSet.Id)) return SetErrorState("item has prices"); return true; } public abstract bool DeletePriceSet(SbmPriceSet priceSet, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // PriceSet list. public abstract ColumnDfn GetPriceSetColumnDfn(SbmPriceSet.Column columnId, String caption = "", int width = 0); public abstract List GetPriceSetQueryFilter(SbmPriceSet.Params prm); public abstract long GetPriceSetCount(SbmPriceSet.Params prm); public abstract List GetPriceSetList(SbmPriceSet.Params prm); public abstract DbResultSet ExecutePriceSetQuery(List columns, SbmPriceSet.Params prm); //------------------------------------------------------------------- // D a t a V a l u e s //------------------------------------------------------------------- /// /// 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 DataValue GetPriceSetDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SbmPriceSet.Column)column.Id) { //----------------------------------------------------------- // Price type. case SbmPriceSet.Column.PriceType_Desc: { Sbm.PriceType priceType = (Sbm.PriceType)values.GetValue(column.DataName).AsLong(); value = new DataValue(PriceTypes.GetDescForType(priceType, priceType > 0 ? priceType.ToString() : "")); break; } //----------------------------------------------------------- // Has Static Prices. case SbmPriceSet.Column.HasStaticPrices_Tick: case SbmPriceSet.Column.HasStaticPrices_Y: { ushort flags = (ushort)values.GetValue(column.DataName).AsLong(); bool hasStaticPrices = SacsHierarchyItem.GetFlag(flags, SbmPriceSet.Flag_HasStaticPrices); if (column.Id == (int)SbmPriceSet.Column.HasStaticPrices_Y) value = new DataValue(hasStaticPrices ? "Y" : ""); else value = new DataValue(hasStaticPrices); break; } //----------------------------------------------------------- // Notes. case SbmPriceSet.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; } // Status. case SbmPriceSet.Column.Status_Desc: case SbmPriceSet.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SbmPriceSet.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SbmPriceSet.Column.Status_Ind) value = new DataValue(SbmPriceSet.GetStatusTriState(status)); break; } //----------------------------------------------------------- default: value = values.GetValue(column.DataName); break; } return value; } //------------------------------------------------------------------- } //======================================================================= }