Files
PatientMgr-CSharp/SaPatMgrCore/Core/Bus/SpmAdmissionAction.cs
T
2019-05-16 15:20:54 +01:00

314 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sarand.Core.Base;
using Sarand.Core.Bus;
using Sarand.PatientMgr.Core.App;
namespace Sarand.PatientMgr.Core.Bus
{
//=======================================================================
public abstract class SpmAdmissionAction : SacsHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Pos,
Id,
AdmissionId,
Type,
Type_Desc,
// Admission details.
Admission_FacilityId,
Admission_TemplateId,
AdmissionFrom,
AdmissionFromDateTime,
AdmissionFromDate,
AdmissionFromTime,
AdmissionTo,
AdmissionToDate,
AdmissionToTime,
AdmissionType,
AdmissionTypeDesc,
AdmissionNotes,
AdmissionFlags,
AdmissionStatus,
AdmissionStatusInd,
// Admission patient details.
Patient, // No & display name.
PatientId,
PatientNo,
PatientSurname,
PatientForename,
// Facility:
Facility_Name,
Facility_Desc,
Facility_Notes,
// Facility Template.
Template_Name,
Template_Desc,
Template_Notes,
// Session definition (combined template and date-specific session info).
SessionDfn_Summary,
// Common properties.
Notes,
Flags,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
// Data.
public new class Data : SacsHierarchyItem.Data
{
public Data()
{
//Status = AdmissionActionStatus;
}
public SysId AdmissionId { get; set; }
public Spm.AdmissionActionType AdmissionActionType { get; set; }
public DateTime Raised { get; set; }
public SysId EmployeeIdRaised { get; set; }
public DateTime Completed { get; set; }
public SysId EmployeeIdCompleted { get; set; }
public String ActionData { get; set; }
internal void PopulateFrom(Data data)
{
AdmissionId = data.AdmissionId;
AdmissionActionType = data.AdmissionActionType;
Raised = data.Raised;
EmployeeIdRaised = data.EmployeeIdRaised;
Completed = data.Completed;
EmployeeIdCompleted = data.EmployeeIdCompleted;
ActionData = data.ActionData;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
// ErrField.
public new class ErrField : SacsHierarchyItem.ErrField
{
public ValidValue AdmissionId { get; set; } = ValidValue.Valid;
public ValidValue AdmissionActionType { get; set; } = ValidValue.Valid;
public ValidValue Raised { get; set; } = ValidValue.Valid;
public ValidValue EmployeeIdRaised { get; set; } = ValidValue.Valid;
public ValidValue Completed { get; set; } = ValidValue.Valid;
public ValidValue EmployeeIdCompleted { get; set; } = ValidValue.Valid;
public ValidValue ActionData { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SpmAdmissionAction(SysId id, SysId admissionId, Spm.AdmissionActionType admissionActionType) : base(id)
{
id = Id;
admissionId = AdmissionId;
admissionActionType = AdmissionActionType;
Status = DefaultStatus;
base.SetData(data);
}
//-------------------------------------------------------------------
// Status.
private static readonly List<SaStatus> admissionActionStatuses = new List<SaStatus>()
{
SaStatus.Current,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> AdmissionActionStatuses { get { return new List<SaStatus>(admissionActionStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
admissionActionStatuses.Add(SaStatus.Current);
switch (status)
{
case SaStatus.Current:
return DataValue.TriStateType.Green;
}
return DataValue.TriStateType.Unknown;
}
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// Properties.
public Data GetData() { return data.Clone(); }
public void SetData(Data data)
{
String fn = GetType().Name + ".SetData";
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException(fn + " Id cannot be changed");
this.data.PopulateFrom(data);
}
//-------------------------------------------------------------------
// Attributes.
public SysId AdmissionId
{
get { return data.AdmissionId; }
set { CheckChanged(data.AdmissionId, value); data.AdmissionId = value; }
}
public Spm.AdmissionActionType AdmissionActionType
{
get { return data.AdmissionActionType; }
set { CheckChanged((int)data.AdmissionActionType, (int)value); data.AdmissionActionType = value; }
}
public DateTime Raised
{
get { return data.Raised; }
set { CheckChanged(data.Raised, value); data.Raised = value; }
}
public SysId EmployeeIdRaised
{
get { return data.EmployeeIdRaised; }
set { CheckChanged(data.EmployeeIdRaised, value); data.EmployeeIdRaised = value; }
}
public DateTime Completed
{
get { return data.Completed; }
set { CheckChanged(data.Completed, value); data.Completed = value; }
}
public SysId EmployeeIdCompleted
{
get { return data.EmployeeIdCompleted; }
set { CheckChanged(data.EmployeeIdCompleted, value); data.EmployeeIdCompleted = value; }
}
public String ActionData
{
get { return data.ActionData; }
set { CheckChanged(data.ActionData, value); data.ActionData = value; }
}
//-------------------------------------------------------------------
// Flags.
public int Compare(SpmAdmissionAction action)
{
SaStatus status1 = new SaStatus();
SaStatus status2 = action.Status;
// 'Required' actions always occur earlier in the list.
if (status1 == SaStatus.Required && status2 != SaStatus.Required) return -1;
if (status1 != SaStatus.Required && status2 == SaStatus.Required) return 1;
// Followed by 'Completed' actions.
if (status1 == SaStatus.Completed && status2 != SaStatus.Completed) return -1;
if (status1 != SaStatus.Completed && status2 == SaStatus.Completed) return 1;
// Sort by 'Raised' date.
int iCompareRaised = Raised.CompareTo(action.Raised);
if (iCompareRaised != 0) return iCompareRaised;
// Sort by type.
if (AdmissionActionType < action.AdmissionActionType) return -1;
if (AdmissionActionType > action.AdmissionActionType) return 1;
return -1; // To retain previous sequence.
}
//-------------------------------------------------------------------
// A s s o c i a t e d D a t a E l e m e n t s
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// <summary>Parameters - used to define the filters that should be applied to a List of Addresses</summary>
// List parameters.
public enum StatusCat
{
Any,
}
/// <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>();
// Admission Action.
public SysId Id { get; set; }
public SysId AdmissionId { get; set; }
public SysId DepartmentId { get; set; }
public SysId FacilityId { get; set; }
public Spm.AdmissionActionType AdmissionActionType { get; set; }
public DateTime Raised { get; set; }
public SysId EmployeeIdRaised { get; set; }
public DateTime Completed { get; set; }
public SysId EmployeeIdCompleted { get; set; }
public String ActionData { get; set; }
public bool RequiredOnly { get; set; } = true;
public bool ExcludeCancelled { get; set; } = true;
public StatusCat StatusCat { get; set; } = StatusCat.Any;
}
//-------------------------------------------------------------------
}
//=======================================================================
// AdmissionAction D a t a L i s t
//=======================================================================
public static class SpmAdmissionActionList
{
public static int CompareByNameSeq(SpmAdmissionAction action1, SpmAdmissionAction action2)
{
if (action1 == null || action2 == null) return 0;
return action1.Compare(action2);
}
public enum SortMode { SortActionRequiredRaised, };
public static void Sort(this List<SpmAdmissionAction> values, SortMode sortActionRequiredRaised, bool ascending = true)
{
if (sortActionRequiredRaised == SortMode.SortActionRequiredRaised)
values.Sort
(
delegate (SpmAdmissionAction action1, SpmAdmissionAction action2)
{
return CompareByNameSeq(action1, action2);
}
);
}
public static bool SetIdentity(this List<SpmAdmissionAction> values, SpmAdmission admission)
{
foreach (SpmAdmissionAction admissionAction in values)
admissionAction.AdmissionId = admission.Id;
return true;
}
// HasAction
// HasRequiredAction
public static bool Find(this List<SpmAdmissionAction> values, SpmAdmissionAction admissionAction)
{
if (admissionAction == null) return false;
return (values.Find(item => item == admissionAction) != null);
}
public static bool FindById(this List<SpmAdmissionAction> values, SysId admissionActionId)
{
if (!SysId.IsValid(admissionActionId)) return false;
return values.Exists(item => item.Id.Equals(admissionActionId));
}
public static bool FindByType(this List<SpmAdmissionAction> values, String admissionActionType)
{
if (StringUtil.IsEmpty(admissionActionType)) return false;
return values.Exists(item => item.AdmissionActionType.ToString().EqualsCI(admissionActionType));
}
}
//=======================================================================
}