Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity-Utils.cs
T

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}.");
return !HasErrorState();
}
//-------------------------------------------------------------------
// 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(UserContext, 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 !HasErrorState();
}
//-------------------------------------------------------------------
// 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 !HasErrorState();
}
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 !HasErrorState();
}
//-------------------------------------------------------------------
}
//=======================================================================
}