using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.ItemDocs; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //======================================================================= class SbmPortfolioItem_Dbas : SbmPortfolioItem { //------------------------------------------------------------------- // Data members. private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. public SbmPortfolioItem_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType, ushort flags) : base(internals.UserContext, id, affiliateIdOwner, portfolioItemType) { this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } //------------------------------------------------------------------- // Properties. //------------------------------------------------------------------- // Associated Data Elements. public override bool HasChildItems() { return GetChildItemCount(Sbm.PortfolioItemType.Unknown) > 0; } public override long GetChildItemCount(Sbm.PortfolioItemType portfolioItemType = Sbm.PortfolioItemType.Unknown) { ClearErrorState(); if (!SysId.IsValid(Id)) return 0; ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tablePortfolioItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem); if (db.TableExists(tablePortfolioItem)) { List filter = new List(); filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.PortfolioItem_ItemIdParent) + "=" + Id.ToString()); if (portfolioItemType > 0) filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.PortfolioItem_Type) + "=" + ((int)portfolioItemType).ToString()); return db.GetRowCount(tablePortfolioItem, filter.Concat(" AND ", "(", ")")); } } return 0; } public override bool IsReferencedByOtherItems() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tablePortfolioItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem); if (db.TableExists(tablePortfolioItem)) { List filter = new List(); filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.PortfolioItem_ItemIdRef) + "=" + Id.ToString()); return db.GetRowCount(tablePortfolioItem, filter.Concat(" AND ", "(", ")")) > 0; } } return false; } // Clear all descendent items. public override bool ClearChildItems() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; using (SbmCommodityMgr commodityMgr = SbmGlobals.System.CreateCommodityMgr(UserContext)) { SbmPortfolioItem.Params prmPortfolioItem = new SbmPortfolioItem.Params(); prmPortfolioItem.ParentItemId = Id; foreach (SbmPortfolioItem portfolioItem in commodityMgr.GetPortfolioItemList(prmPortfolioItem)) { portfolioItem.ClearChildItems(); if (!commodityMgr.DeletePortfolioItem(portfolioItem, UserContext.DbUpdateInfo)) return SetErrorState(commodityMgr.ErrorStateMessage); } } return true; } // Dependent data should only be cleared when removing a portfolio item. // Data owned by this item is deleted (eg. interface data items & document references). // NB This method does not clear child portfolio items. public override bool ClearDependentData() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; using (SbmDataItemMgr dataItemMgr = SbmGlobals.System.CreateDataItemMgr(UserContext)) { if (!dataItemMgr.ClearDataItem(Sbm.ItemType.PortfolioItem, Id)) return SetErrorState(dataItemMgr.ErrorStateMessage); } SaItemDocConsole itemDocConsole = internals.ItemDocConsole; if (!itemDocConsole.ClearItemDocs(new ItemId((short)Sbm.ItemType.PortfolioItem, Id), SaItemDocConsole.Category.Unknown, UserContext.DbUpdateInfo)) return SetErrorState(itemDocConsole.ErrorStateMessage); return true; } //------------------------------------------------------------------- } //======================================================================= }