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, } // Data. public new class Data : SacsHierarchyItem.Data { public Data() { //Status = FacilitySessionStatus; } public SysId FacilityId{ get; set; } public SysId FacilityTemplateId{ get; set; } public DateTime SessionDate{ get; set; } public Spm.TemplateType TemplateType { get; set; } public String Name { get; set; } public String Desc { get; set; } public String SessionCode{ get; set; } public DateTime StartTime { get; set; } public DateTime FinishTime { get; set; } // Ward resources & Clinic sessions. public Spm.ResourceCapacityType ResourceCapacityType { get; set; } public short CapacityMin { get; set; } public short CapacityMax { get; set; } public decimal UnitsExp { get; set; } public short DurationInterval { get; set; } public short DurationMin { get; set; } public short DurationMax { get; set; } public short DurationBreaks { get; set; } // Theatre & Clinic sessions. public SysId ConsultantId{ get; set; } public String ConsultantCode{ get; set; } public String SpecialityCode{ get; set; } internal void PopulateFrom(Data data) { FacilityId = data.FacilityId; FacilityTemplateId = data.FacilityTemplateId; SessionDate = data.SessionDate; TemplateType = data.TemplateType; Name = data.Name; Desc = data.Desc; 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 facilitySessionStatuses = new List() { SaStatus.Current, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List FacilitySessionStatuses { get { return new List(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 { 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; } } //------------------------------------------------------------------- // 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 //------------------------------------------------------------------- /// Parameters - used to define the filters that should be applied to a List of Addresses // List parameters. public enum StatusCat { Any, } /// Item list parameters. public new class Params : SacsHierarchyItem.Params { // List filtering. public List IncludedIds { get; } = new List(); public List ExcludedIds { get; } = new List(); // 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 { } //======================================================================= }