using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.BusinessMgr.Net.Standard.Dbas.Internal; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Interfaces; using Sarand.Net.Standard.Base.ItemDocs; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Dbas.Base; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { //======================================================================= // Commodity Manager - Commodity - Utils. //======================================================================= partial class SbmCommodityMgr_Dbas { //------------------------------------------------------------------- // Commodity Associated data. public override bool CommodityHasProcesses(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return SetErrorState("invalid item"); return ProcessMgr.HasItemProcesses(Sbm.ItemType.Commodity, commodityId); } public override bool CommodityHasRequirements(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableRequirement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement); String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_CommodityId)}={commodityId.ToString()}"; return Database.GetRowCount(tableRequirement, filter) > 0; } public override bool CommodityIsSalesBudgetTemplate(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableCommodity = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity); String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Commodity_CommodityIdSalesProj)}={commodityId.ToString()}"; return Database.GetRowCount(tableCommodity, filter) > 0; } public override bool CommodityHasComponents(SysId commodityId) { ClearErrorState(); return false; } public override bool CommodityHasPortfolioItems(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tablePortfolioItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem); if (Database.TableExists(tablePortfolioItem)) { String colPortfolioItem_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.PortfolioItem_Id); List filters = new List(); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.PortfolioItem_CommodityId)}={commodityId.ToString()}"); return Database.GetRowCount(tablePortfolioItem, filters.Concat(" AND ", "(", ")")) > 0; } return false; } public override bool CommodityHasContainers(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableContainer = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container); if (Database.TableExists(tableContainer)) { String colContainerItem_ContainerId = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId); List filters = new List(); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ItemType)}={Sbm.ItemType.Commodity.ToString()}"); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ItemId)}={commodityId.ToString()}"); return Database.GetRowCount(tableContainer, filters.Concat(" AND ", "(", ")")) > 0; } return false; } public override bool CommodityHasCustomerDetails(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableCommodityCustomer = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer); if (Database.TableExists(tableCommodityCustomer)) { List filters = new List(); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId)}={commodityId.ToString()}"); return Database.GetRowCount(tableCommodityCustomer, filters.Concat(" AND ", "(", ")")) > 0; } return false; } public override bool CommodityHasSupplierDetails(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableCommoditySupplier = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier); if (Database.TableExists(tableCommoditySupplier)) { List filters = new List(); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId)}={commodityId.ToString()}"); return Database.GetRowCount(tableCommoditySupplier, filters.Concat(" AND ", "(", ")")) > 0; } return false; } public override bool CommodityHasMovements(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableMovement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement); if (Database.TableExists(tableMovement)) { String colMovement_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Movement_Id); List filters = new List(); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Movement_ItemType)}={Sbm.ItemType.Commodity.ToString()}"); filters.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Movement_ItemId)}={commodityId.ToString()}"); return Database.GetRowCount(tableMovement, filters.Concat(" AND ", "(", ")")) > 0; } return false; } public override bool CommodityHasStockLevels(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; String tableStockLevel = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel); if (Database.TableExists(tableStockLevel)) { String colStockLevel_CommodityId = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.StockLevel_CommodityId); String filter = $"{colStockLevel_CommodityId}={commodityId.ToString()}"; return Database.GetRowCount(tableStockLevel, filter) > 0; } return false; } public override bool ClearCommodityDependentData(SysId commodityId) { ClearErrorState(); if (!SysId.IsValid(commodityId)) return false; if (!HasErrorState()) { // Remove data item references. if (!DataItemMgr.ClearDataItem(Sbm.ItemType.Commodity, commodityId)) SetErrorState(DataItemMgr.ErrorStateMessage); } if (!HasErrorState()) { if (ItemDocConsole != null) { if (!ItemDocConsole.ClearItemDocs(new ItemId((short)Sbm.ItemType.Commodity, commodityId), SaItemDocConsole.Category.Document, DbUpdateInfo)) SetErrorState(ItemDocConsole.ErrorStateMessage); } else SetErrorState("Failed to retrieve item document console"); } if (!HasErrorState()) { // Remove interface references. if (InterfaceConsole != null) { if (!InterfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Commodity, commodityId), DbUpdateInfo)) SetErrorState(InterfaceConsole.ErrorStateMessage); } else SetErrorState("Failed to retrieve interface console"); } if (!HasErrorState()) { // Remove customer commodity details. List columnNameValues = new List(); String tableCommodityCustomer = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer); String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId) + "=" + commodityId.ToString(); if (Database != null && Database.TableExists(tableCommodityCustomer) && Database.ExecuteDelete(tableCommodityCustomer, filter) > 0) SetErrorState("Failed to clear customer commodity details"); } if (!HasErrorState()) { // Remove Supplier commodity details. String tableCommoditySupplier = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier); String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId) + "=" + commodityId.ToString(); if (Database != null && Database.TableExists(tableCommoditySupplier) && Database.ExecuteDelete(tableCommoditySupplier, filter) > 0) SetErrorState("Failed to clear Supplier commodity details"); } return false; } //------------------------------------------------------------------- // Commodity requirements. /// /// Update requirements for this commodity with the correct code. /// public override bool UpdateCommodityRequirements(SbmCommodity commodity) { ClearErrorState(); if (!SysId.IsValid(commodity.Id)) return true; List filter = new List(); filter.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_CommodityId)}={commodity.Id}"); filter.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_ProductCode)}!='{DbQuery.FormatForCondition(commodity.Code)}'"); List values = new List(); SacsDatabase.AddValuePair(values, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_ProductCode), commodity.Code, true); Database.ExecuteUpdate(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), values, filter.Concat(" And ", "(", ")")); if (Database.HasErrorState()) SetErrorState($"{Database.ErrorStateMessage}."); return !HasErrorState(); } //------------------------------------------------------------------- // Commodity cost estimates. public override List GetCommodityCostEstimates(SbmCommodity commodity) { //ClearErrorState(); List costEstimatesCopy = null; if (commodity.CostEstimates == null && SysId.IsValid(commodity.Id)) { using (DisposableCollection disposables = new DisposableCollection()) { SbmItemLink.Params prmItemLink = new SbmItemLink.Params(); prmItemLink.ItemLinkType = Sbm.ItemLinkType.ItemCostEstimate; prmItemLink.ItemTypeFrom = Sbm.ItemType.Commodity; prmItemLink.ItemIdFrom = commodity.Id; List itemLinks = DataItemMgr.GetItemLinkList(prmItemLink); if (itemLinks != null) { disposables.AddRange(itemLinks); foreach (SbmItemLink itemLink in itemLinks) { SbmCostEstimate costEstimate = new SbmCostEstimate(UserContext, itemLink.DataContent); costEstimate.Notes = itemLink.Notes; costEstimate.Changed = false; if (commodity.CostEstimates == null) commodity.CostEstimates = new List(); commodity.CostEstimates.Add(costEstimate); } // Clean-up. itemLinks.Clear(); } } } // Clone the list. costEstimatesCopy = commodity.CostEstimates.Clone(); return costEstimatesCopy; } public override bool SetCommodityCostEstimates(SbmCommodity commodity, List costEstimatesNew) { ClearErrorState(); // Clear the existing list. if (commodity.CostEstimates != null) commodity.CostEstimates.Clear(); // Copy all items from the specified list. commodity.CostEstimates = costEstimatesNew.Clone(); return true; } public override bool CommitCommodityCostEstimates(SbmCommodity commodity) { ClearErrorState();// Do not attempt any updates unless the list has been populated. if (commodity.CostEstimates == null) return true; if (commodity.CostEstimates != null && SysId.IsValid(commodity.Id)) { // Build an item link list corresponding to the list of cost estimates. List itemLinks = new List(); foreach (SbmCostEstimate costEstimate in commodity.CostEstimates) { if (costEstimate == null) continue; SbmItemLink itemLink = DataItemMgr.CreateItemLink(Sbm.ItemLinkType.ItemCostEstimate, Sbm.ItemType.Commodity, commodity.Id, Sbm.ItemType.Unknown, new SysId()); if (itemLink != null) { itemLink.Seq = (short)costEstimate.CodeSeq; itemLink.DataContent = costEstimate.ToString(); itemLink.Notes = costEstimate.Notes; itemLinks.Add(itemLink); } } // Store these details. if (DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.ItemCostEstimate, new ItemId((short)Sbm.ItemType.Commodity, commodity.Id), itemLinks, DbUpdateInfo)) { } else { SetErrorState("Failed to save cost estimate item links - " + DataItemMgr.ErrorStateMessage); } if (itemLinks != null) itemLinks.Clear(); } return !HasErrorState(); } //------------------------------------------------------------------- // Commodity processes. public override List GetCommodityProcesses(SbmCommodity commodity, bool activeOnly) { //ToDo need to creat SbmProcessMgr_Dbas-ItemProcess inorder to do processMgr.??? ClearErrorState(); List itemProcesesCopy = null; if (activeOnly) { // Retrieve the list of 'active' processes for this item. ProcessMgr.GetProcessesForItem(Sbm.ItemType.Commodity, commodity.Id, true); } else { // Full list required - check whether the internal list has been populated yet. if (commodity.ItemProcesses == null && SysId.IsValid(commodity.Id)) { // Get the list of processes. ProcessMgr.GetProcessesForItem(Sbm.ItemType.Commodity, commodity.Id, false); } // Clone the list. itemProcesesCopy = commodity.ItemProcesses.Clone(); } if (itemProcesesCopy != null) itemProcesesCopy.Sort(); return itemProcesesCopy; } public override bool SetCommodityProcesses(SbmCommodity commodity, List itemProcessesNew) { ClearErrorState(); if (commodity.ItemProcesses != null) commodity.ItemProcesses.Clear(); // Copy all items from the specified list. commodity.ItemProcesses = itemProcessesNew.Clone(); return !HasErrorState(); } public override bool CommitCommodityProcesses(SbmCommodity commodity) { ClearErrorState(); if (commodity.ItemProcesses == null) return true; if (!ProcessMgr.StoreItemProcesses(Sbm.ItemType.Commodity, commodity.Id, commodity.ItemProcesses, DbUpdateInfo)) SetErrorState(ProcessMgr.ErrorStateMessage); return !HasErrorState(); } //------------------------------------------------------------------- } //======================================================================= }