Files
PatientMgr-CSharp/SaPatMgrCore/Core/Bus/SpmFacilitySession.cs
T

542 lines
17 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 SpmFacilitySession : SacsHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Pos,
// Facility columns.
Facility_TypeDesc,
Facility_Name,
Facility_SortCode,
Facility_Desc,
Facility_TemplateMapTypeDesc,
Facility_ApplicFrom,
Facility_ApplicTo,
Facility_Notes,
// Template columns.
Template_Id,
Template_FacilityId,
Template_WeekOfMonth,
Template_DayOfWeek,
Template_TypeDesc,
Template_Name,
Template_Desc,
Template_ConsultantCode,
Template_SpecialityCode,
Template_ConsSpec,
Template_StartTime,
Template_FinishTime,
Template_DurationTotal,
Template_DurationInterval,
Template_DurationMin,
Template_DurationMax,
Template_DurationBreaks,
Template_UnitsExp,
Template_ApplicFrom,
Template_ApplicTo,
Template_Notes,
// Session columns.
Session_Date,
Session_Name,
Session_Desc,
Session_ConsultantCode,
Session_SpecialityCode,
Session_ConsSpec,
Session_StartTime,
Session_FinishTime,
Session_DurationTotal, // Total duration specifically for the session.
Session_DurationInterval,
Session_DurationMin,
Session_DurationMax,
Session_DurationBreaks,
Session_UnitsExp,
Session_Overrides,
Session_Flags,
Session_Unavailable,
Session_Notes,
// Derived session columns - template value if session not present.
Session_Duration_Total, // Total duration for template or session if specified.
Session_Duration_Breaks,
Session_Duration_Session, // Total session time - breaks.
Session_Admissions_Duration_Total, // Booked mins - discharge time - admission time.
Session_Admissions_Duration_BlankPatientNo,
Session_Admissions_DurationExp,
Session_Admissions_DurationAct,
Session_Admissions_Duration_Util,
Session_Admissions_UnitsExp_Total,
Session_Admissions_UnitsExp_Util,
Session_Available_Mins,
Session_Admissions_LateCancelled, // Includes bookings cancelled, deleted and moved sicne previous day.
Session_Booked_Percent_Total,
Session_Booked_Percent_Util,
Session_Slots_Capacity_Min,
Session_Slots_Capacity_Int,
Session_Slots_Capacity_Maj,
Session_Slots_Booked_Total,
Session_Slots_Booked_Min,
Session_Slots_Booked_Int,
Session_Slots_Booked_Maj,
Session_Slots_Booked_Other,
Session_Slots_Booked_Percent,
Session_Slots_Avail_Total,
Session_Slots_Avail_Min,
Session_Slots_Avail_Int,
Session_Slots_Avail_Maj,
// Common properties.
Notes,
Flags,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public SysId FacilityId { get; set; } = new SysId();
public SysId FacilityTemplateId { get; set; } = new SysId();
public DateTime SessionDate { get; set; } = DateTime.MinValue;
public Spm.TemplateType TemplateType { get; set; } = Spm.TemplateType.Unknown;
public String Name { get; set; } = "";
public String Desc { get; set; } = "";
public String SessionCode { get; set; } = "";
public DateTime StartTime { get; set; } = DateTime.MinValue;
public DateTime FinishTime { get; set; } = DateTime.MinValue;
// Ward resources & Clinic sessions.
public Spm.ResourceCapacityType ResourceCapacityType { get; set; } = Spm.ResourceCapacityType.Unknown;
public short CapacityMin { get; set; } = 0;
public short CapacityMax { get; set; } = 0;
public decimal UnitsExp { get; set; } = 0.0m;
public short DurationInterval { get; set; } = 0;
public short DurationMin { get; set; } = 0;
public short DurationMax { get; set; } = 0;
public short DurationBreaks { get; set; } = 0;
// Theatre & Clinic sessions.
public SysId ConsultantId { get; set; } = new SysId();
public String ConsultantCode { get; set; } = "";
public String SpecialityCode { get; set; } = "";
}
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data ()
{
//Status = FacilitySessionStatus;
}
public SysId FacilityId
{
get { return data.FacilityId; }
set { CheckChanged(data.FacilityId, value); data.FacilityId = value; }
}
public SysId FacilityTemplateId
{
get { return data.FacilityTemplateId; }
set { CheckChanged(data.FacilityTemplateId, value); data.FacilityTemplateId = value; }
}
public DateTime SessionDate
{
get { return data.SessionDate; }
set { CheckChanged(data.SessionDate, value); data.SessionDate = value; }
}
public Spm.TemplateType TemplateType
{
get { return data.TemplateType; }
set { CheckChanged((int)data.TemplateType, (int)value); data.TemplateType = value; }
}
public String Name
{
get { return data.Name; }
set { CheckChanged(data.Name, value); data.Name = value; }
}
public String Description
{
get { return data.Desc; }
set { CheckChanged(data.Desc, value); data.Desc = value; }
}
public String SessionCode
{
get { return data.SessionCode; }
set { CheckChanged(data.SessionCode, value); data.SessionCode = value; }
}
public DateTime StartTime
{
get { return data.StartTime; }
set { CheckChanged(data.StartTime, value); data.StartTime = value; }
}
public DateTime FinishTime
{
get { return data.FinishTime; }
set { CheckChanged(data.FinishTime, value); data.FinishTime = value; }
}
public Spm.ResourceCapacityType ResourceCapacityType
{
get { return data.ResourceCapacityType; }
set { CheckChanged((int)data.ResourceCapacityType, (int)value); data.ResourceCapacityType = value; }
}
public short CapacityMin
{
get { return data.CapacityMin; }
set { CheckChanged(data.CapacityMin, value); data.CapacityMin = value; }
}
public short CapacityMax
{
get { return data.CapacityMax; }
set { CheckChanged(data.CapacityMax, value); data.CapacityMax = value; }
}
public decimal UnitsExp
{
get { return data.UnitsExp; }
set { CheckChanged(data.UnitsExp, value); data.UnitsExp = value; }
}
public static ushort GetDurationIntervalDefault ()
{
return 15;
}
public short DurationInterval
{
get { return data.DurationInterval; }
set { CheckChanged(data.DurationInterval, value); data.DurationInterval = value; }
}
public short DurationMin
{
get { return data.DurationMin; }
set { CheckChanged(data.DurationMin, value); data.DurationMin = value; }
}
public short DurationMax
{
get { return data.DurationMax; }
set { CheckChanged(data.DurationMax, value); data.DurationMax = value; }
}
public short DurationBreaks
{
get { return data.DurationBreaks; }
set { CheckChanged(data.DurationBreaks, value); data.DurationBreaks = value; }
}
public SysId ConsultantId
{
get { return data.ConsultantId; }
set { CheckChanged(data.ConsultantId, value); data.ConsultantId = value; }
}
public String ConsultantCode
{
get { return data.ConsultantCode; }
set { CheckChanged(data.ConsultantCode, value); data.ConsultantCode = value; }
}
public String SpecialityCode
{
get { return data.SpecialityCode; }
set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; }
}
internal void PopulateFrom(Data data)
{
FacilityId = data.FacilityId;
FacilityTemplateId = data.FacilityTemplateId;
SessionDate = data.SessionDate;
TemplateType = data.TemplateType;
Name = data.Name;
Description = data.Description;
SessionCode = data.SessionCode;
StartTime = data.StartTime;
FinishTime = data.FinishTime;
ResourceCapacityType = data.ResourceCapacityType;
CapacityMin = data.CapacityMin;
CapacityMax = data.CapacityMax;
UnitsExp = data.UnitsExp;
DurationInterval = data.DurationInterval;
DurationMin = data.DurationMin;
DurationMax = data.DurationMax;
DurationBreaks = data.DurationBreaks;
ConsultantId = data.ConsultantId;
ConsultantCode = data.ConsultantCode;
SpecialityCode = data.SpecialityCode;
base.PopulateFrom(data);
}
public Data Clone()
{
Data data = new Data();
data.PopulateFrom(this);
return data;
}
}
// ErrField.
public new class ErrField : SacsHierarchyItem.ErrField
{
public ValidValue FacilityId { get; set; } = ValidValue.Valid;
public ValidValue FacilityTemplateId { get; set; } = ValidValue.Valid;
public ValidValue SessionDate { get; set; } = ValidValue.Valid;
public ValidValue TemplateType { get; set; } = ValidValue.Valid;
public ValidValue Name { get; set; } = ValidValue.Valid;
public ValidValue Desc { get; set; } = ValidValue.Valid;
public ValidValue SessionCode { get; set; } = ValidValue.Valid;
public ValidValue StartTime { get; set; } = ValidValue.Valid;
public ValidValue FinishTime { get; set; } = ValidValue.Valid;
public ValidValue ResourceCapacityType { get; set; } = ValidValue.Valid;
public ValidValue CapacityMin { get; set; } = ValidValue.Valid;
public ValidValue CapacityMax { get; set; } = ValidValue.Valid;
public ValidValue UnitsExp { get; set; } = ValidValue.Valid;
public ValidValue DurationInterval { get; set; } = ValidValue.Valid;
public ValidValue DurationMin { get; set; } = ValidValue.Valid;
public ValidValue DurationMax { get; set; } = ValidValue.Valid;
public ValidValue DurationBreaks { get; set; } = ValidValue.Valid;
public ValidValue ConsultantId { get; set; } = ValidValue.Valid;
public ValidValue ConsultantCode { get; set; } = ValidValue.Valid;
public ValidValue SpecialityCode { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
public static readonly ushort Flag_NotAvailable = 0x01;
public static readonly ushort Flag_HideTemplateNotes = 0x02;
public static readonly ushort Flag_HighlightSessionNotes = 0x03;
public static readonly ushort Flag_Finalised = 0x04;
//-------------------------------------------------------------------
// Construction.
protected SpmFacilitySession(SysId facilityId, SysId facilityTemplateId, DateTime sessionDate) : base()
{
facilityId = FacilityId;
facilityTemplateId = FacilityTemplateId;
sessionDate = SessionDate;
Status = DefaultStatus;
base.SetData(data);
}
//-------------------------------------------------------------------
// Status.
private static readonly List<SaStatus> facilitySessionStatuses = new List<SaStatus>()
{
SaStatus.Current,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List<SaStatus> FacilitySessionStatuses { get { return new List<SaStatus>(facilitySessionStatuses); } }
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{
facilitySessionStatuses.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 FacilityId
{
get { return data.FacilityId; }
set { data.FacilityId = value; }
}
public SysId FacilityTemplateId
{
get { return data.FacilityTemplateId; }
set { data.FacilityTemplateId = value; }
}
public DateTime SessionDate
{
get { return data.SessionDate; }
set { data.SessionDate = value; }
}
public Spm.TemplateType TemplateType
{
get { return data.TemplateType; }
set { data.TemplateType = value; }
}
public String Name
{
get { return data.Name; }
set { data.Name = value; }
}
public String Description
{
get { return data.Description; }
set { data.Description = value; }
}
public String SessionCode
{
get { return data.SessionCode; }
set { data.SessionCode = value; }
}
public DateTime StartTime
{
get { return data.StartTime; }
set { data.StartTime = value; }
}
public DateTime FinishTime
{
get { return data.FinishTime; }
set { data.FinishTime = value; }
}
public Spm.ResourceCapacityType ResourceCapacityType
{
get { return data.ResourceCapacityType; }
set { data.ResourceCapacityType = value; }
}
public short CapacityMin
{
get { return data.CapacityMin; }
set { data.CapacityMin = value; }
}
public short CapacityMax
{
get { return data.CapacityMax; }
set { data.CapacityMax = value; }
}
public decimal UnitsExp
{
get { return data.UnitsExp; }
set { data.UnitsExp = value; }
}
public static ushort GetDurationIntervalDefault()
{
return 15;
}
public short DurationInterval
{
get { return data.DurationInterval; }
set { data.DurationInterval = value; }
}
public short DurationMin
{
get { return data.DurationMin; }
set { data.DurationMin = value; }
}
public short DurationMax
{
get { return data.DurationMax; }
set { data.DurationMax = value; }
}
public short DurationBreaks
{
get { return data.DurationBreaks; }
set { data.DurationBreaks = value; }
}
public SysId ConsultantId
{
get { return data.ConsultantId; }
set { data.ConsultantId = value; }
}
public String ConsultantCode
{
get { return data.ConsultantCode; }
set { data.ConsultantCode = value; }
}
public String SpecialityCode
{
get { return data.SpecialityCode; }
set { data.SpecialityCode = value; }
}
//-------------------------------------------------------------------
// Flags.
public bool NotAvailable
{
get { return GetFlag(Flag_NotAvailable); }
set { SetFlag(Flag_NotAvailable, value); }
}
public bool HideTemplateNotes
{
get { return GetFlag(Flag_HideTemplateNotes); }
set { SetFlag(Flag_HideTemplateNotes, value); }
}
public bool HighlightSessionNotes
{
get { return GetFlag(Flag_HighlightSessionNotes); }
set { SetFlag(Flag_HighlightSessionNotes, value); }
}
public bool Finalised
{
get { return GetFlag(Flag_Finalised); }
set { SetFlag(Flag_Finalised, value); }
}
//-------------------------------------------------------------------
// 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>();
// FacilitySession.
public SysId FacilityId { get; set; }
public SysId FacilityTemplateId { get; set; }
public DateTime SessionFrom { get; set; }
public DateTime SessionTo { get; set; }
public DateTime Admission { get; set; }
/*public DateTime AdmissionFrom { get; set; }
public DateTime AdmissionTo { get; set; }
public SysId DepartmentId { get; set; }
public SysId FacilityId { get; set; }
public SysId FacilityTemplate { get; set; }
public Spm.FacilityType FacilityType { get; set; }
int iMaxSeq, iMinSeq{ get; set; }
eSwmAdmissionCancelType eCancelType{ get; set; }
String sPatientNoFull, sPatientNoPartial, sPatientSurname{ get; set; }*/
public StatusCat StatusCat { get; set; } = StatusCat.Any;
}
//-------------------------------------------------------------------
}
//=======================================================================
// FacilitySession D a t a L i s t
//=======================================================================
public static class SpmFacilitySessionList
{
}
//=======================================================================
}