Files

405 lines
13 KiB
C#

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;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
//=======================================================================
public abstract class SbmAssetCategory : SbmHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
Id,
// AssetCategory.
AffIdOwner,
AssetType,
AssetType_Desc,
Code,
DescBrief,
IncomeType,
AssocIdSupplier,
PaymentTerms,
TaxCodeIdPurchase,
AssocIdCustomer,
TaxCodeIdSell,
TaxCodeIdProfit,
DisposeCode,
UomIdRentalCost,
TaxCodeIdRentalCost,
UomIdRentalPrice,
TaxCodeIdRentalPrice,
AssetCount,
// Common properties.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public SysId AffIdOwner { get; set; } = new SysId();
public Sbm.AssetType AssetType { get; set; } = Sbm.AssetType.Unknown;
public String Code { get; set; } = "";
public String DescBrief { get; set; } = "";
public Sbm.AssetIncomeType IncomeType { get; set; } = Sbm.AssetIncomeType.Unknown;
public SysId AssocIdSupplier { get; set; } = new SysId();
public short PaymentTerms { get; set; } = 0;
public SysId TaxCodeIdPurchase { get; set; } = new SysId();
public SysId AssocIdCustomer { get; set; } = new SysId();
public SysId TaxCodeIdSell { get; set; } = new SysId();
public SysId TaxCodeIdProfit { get; set; } = new SysId();
public String DisposeCode { get; set; } = "";
public SysId UomIdRentalCost { get; set; } = new SysId();
public SysId TaxCodeIdRentalCost { get; set; } = new SysId();
public SysId UomIdRentalPrice { get; set; } = new SysId();
public SysId TaxCodeIdRentalPrice { 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 AffIdOwner
{
get { return data.AffIdOwner; }
set { CheckChanged(data.AffIdOwner, value); data.AffIdOwner = value; }
}
public Sbm.AssetType AssetType
{
get { return data.AssetType; }
set { CheckChanged((int)data.AssetType, (int)value); data.AssetType = value; }
}
public String Code
{
get { return data.Code; }
set { CheckChanged(data.Code, value); data.Code = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { CheckChanged(data.DescBrief, value); data.DescBrief = value; }
}
public Sbm.AssetIncomeType IncomeType
{
get { return data.IncomeType; }
set { CheckChanged((int)data.IncomeType, (int)value); data.IncomeType = value; }
}
public SysId AssocIdSupplier
{
get { return data.AssocIdSupplier; }
set { CheckChanged(data.AssocIdSupplier, value); data.AssocIdSupplier = value; }
}
public short PaymentTerms
{
get { return data.PaymentTerms; }
set { CheckChanged(data.PaymentTerms, value); data.PaymentTerms = value; }
}
public SysId TaxCodeIdPurchase
{
get { return data.TaxCodeIdPurchase; }
set { CheckChanged(data.TaxCodeIdPurchase, value); data.TaxCodeIdPurchase = value; }
}
public SysId AssocIdCustomer
{
get { return data.AssocIdCustomer; }
set { CheckChanged(data.AssocIdCustomer, value); data.AssocIdCustomer = value; }
}
public SysId TaxCodeIdSell
{
get { return data.TaxCodeIdSell; }
set { CheckChanged(data.TaxCodeIdSell, value); data.TaxCodeIdSell = value; }
}
public SysId TaxCodeIdProfit
{
get { return data.TaxCodeIdProfit; }
set { CheckChanged(data.TaxCodeIdProfit, value); data.TaxCodeIdProfit = value; }
}
public String DisposeCode
{
get { return data.DisposeCode; }
set { CheckChanged(data.DisposeCode, value); data.DisposeCode = 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 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; }
}
internal void PopulateFrom(Data data)
{
AffIdOwner = data.AffIdOwner;
AssetType = data.AssetType;
Code = data.Code;
DescBrief = data.DescBrief;
IncomeType = data.IncomeType;
AssocIdSupplier = data.AssocIdSupplier;
PaymentTerms = data.PaymentTerms;
TaxCodeIdPurchase = data.TaxCodeIdPurchase;
AssocIdCustomer = data.AssocIdCustomer;
TaxCodeIdSell = data.TaxCodeIdSell;
TaxCodeIdProfit = data.TaxCodeIdProfit;
DisposeCode = data.DisposeCode;
UomIdRentalCost = data.UomIdRentalCost;
TaxCodeIdRentalCost = data.TaxCodeIdRentalCost;
UomIdRentalPrice = data.UomIdRentalPrice;
TaxCodeIdRentalPrice = data.TaxCodeIdRentalPrice;
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 AffIdOwner { get; set; } = ValidValue.Valid;
public ValidValue AssetType { get; set; } = ValidValue.Valid;
public ValidValue Code { get; set; } = ValidValue.Valid;
public ValidValue DescBrief { get; set; } = ValidValue.Valid;
public ValidValue IncomeType { get; set; } = ValidValue.Valid;
public ValidValue AssocIdSupplier { get; set; } = ValidValue.Valid;
public ValidValue PaymentTerms { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdPurchase { get; set; } = ValidValue.Valid;
public ValidValue AssocIdCustomer { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdSell { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdProfit { get; set; } = ValidValue.Valid;
public ValidValue DisposeCode { get; set; } = ValidValue.Valid;
public ValidValue UomIdRentalCost { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdRentalCost { get; set; } = ValidValue.Valid;
public ValidValue UomIdRentalPrice { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeIdRentalPrice { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmAssetCategory(SysId id, SysId affiliateIdOwner, Sbm.AssetType assetType) : base(id)
{
base.SetData(data);
AffIdOwner = affiliateIdOwner;
AssetType = assetType;
Status = DefaultStatus;
}
//-------------------------------------------------------------------
// AssetCategory status.
private static readonly List<SaStatus> assetCategoryStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(assetCategoryStatuses); } }
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 SbmItemId GetItemId()
{
return new SbmItemId(Sbm.ItemType.AssetCategory, 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");
if (SysId.IsValid(AffIdOwner) && SysId.ToInt(AffIdOwner) != SysId.ToInt(data.AffIdOwner))
throw new NotSupportedException($"{SysUtil.Fn} Owner Affiliate Id cannot be changed");
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Attributes.
public SysId AffIdOwner
{
get { return data.AffIdOwner; }
set { data.AffIdOwner = value; }
}
public Sbm.AssetType AssetType
{
get { return data.AssetType; }
set { data.AssetType = value; }
}
public String Code
{
get { return data.Code; }
set { data.Code = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { data.DescBrief = value; }
}
public Sbm.AssetIncomeType IncomeType
{
get { return data.IncomeType; }
set { data.IncomeType = value; }
}
public SysId AssocIdSupplier
{
get { return data.AssocIdSupplier; }
set { data.AssocIdSupplier = value; }
}
public short PaymentTerms
{
get { return data.PaymentTerms; }
set { data.PaymentTerms = value; }
}
public SysId TaxCodeIdPurchase
{
get { return data.TaxCodeIdPurchase; }
set { data.TaxCodeIdPurchase = value; }
}
public SysId AssocIdCustomer
{
get { return data.AssocIdCustomer; }
set { data.AssocIdCustomer = value; }
}
public SysId TaxCodeIdSell
{
get { return data.TaxCodeIdSell; }
set { data.TaxCodeIdSell = value; }
}
public SysId TaxCodeIdProfit
{
get { return data.TaxCodeIdProfit; }
set { data.TaxCodeIdProfit = value; }
}
public String DisposeCode
{
get { return data.DisposeCode; }
set { data.DisposeCode = value; }
}
public SysId UomIdRentalCost
{
get { return data.UomIdRentalCost; }
set { data.UomIdRentalCost = value; }
}
public SysId TaxCodeIdRentalCost
{
get { return data.TaxCodeIdRentalCost; }
set { data.TaxCodeIdRentalCost = value; }
}
public SysId UomIdRentalPrice
{
get { return data.UomIdRentalPrice; }
set { data.UomIdRentalPrice = value; }
}
public SysId TaxCodeIdRentalPrice
{
get { return data.TaxCodeIdRentalPrice; }
set { data.TaxCodeIdRentalPrice = value; }
}
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// <summary>Parameters - used to define the filters that should be applied to a List of Asset Categories</summary>
// List parameters.
public enum StatusCat
{
Any,
ActiveOnly,
NotDeleted,
Deleted,
}
/// <summary>
/// Item list parameters.
/// </summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
// AssetCategory.
public Sbm.AssetType AssetType { get; set; }
public String Search { get; set; }
public String Code { get; set; }
public String CodePartial { get; set; }
public String DescBrief { get; set; }
public String DescBriefPartial { get; set; }
/// <summary>Asset Category status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
//-------------------------------------------------------------------
}
//=======================================================================
// A s s e t D a t a L i s t
//=======================================================================
public static class SbmAssetCategoryList
{
/// <summary>Check whether assetCategory exists/locate in list with specified Id.</summary>
public static bool FindById(this List<SbmAssetCategory> values, SysId assetCategoryId)
{
if (!SysId.IsValid(assetCategoryId)) return false;
return values.Exists(item => item.Id.Equals(assetCategoryId));
}
public static bool FindByType(this List<SbmAssetCategory> values, String assetCategoryType)
{
if (StringUtil.IsEmpty(assetCategoryType)) return false;
return values.Exists(item => item.AssetType.ToString().EqualsCI(assetCategoryType));
}
}
//=======================================================================
}