335 lines
11 KiB
C#
335 lines
11 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.
|
|
|
|
// Determine which action types can occur more than once against an admission.
|
|
public bool IsRestrictedToSingleOccurrence(Spm.AdmissionActionType type)
|
|
{
|
|
// 'Repeat admission' can only occur once.
|
|
switch (type)
|
|
{
|
|
case Spm.AdmissionActionType.RepeatAdmission:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public bool IsRestrictedToSingleRequired(Spm.AdmissionActionType type)
|
|
{
|
|
// Everything apart from 'General'.
|
|
switch (type)
|
|
{
|
|
case Spm.AdmissionActionType.General:
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// 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));
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
}
|