Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Bus/SbmConstituent.cs
T

727 lines
23 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 SbmConstituent : SbmHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
Id,
// Constituent.
AssocId, AffIdOwner, AffIdTarget,
TransId, ReqntId, ConstId,
AssetId, ProcessId,
Type, Type_Desc,
DescBrief, DescOutline, DescDetail,
Owner_Name, Target_Name, Assoc_Code, Assoc_Target_Name,
Trans_Ref, Trans_RefExt, Trans_DescBrief,
Reqnt_DescBrief,
Reqnt_JobNumber,
Reqnt_ProductCode,
Const_DescBrief,
Category,
Reference,
DueInd, // Due indicator - green, amber, red
Effective_Date,
Effective_Time,
Started_Date,
Started_DateFmt, // Using default date format: 'D-MMM-YYYY' //
Started_Time,
Started_Day,
Required_Date,
Required_DateFmt, // Using default date format: 'D-MMM-YYYY' //
Required_Time,
Required_CssClass, // overdue (<today), due (today or tomorrow), notdue (otherwise).
Required_Today, // Today, Tomorrow, This week, Last week, Next week, This month, Last month, 'MMM-YYYY' otherwise.
Completed_Date,
Completed_DateFmt, // Using default date format: 'D-MMM-YYYY' //
Completed_Time,
TaskNumber,
Priority,
Quantity,
Hours,
Uom_Single,
UnitCost,
AmountEst,
AmountNet,
TaxRate,
AmountTax,
AmountTot,
// Common Properties.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
Status_Flag,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public SysId AffiliateIdOwner { get; set; } = new SysId();
public SysId AffiliateIdTarget { get; set; } = new SysId();
public SysId AssociationId { get; set; } = new SysId();
public SysId TransactionId { get; set; } = new SysId();
public SysId RequirementId { get; set; } = new SysId();
public SysId ConstituentId { get; set; } = new SysId();
public SysId AssetId { get; set; } = new SysId();
public SysId ProcessId { get; set; } = new SysId();
public SysId AssociationIdContractor { get; set; } = new SysId();
//-------------------------------------------------------------------
public Sbm.ConstituentType ConstituentType { get; set; } = Sbm.ConstituentType.Unknown;
public String Ref { get; set; } = "";
public short Seq { get; set; } = 0;
public DateTime Effective { get; set; } = DateTime.MinValue;
public DateTime Required { get; set; } = DateTime.MinValue;
public DateTime Started { get; set; } = DateTime.MinValue;
public DateTime Completed { get; set; } = DateTime.MinValue;
public String DescBrief { get; set; } = "";
public String DescOutline { get; set; } = "";
public String DescDetail { get; set; } = "";
public String TaskNumber { get; set; } = "";
public short Priority { get; set; } = 0;
public String Category { get; set; } = "";
public String Reference { get; set; } = "";
public decimal Quantity { get; set; } = 0.0m;
public SysId UomId { get; set; } = new SysId();
public decimal UnitCost { get; set; } = 0.0m;
//-------------------------------------------------------------------
public decimal AmountEst { get; set; } = 0.0m;
public decimal AmountNet { get; set; } = 0.0m;
public SysId TaxCodeId { get; set; } = new SysId();
public decimal TaxRate { get; set; } = 0.0m;
public decimal AmountTax { get; set; } = 0.0m;
public decimal AmountTot { get; set; } = 0.0m;
public decimal TaxRateRebate { get; set; } = 0.0m;
public decimal AmountTaxRebate { get; set; } = 0.0m;
public StatusCat CategoryForStatus { get; set; }
}
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
Status = DefaultStatus;
}
public SysId AffiliateIdOwner
{
get { return data.AffiliateIdOwner; }
set { CheckChanged(data.AffiliateIdOwner, value); data.AffiliateIdOwner = value; }
}
public SysId AffiliateIdTarget
{
get { return data.AffiliateIdTarget; }
set { CheckChanged(data.AffiliateIdTarget, value); data.AffiliateIdTarget = value; }
}
public SysId AssociationId
{
get { return data.AssociationId; }
set { CheckChanged(data.AssociationId, value); data.AssociationId = value; }
}
public SysId TransactionId
{
get { return data.TransactionId; }
set { CheckChanged(data.TransactionId, value); data.TransactionId = value; }
}
public SysId RequirementId
{
get { return data.RequirementId; }
set { CheckChanged(data.RequirementId, value); data.RequirementId = value; }
}
public SysId ConstituentId
{
get { return data.ConstituentId; }
set { CheckChanged(data.ConstituentId, value); data.ConstituentId = value; }
}
public SysId AssetId
{
get { return data.AssetId; }
set { CheckChanged(data.AssetId, value); data.AssetId = value; }
}
public SysId ProcessId
{
get { return data.ProcessId; }
set { CheckChanged(data.ProcessId, value); data.ProcessId = value; }
}
public SysId AssociationIdContractor
{
get { return data.AssociationIdContractor; }
set { CheckChanged(data.AssociationIdContractor, value); data.AssociationIdContractor = value; }
}
//-------------------------------------------------------------------
public Sbm.ConstituentType ConstituentType
{
get { return data.ConstituentType; }
set { CheckChanged((int)data.ConstituentType, (int)value); data.ConstituentType = value; }
}
public short Seq
{
get { return data.Seq; }
set { CheckChanged(data.Seq, value); data.Seq = value; }
}
public DateTime Effective
{
get { return data.Effective; }
set { CheckChanged(data.Effective, value); data.Effective = value; }
}
public DateTime Required
{
get { return data.Required; }
set { CheckChanged(data.Required, value); data.Required = value; }
}
public DateTime Started
{
get { return data.Started; }
set { CheckChanged(data.Started, value); data.Started = value; }
}
public DateTime Completed
{
get { return data.Completed; }
set { CheckChanged(data.Completed, value); data.Completed = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { CheckChanged(data.DescBrief, value); data.DescBrief = value; }
}
public String DescOutline
{
get { return data.DescOutline; }
set { CheckChanged(data.DescOutline, value); data.DescOutline = value; }
}
public String DescDetail
{
get { return data.DescDetail; }
set { CheckChanged(data.DescDetail, value); data.DescDetail = value; }
}
public String TaskNumber
{
get { return data.TaskNumber; }
set { CheckChanged(data.TaskNumber, value); data.TaskNumber = value; }
}
public short Priority
{
get { return data.Priority; }
set { CheckChanged(data.Priority, value); data.Priority = value; }
}
public String Category
{
get { return data.Category; }
set { CheckChanged(data.Category, value); data.Category = value; }
}
public String Reference
{
get { return data.Reference; }
set { CheckChanged(data.Reference, value); data.Reference = value; }
}
public decimal Quantity
{
get { return data.Quantity; }
set { CheckChanged(data.Quantity, value); data.Quantity = value; }
}
public SysId UomId
{
get { return data.UomId; }
set { CheckChanged(data.UomId, value); data.UomId = value; }
}
public decimal UnitCost
{
get { return data.UnitCost; }
set { CheckChanged(data.UnitCost, value); data.UnitCost = value; }
}
//-------------------------------------------------------------------
public decimal AmountEst
{
get { return data.AmountEst; }
set { CheckChanged(data.AmountEst, value); data.AmountEst = value; }
}
public decimal AmountNet
{
get { return data.AmountNet; }
set { CheckChanged(data.AmountNet, value); data.AmountNet = value; }
}
public SysId TaxCodeId
{
get { return data.TaxCodeId; }
set { CheckChanged(data.TaxCodeId, value); data.TaxCodeId = value; }
}
public decimal TaxRate
{
get { return data.TaxRate; }
set { CheckChanged(data.TaxRate, value); data.TaxRate = value; }
}
public decimal AmountTax
{
get { return data.AmountTax; }
set { CheckChanged(data.AmountTax, value); data.AmountTax = value; }
}
public decimal AmountTot
{
get { return data.AmountTot; }
set { CheckChanged(data.AmountTot, value); data.AmountTot = value; }
}
public decimal TaxRateRebate
{
get { return data.TaxRateRebate; }
set { CheckChanged(data.TaxRateRebate, value); data.TaxRateRebate = value; }
}
public decimal AmountTaxRebate
{
get { return data.AmountTaxRebate; }
set { CheckChanged(data.AmountTaxRebate, value); data.AmountTaxRebate = value; }
}
public SbmConstituent.StatusCat CategoryForStatus(SaStatus saStatus)
{
SbmConstituent.StatusCat constStatusCat = SbmConstituent.StatusCat.Open;
switch (saStatus)
{
case SaStatus.Completed:
case SaStatus.Cancelled:
constStatusCat = SbmConstituent.StatusCat.Closed;
break;
}
return constStatusCat;
}
internal void PopulateFrom(Data data)
{
AffiliateIdOwner = data.AffiliateIdOwner;
AffiliateIdTarget = data.AffiliateIdTarget;
AssociationId = data.AssociationId;
TransactionId = data.TransactionId;
RequirementId = data.RequirementId;
ConstituentId = data.ConstituentId;
AssetId = data.AssetId;
ProcessId = data.ProcessId;
AssociationIdContractor = data.AssociationIdContractor;
ConstituentType = data.ConstituentType;
Seq = data.Seq;
Effective = data.Effective;
Required = data.Required;
Started = data.Started;
Completed = data.Completed;
DescBrief = data.DescBrief;
DescOutline = data.DescOutline;
DescDetail = data.DescDetail;
TaskNumber = data.TaskNumber;
Priority = data.Priority;
Category = data.Category;
Reference = data.Reference;
Quantity = data.Quantity;
UomId = data.UomId;
UnitCost = data.UnitCost;
AmountEst = data.AmountEst;
AmountNet = data.AmountNet;
TaxCodeId = data.TaxCodeId;
TaxRate = data.TaxRate;
AmountTax = data.AmountTax;
AmountTot = data.AmountTot;
TaxRateRebate = data.TaxRateRebate;
AmountTaxRebate = data.AmountTaxRebate;
}
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 AffIdTarget { get; set; } = ValidValue.Valid;
public ValidValue AssocId { get; set; } = ValidValue.Valid;
public ValidValue TransId { get; set; } = ValidValue.Valid;
public ValidValue ReqntId { get; set; } = ValidValue.Valid;
public ValidValue ConstId { get; set; } = ValidValue.Valid;
public ValidValue AssetId { get; set; } = ValidValue.Valid;
public ValidValue ProcessId { get; set; } = ValidValue.Valid;
public ValidValue AssociationIdContractor { get; set; } = ValidValue.Valid;
public ValidValue ConstituentType { get; set; } = ValidValue.Valid;
public ValidValue Seq { get; set; } = ValidValue.Valid;
public ValidValue Effective { get; set; } = ValidValue.Valid;
public ValidValue Required { get; set; } = ValidValue.Valid;
public ValidValue Started { get; set; } = ValidValue.Valid;
public ValidValue Completed { get; set; } = ValidValue.Valid;
public ValidValue DescBrief { get; set; } = ValidValue.Valid;
public ValidValue DescOutline { get; set; } = ValidValue.Valid;
public ValidValue DescDetail { get; set; } = ValidValue.Valid;
public ValidValue TaskNumber { get; set; } = ValidValue.Valid;
public ValidValue Priority { get; set; } = ValidValue.Valid;
public ValidValue Category { get; set; } = ValidValue.Valid;
public ValidValue Reference { get; set; } = ValidValue.Valid;
public ValidValue Quantity { get; set; } = ValidValue.Valid;
public ValidValue UomId { get; set; } = ValidValue.Valid;
public ValidValue UnitCost { get; set; } = ValidValue.Valid;
public ValidValue AmountEst { get; set; } = ValidValue.Valid;
public ValidValue AmountNet { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeId { get; set; } = ValidValue.Valid;
public ValidValue TaxRate { get; set; } = ValidValue.Valid;
public ValidValue AmountTax { get; set; } = ValidValue.Valid;
public ValidValue AmountTot { get; set; } = ValidValue.Valid;
public ValidValue TaxRateRebate { get; set; } = ValidValue.Valid;
public ValidValue AmountTaxRebate { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
private enum ConstSort { ConstSortEffective };
//-------------------------------------------------------------------
// Construction.
protected SbmConstituent(ISbmUserContext_Core userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType) : base(userContext)
{
base.SetData(data);
Id = id;
AffiliateIdOwner = affIdOwner;
AssociationId = assocId;
ConstituentType = constituentType;
Status = DefaultStatus;
}
//-------------------------------------------------------------------
// Constituent status.
private static readonly List<SaStatus> constituentStatuses = new List<SaStatus>()
{
SaStatus.Required,
/*SaStatus.Assigned,*/
SaStatus.Awaiting,
SaStatus.InProgress,
SaStatus.Completed,
SaStatus.Cancelled,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> ConstituentStatuses { get { return new List<SaStatus>(constituentStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
switch (status)
{
case SaStatus.Completed:
return DataValue.TriStateType.Green;
case SaStatus.InProgress:
return DataValue.TriStateType.Amber;
case SaStatus.Cancelled:
return DataValue.TriStateType.Red;
case SaStatus.Deleted:
return DataValue.TriStateType.Purple;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// 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 AffiliateIdOwner
{
get { return data.AffiliateIdOwner; }
set { data.AffiliateIdOwner = value; }
}
public SysId AffiliateIdTarget
{
get { return data.AffiliateIdTarget; }
set { data.AffiliateIdTarget = value; }
}
public SysId AssociationId
{
get { return data.AssociationId; }
set { data.AssociationId = value; }
}
public SysId TransactionId
{
get { return data.TransactionId; }
set { data.TransactionId = value; }
}
public SysId RequirementId
{
get { return data.RequirementId; }
set { data.RequirementId = value; }
}
public SysId ConstituentId
{
get { return data.ConstituentId; }
set { data.ConstituentId = value; }
}
public SysId AssetId
{
get { return data.AssetId; }
set { data.AssetId = value; }
}
public SysId ProcessId
{
get { return data.ProcessId; }
set { data.ProcessId = value; }
}
public SysId AssociationIdContractor
{
get { return data.AssociationIdContractor; }
set { data.AssociationIdContractor = value; }
}
//-------------------------------------------------------------------
public Sbm.ConstituentType ConstituentType
{
get { return data.ConstituentType; }
set { data.ConstituentType = value; }
}
public short Seq
{
get { return data.Seq; }
set { data.Seq = value; }
}
public DateTime Effective
{
get { return data.Effective; }
set { data.Effective = value; }
}
public DateTime Required
{
get { return data.Required; }
set { data.Required = value; }
}
public DateTime Started
{
get { return data.Started; }
set { data.Started = value; }
}
public DateTime Completed
{
get { return data.Completed; }
set { data.Completed = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { data.DescBrief = value; }
}
public String DescOutline
{
get { return data.DescOutline; }
set { data.DescOutline = value; }
}
public String DescDetail
{
get { return data.DescDetail; }
set { data.DescDetail = value; }
}
public String TaskNumber
{
get { return data.TaskNumber; }
set { data.TaskNumber = value; }
}
public short Priority
{
get { return data.Priority; }
set { data.Priority = value; }
}
public String Category
{
get { return data.Category; }
set { data.Category = value; }
}
public String Reference
{
get { return data.Reference; }
set { data.Reference = value; }
}
public decimal Quantity
{
get { return data.Quantity; }
set { data.Quantity = value; }
}
public SysId UomId
{
get { return data.UomId; }
set { data.UomId = value; }
}
public decimal UnitCost
{
get { return data.UnitCost; }
set { data.UnitCost = value; }
}
//-------------------------------------------------------------------
public decimal AmountEst
{
get { return data.AmountEst; }
set { data.AmountEst = value; }
}
public decimal AmountNet
{
get { return data.AmountNet; }
set { data.AmountNet = value; }
}
public SysId TaxCodeId
{
get { return data.TaxCodeId; }
set { data.TaxCodeId = value; }
}
public decimal TaxRate
{
get { return data.TaxRate; }
set { data.TaxRate = value; }
}
public decimal AmountTax
{
get { return data.AmountTax; }
set { data.AmountTax = value; }
}
public decimal AmountTot
{
get { return data.AmountTot; }
set { data.AmountTot = value; }
}
public decimal TaxRateRebate
{
get { return data.TaxRateRebate; }
set { data.TaxRateRebate = value; }
}
public decimal AmountTaxRebate
{
get { return data.AmountTaxRebate; }
set { data.AmountTaxRebate = value; }
}
public SbmConstituent.StatusCat CategoryForStatus(SaStatus saStatus)
{
SbmConstituent.StatusCat constStatusCat = SbmConstituent.StatusCat.Open;
switch (saStatus)
{
case SaStatus.Completed:
case SaStatus.Cancelled:
constStatusCat = SbmConstituent.StatusCat.Closed;
break;
}
return constStatusCat;
}
//-------------------------------------------------------------------
// 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 HasConstituents();
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// <summary>Parameters - used to define the filters that should be applied to a List of Constituent</summary>
// List parameters.
public enum StatusCat
{
Any = 0,
NotDeleted,
/// <summary>Database value: In progress.</summary>
Open,
/// <summary>Database value: Completed or Cancelled.</summary>
Closed,
/// <summary>Anything but 'Cancelled' status</summary>
NotCancelled,
Default = NotDeleted
}
/// <summary>
/// Item list parameters.
/// </summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public List<SysId> IncludedIds { get; } = new List<SysId>();
public List<SysId> ExcludedIds { get; } = new List<SysId>();
// Constituent.
public Sbm.ConstituentType ConstituentType { get; set; } = Sbm.ConstituentType.Any;
public SysId AffIdTarget { get; set; }
public SysId AssocId { get; set; }
public SysId TransId { get; set; }
public SysId ReqntId { get; set; }
public SysId ConstId { get; set; }
public SysId AssetId { get; set; }
public String AssetSerialFull { get; set; }
public String AssetSerialPartial { get; set; }
public String Ref { get; set; }
public String DescBrief { get; set; }
public String DescBriefPartial { get; set; }
public DateTime EffectiveFrom { get; set; }
public DateTime EffectiveTo { get; set; }
public DateTime UpdatedSince { get; set; }
public bool UseJobNumber { get; set; }
/// <summary>Constituent status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
}
//=======================================================================
// C o n s t i t u e n t D a t a L i s t
//=======================================================================
public static class SbmConstituentList
{
/// <summary>Check whether currency exists/locate in list with specified Id.</summary>
public static int CompareEffectiveAscend(SbmConstituent constituent1, SbmConstituent constituent2)
{
if (constituent1 != null || constituent2 != null) return 0;
return constituent1.Effective.CompareTo(constituent2.Effective);
}
public static int CompareEffectiveDescend(SbmConstituent constituent1, SbmConstituent constituent2)
{
if (constituent1 != null || constituent2 != null) return 0;
return constituent1.Effective.CompareTo(constituent2.Effective) - -1;
}
public enum SortMode { ConstSoftEffective, };
public static void Sort(this List<SbmConstituent> values, SortMode constituentSort, bool ascending = true)
{
if (constituentSort == SortMode.ConstSoftEffective)
values.Sort
(
delegate (SbmConstituent constituent1, SbmConstituent constituent2)
{
return CompareEffectiveAscend(constituent1, constituent2);
}
);
else if (constituentSort == SortMode.ConstSoftEffective)
values.Sort
(
delegate (SbmConstituent constituent1, SbmConstituent constituent2)
{
return CompareEffectiveDescend(constituent1, constituent2);
}
);
}
}
//=======================================================================
}