333 lines
14 KiB
C#
333 lines
14 KiB
C#
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.ItemHasProcesses(new SbmItemId(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<String> filters = new List<String>();
|
|
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<String> filters = new List<String>();
|
|
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<String> filters = new List<String>();
|
|
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<String> filters = new List<String>();
|
|
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<String> filters = new List<String>();
|
|
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(SbmCommodity commodity, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (commodity == null || !SysId.IsValid(commodity.Id)) return false;
|
|
if (!HasErrorState())
|
|
{
|
|
// Remove data item references.
|
|
if (!DataItemMgr.ClearDataItem(commodity.GetItemId(), dbUpdateInfo))
|
|
SetErrorState(DataItemMgr.ErrorStateMessage);
|
|
}
|
|
if (!HasErrorState())
|
|
{
|
|
if (ItemDocConsole != null)
|
|
{
|
|
if (!ItemDocConsole.ClearItemDocs(new SbmItemId(Sbm.ItemType.Commodity, commodity.Id), 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 SbmItemId(Sbm.ItemType.Commodity, commodity.Id), dbUpdateInfo))
|
|
SetErrorState(InterfaceConsole.ErrorStateMessage);
|
|
}
|
|
else SetErrorState("Failed to retrieve interface console");
|
|
}
|
|
if (!HasErrorState())
|
|
{
|
|
// Remove customer commodity details.
|
|
List<StringPair> columnNameValues = new List<StringPair>();
|
|
String tableCommodityCustomer = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer);
|
|
String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.CommodityCustomer_CommodityId)}={SysId.ToLong(commodity.Id)}";
|
|
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)}={SysId.ToLong(commodity.Id)}";
|
|
if (Database != null && Database.TableExists(tableCommoditySupplier) && Database.ExecuteDelete(tableCommoditySupplier, filter) > 0)
|
|
SetErrorState("Failed to clear Supplier commodity details");
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Commodity requirements.
|
|
|
|
/// <summary>
|
|
/// Update requirements for this commodity with the correct code.
|
|
/// </summary>
|
|
public override bool UpdateCommodityRequirements(SbmCommodity commodity)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(commodity.Id)) return true;
|
|
List<String> filter = new List<string>();
|
|
filter.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_CommodityId)}={commodity.Id}");
|
|
filter.Add($"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_ProductCode)}!='{DbQuery.FormatForCondition(commodity.Code)}'");
|
|
List<StringPair> values = new List<StringPair>();
|
|
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.TrimEnd('.')}.");
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Commodity cost estimates.
|
|
|
|
public override List<SbmCostEstimate> GetCommodityCostEstimates(SbmCommodity commodity)
|
|
{
|
|
//ClearErrorState();
|
|
List<SbmCostEstimate> costEstimatesCopy = null;
|
|
if (commodity.CostEstimates == null && SysId.IsValid(commodity.Id))
|
|
{
|
|
using (DisposableCollection<SacsHierarchyItem> disposables = new DisposableCollection<SacsHierarchyItem>())
|
|
{
|
|
SbmItemLink.Params prmItemLink = new SbmItemLink.Params();
|
|
prmItemLink.ItemLinkType = Sbm.ItemLinkType.ItemCostEstimate;
|
|
prmItemLink.ItemTypeFrom = Sbm.ItemType.Commodity;
|
|
prmItemLink.ItemIdFrom = commodity.Id;
|
|
List<SbmItemLink> itemLinks = DataItemMgr.GetItemLinkList(prmItemLink);
|
|
if (itemLinks != null)
|
|
{
|
|
disposables.AddRange(itemLinks);
|
|
foreach (SbmItemLink itemLink in itemLinks)
|
|
{
|
|
SbmCostEstimate costEstimate = new SbmCostEstimate(itemLink.DataContent);
|
|
costEstimate.Notes = itemLink.Notes;
|
|
costEstimate.Changed = false;
|
|
if (commodity.CostEstimates == null) commodity.CostEstimates = new List<SbmCostEstimate>();
|
|
commodity.CostEstimates.Add(costEstimate);
|
|
}
|
|
// Clean-up.
|
|
itemLinks.Clear();
|
|
}
|
|
}
|
|
}
|
|
// Clone the list.
|
|
costEstimatesCopy = commodity.CostEstimates.Clone();
|
|
return costEstimatesCopy;
|
|
}
|
|
public override bool SetCommodityCostEstimates(SbmCommodity commodity, List<SbmCostEstimate> 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<SbmItemLink> itemLinks = new List<SbmItemLink>();
|
|
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, commodity.GetItemId(), itemLinks, DbUpdateInfo))
|
|
{
|
|
}
|
|
else
|
|
{
|
|
SetErrorState("Failed to save cost estimate item links - " + DataItemMgr.ErrorStateMessage);
|
|
}
|
|
if (itemLinks != null)
|
|
itemLinks.Clear();
|
|
}
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Commodity processes.
|
|
|
|
public override List<SbmItemProcess> GetCommodityProcesses(SbmCommodity commodity, bool activeOnly)
|
|
{
|
|
//ToDo need to creat SbmProcessMgr_Dbas-ItemProcess inorder to do processMgr.???
|
|
ClearErrorState();
|
|
List<SbmItemProcess> itemProcesesCopy = null;
|
|
if (activeOnly)
|
|
{
|
|
// Retrieve the list of 'active' processes for this item.
|
|
ProcessMgr.GetProcessesForItem(commodity.GetItemId(), 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(commodity.GetItemId(), false);
|
|
}
|
|
// Clone the list.
|
|
itemProcesesCopy = commodity.ItemProcesses.Clone();
|
|
}
|
|
if (itemProcesesCopy != null) itemProcesesCopy.Sort();
|
|
return itemProcesesCopy;
|
|
}
|
|
public override bool SetCommodityProcesses(SbmCommodity commodity, List<SbmItemProcess> itemProcessesNew)
|
|
{
|
|
ClearErrorState();
|
|
if (commodity.ItemProcesses != null) commodity.ItemProcesses.Clear();
|
|
// Copy all items from the specified list.
|
|
commodity.ItemProcesses = itemProcessesNew.Clone();
|
|
return OK;
|
|
}
|
|
public override bool CommitCommodityProcesses(SbmCommodity commodity)
|
|
{
|
|
ClearErrorState();
|
|
if (commodity.ItemProcesses == null) return true;
|
|
if (!ProcessMgr.StoreItemProcesses(commodity.GetItemId(), commodity.ItemProcesses, DbUpdateInfo))
|
|
SetErrorState(ProcessMgr.ErrorStateMessage);
|
|
return OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|