Rationalise business objects.

This commit is contained in:
Andy Howard
2025-02-01 17:53:13 +00:00
parent a3ac029d55
commit 7930ef5604
245 changed files with 6394 additions and 4806 deletions
@@ -7,21 +7,23 @@ 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.ItemData;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using static Sarand.BusinessMgr.Net.Standard.Base.Bus.SbmProcess;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
{
//=======================================================================
// Process manager - Processes.
//=======================================================================
partial class SbmProcessMgr_Dbas
{
//*******************************************************************
// P r o c e s s e s
//*******************************************************************
//-------------------------------------------------------------------
// Utilities.
private List<StringPair> GetLogProperties(SbmProcess process)
{
@@ -33,6 +35,139 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
};
}
//-------------------------------------------------------------------
// Associated codes.
public override bool ProcessHasAnyCostCodes(SysId processId)
{
ClearErrorState();
if (!SysId.IsValid(processId)) return false;
SaItemData.Params prmItemData = new SaItemData.Params();
prmItemData.ItemIdsIncluded.Add(new SbmItemId(Sbm.ItemType.Process, processId));
prmItemData.DataTypesIncluded.Add(GetItemDataCodeForProcessCostCode(SbmProcessCostCode.Fixed_Unit));
prmItemData.DataTypesIncluded.Add(GetItemDataCodeForProcessCostCode(SbmProcessCostCode.Fixed_Job));
prmItemData.DataTypesIncluded.Add(GetItemDataCodeForProcessCostCode(SbmProcessCostCode.Labour_Unit));
prmItemData.DataTypesIncluded.Add(GetItemDataCodeForProcessCostCode(SbmProcessCostCode.Labour_Job));
return ItemDataConsole.ItemDataExists(prmItemData);
}
public override bool ProcessHasCostCodes(SysId processId, SbmProcessCostCode processCostCode)
{
ClearErrorState();
// Identify process code type code.
String itemDataTypeCode = GetItemDataCodeForProcessCostCode(processCostCode);
if (SysId.IsValid(processId) && !StringUtil.IsEmpty(itemDataTypeCode))
{
SaItemData.Params prmItemData = new SaItemData.Params();
prmItemData.ItemIdsIncluded.Add(new SbmItemId(Sbm.ItemType.Process, processId));
prmItemData.DataTypesIncluded.Add(itemDataTypeCode);
return ItemDataConsole.ItemDataExists(prmItemData);
}
return false;
}
private const String processCodeDelim = ",";
public override List<String> GetProcessCostCodes(SysId processId, SbmProcessCostCode processCostCode)
{
List<String> costCodes = new List<String>();
ClearErrorState();
// Identify process code type code.
String itemDataTypeCode = GetItemDataCodeForProcessCostCode(processCostCode);
if (SysId.IsValid(processId) && !StringUtil.IsEmpty(itemDataTypeCode))
{
SaItemData.Params prmItemData = new SaItemData.Params();
prmItemData.ItemIdsIncluded.Add(new SbmItemId(Sbm.ItemType.Process, processId));
prmItemData.DataTypesIncluded.Add(itemDataTypeCode);
List<SaItemData> itemDatas = ItemDataConsole.GetItemDataList(prmItemData);
foreach (SaItemData itemData in itemDatas)
{
if (itemData == null) continue;
costCodes.AddRange(StringListUtil.Split(itemData.ItemData, processCodeDelim));
break;
}
itemDatas.Clear();
}
return costCodes;
}
public override bool StoreProcessCostCodes(SbmProcess process, SbmProcessCostCode processCostCode, List<String> costCodes, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!costCodes.Any()) return ClearProcessCostCodes(process, processCostCode, dbUpdateInfo);
// Identify process code type code.
String itemDataTypeCode = GetItemDataCodeForProcessCostCode(processCostCode);
if (process != null && SysId.IsValid(process.Id) && !StringUtil.IsEmpty(itemDataTypeCode))
{
SaItemData.Params prmItemData = new SaItemData.Params();
prmItemData.ItemIdsIncluded.Add(process.GetItemId());
prmItemData.DataTypesIncluded.Add(itemDataTypeCode);
List<SaItemData> itemDatas = ItemDataConsole.GetItemDataList(prmItemData);
// ToDo itemData condition.
//itemDatas.GotoStart();
SaItemData itemData = null;//itemDatas.Count == 1 ? itemDatas.Remove(1) : null;
itemDatas.Clear();
if (itemData == null)
{
// Code type not found - create a new entry.
itemData = ItemDataConsole.CreateItemData(process.GetItemId());
itemData.DataType = itemDataTypeCode;
}
if (itemData != null)
{
// Populate item data for these codes.
itemData.ItemData = costCodes.Concat(processCodeDelim);
if (!ItemDataConsole.Store(itemData, dbUpdateInfo))
SetErrorState(ItemDataConsole.ErrorStateMessage);
}
}
return !HasErrorState();
}
public override bool ClearProcessCostCodes(SbmProcess process, SbmProcessCostCode processCostCode, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Identify process code type code.
String itemDataTypeCode = GetItemDataCodeForProcessCostCode(processCostCode);
if (process != null && SysId.IsValid(process.Id) && !StringUtil.IsEmpty(itemDataTypeCode))
{
if (!ItemDataConsole.ClearItemData(process.GetItemId(), itemDataTypeCode, dbUpdateInfo))
SetErrorState(ItemDataConsole.ErrorStateMessage);
}
return !HasErrorState();
}
public override bool ClearAllProcessCostCodes(SbmProcess process, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (process == null || !SysId.IsValid(process.Id)) return false;
if (!ItemDataConsole.ClearItemData(process.GetItemId(), dbUpdateInfo))
SetErrorState(ItemDataConsole.ErrorStateMessage);
return !HasErrorState();
}
//-------------------------------------------------------------------
// Associated data.
public override bool ProcessHasReferences(SysId processId)
{
if (!SysId.IsValid(processId)) return false;
if (DataItemMgr.HasItemLinks(Sbm.ItemType.Process, processId)) return true;
// Constituents.
String filter = $"{SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_ProcessId)}={SysId.ToLong(processId)}";
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), filter) > 0;
}
public override bool ProcessHasItemData(SysId processId)
{
ClearErrorState();
if (!SysId.IsValid(processId)) return false;
SaItemData.Params prmItemData = new SaItemData.Params();
prmItemData.ItemIdsIncluded.Add(new SbmItemId(Sbm.ItemType.Process, processId));
return ItemDataConsole.ItemDataExists(prmItemData);
}
public override bool ClearProcessAssociatedData(SbmProcess process, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (process == null || !SysId.IsValid(process.Id)) return SetErrorState("item not specified");
// Clear Item data records.
if (!ItemDataConsole.ClearItemData(process.GetItemId(), dbUpdateInfo))
SetErrorState(ItemDataConsole.ErrorStateMessage);
return !HasErrorState();
}
//-------------------------------------------------------------------
// Processes by type.
private class ProcessInfoCache
@@ -126,14 +261,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
ClearErrorState();
SbmProcess process = null;
if (processCategory > 0)
process = new SbmProcess_Dbas(Internals, new SysId(), AffiliateId_Owner, processCategory, 0);
process = new SbmProcess_Dbas(new SysId(), AffiliateId_Owner, processCategory, 0);
else SetErrorState("Asset type not identified");
return process;
}
private SbmProcess_Dbas CreateProcess(Process_Db dbProcess)
{
ClearErrorState();
SbmProcess_Dbas process = new SbmProcess_Dbas(Internals, new SysId(dbProcess._Id), new SysId(dbProcess._AffIdOwner ?? 0), (Sbm.ProcessCategory)dbProcess._Category, (ushort)dbProcess._Flags);
SbmProcess_Dbas process = new SbmProcess_Dbas(new SysId(dbProcess._Id), new SysId(dbProcess._AffIdOwner ?? 0), (Sbm.ProcessCategory)dbProcess._Category, (ushort)dbProcess._Flags);
PopulateFrom(dbProcess, process);
return process;
}
@@ -525,27 +660,27 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Process), aliasProcess);
// Process Properties - add columns as defined in query list.
if (columns.HasId((int)SbmProcess.Column.Category) || columns.HasId((int)SbmProcess.Column.Category_Desc))
if (columns.HasId(SbmProcess.Column.Category) || columns.HasId(SbmProcess.Column.Category_Desc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Category, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.Type) || columns.HasId((int)SbmProcess.Column.Type_Desc))
if (columns.HasId(SbmProcess.Column.Type) || columns.HasId(SbmProcess.Column.Type_Desc))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Type, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.DescBrief))
if (columns.HasId(SbmProcess.Column.DescBrief))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_DescBrief, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.DescOutline))
if (columns.HasId(SbmProcess.Column.DescOutline))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_DescOutline, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.Seq))
if (columns.HasId(SbmProcess.Column.Seq))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Seq, aliasProcess));
// Common Properties
if (columns.HasId((int)SbmProcess.Column.Notes))
if (columns.HasId(SbmProcess.Column.Notes))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Notes, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.Flag))
if (columns.HasId(SbmProcess.Column.Flag))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Flags, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.Status) || columns.HasId((int)SbmProcess.Column.Status_Desc) || columns.HasId((int)SbmProcess.Column.Status_Ind))
if (columns.HasId(SbmProcess.Column.Status) || columns.HasId(SbmProcess.Column.Status_Desc) || columns.HasId(SbmProcess.Column.Status_Ind))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_Status, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.CreateOn_Date))
if (columns.HasId(SbmProcess.Column.CreateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_CreateOn, aliasProcess));
if (columns.HasId((int)SbmProcess.Column.UpdateOn_Date))
if (columns.HasId(SbmProcess.Column.UpdateOn_Date))
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Process_UpdateOn, aliasProcess));
//---------------------------------------------------------------------