using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Sarand.Core.Base; using Sarand.Core.Bus; namespace Sarand.PatientMgr.Core.Bus { //======================================================================= public abstract class SpmProcedure : SacsHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Pos, Id, DepartmentId, OperationId, Description, SpecialityCode, ComplexityCode, Duration, Duration_Training, Units, Units_Training, // Common properties. Notes, Flags, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, } // Data. public new class Data : SacsHierarchyItem.Data { public Data() { //Status = ProcedureStatus; } public SysId DepartmentId { get; set; } // Department. public SysId OperationId { get; set; } // Operation Id. public String OperationCode { get; set; } // Operation code. public String Description { get; set; } public String SpecialityCode { get; set; } public String ComplexityCode { get; set; } public short Duration { get; set; } // Minutes. public short DurationTraining { get; set; } // Minutes. public decimal Units { get; set; } public decimal UnitsTraining { get; set; } internal void PopulateFrom(Data data) { DepartmentId = data.DepartmentId; OperationId = data.OperationId; OperationCode = data.OperationCode; Description = data.Description; SpecialityCode = data.SpecialityCode; ComplexityCode = data.ComplexityCode; Duration = data.Duration; DurationTraining = data.DurationTraining; Units = data.Units; UnitsTraining = data.UnitsTraining; base.PopulateFrom(data); } public Data Clone() { Data data = new Data(); data.PopulateFrom(this); return data; } } // ErrField. public new class ErrField : SacsHierarchyItem.ErrField { public ValidValue DepartmentId { get; set; } = ValidValue.Valid; public ValidValue OperationId { get; set; } = ValidValue.Valid; public ValidValue OperationCode { get; set; } = ValidValue.Valid; public ValidValue Description { get; set; } = ValidValue.Valid; public ValidValue SpecialityCode { get; set; } = ValidValue.Valid; public ValidValue ComplexityCode { get; set; } = ValidValue.Valid; public ValidValue Duration { get; set; } = ValidValue.Valid; public ValidValue DurationTraining { get; set; } = ValidValue.Valid; public ValidValue Units { get; set; } = ValidValue.Valid; public ValidValue UnitsTraining { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); //------------------------------------------------------------------- // Construction. protected SpmProcedure(SysId procedureId, SysId departmentId) : base() { departmentId = DepartmentId; Status = DefaultStatus; base.SetData(data); } //------------------------------------------------------------------- // Status. private static readonly List procedureStatuses = new List() { SaStatus.Current, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List ProcedureStatuses { get { return new List(procedureStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { procedureStatuses.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 DepartmentId { get { return data.DepartmentId; } set { CheckChanged(data.DepartmentId, value); data.DepartmentId = value; } } public SysId OperationId { get { return data.OperationId; } set { CheckChanged(data.OperationId, value); data.OperationId = value; } } public String OperationCode { get { return data.OperationCode; } set { CheckChanged(data.OperationCode, value); data.OperationCode = value; } } public String Description { get { return data.Description; } set { CheckChanged(data.Description, value); data.Description = value; } } public String SpecialityCode { get { return data.SpecialityCode; } set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; } } public String ComplexityCode { get { return data.ComplexityCode; } set { CheckChanged(data.ComplexityCode, value); data.ComplexityCode = value; } } public short Duration { get { return data.Duration; } set { CheckChanged(data.Duration, value); data.Duration = value; } } public short DurationTraining { get { return data.DurationTraining; } set { CheckChanged(data.DurationTraining, value); data.DurationTraining = value; } } public decimal Units { get { return data.Units; } set { CheckChanged(data.Units, value); data.Units = value; } } public decimal UnitsTraining { get { return data.UnitsTraining; } set { CheckChanged(data.UnitsTraining, value); data.UnitsTraining = 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 HasAdmission(); //------------------------------------------------------------------- // 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(); // Procedure. public SysId OperationId { get; set; } public String OperationCode { get; set; } public String Description { get; set; } public String SpecialityCode { get; set; } public String ComplexityCode { get; set; } public StatusCat StatusCat { get; set; } = StatusCat.Any; } //------------------------------------------------------------------- } //======================================================================= // Procedure D a t a L i s t //======================================================================= public static class SpmProcedureList { } //======================================================================= }