using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
//=======================================================================
public abstract class SbmAsset : SbmHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
Id,
// Asset.
AssetCategoryId,
Category_Type_Desc,
Category_Code,
Category_DescBrief,
SerialNumber,
DescBrief,
// ItemType col-section
ItemType,
ItemTypeDesc,
ItemId,
// Vehicle col-section
Vehicle_RegNumber,
Vehicle_Vin,
VehicleClass_MakeDesc,
VehicleClass_Model,
VehicleClass_Derivative,
VehicleClass_DescBrief,
Vehicle_KeyLocation,
Vehicle_Flags,
Vehicle_HpiAlert,
PurchaseOn,
AmountPurchase,
AmountPurchaseGross,
SellCategoryDesc,
AmountSell,
AmountSellGross,
SoldOn,
AmountSold,
DisposeCode,
DisposeOn,
DueBackOn,
// UOM col-section.
AmountRentalCost,
UomRentalCost_Id,
UomRentalCost_Desc,
AmountRentalPrice,
UomRentalPrice_Id,
UomRentalPrice_Desc,
ProcessIdNext,
NextProcess_DescBrief,
NextProcess_Expected,
// Common properties.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
Warnings,
}
//-------------------------------------------------------------------
/// Properties other than common.
public class DataProperties
{
public SysId AssetCategoryId { get; set; } = new SysId();
public String SerialNumber { get; set; } = "";
public String RefExt { get; set; } = "";
public String DescBrief { get; set; } = "";
public ItemId ItemId { get; set; } = new ItemId();
// Purchase.
public DateTime PurchaseOn { get; set; } = DateTime.MinValue;
public SysId AssocIdSupplier { get; set; } = new SysId();
public String PurchaseInvoiceRef { get; set; } = "";
public short PaymentTerms { get; set; } = 0;
public decimal AmountPurchase { get; set; } = 0.0m;
public SysId TaxCodeIdPurchase { get; set; } = new SysId();
public decimal AmountPurchaseGross { get; set; } = 0.0m;
public decimal AmountSettlementGross { get; set; } = 0.0m;
public decimal AmountEnhancementGross { get; set; } = 0.0m;
// Sale.
public SysId AssocIdCustomer { get; set; } = new SysId();
public String SellCategoryCode { get; set; } = "";
public decimal AmountSell { get; set; } = 0.0m;
public SysId TaxCodeIdSell { get; set; } = new SysId();
public decimal AmountSellGross { get; set; } = 0.0m;
public SysId TaxCodeIdProfit { get; set; } = new SysId();
public DateTime SoldOn { get; set; } = DateTime.MinValue;
public decimal AmountSold { get; set; } = 0.0m;
public decimal AmountSoldGross { get; set; } = 0.0m;
// Disposal.
public String DisposeCode { get; set; } = "";
public DateTime DisposeOn { get; set; } = DateTime.MinValue;
public DateTime DueBackOn { get; set; } = DateTime.MinValue;
// Rental.
public decimal AmountRentalCost { get; set; } = 0.0m;
public SysId UomIdRentalCost { get; set; } = new SysId();
public SysId TaxCodeIdRentalCost { get; set; } = new SysId();
public decimal AmountRentalPrice { get; set; } = 0.0m;
public SysId UomIdRentalPrice { get; set; } = new SysId();
public SysId TaxCodeIdRentalPrice { get; set; } = new SysId();
// Processes.
public SysId ProcessIdNext { get; set; } = new SysId();
}
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
Status = DefaultStatus;
}
public SysId AssetCategoryId
{
get { return data.AssetCategoryId; }
set { CheckChanged(data.AssetCategoryId, value); data.AssetCategoryId = value; }
}
public String SerialNumber
{
get { return data.SerialNumber; }
set { CheckChanged(data.SerialNumber, value); data.SerialNumber = value; }
}
public String RefExt
{
get { return data.RefExt; }
set { CheckChanged(data.RefExt, value); data.RefExt = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { CheckChanged(data.DescBrief, value); data.DescBrief = value; }
}
public ItemId ItemId
{
get { return data.ItemId; }
set { CheckChanged(data.ItemId, value); data.ItemId = value; }
}
public DateTime PurchaseOn
{
get { return data.PurchaseOn; }
set { CheckChanged(data.PurchaseOn, value); data.PurchaseOn = value; }
}
public SysId AssocIdSupplier
{
get { return data.AssocIdSupplier; }
set { CheckChanged(data.AssocIdSupplier, value); data.AssocIdSupplier = value; }
}
public String PurchaseInvoiceRef
{
get { return data.PurchaseInvoiceRef; }
set { CheckChanged(data.PurchaseInvoiceRef, value); data.PurchaseInvoiceRef = value; }
}
public short PaymentTerms
{
get { return data.PaymentTerms; }
set { CheckChanged(data.PaymentTerms, value); data.PaymentTerms = value; }
}
public decimal AmountPurchase
{
get { return data.AmountPurchase; }
set { CheckChanged(data.AmountPurchase, value); data.AmountPurchase = value; }
}
public SysId TaxCodeIdPurchase
{
get { return data.TaxCodeIdPurchase; }
set { CheckChanged(data.TaxCodeIdPurchase, value); data.TaxCodeIdPurchase = value; }
}
public decimal AmountPurchaseGross
{
get { return data.AmountPurchaseGross; }
set { CheckChanged(data.AmountPurchaseGross, value); data.AmountPurchaseGross = value; }
}
public decimal AmountSettlementGross
{
get { return data.AmountSettlementGross; }
set { CheckChanged(data.AmountSettlementGross, value); data.AmountSettlementGross = value; }
}
public decimal AmountEnhancementGross
{
get { return data.AmountEnhancementGross; }
set { CheckChanged(data.AmountEnhancementGross, value); data.AmountEnhancementGross = value; }
}
public SysId AssocIdCustomer
{
get { return data.AssocIdCustomer; }
set { CheckChanged(data.AssocIdCustomer, value); data.AssocIdCustomer = value; }
}
public String SellCategoryCode
{
get { return data.SellCategoryCode; }
set { CheckChanged(data.SellCategoryCode, value); data.SellCategoryCode = value; }
}
public decimal AmountSell
{
get { return data.AmountSell; }
set { CheckChanged(data.AmountSell, value); data.AmountSell = value; }
}
public SysId TaxCodeIdSell
{
get { return data.TaxCodeIdSell; }
set { CheckChanged(data.TaxCodeIdSell, value); data.TaxCodeIdSell = value; }
}
public decimal AmountSellGross
{
get { return data.AmountSellGross; }
set { CheckChanged(data.AmountSellGross, value); data.AmountSellGross = value; }
}
public SysId TaxCodeIdProfit
{
get { return data.TaxCodeIdProfit; }
set { CheckChanged(data.TaxCodeIdProfit, value); data.TaxCodeIdProfit = value; }
}
public DateTime SoldOn
{
get { return data.SoldOn; }
set { CheckChanged(data.SoldOn, value); data.SoldOn = value; }
}
public decimal AmountSold
{
get { return data.AmountSold; }
set { CheckChanged(data.AmountSold, value); data.AmountSold = value; }
}
public decimal AmountSoldGross
{
get { return data.AmountSoldGross; }
set { CheckChanged(data.AmountSoldGross, value); data.AmountSoldGross = value; }
}
public String DisposeCode
{
get { return data.DisposeCode; }
set { CheckChanged(data.DisposeCode, value); data.DisposeCode = value; }
}
public DateTime DisposeOn
{
get { return data.DisposeOn; }
set { CheckChanged(data.DisposeOn, value); data.DisposeOn = value; }
}
public DateTime DueBackOn
{
get { return data.DueBackOn; }
set { CheckChanged(data.DueBackOn, value); data.DueBackOn = value; }
}
public decimal AmountRentalCost
{
get { return data.AmountRentalCost; }
set { CheckChanged(data.AmountRentalCost, value); data.AmountRentalCost = value; }
}
public SysId UomIdRentalCost
{
get { return data.UomIdRentalCost; }
set { CheckChanged(data.UomIdRentalCost, value); data.UomIdRentalCost = value; }
}
public SysId TaxCodeIdRentalCost
{
get { return data.TaxCodeIdRentalCost; }
set { CheckChanged(data.TaxCodeIdRentalCost, value); data.TaxCodeIdRentalCost = value; }
}
public decimal AmountRentalPrice
{
get { return data.AmountRentalPrice; }
set { CheckChanged(data.AmountRentalPrice, value); data.AmountRentalPrice = value; }
}
public SysId UomIdRentalPrice
{
get { return data.UomIdRentalPrice; }
set { CheckChanged(data.UomIdRentalPrice, value); data.UomIdRentalPrice = value; }
}
public SysId TaxCodeIdRentalPrice
{
get { return data.TaxCodeIdRentalPrice; }
set { CheckChanged(data.TaxCodeIdRentalPrice, value); data.TaxCodeIdRentalPrice = value; }
}
public SysId ProcessIdNext
{
get { return data.ProcessIdNext; }
set { CheckChanged(data.ProcessIdNext, value); data.ProcessIdNext = value; }
}
internal void PopulateFrom(Data data)
{
AssetCategoryId = data.AssetCategoryId;
SerialNumber = data.SerialNumber;
RefExt = data.RefExt;
DescBrief = data.DescBrief;
ItemId = data.ItemId;
PurchaseOn = data.PurchaseOn;
AssocIdSupplier = data.AssocIdSupplier;
PurchaseInvoiceRef = data.PurchaseInvoiceRef;
PaymentTerms = data.PaymentTerms;
AmountPurchase = data.AmountPurchase;
TaxCodeIdPurchase = data.TaxCodeIdPurchase;
AmountPurchaseGross = data.AmountPurchaseGross;
AmountSettlementGross = data.AmountSettlementGross;
AmountEnhancementGross = data.AmountEnhancementGross;
AssocIdCustomer = data.AssocIdCustomer;
SellCategoryCode = data.SellCategoryCode;
AmountSell = data.AmountSell;
TaxCodeIdSell = data.TaxCodeIdSell;
AmountSellGross = data.AmountSellGross;
TaxCodeIdProfit = data.TaxCodeIdProfit;
SoldOn = data.SoldOn;
AmountSold = data.AmountSold;
AmountSoldGross = data.AmountSoldGross;
DisposeCode = data.DisposeCode;
DisposeOn = data.DisposeOn;
DueBackOn = data.DueBackOn;
AmountRentalCost = data.AmountRentalCost;
UomIdRentalCost = data.UomIdRentalCost;
TaxCodeIdRentalCost = data.TaxCodeIdRentalCost;
AmountRentalPrice = data.AmountRentalPrice;
UomIdRentalPrice = data.UomIdRentalPrice;
TaxCodeIdRentalPrice = data.TaxCodeIdRentalPrice;
ProcessIdNext = data.ProcessIdNext;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
public new class ErrField : SacsHierarchyItem.ErrField
{
// Identifies the field that has invalid data.
public ValidValue AssetCategoryId { get; set; } = ValidValue.Valid;
public ValidValue SerialNumber { get; set; } = ValidValue.Valid;
public ValidValue RefExt { get; set; } = ValidValue.Valid;
public ValidValue DescBrief { get; set; } = ValidValue.Valid;
public ValidValue ItemType { get; set; } = ValidValue.Valid;
public ValidValue ItemId { get; set; } = ValidValue.Valid;
public ValidValue PurchaseOn { get; set; } = ValidValue.Valid;
public ValidValue AssocIdSupplier { get; set; } = ValidValue.Valid;
public ValidValue PurchaseInvoiceRef { get; set; } = ValidValue.Valid;
public ValidValue PaymentTerms { get; set; } = ValidValue.Valid;
public ValidValue AmountPurchase { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdPurchase { get; set; } = ValidValue.Valid;
public ValidValue AmountPurchaseGross { get; set; } = ValidValue.Valid;
public ValidValue AmountSettlementGross { get; set; } = ValidValue.Valid;
public ValidValue AmountEnhancementGross { get; set; } = ValidValue.Valid;
public ValidValue AssocIdCustomer { get; set; } = ValidValue.Valid;
public ValidValue SellCategoryCode { get; set; } = ValidValue.Valid;
public ValidValue AmountSell { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdSell { get; set; } = ValidValue.Valid;
public ValidValue AmountSellGross { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdProfit { get; set; } = ValidValue.Valid;
public ValidValue SoldOn { get; set; } = ValidValue.Valid;
public ValidValue AmountSold { get; set; } = ValidValue.Valid;
public ValidValue AmountSoldGross { get; set; } = ValidValue.Valid;
public ValidValue DisposeCode { get; set; } = ValidValue.Valid;
public ValidValue DisposeOn { get; set; } = ValidValue.Valid;
public ValidValue DueBackOn { get; set; } = ValidValue.Valid;
public ValidValue AmountRentalCost { get; set; } = ValidValue.Valid;
public ValidValue UomIdRentalCost { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdRentalCost { get; set; } = ValidValue.Valid;
public ValidValue AmountRentalPrice { get; set; } = ValidValue.Valid;
public ValidValue UomIdRentalPrice { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdRentalPrice { get; set; } = ValidValue.Valid;
public ValidValue ProcessIdNext { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmAsset(ISbmUserOrganisationContext userContext, SysId id, SysId assetCatId) : base(userContext, id)
{
base.SetData(data);
Id = id;
AssetCategoryId = assetCatId;
Status = DefaultStatus;
}
//-------------------------------------------------------------------
// Asset status.
private static readonly List assetStatuses = new List()
{
SaStatus.Active,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List ValidStatuses { get { return new List(assetStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Active:
return DataValue.TriStateType.Green;
case SaStatus.Inactive:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
public ItemId GetItemId()
{
return new ItemId((short)Sbm.ItemType.Asset, Id);
}
//-------------------------------------------------------------------
// Properties.
public Data GetData() { return data.Clone(); }
public void SetData(Data data)
{
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Attributes.
public SysId AssetCategoryId
{
get { return data.AssetCategoryId; }
set { data.AssetCategoryId = value; }
}
public String SerialNumber
{
get { return data.SerialNumber; }
set { data.SerialNumber = value; }
}
public String RefExt
{
get { return data.RefExt; }
set { data.RefExt = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { data.DescBrief = value; }
}
public ItemId ItemId
{
get { return data.ItemId; }
set { data.ItemId = value; }
}
public DateTime PurchaseOn
{
get { return data.PurchaseOn; }
set { data.PurchaseOn = value; }
}
public SysId AssocIdSupplier
{
get { return data.AssocIdSupplier; }
set { data.AssocIdSupplier = value; }
}
public String PurchaseInvoiceRef
{
get { return data.PurchaseInvoiceRef; }
set { data.PurchaseInvoiceRef = value; }
}
public short PaymentTerms
{
get { return data.PaymentTerms; }
set { data.PaymentTerms = value; }
}
public decimal AmountPurchase
{
get { return data.AmountPurchase; }
set { data.AmountPurchase = value; }
}
public SysId TaxCodeIdPurchase
{
get { return data.TaxCodeIdPurchase; }
set { data.TaxCodeIdPurchase = value; }
}
public decimal AmountPurchaseGross
{
get { return data.AmountPurchaseGross; }
set { data.AmountPurchaseGross = value; }
}
public decimal AmountSettlementGross
{
get { return data.AmountSettlementGross; }
set { data.AmountSettlementGross = value; }
}
public decimal AmountEnhancementGross
{
get { return data.AmountEnhancementGross; }
set { data.AmountEnhancementGross = value; }
}
public SysId AssocIdCustomer
{
get { return data.AssocIdCustomer; }
set { data.AssocIdCustomer = value; }
}
public String SellCategoryCode
{
get { return data.SellCategoryCode; }
set { data.SellCategoryCode = value; }
}
public decimal AmountSell
{
get { return data.AmountSell; }
set { data.AmountSell = value; }
}
public SysId TaxCodeIdSell
{
get { return data.TaxCodeIdSell; }
set { data.TaxCodeIdSell = value; }
}
public decimal AmountSellGross
{
get { return data.AmountSellGross; }
set { data.AmountSellGross = value; }
}
public SysId TaxCodeIdProfit
{
get { return data.TaxCodeIdProfit; }
set { data.TaxCodeIdProfit = value; }
}
public DateTime SoldOn
{
get { return data.SoldOn; }
set { data.SoldOn = value; }
}
public decimal AmountSold
{
get { return data.AmountSold; }
set { data.AmountSold = value; }
}
public decimal AmountSoldGross
{
get { return data.AmountSoldGross; }
set { data.AmountSoldGross = value; }
}
public String DisposeCode
{
get { return data.DisposeCode; }
set { data.DisposeCode = value; }
}
public DateTime DisposeOn
{
get { return data.DisposeOn; }
set { data.DisposeOn = value; }
}
public DateTime DueBackOn
{
get { return data.DueBackOn; }
set { data.DueBackOn = value; }
}
public decimal AmountRentalCost
{
get { return data.AmountRentalCost; }
set { data.AmountRentalCost = value; }
}
public SysId UomIdRentalCost
{
get { return data.UomIdRentalCost; }
set { data.UomIdRentalCost = value; }
}
public SysId TaxCodeIdRentalCost
{
get { return data.TaxCodeIdRentalCost; }
set { data.TaxCodeIdRentalCost = value; }
}
public decimal AmountRentalPrice
{
get { return data.AmountRentalPrice; }
set { data.AmountRentalPrice = value; }
}
public SysId UomIdRentalPrice
{
get { return data.UomIdRentalPrice; }
set { data.UomIdRentalPrice = value; }
}
public SysId TaxCodeIdRentalPrice
{
get { return data.TaxCodeIdRentalPrice; }
set { data.TaxCodeIdRentalPrice = value; }
}
public SysId ProcessIdNext
{
get { return data.ProcessIdNext; }
set { data.ProcessIdNext = value; }
}
//-------------------------------------------------------------------
// A s s o c i a t e d D a t a E l e m e n t s
//-------------------------------------------------------------------
public abstract bool HasProcesses();
public abstract bool HasRequirements();
public abstract bool HasInterfaceDataItems();
public abstract bool HasAssociatedDetails();
//---------------------------------------------------------------
public abstract bool ClearDependentData();
//---------------------------------------------------------------
// Asset Processes.
public abstract List GetProcesses(bool bActiveOnly);
public abstract bool SetProcesses(List itemProcessesNew);
public abstract bool CommitProcesses();
public abstract bool PopulateDefaultProcesses();
//---------------------------------------------------------------
// Asset Payments.
public abstract bool HasPrices();
public abstract List GetPrices();
public abstract bool SetPrices(List itemPricesNew);
public abstract bool CommitPrices();
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// Parameters - used to define the filters that should be applied to a List of Assets
// List parameters.
public enum StatusCat
{
Any,
ActiveOnly,
NotDeleted,
Deleted,
}
///
/// Item list parameters.
///
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet IdsIncluded { get; } = new HashSet();
public HashSet IdsExcluded { get; } = new HashSet();
// Asset.
public SysId AssetCatId { get; set; }
public String Search { get; set; }
public Sbm.ItemType ItemType { get; set; }
public String SerialNumber { get; set; }
public String SerialNumberPartial { get; set; }
public String DescBriefPartial { get; set; }
public ItemId ItemId { get; set; }
public SysId ProcessIdNext { get; set; }
public SysId ProcessIdActive { get; set; }
public bool RestrictToActive { get; set; }
/// Asset status.
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
}
//=======================================================================
// A s s e t D a t a L i s t
//=======================================================================
public static class SbmAssetList
{
/// Check whether item exists/locate in list with specified Id.
public static bool Find(this List values, SbmAddress address)
{
if (address == null) return false;
return values.Any(item => item == address);
}
public static bool FindById(this List values, SysId addressId)
{
if (!SysId.IsValid(addressId)) return false;
return values.Any(item => item.Id.Equals(addressId));
}
}
//=======================================================================
}