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 SpmFacilityTemplate : SacsHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Pos, Id, Category, Type, Sort, Group, Name, Desc, CapacityType, WeekOfMonth, DayOfWeek, Consultant, Speciality, UnitsExp, DurationInterval, DurationMin, DurationMax, DurationBreaks, SlotsMin, SlotsInt, SlotsMaj, Start, Finish, Notes, ApplicFrom, ApplicTo, // Common properties. //Notes, Flags, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, } // Data. public new class Data : SacsHierarchyItem.Data { public Data() { //Status = FacilityTemplateStatus; } public SysId FacilityId { get; set; } public Spm.ResourceCategory ResourceCategory { get; set; } public Spm.TemplateType TemplateType { get; set; } public String Name { get; set; } public String SortCode { get; set; } public String Desc { get; set; } public String SessionCode { get; set; } public String Group { get; set; } // Ward resources & Clinic sessions. public Spm.ResourceCapacityType ResourceCapacityType { get; set; } public ushort CapacityMin { get; set; } public ushort CapacityMax { get; set; } public decimal UnitsExp { get; set; } public ushort DurationInterval { get; set; } public ushort DurationMin { get; set; } public ushort DurationMax { get; set; } public ushort DurationBreaks { get; set; } // Theatre & Clinic sessions. public ushort WeekOfMonth { get; set; } public ushort DayOfWeek { get; set; } public SysId ConsultantId { get; set; } // Employee role. public String ConsultantCode { get; set; } public String SpecialityCode { get; set; } public DateTime StartTime { get; set; } public DateTime FinishTime { get; set; } public DateTime ApplicationFrom { get; set; } public DateTime ApplicationTo { get; set; } internal void PopulateFrom(Data data) { FacilityId = data.FacilityId; ResourceCategory = data.ResourceCategory; TemplateType = data.TemplateType; Name = data.Name; SortCode = data.SortCode; Desc = data.Desc; SessionCode = data.SessionCode; Group = data.Group; ResourceCapacityType = data.ResourceCapacityType; CapacityMin = data.CapacityMin; CapacityMax = data.CapacityMax; UnitsExp = data.UnitsExp; DurationInterval = data.DurationInterval; DurationMin = data.DurationMin; DurationMax = data.DurationMax; DurationBreaks = data.DurationBreaks; WeekOfMonth = data.WeekOfMonth; DayOfWeek = data.DayOfWeek; ConsultantId = data.ConsultantId; ConsultantCode = data.ConsultantCode; SpecialityCode = data.SpecialityCode; StartTime = data.StartTime; FinishTime = data.FinishTime; ApplicationFrom = data.ApplicationFrom; ApplicationTo = data.ApplicationTo; 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 ResourceCategory { get; set; } = ValidValue.Valid; public ValidValue TemplateType { get; set; } = ValidValue.Valid; public ValidValue Name { get; set; } = ValidValue.Valid; public ValidValue SortCode { get; set; } = ValidValue.Valid; public ValidValue Desc { get; set; } = ValidValue.Valid; public ValidValue SessionCode { get; set; } = ValidValue.Valid; public ValidValue Group { 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 WeekOfMonth { get; set; } = ValidValue.Valid; public ValidValue DayOfWeek { 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; public ValidValue StartTime { get; set; } = ValidValue.Valid; public ValidValue FinishTime { get; set; } = ValidValue.Valid; public ValidValue ApplicationFrom { get; set; } = ValidValue.Valid; public ValidValue ApplicationTo { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); //------------------------------------------------------------------- // Construction. protected SpmFacilityTemplate(SysId facilityId, Spm.ResourceCategory resourceCategory) : base() { facilityId = FacilityId; resourceCategory = ResourceCategory; Status = DefaultStatus; base.SetData(data); } //------------------------------------------------------------------- // Status. private static readonly List facilityTemplateStatuses = new List() { SaStatus.Current, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List FacilityTemplateStatuses { get { return new List(facilityTemplateStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { facilityTemplateStatuses.Add(SaStatus.Current); switch (status) { case SaStatus.Current: return DataValue.TriStateType.Green; } return DataValue.TriStateType.Unknown; } //------------------------------------------------------------------- // Status. //------------------------------------------------------------------- // 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 Spm.ResourceCategory ResourceCategory { get { return data.ResourceCategory; } set { CheckChanged((int)data.ResourceCategory, (int)value); data.ResourceCategory = 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 SortCode { get { return data.SortCode; } set { CheckChanged(data.SortCode, value); data.SortCode = value; } } public String Desc { 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 String Group { get { return data.Group; } set { CheckChanged(data.Group, value); data.Group = value; } } // Ward resources & Clinic sessions. public Spm.ResourceCapacityType ResourceCapacityType { get { return data.ResourceCapacityType; } set { CheckChanged((int)data.ResourceCapacityType, (int)value); data.ResourceCapacityType = value; } } public ushort CapacityMin { get { return data.CapacityMin; } set { CheckChanged(data.CapacityMin, value); data.CapacityMin = value; } } public ushort 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 ushort DurationInterval { get { return data.DurationInterval; } set { CheckChanged(data.DurationInterval, value); data.DurationInterval = value; } } public ushort DurationMin { get { return data.DurationMin; } set { CheckChanged(data.DurationMin, value); data.DurationMin = value; } } public ushort DurationMax { get { return data.DurationMax; } set { CheckChanged(data.DurationMax, value); data.DurationMax = value; } } public ushort DurationBreaks { get { return data.DurationBreaks; } set { CheckChanged(data.DurationBreaks, value); data.DurationBreaks = value; } } // Theatre & Clinic sessions. public ushort WeekOfMonth { get { return data.WeekOfMonth; } set { CheckChanged(data.WeekOfMonth, value); data.WeekOfMonth = value; } } public ushort DayOfWeek { get { return data.DayOfWeek; } set { CheckChanged(data.DayOfWeek, value); data.DayOfWeek = 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; } } 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 DateTime ApplicationFrom { get { return data.ApplicationFrom; } set { CheckChanged(data.ApplicationFrom, value); data.ApplicationFrom = value; } } public DateTime ApplicationTo { get { return data.ApplicationTo; } set { CheckChanged(data.ApplicationTo, value); data.ApplicationTo = value; } } //------------------------------------------------------------------- // Flags. //------------------------------------------------------------------- // 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 HasDataItems(); // eg. Slots. public abstract bool HasSessions(); public abstract bool HasSessionsBefore(DateTime target, ref DateTime? earliest, ref DateTime? latest); public abstract bool HasSessionsAfter(DateTime target, ref DateTime? earliest, ref DateTime? latest); public abstract bool HasSessions(DateTime before, DateTime after, ref DateTime? earliest, ref DateTime? latest); public abstract bool HasAdmissions(Spm.AdmissionCancelType admissionCancelType); public abstract bool HasAdmissionsBefore(DateTime target, Spm.AdmissionCancelType admissionCancelType, ref DateTime? earliest, ref DateTime? latest); public abstract bool HasAdmissionsAfter(DateTime target, Spm.AdmissionCancelType admissionCancelType, ref DateTime? earliest, ref DateTime? latest); public abstract bool HasAdmissions(DateTime before, DateTime after, Spm.AdmissionCancelType admissionCancelType, ref DateTime? earliest, ref DateTime? latest); public abstract long GetSessionComplexityCount(DateTime admission, String complexity,SysId admissionExcludeId); //------------------------------------------------------------------- // 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(); //FacilityTemplate. public DateTime ApplicationFrom { get; set; } public DateTime ApplicationTo { get; set; } public DateTime Application { get; set; } public StatusCat StatusCat { get; set; } = StatusCat.Any; } //------------------------------------------------------------------- } //======================================================================= // FacilityTemplate D a t a L i s t //======================================================================= public static class SpmFacilityTemplateList { } //======================================================================= }