From 7edbd07575538febe4dbe6863376ecca139dc582 Mon Sep 17 00:00:00 2001 From: Thomas Savine Date: Mon, 23 Mar 2020 09:12:33 +0000 Subject: [PATCH] TS - Bus objects updated + Service classes and forms added --- SaPatMgrCore/Core/Bus/SpmAdmission.cs | 559 +++++++++++++--- SaPatMgrCore/Core/Bus/SpmAdmissionAction.cs | 74 ++- SaPatMgrCore/Core/Bus/SpmAdmissionData.cs | 38 +- SaPatMgrCore/Core/Bus/SpmAdmissionRole.cs | 65 +- SaPatMgrCore/Core/Bus/SpmDepartment.cs | 94 ++- SaPatMgrCore/Core/Bus/SpmEmployee.cs | 86 ++- SaPatMgrCore/Core/Bus/SpmEmployeeRole.cs | 56 +- SaPatMgrCore/Core/Bus/SpmFacility.cs | 140 ++-- SaPatMgrCore/Core/Bus/SpmFacilitySession.cs | 203 ++++-- SaPatMgrCore/Core/Bus/SpmFacilityTemplate.cs | 242 +++++-- SaPatMgrCore/Core/Bus/SpmInstitution.cs | 20 +- SaPatMgrCore/Core/Bus/SpmOperation.cs | 38 +- SaPatMgrCore/Core/Bus/SpmPatient.cs | 116 +++- SaPatMgrCore/Core/Bus/SpmProcedure.cs | 101 ++- SaPatMgrCore/Core/Bus/SpmTemplateData.cs | 56 +- .../Core/Data/SpmWindowsServiceCrypter.cs | 71 ++ .../Mgr/SpmDepartmentMgr_FacilitySession.cs | 2 +- .../Core/WebService/SpmWebServiceClient.cs | 432 +++++++++++++ .../Core/WebService/SpmWebServiceDfn.cs | 80 +++ .../SpmWebServiceInstanceDefinition.cs | 37 ++ .../Core/WebService/SpmWebServiceItemData.cs | 129 ++++ .../Core/WebService/SpmWebServiceMessage.cs | 46 ++ .../Core/WebService/SpmWebServiceRequest.cs | 219 +++++++ .../Core/WebService/SpmWebServiceResponse.cs | 126 ++++ SaPatMgrCore/SaPatMgrCore.csproj | 2 - SaPatMgrWinForms/SaPatMgrWinForms.csproj | 87 +++ .../Maint/SpmForm_Institution.Designer.cs | 124 ++++ .../Win/Forms/Maint/SpmForm_Institution.cs | 162 +++++ .../Win/Forms/Maint/SpmForm_Institution.resx | 120 ++++ .../Panels/SpmPanel_Employees.Designer.cs | 186 ++++++ .../Win/Forms/Panels/SpmPanel_Employees.cs | 604 ++++++++++++++++++ .../Win/Forms/Panels/SpmPanel_Employees.resx | 120 ++++ .../Panels/SpmPanel_Institutions.Designer.cs | 186 ++++++ .../Win/Forms/Panels/SpmPanel_Institutions.cs | 604 ++++++++++++++++++ .../Forms/Panels/SpmPanel_Institutions.resx | 120 ++++ .../Panels/SpmPanel_Operations.Designer.cs | 186 ++++++ .../Win/Forms/Panels/SpmPanel_Operations.cs | 604 ++++++++++++++++++ .../Win/Forms/Panels/SpmPanel_Operations.resx | 120 ++++ .../Panels/SpmPanel_Patients.Designer.cs | 186 ++++++ .../Win/Forms/Panels/SpmPanel_Patients.cs | 604 ++++++++++++++++++ .../Win/Forms/Panels/SpmPanel_Patients.resx | 120 ++++ .../TabPages/SpmTabPage_Employee.Designer.cs | 23 + .../Win/Forms/TabPages/SpmTabPage_Employee.cs | 194 ++++++ .../SpmTabPage_EmployeeRole.Designer.cs | 23 + .../Forms/TabPages/SpmTabPage_EmployeeRole.cs | 194 ++++++ .../SpmTabPage_Institution.Designer.cs | 23 + .../Forms/TabPages/SpmTabPage_Institution.cs | 194 ++++++ .../TabPages/SpmTabPage_Operation.Designer.cs | 23 + .../Forms/TabPages/SpmTabPage_Operation.cs | 194 ++++++ .../TabPages/SpmTabPage_Patient.Designer.cs | 23 + .../Win/Forms/TabPages/SpmTabPage_Patient.cs | 194 ++++++ .../TabPages/SpmTabPage_Procedure.Designer.cs | 23 + .../Forms/TabPages/SpmTabPage_Procedure.cs | 194 ++++++ .../SpmTabPage_TemplateData.Designer.cs | 23 + .../Forms/TabPages/SpmTabPage_TemplateData.cs | 194 ++++++ 55 files changed, 8312 insertions(+), 372 deletions(-) create mode 100644 SaPatMgrCore/Core/Data/SpmWindowsServiceCrypter.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceClient.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceDfn.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceInstanceDefinition.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceItemData.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceMessage.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceRequest.cs create mode 100644 SaPatMgrCore/Core/WebService/SpmWebServiceResponse.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.resx create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.resx create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.resx create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.resx create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.cs create mode 100644 SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.resx create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.Designer.cs create mode 100644 SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.cs diff --git a/SaPatMgrCore/Core/Bus/SpmAdmission.cs b/SaPatMgrCore/Core/Bus/SpmAdmission.cs index ea3f908..4f91f16 100644 --- a/SaPatMgrCore/Core/Bus/SpmAdmission.cs +++ b/SaPatMgrCore/Core/Bus/SpmAdmission.cs @@ -144,75 +144,432 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId FacilityId { get; set; } = new SysId(); + public SysId FacilityTemplateId { get; set; } = new SysId(); + public DateTime AdmissionFrom { get; set; } = DateTime.MinValue; + public DateTime AdmissionTo { get; set; } = DateTime.MinValue; + public DateTime ToComeIn { get; set; } = DateTime.MinValue; + public bool RequiresSeq () { return RequiresSeq(/*AdmissionType*/); } + public ushort Seq { get; set; } = 0; + public Spm.AdmissionType AdmissionType { get; set; } = Spm.AdmissionType.Unknown; + public Spm.AdmissionOccupancy Occupancy { get; set; } = Spm.AdmissionOccupancy.Unknown; + public DateTime DecisionToReferOn { get; set; } = DateTime.MinValue; + public DateTime ReferredOn { get; set; } = DateTime.MinValue; + public DateTime DecisionToAdmitOn { get; set; } = DateTime.MinValue; + public DateTime BreechOn { get; set; } = DateTime.MinValue; + public SysId PatientId { get; set; } = new SysId(); + public String PatientNo { get; set; } = ""; + public String NhsNumber { get; set; } = ""; + public String Title { get; set; } = ""; + public String Forename { get; set; } = ""; + public String Surname { get; set; } = ""; + public Spm.Gender Gender { get; set; } = Spm.Gender.Unknown; + public DateTime BirthOn { get; set; } = DateTime.MinValue; + public String Age { get; set; } = ""; + public DateTime AgeOn { get; set; } = DateTime.MinValue; + public SysId FacilityIdWard { get; set; } = new SysId(); + public String Ward { get; set; } = ""; + public SysId ProcedureId { get; set; } = new SysId(); + public String SpecialityCode { get; set; } = ""; + public String ProcedureDesc { get; set; } = ""; + public String ComplexityCode { get; set; } = ""; + public String ProcedureIndication { get; set; } = ""; + public String PatientHistory { get; set; } = ""; + public String GestationPeriod { get; set; } = ""; + public String SystemRef { get; set; } = ""; + public ushort DurationExp { get; set; } = 0; + public ushort DurationAct { get; set; } = 0; + public decimal UnitsExp { get; set; } = 0.0m; + public decimal UnitsAct { get; set; } = 0.0m; + public String Anaesthetic { get; set; } = ""; + public String Position { get; set; } = ""; + public String SpecialEquipment { get; set; } = ""; + public Spm.AttendanceType AttendanceType { get; set; } = Spm.AttendanceType.Unknown; + public String AttendanceStatus { get; set; } = ""; + public String ComfortScore { get; set; } = ""; + + // Admission times. + public DateTime TimeCalled { get; set; } = DateTime.MinValue; + public DateTime TimeArrived { get; set; } = DateTime.MinValue; + public DateTime TimeAnaesStart { get; set; } = DateTime.MinValue; + public DateTime TimeProcStart { get; set; } = DateTime.MinValue; + public DateTime TimeProcEnd { get; set; } = DateTime.MinValue; + public DateTime TimeInRecovery { get; set; } = DateTime.MinValue; + public DateTime TimeInformDest { get; set; } = DateTime.MinValue; + public DateTime TimeLeave { get; set; } = DateTime.MinValue; + + // Cancellation. + public static bool IsCancelled (Spm.AdmissionCancelType cancel) { return (cancel != Spm.AdmissionCancelType.None); } + public bool IsCancelled () { return IsCancelled(/*CancelType*/); } + public Spm.AdmissionCancelType CancelType { get; set; } + public DateTime CancelDate { get; set; } = DateTime.MinValue; + public ushort CancelCount { get; set; } = 0; + public String CancelCode { get; set; } = ""; + public String CancelReason { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. public Data() { //Status = AdmissionStatus; } - public SysId FacilityId { get; set; } - public SysId FacilityTemplateId { get; set; } - public DateTime AdmissionFrom { get; set; } - public DateTime AdmissionTo { get; set; } - public DateTime ToComeIn { get; set; } - public bool RequiresSeq() { return RequiresSeq(/*AdmissionType*/); } - public ushort Seq { get; set; } - public Spm.AdmissionType AdmissionType { get; set; } - public Spm.AdmissionOccupancy Occupancy { get; set; } - public DateTime DecisionToReferOn { get; set; } - public DateTime ReferredOn { get; set; } - public DateTime DecisionToAdmitOn { get; set; } - public DateTime BreechOn { get; set; } - public SysId PatientId { get; set; } - public String PatientNo { get; set; } - public String NhsNumber { get; set; } - public String Title { get; set; } - public String Forename { get; set; } - public String Surname { get; set; } - public Spm.Gender Gender { get; set; } - public DateTime BirthOn { get; set; } - public String Age { get; set; } - public DateTime AgeOn { get; set; } - public SysId FacilityIdWard { get; set; } - public String Ward { get; set; } - public SysId ProcedureId { get; set; } - public String SpecialityCode { get; set; } - public String ProcedureDesc { get; set; } - public String ComplexityCode { get; set; } - public String ProcedureIndication { get; set; } - public String PatientHistory { get; set; } - public String GestationPeriod { get; set; } - public String SystemRef { get; set; } - public ushort DurationExp { get; set; } - public ushort DurationAct { get; set; } - public decimal UnitsExp { get; set; } - public decimal UnitsAct { get; set; } - public String Anaesthetic { get; set; } - public String Position { get; set; } - public String SpecialEquipment { get; set; } - public Spm.AttendanceType AttendanceType { get; set; } - public String AttendanceStatus { get; set; } - public String ComfortScore { get; set; } - - // Admission times. - public DateTime TimeCalled { get; set; } - public DateTime TimeArrived { get; set; } - public DateTime TimeAnaesStart { get; set; } - public DateTime TimeProcStart { get; set; } - public DateTime TimeProcEnd { get; set; } - public DateTime TimeInRecovery { get; set; } - public DateTime TimeInformDest { get; set; } - public DateTime TimeLeave { get; set; } + 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 AdmissionFrom + { + get { return data.AdmissionFrom; } + set { CheckChanged(data.AdmissionFrom, value); data.AdmissionFrom = value; } + } + public DateTime AdmissionTo + { + get { return data.AdmissionTo; } + set { CheckChanged(data.AdmissionTo, value); data.AdmissionTo = value; } + } + public DateTime ToComeIn + { + get { return data.ToComeIn; } + set { CheckChanged(data.ToComeIn, value); data.ToComeIn = value; } + } + public static bool RequiresSeq (Spm.AdmissionType admissionType) + { + switch (admissionType) + { + // Ward and clinic admission do not require a sequence. + case Spm.AdmissionType.WardAdmission: + case Spm.AdmissionType.WardReservation: + case Spm.AdmissionType.ClinicBooking: + return false; + } + return true; + } + public ushort Seq + { + get { return data.Seq; } + set { CheckChanged(data.Seq, value); data.Seq = value; } + } + public Spm.AdmissionType AdmissionType + { + get { return data.AdmissionType; } + set { CheckChanged((int)data.AdmissionType, (int)value); data.AdmissionType = value; } + } + public Spm.AdmissionOccupancy Occupancy + { + get { return data.Occupancy; } + set { CheckChanged((int)data.Occupancy, (int)value); data.Occupancy = value; } + } + public bool IsTheatreAdmission () + { + switch (AdmissionType) + { + case Spm.AdmissionType.TheatreDayCase: + case Spm.AdmissionType.TheatreInPatientElective: + case Spm.AdmissionType.TheatreEmergency: + return true; + } + return false; + } + public bool IsClinicAdmission () + { + switch (AdmissionType) + { + case Spm.AdmissionType.ClinicBooking: + return true; + } + return false; + } + public bool IsWardAdmission () + { + switch (AdmissionType) + { + case Spm.AdmissionType.WardAdmission: + case Spm.AdmissionType.WardReservation: + return true; + } + return false; + } + public DateTime DecisionToReferOn + { + get { return data.DecisionToReferOn; } + set { CheckChanged(data.DecisionToReferOn, value); data.DecisionToReferOn = value; } + } + public DateTime ReferredOn + { + get { return data.ReferredOn; } + set { CheckChanged(data.ReferredOn, value); data.ReferredOn = value; } + } + public DateTime DecisionToAdmitOn + { + get { return data.DecisionToAdmitOn; } + set { CheckChanged(data.DecisionToAdmitOn, value); data.DecisionToAdmitOn = value; } + } + public DateTime BreechOn + { + get { return data.BreechOn; } + set { CheckChanged(data.BreechOn, value); data.BreechOn = value; } + } + public SysId PatientId + { + get { return data.PatientId; } + set { CheckChanged(data.PatientId, value); data.PatientId = value; } + } + public String PatientNo + { + get { return data.PatientNo; } + set { CheckChanged(data.PatientNo, value); data.PatientNo = value; } + } + public String NhsNumber + { + get { return data.NhsNumber; } + set { CheckChanged(data.NhsNumber, value); data.NhsNumber = value; } + } + public String Title + { + get { return data.Title; } + set { CheckChanged(data.Title, value); data.Title = value; } + } + public String Forename + { + get { return data.Forename; } + set { CheckChanged(data.Forename, value); data.Forename = value; } + } + public String Surname + { + get { return data.Surname; } + set { CheckChanged(data.Surname, value); data.Surname = value; } + } + public static String GetDisplayName (String surname, String forename, bool upperSurname = true) + { + String name = surname; + if (upperSurname) + name.ToUpper(); + if (!StringUtil.IsEmpty(surname) && !StringUtil.IsEmpty(forename)) + name += ", "; + name += forename; + return name; + } + public String GetDisplayName (bool upperSurname = true) + { + return GetDisplayName(Surname, Forename, upperSurname); + } + public Spm.Gender Gender + { + get { return data.Gender; } + set { CheckChanged((int)data.Gender, (int)value); data.Gender = value; } + } + public DateTime BirthOn + { + get { return data.BirthOn; } + set { CheckChanged(data.BirthOn, value); data.BirthOn = value; } + } + public String Age + { + get { return data.Age; } + set { CheckChanged(data.Age, value); data.Age = value; } + } + public DateTime AgeOn + { + get { return data.AgeOn; } + set { CheckChanged(data.AgeOn, value); data.AgeOn = value; } + } + public String GetPatientAge (DateTime dob, DateTime ageOn) + { + String patientAge = ""; + if (DateUtil.IsValid(dob) && DateUtil.IsValid(ageOn) && dob < ageOn) + { + /*ushort age = Date::CalculateAge(dob, ageOn); + ushort ageMonths = Date::CalculateAgeMonths(dob, ageOn); + if (age >= 2) patientAge = age.ToString(); + else if (ageMonths > 0) patientAge = ageMonths.ToString() + "M";*/ + } + return patientAge; + } + public SysId FacilityIdWard + { + get { return data.FacilityIdWard; } + set { CheckChanged(data.FacilityIdWard, value); data.FacilityIdWard = value; } + } + public String Ward + { + get { return data.Ward; } + set { CheckChanged(data.Ward, value); data.Ward = value; } + } + public SysId ProcedureId + { + get { return data.ProcedureId; } + set { CheckChanged(data.ProcedureId, value); data.ProcedureId = value; } + } + public String SpecialityCode + { + get { return data.SpecialityCode; } + set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; } + } + public String ProcedureDesc + { + get { return data.ProcedureDesc; } + set { CheckChanged(data.ProcedureDesc, value); data.ProcedureDesc = value; } + } + public String ComplexityCode + { + get { return data.ComplexityCode; } + set { CheckChanged(data.ComplexityCode, value); data.ComplexityCode = value; } + } + public String ProcedureIndication + { + get { return data.ProcedureIndication; } + set { CheckChanged(data.ProcedureIndication, value); data.ProcedureIndication = value; } + } + public String PatientHistory + { + get { return data.PatientHistory; } + set { CheckChanged(data.PatientHistory, value); data.PatientHistory = value; } + } + public String GestationPeriod + { + get { return data.GestationPeriod; } + set { CheckChanged(data.GestationPeriod, value); data.GestationPeriod = value; } + } + public String SystemRef + { + get { return data.SystemRef; } + set { CheckChanged(data.SystemRef, value); data.SystemRef = value; } + } + public ushort DurationExp + { + get { return data.DurationExp; } + set { CheckChanged(data.DurationExp, value); data.DurationExp = value; } + } + public ushort DurationAct + { + get { return data.DurationAct; } + set { CheckChanged(data.DurationAct, value); data.DurationAct = value; } + } + public decimal UnitsExp + { + get { return data.UnitsExp; } + set { CheckChanged(data.UnitsExp, value); data.UnitsExp = value; } + } + public decimal UnitsAct + { + get { return data.UnitsAct; } + set { CheckChanged(data.UnitsAct, value); data.UnitsAct = value; } + } + public String Anaesthetic + { + get { return data.Anaesthetic; } + set { CheckChanged(data.Anaesthetic, value); data.Anaesthetic = value; } + } + public String Position + { + get { return data.Position; } + set { CheckChanged(data.Position, value); data.Position = value; } + } + public String SpecialEquipment + { + get { return data.SpecialEquipment; } + set { CheckChanged(data.SpecialEquipment, value); data.SpecialEquipment = value; } + } + public Spm.AttendanceType AttendanceType + { + get { return data.AttendanceType; } + set { CheckChanged((int)data.AttendanceType, (int)value); data.AttendanceType = value; } + } + public String AttendanceStatus + { + get { return data.AttendanceStatus; } + set { CheckChanged(data.AttendanceStatus, value); data.AttendanceStatus = value; } + } + public String ComfortScore + { + get { return data.ComfortScore; } + set { CheckChanged(data.ComfortScore, value); data.ComfortScore = value; } + } + //------------------------------------------------------------------- + // Admission time. + public DateTime TimeCalled + { + get { return data.TimeCalled; } + set { CheckChanged(data.TimeCalled, value); data.TimeCalled = value; } + } + public DateTime TimeArrived + { + get { return data.TimeArrived; } + set { CheckChanged(data.TimeArrived, value); data.TimeArrived = value; } + } + public DateTime TimeAnaesStart + { + get { return data.TimeAnaesStart; } + set { CheckChanged(data.TimeAnaesStart, value); data.TimeAnaesStart = value; } + } + public DateTime TimeProcStart + { + get { return data.TimeProcStart; } + set { CheckChanged(data.TimeProcStart, value); data.TimeProcStart = value; } + } + public DateTime TimeProcEnd + { + get { return data.TimeProcEnd; } + set { CheckChanged(data.TimeProcEnd, value); data.TimeProcEnd = value; } + } + public DateTime TimeInRecovery + { + get { return data.TimeInRecovery; } + set { CheckChanged(data.TimeInRecovery, value); data.TimeInRecovery = value; } + } + public DateTime TimeInformDest + { + get { return data.TimeInformDest; } + set { CheckChanged(data.TimeInformDest, value); data.TimeInformDest = value; } + } + public DateTime TimeLeave + { + get { return data.TimeLeave; } + set { CheckChanged(data.TimeLeave, value); data.TimeLeave = value; } + } + //------------------------------------------------------------------- // Cancellation. - public static bool IsCancelled(Spm.AdmissionCancelType cancel) { return (cancel != Spm.AdmissionCancelType.None); } - public bool IsCancelled() { return IsCancelled(/*CancelType*/); } - public Spm.AdmissionCancelType CancelType { get; set; } - public DateTime CancelDate { get; set; } - public ushort CancelCount { get; set; } - public String CancelCode { get; set; } - public String CancelReason { get; set; } + public Spm.AdmissionCancelType CancelType + { + get { return data.CancelType; } + set { CheckChanged((int)data.CancelType, (int)value); data.CancelType = value; } + } + public DateTime CancelDate + { + get { return data.CancelDate; } + set { CheckChanged(data.CancelDate, value); data.CancelDate = value; } + } + public ushort CancelCount + { + get { return data.CancelCount; } + set { CheckChanged(data.CancelCount, value); data.CancelCount = value; } + } + public String CancelCode + { + get { return data.CancelCode; } + set { CheckChanged(data.CancelCode, value); data.CancelCode = value; } + } + public String CancelReason + { + get { return data.CancelReason; } + set { CheckChanged(data.CancelReason, value); data.CancelReason = value; } + } // Flags. @@ -399,27 +756,27 @@ namespace Sarand.PatientMgr.Core.Bus public SysId FacilityId { get { return data.FacilityId; } - set { CheckChanged(data.FacilityId, value); data.FacilityId = value; } + set { data.FacilityId = value; } } public SysId FacilityTemplateId { get { return data.FacilityTemplateId; } - set { CheckChanged(data.FacilityTemplateId, value); data.FacilityTemplateId = value; } + set { data.FacilityTemplateId = value; } } public DateTime AdmissionFrom { get { return data.AdmissionFrom; } - set { CheckChanged(data.AdmissionFrom, value); data.AdmissionFrom = value; } + set { data.AdmissionFrom = value; } } public DateTime AdmissionTo { get { return data.AdmissionTo; } - set { CheckChanged(data.AdmissionTo, value); data.AdmissionTo = value; } + set { data.AdmissionTo = value; } } public DateTime ToComeIn { get { return data.ToComeIn; } - set { CheckChanged(data.ToComeIn, value); data.ToComeIn = value; } + set { data.ToComeIn = value; } } public static bool RequiresSeq(Spm.AdmissionType admissionType) { @@ -436,17 +793,17 @@ namespace Sarand.PatientMgr.Core.Bus public ushort Seq { get { return data.Seq; } - set { CheckChanged(data.Seq, value); data.Seq = value; } + set { data.Seq = value; } } public Spm.AdmissionType AdmissionType { get { return data.AdmissionType; } - set { CheckChanged((int)data.AdmissionType, (int)value); data.AdmissionType = value; } + set {data.AdmissionType = value; } } public Spm.AdmissionOccupancy Occupancy { get { return data.Occupancy; } - set { CheckChanged((int)data.Occupancy, (int)value); data.Occupancy = value; } + set { data.Occupancy = value; } } public bool IsTheatreAdmission() @@ -482,52 +839,52 @@ namespace Sarand.PatientMgr.Core.Bus public DateTime DecisionToReferOn { get { return data.DecisionToReferOn; } - set { CheckChanged(data.DecisionToReferOn, value); data.DecisionToReferOn = value; } + set { data.DecisionToReferOn = value; } } public DateTime ReferredOn { get { return data.ReferredOn; } - set { CheckChanged(data.ReferredOn, value); data.ReferredOn = value; } + set { data.ReferredOn = value; } } public DateTime DecisionToAdmitOn { get { return data.DecisionToAdmitOn; } - set { CheckChanged(data.DecisionToAdmitOn, value); data.DecisionToAdmitOn = value; } + set { data.DecisionToAdmitOn = value; } } public DateTime BreechOn { get { return data.BreechOn; } - set { CheckChanged(data.BreechOn, value); data.BreechOn = value; } + set { data.BreechOn = value; } } public SysId PatientId { get { return data.PatientId; } - set { CheckChanged(data.PatientId, value); data.PatientId = value; } + set { data.PatientId = value; } } public String PatientNo { get { return data.PatientNo; } - set { CheckChanged(data.PatientNo, value); data.PatientNo = value; } + set { data.PatientNo = value; } } public String NhsNumber { get { return data.NhsNumber; } - set { CheckChanged(data.NhsNumber, value); data.NhsNumber = value; } + set { data.NhsNumber = value; } } public String Title { get { return data.Title; } - set { CheckChanged(data.Title, value); data.Title = value; } + set { data.Title = value; } } public String Forename { get { return data.Forename; } - set { CheckChanged(data.Forename, value); data.Forename = value; } + set { data.Forename = value; } } public String Surname { get { return data.Surname; } - set { CheckChanged(data.Surname, value); data.Surname = value; } + set { data.Surname = value; } } public static String GetDisplayName(String surname, String forename, bool upperSurname = true) { @@ -546,22 +903,22 @@ namespace Sarand.PatientMgr.Core.Bus public Spm.Gender Gender { get { return data.Gender; } - set { CheckChanged((int)data.Gender, (int)value); data.Gender = value; } + set { data.Gender = value; } } public DateTime BirthOn { get { return data.BirthOn; } - set { CheckChanged(data.BirthOn, value); data.BirthOn = value; } + set { data.BirthOn = value; } } public String Age { get { return data.Age; } - set { CheckChanged(data.Age, value); data.Age = value; } + set { data.Age = value; } } public DateTime AgeOn { get { return data.AgeOn; } - set { CheckChanged(data.AgeOn, value); data.AgeOn = value; } + set { data.AgeOn = value; } } public String GetPatientAge(DateTime dob, DateTime ageOn) { @@ -578,87 +935,87 @@ namespace Sarand.PatientMgr.Core.Bus public SysId FacilityIdWard { get { return data.FacilityIdWard; } - set { CheckChanged(data.FacilityIdWard, value); data.FacilityIdWard = value; } + set { data.FacilityIdWard = value; } } public String Ward { get { return data.Ward; } - set { CheckChanged(data.Ward, value); data.Ward = value; } + set { data.Ward = value; } } public SysId ProcedureId { get { return data.ProcedureId; } - set { CheckChanged(data.ProcedureId, value); data.ProcedureId = value; } + set { data.ProcedureId = value; } } public String SpecialityCode { get { return data.SpecialityCode; } - set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; } + set { data.SpecialityCode = value; } } public String ProcedureDesc { get { return data.ProcedureDesc; } - set { CheckChanged(data.ProcedureDesc, value); data.ProcedureDesc = value; } + set { data.ProcedureDesc = value; } } public String ComplexityCode { get { return data.ComplexityCode; } - set { CheckChanged(data.ComplexityCode, value); data.ComplexityCode = value; } + set { data.ComplexityCode = value; } } public String ProcedureIndication { get { return data.ProcedureIndication; } - set { CheckChanged(data.ProcedureIndication, value); data.ProcedureIndication = value; } + set { data.ProcedureIndication = value; } } public String PatientHistory { get { return data.PatientHistory; } - set { CheckChanged(data.PatientHistory, value); data.PatientHistory = value; } + set { data.PatientHistory = value; } } public String GestationPeriod { get { return data.GestationPeriod; } - set { CheckChanged(data.GestationPeriod, value); data.GestationPeriod = value; } + set { data.GestationPeriod = value; } } public String SystemRef { get { return data.SystemRef; } - set { CheckChanged(data.SystemRef, value); data.SystemRef = value; } + set { data.SystemRef = value; } } public ushort DurationExp { get { return data.DurationExp; } - set { CheckChanged(data.DurationExp, value); data.DurationExp = value; } + set { data.DurationExp = value; } } public ushort DurationAct { get { return data.DurationAct; } - set { CheckChanged(data.DurationAct, value); data.DurationAct = value; } + set { data.DurationAct = value; } } public decimal UnitsExp { get { return data.UnitsExp; } - set { CheckChanged(data.UnitsExp, value); data.UnitsExp = value; } + set { data.UnitsExp = value; } } public decimal UnitsAct { get { return data.UnitsAct; } - set { CheckChanged(data.UnitsAct, value); data.UnitsAct = value; } + set { data.UnitsAct = value; } } public String Anaesthetic { get { return data.Anaesthetic; } - set { CheckChanged(data.Anaesthetic, value); data.Anaesthetic = value; } + set { data.Anaesthetic = value; } } public String Position { get { return data.Position; } - set { CheckChanged(data.Position, value); data.Position = value; } + set { data.Position = value; } } public String SpecialEquipment { get { return data.SpecialEquipment; } - set { CheckChanged(data.SpecialEquipment, value); data.SpecialEquipment = value; } + set { data.SpecialEquipment = value; } } public Spm.AttendanceType AttendanceType { @@ -668,12 +1025,12 @@ namespace Sarand.PatientMgr.Core.Bus public String AttendanceStatus { get { return data.AttendanceStatus; } - set { CheckChanged(data.AttendanceStatus, value); data.AttendanceStatus = value; } + set { data.AttendanceStatus = value; } } public String ComfortScore { get { return data.ComfortScore; } - set { CheckChanged(data.ComfortScore, value); data.ComfortScore = value; } + set { data.ComfortScore = value; } } //------------------------------------------------------------------- // Admission time. diff --git a/SaPatMgrCore/Core/Bus/SpmAdmissionAction.cs b/SaPatMgrCore/Core/Bus/SpmAdmissionAction.cs index b5f008c..0e0e3c3 100644 --- a/SaPatMgrCore/Core/Bus/SpmAdmissionAction.cs +++ b/SaPatMgrCore/Core/Bus/SpmAdmissionAction.cs @@ -64,20 +64,64 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId AdmissionId { get; set; } = new SysId(); + public Spm.AdmissionActionType AdmissionActionType { get; set; } = Spm.AdmissionActionType.Unknown; + public DateTime Raised { get; set; } = DateTime.MinValue; + public SysId EmployeeIdRaised { get; set; } = new SysId(); + public DateTime Completed { get; set; } = DateTime.MinValue; + public SysId EmployeeIdCompleted { get; set; } = new SysId(); + public String ActionData { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + 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; } + 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; } + } internal void PopulateFrom(Data data) { AdmissionId = data.AdmissionId; @@ -187,37 +231,37 @@ namespace Sarand.PatientMgr.Core.Bus public SysId AdmissionId { get { return data.AdmissionId; } - set { CheckChanged(data.AdmissionId, value); data.AdmissionId = value; } + set { data.AdmissionId = value; } } public Spm.AdmissionActionType AdmissionActionType { get { return data.AdmissionActionType; } - set { CheckChanged((int)data.AdmissionActionType, (int)value); data.AdmissionActionType = value; } + set { data.AdmissionActionType = value; } } public DateTime Raised { get { return data.Raised; } - set { CheckChanged(data.Raised, value); data.Raised = value; } + set { data.Raised = value; } } public SysId EmployeeIdRaised { get { return data.EmployeeIdRaised; } - set { CheckChanged(data.EmployeeIdRaised, value); data.EmployeeIdRaised = value; } + set { data.EmployeeIdRaised = value; } } public DateTime Completed { get { return data.Completed; } - set { CheckChanged(data.Completed, value); data.Completed = value; } + set { data.Completed = value; } } public SysId EmployeeIdCompleted { get { return data.EmployeeIdCompleted; } - set { CheckChanged(data.EmployeeIdCompleted, value); data.EmployeeIdCompleted = value; } + set { data.EmployeeIdCompleted = value; } } public String ActionData { get { return data.ActionData; } - set { CheckChanged(data.ActionData, value); data.ActionData = value; } + set { data.ActionData = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmAdmissionData.cs b/SaPatMgrCore/Core/Bus/SpmAdmissionData.cs index a743967..5e96835 100644 --- a/SaPatMgrCore/Core/Bus/SpmAdmissionData.cs +++ b/SaPatMgrCore/Core/Bus/SpmAdmissionData.cs @@ -33,16 +33,40 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId AdmissionId { get; set; } = new SysId(); + public Spm.AdmissionDataType AdmissionDataType { get; set; } = Spm.AdmissionDataType.Unknown; + public String AdmissionData { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = AdmissionDataStatus; } - public SysId AdmissionId { get; set; } - public Spm.AdmissionDataType AdmissionDataType { get; set; } - public String AdmissionData { get; set; } + public SysId AdmissionId + { + get { return data.AdmissionId; } + set { CheckChanged(data.AdmissionId, value); data.AdmissionId = value; } + } + public Spm.AdmissionDataType AdmissionDataType + { + get { return data.AdmissionDataType; } + set { CheckChanged((int)data.AdmissionDataType, (int)value); data.AdmissionDataType = value; } + } + public String AdmissionData + { + get { return data.AdmissionData; } + set { CheckChanged(data.AdmissionData, value); data.AdmissionData = value; } + } internal void PopulateFrom(Data data) { @@ -121,17 +145,17 @@ namespace Sarand.PatientMgr.Core.Bus public SysId AdmissionId { get { return data.AdmissionId; } - set { CheckChanged(data.AdmissionId, value); data.AdmissionId = value; } + set { data.AdmissionId = value; } } public Spm.AdmissionDataType AdmissionDataType { get { return data.AdmissionDataType; } - set { CheckChanged((int)data.AdmissionDataType, (int)value); data.AdmissionDataType = value; } + set { data.AdmissionDataType = value; } } public String AdmissionData { get { return data.AdmissionData; } - set { CheckChanged(data.AdmissionData, value); data.AdmissionData = value; } + set { data.AdmissionData = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmAdmissionRole.cs b/SaPatMgrCore/Core/Bus/SpmAdmissionRole.cs index a0616ba..8a3da3e 100644 --- a/SaPatMgrCore/Core/Bus/SpmAdmissionRole.cs +++ b/SaPatMgrCore/Core/Bus/SpmAdmissionRole.cs @@ -35,19 +35,58 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId AdmissionId { get; set; } = new SysId(); + public Spm.EmployeeRole EmployeeRole { get; set; } = Spm.EmployeeRole.Unknown; + public Spm.EmployeeRoleCategory EmployeeRoleCategory { get; set; } = Spm.EmployeeRoleCategory.Unknown; + public ushort Seq { get; set; } = 0; + public SysId EmployeeRoleId { get; set; } = new SysId(); + public String EmployeeCode { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = AdmissionRoleStatus; } - public SysId AdmissionId { get; set; } - public Spm.EmployeeRole EmployeeRole { get; set; } - public Spm.EmployeeRoleCategory EmployeeRoleCategory { get; set; } - public ushort Seq { get; set; } - public SysId EmployeeRoleId { get; set; } - public String EmployeeCode { get; set; } + public SysId AdmissionId + { + get { return data.AdmissionId; } + set { CheckChanged(data.AdmissionId, value); data.AdmissionId = value; } + } + public Spm.EmployeeRole EmployeeRole + { + get { return data.EmployeeRole; } + set { CheckChanged((int)data.EmployeeRole, (int)value); data.EmployeeRole = value; } + } + public Spm.EmployeeRoleCategory EmployeeRoleCategory + { + get { return data.EmployeeRoleCategory; } + set { CheckChanged((int)data.EmployeeRoleCategory, (int)value); data.EmployeeRoleCategory = value; } + } + public ushort Seq + { + get { return data.Seq; } + set { CheckChanged(data.Seq, value); data.Seq = value; } + } + public SysId EmployeeRoleId + { + get { return data.EmployeeRoleId; } + set { CheckChanged(data.EmployeeRoleId, value); data.EmployeeRoleId = value; } + } + public String EmployeeCode + { + get { return data.EmployeeCode; } + set { CheckChanged(data.EmployeeCode, value); data.EmployeeCode = value; } + } internal void PopulateFrom(Data data) { AdmissionId = data.AdmissionId; @@ -132,32 +171,32 @@ namespace Sarand.PatientMgr.Core.Bus public SysId AdmissionId { get { return data.AdmissionId; } - set { CheckChanged(data.AdmissionId, value); data.AdmissionId = value; } + set { data.AdmissionId = value; } } public Spm.EmployeeRole EmployeeRole { get { return data.EmployeeRole; } - set { CheckChanged((int)data.EmployeeRole, (int)value); data.EmployeeRole = value; } + set { data.EmployeeRole = value; } } public Spm.EmployeeRoleCategory EmployeeRoleCategory { get { return data.EmployeeRoleCategory; } - set { CheckChanged((int)data.EmployeeRoleCategory, (int)value); data.EmployeeRoleCategory = value; } + set { data.EmployeeRoleCategory = value; } } public ushort Seq { get { return data.Seq; } - set { CheckChanged(data.Seq, value); data.Seq = value; } + set { data.Seq = value; } } public SysId EmployeeRoleId { get { return data.EmployeeRoleId; } - set { CheckChanged(data.EmployeeRoleId, value); data.EmployeeRoleId = value; } + set { data.EmployeeRoleId = value; } } public String EmployeeCode { get { return data.EmployeeCode; } - set { CheckChanged(data.EmployeeCode, value); data.EmployeeCode = value; } + set { data.EmployeeCode = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmDepartment.cs b/SaPatMgrCore/Core/Bus/SpmDepartment.cs index 1a6ad1a..696caed 100644 --- a/SaPatMgrCore/Core/Bus/SpmDepartment.cs +++ b/SaPatMgrCore/Core/Bus/SpmDepartment.cs @@ -33,13 +33,9 @@ namespace Sarand.PatientMgr.Core.Bus } //------------------------------------------------------------------- - // Data. - public new class Data : SacsHierarchyItem.Data + /// Properties other than common. + public class DataProperties { - public Data () - { - Status = SpmDepartment.DefaultStatus; - } public SysId InstitutionId { get; set; } public String Name { get; set; } public uint FacilityTypes { get; set; } = 0; @@ -58,6 +54,84 @@ namespace Sarand.PatientMgr.Core.Bus } public DateTime ApplicableFrom { get; set; } public DateTime ApplicableTo { get; set; } + } + + //------------------------------------------------------------------- + // Data. + public new class Data : SacsHierarchyItem.Data + { + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () + { + Status = SpmDepartment.DefaultStatus; + } + public SysId InstitutionId + { + get { return data.InstitutionId; } + set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + } + public String Name + { + get { return data.Name; } + set { CheckChanged(data.Name, value); data.Name = value; } + } + // Facility types. + public uint FacilityTypes { get { return data.FacilityTypes; } set { data.FacilityTypes = value; } } + public static int GetFacilityTypeBit (Spm.FacilityType facilityType) + { + // Map facility types to their position in the bit mapped value: + if (facilityType == Spm.FacilityType.Theatre) return 0; + if (facilityType == Spm.FacilityType.Clinic) return 1; + if (facilityType == Spm.FacilityType.Ward) return 2; + if (facilityType == Spm.FacilityType.Apparatus) return 3; + return -1; + } + public static bool HasFacilityType (uint facilityTypes, Spm.FacilityType facilityType) + { + int facilityTypeBit = GetFacilityTypeBit(facilityType); + if (facilityTypeBit >= 0 && facilityTypeBit < 32) + return (facilityTypes & (((uint)1) << facilityTypeBit)) > 0; + return false; + } + public bool HasFacilityType (Spm.FacilityType facilityType) + { + return HasFacilityType(data.FacilityTypes, facilityType); + } + // Allow any facility. + public uint AllowAnyFacilities { get { return data.AllowAnyFacilities; } set { data.AllowAnyFacilities = value; } } + public static bool AllowAnyFacility (uint allowAnyFacilities, Spm.FacilityType facilityType) + { + int facilityTypeBit = GetFacilityTypeBit(facilityType); + if (facilityTypeBit >= 0 && facilityTypeBit < 32) + return (allowAnyFacilities & (((uint)1) << facilityTypeBit)) > 0; + return false; + } + public bool AllowAnyFacility (Spm.FacilityType facilityType) + { + return AllowAnyFacility(data.AllowAnyFacilities, facilityType); + } + // Cancel re-book limit. + public static ushort GetCancelReBookLimit (String cancelReBookLimit, Spm.FacilityType facilityType) + { + if (facilityType == Spm.FacilityType.Theatre) return 28; + return 0; + } + public ushort GetCancelReBookLimit (Spm.FacilityType facilityType) + { + return GetCancelReBookLimit("", facilityType); + } + public DateTime ApplicableFrom + { + get { return data.ApplicableFrom; } + set { CheckChanged(data.ApplicableFrom, value); data.ApplicableFrom = value; } + } + public DateTime ApplicableTo + { + get { return data.ApplicableTo; } + set { CheckChanged(data.ApplicableTo, value); data.ApplicableTo = value; } + } internal void PopulateFrom (Data data) { InstitutionId = data.InstitutionId; @@ -137,12 +211,12 @@ namespace Sarand.PatientMgr.Core.Bus public SysId InstitutionId { get { return data.InstitutionId; } - protected set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + protected set { data.InstitutionId = value; } } public String Name { get { return data.Name; } - set { CheckChanged(data.Name, value); data.Name = value; } + set { data.Name = value; } } // Facility types. public uint FacilityTypes { get { return data.FacilityTypes; } set { data.FacilityTypes = value; } } @@ -192,12 +266,12 @@ namespace Sarand.PatientMgr.Core.Bus public DateTime ApplicableFrom { get { return data.ApplicableFrom; } - set { CheckChanged(data.ApplicableFrom, value); data.ApplicableFrom = value; } + set { data.ApplicableFrom = value; } } public DateTime ApplicableTo { get { return data.ApplicableTo; } - set { CheckChanged(data.ApplicableTo, value); data.ApplicableTo = value; } + set { data.ApplicableTo = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmEmployee.cs b/SaPatMgrCore/Core/Bus/SpmEmployee.cs index 6dd07c7..c67fb70 100644 --- a/SaPatMgrCore/Core/Bus/SpmEmployee.cs +++ b/SaPatMgrCore/Core/Bus/SpmEmployee.cs @@ -35,20 +35,78 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId InstitutionId { get; set; } = new SysId(); + public String EmployeeNo { get; set; } = ""; + public String Code { get; set; } = ""; + public String Initials { get; set; } = ""; + public String Title { get; set; } = ""; + public String Forename { get; set; } = ""; + public String Surname { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. public Data() { //Status = EmployeeStatus; } - public SysId InstitutionId { get; set; } - public String EmployeeNo { get; set; } - public String Code { get; set; } - public String Initials { get; set; } - public String Title { get; set; } - public String Forename { get; set; } - public String Surname { get; set; } + public SysId InstitutionId + { + get { return data.InstitutionId; } + set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + } + public String EmployeeNo + { + get { return data.EmployeeNo; } + set { CheckChanged(data.EmployeeNo, value); data.EmployeeNo = value; } + } + public String Code + { + get { return data.Code; } + set { CheckChanged(data.Code, value); data.Code = value; } + } + public String Initials + { + get { return data.Initials; } + set { CheckChanged(data.Initials, value); data.Initials = value; } + } + public String Title + { + get { return data.Title; } + set { CheckChanged(data.Title, value); data.Title = value; } + } + public String Forename + { + get { return data.Forename; } + set { CheckChanged(data.Forename, value); data.Forename = value; } + } + public String Surname + { + get { return data.Surname; } + set { CheckChanged(data.Surname, value); data.Surname = value; } + } + public static String GetDisplayName (String surname, String forename, bool upperSurname = true) + { + String name = surname; + if (upperSurname) + name.ToUpper(); + if (!StringUtil.IsEmpty(surname) && !StringUtil.IsEmpty(forename)) + name += ", "; + name += forename; + return name; + } + public String GetDisplayName (bool upperSurname = true) + { + return GetDisplayName(Surname, Forename, upperSurname); + } internal void PopulateFrom(Data data) { InstitutionId = data.InstitutionId; @@ -133,37 +191,37 @@ namespace Sarand.PatientMgr.Core.Bus public SysId InstitutionId { get { return data.InstitutionId; } - set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + set { data.InstitutionId = value; } } public String EmployeeNo { get { return data.EmployeeNo; } - set { CheckChanged(data.EmployeeNo, value); data.EmployeeNo = value; } + set { data.EmployeeNo = value; } } public String Code { get { return data.Code; } - set { CheckChanged(data.Code, value); data.Code = value; } + set { data.Code = value; } } public String Initials { get { return data.Initials; } - set { CheckChanged(data.Initials, value); data.Initials = value; } + set { data.Initials = value; } } public String Title { get { return data.Title; } - set { CheckChanged(data.Title, value); data.Title = value; } + set { data.Title = value; } } public String Forename { get { return data.Forename; } - set { CheckChanged(data.Forename, value); data.Forename = value; } + set { data.Forename = value; } } public String Surname { get { return data.Surname; } - set { CheckChanged(data.Surname, value); data.Surname = value; } + set { data.Surname = value; } } public static String GetDisplayName(String surname, String forename, bool upperSurname = true) { diff --git a/SaPatMgrCore/Core/Bus/SpmEmployeeRole.cs b/SaPatMgrCore/Core/Bus/SpmEmployeeRole.cs index 7644e91..efb596f 100644 --- a/SaPatMgrCore/Core/Bus/SpmEmployeeRole.cs +++ b/SaPatMgrCore/Core/Bus/SpmEmployeeRole.cs @@ -34,18 +34,52 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId DepartmentId { get; set; } = new SysId(); + public SysId EmployeeId { get; set; } = new SysId(); + public Spm.EmployeeRole EmployeeRole { get; set; } = Spm.EmployeeRole.Unknown; + public DateTime ApplicationFrom { get; set; } = DateTime.MinValue; + public DateTime ApplicationTo { get; set; } = DateTime.MinValue; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = EmployeeRoleStatus; } - public SysId DepartmentId { get; set; } - public SysId EmployeeId { get; set; } - public Spm.EmployeeRole EmployeeRole { get; set; } - public DateTime ApplicationFrom { get; set; } - public DateTime ApplicationTo { get; set; } + public SysId DepartmentId + { + get { return data.DepartmentId; } + set { CheckChanged(data.DepartmentId, value); data.DepartmentId = value; } + } + public SysId EmployeeId + { + get { return data.EmployeeId; } + set { CheckChanged(data.EmployeeId, value); data.EmployeeId = value; } + } + public Spm.EmployeeRole EmployeeRole + { + get { return data.EmployeeRole; } + set { CheckChanged((int)data.EmployeeRole, (int)value); data.EmployeeRole = 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; } + } internal void PopulateFrom(Data data) { @@ -129,27 +163,27 @@ namespace Sarand.PatientMgr.Core.Bus public SysId DepartmentId { get { return data.DepartmentId; } - set { CheckChanged(data.DepartmentId, value); data.DepartmentId = value; } + set { data.DepartmentId = value; } } public SysId EmployeeId { get { return data.EmployeeId; } - set { CheckChanged(data.EmployeeId, value); data.EmployeeId = value; } + set { data.EmployeeId = value; } } public Spm.EmployeeRole EmployeeRole { get { return data.EmployeeRole; } - set { CheckChanged((int)data.EmployeeRole, (int)value); data.EmployeeRole = value; } + set { data.EmployeeRole = value; } } public DateTime ApplicationFrom { get { return data.ApplicationFrom; } - set { CheckChanged(data.ApplicationFrom, value); data.ApplicationFrom = value; } + set { data.ApplicationFrom = value; } } public DateTime ApplicationTo { get { return data.ApplicationTo; } - set { CheckChanged(data.ApplicationTo, value); data.ApplicationTo = value; } + set { data.ApplicationTo = value; } } diff --git a/SaPatMgrCore/Core/Bus/SpmFacility.cs b/SaPatMgrCore/Core/Bus/SpmFacility.cs index 43583f8..fe47048 100644 --- a/SaPatMgrCore/Core/Bus/SpmFacility.cs +++ b/SaPatMgrCore/Core/Bus/SpmFacility.cs @@ -41,24 +41,88 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId DepartmentId { get; set; } = new SysId(); + public Spm.FacilityType FacilityType { get; set; } = Spm.FacilityType.Unknown; + public String Name { get; set; } = ""; + public String SortCode { get; set; } = ""; + public String Desc { get; set; } = ""; + public Spm.FacilityTemplateMapType TemplateMapType { get; set; } = Spm.FacilityTemplateMapType.Unknown; + public Spm.ScheduleFreezeType ScheduleFreezeType { get; set; } = Spm.ScheduleFreezeType.Unknown; + public DateTime ScheduleFreezeAtTime { get; set; } = DateTime.MinValue; + public String ScheduleFreezeData { get; set; } = ""; + public DateTime ApplicationFrom { get; set; } = DateTime.MinValue; + public DateTime ApplicationTo { get; set; } = DateTime.MinValue; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = FacilityStatus; } - public SysId DepartmentId { get; set; } - public Spm.FacilityType FacilityType { get; set; } - public String Name { get; set; } - public String SortCode { get; set; } - public String Desc { get; set; } - public Spm.FacilityTemplateMapType TemplateMapType { get; set; } - public Spm.ScheduleFreezeType ScheduleFreezeType { get; set; } - public DateTime ScheduleFreezeAtTime { get; set; } - public String ScheduleFreezeData { get; set; } - public DateTime ApplicationFrom { get; set; } - public DateTime ApplicationTo { get; set; } + public SysId DepartmentId + { + get { return data.DepartmentId; } + set { CheckChanged(data.DepartmentId, value); data.DepartmentId = value; } + } + public Spm.FacilityType FacilityType + { + get { return data.FacilityType; } + set { CheckChanged((int)data.FacilityType, (int)value); data.FacilityType = 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 Spm.FacilityTemplateMapType TemplateMapType + { + get { return data.TemplateMapType; } + set { CheckChanged((int)data.TemplateMapType, (int)value); data.TemplateMapType = value; } + } + public Spm.ScheduleFreezeType ScheduleFreezeType + { + get { return data.ScheduleFreezeType; } + set { CheckChanged((int)data.ScheduleFreezeType, (int)value); data.ScheduleFreezeType = value; } + } + public DateTime ScheduleFreezeAtTime + { + get { return data.ScheduleFreezeAtTime; } + set { CheckChanged(data.ScheduleFreezeAtTime, value); data.ScheduleFreezeAtTime = value; } + } + public String ScheduleFreezeData + { + get { return data.ScheduleFreezeData; } + set { CheckChanged(data.ScheduleFreezeData, value); data.ScheduleFreezeData = 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; } + } internal void PopulateFrom(Data data) { DepartmentId = data.DepartmentId; @@ -136,23 +200,23 @@ namespace Sarand.PatientMgr.Core.Bus //------------------------------------------------------------------- // Utilities. public Spm.WardAdmissionMode GetBookingMode() -{ - // Based on 'Booking to Facility' flag etc. - if (FacilityType == Spm.FacilityType.Ward && IsBookingToFacility) - return Spm.WardAdmissionMode.ByWard; - return Spm.WardAdmissionMode.ByResource; -} + { + // Based on 'Booking to Facility' flag etc. + if (FacilityType == Spm.FacilityType.Ward && IsBookingToFacility) + return Spm.WardAdmissionMode.ByWard; + return Spm.WardAdmissionMode.ByResource; + } - public bool IsTemplateRequiredForBooking() -{ - if (GetBookingMode() == Spm.WardAdmissionMode.ByWard) - return false; - return true; -} + public bool IsTemplateRequiredForBooking() + { + if (GetBookingMode() == Spm.WardAdmissionMode.ByWard) + return false; + return true; + } -//------------------------------------------------------------------- -// Properties. -public Data GetData() { return data.Clone(); } + //------------------------------------------------------------------- + // Properties. + public Data GetData() { return data.Clone(); } public void SetData(Data data) { String fn = GetType().Name + ".SetData"; @@ -167,57 +231,57 @@ public Data GetData() { return data.Clone(); } public SysId DepartmentId { get { return data.DepartmentId; } - set { CheckChanged(data.DepartmentId, value); data.DepartmentId = value; } + set { data.DepartmentId = value; } } public Spm.FacilityType FacilityType { get { return data.FacilityType; } - set { CheckChanged((int)data.FacilityType, (int)value); data.FacilityType = value; } + set { data.FacilityType = value; } } public String Name { get { return data.Name; } - set { CheckChanged(data.Name, value); data.Name = value; } + set { data.Name = value; } } public String SortCode { get { return data.SortCode; } - set { CheckChanged(data.SortCode, value); data.SortCode = value; } + set { data.SortCode = value; } } public String Desc { get { return data.Desc; } - set { CheckChanged(data.Desc, value); data.Desc = value; } + set { data.Desc = value; } } public Spm.FacilityTemplateMapType TemplateMapType { get { return data.TemplateMapType; } - set { CheckChanged((int)data.TemplateMapType, (int)value); data.TemplateMapType = value; } + set { data.TemplateMapType = value; } } public Spm.ScheduleFreezeType ScheduleFreezeType { get { return data.ScheduleFreezeType; } - set { CheckChanged((int)data.ScheduleFreezeType, (int)value); data.ScheduleFreezeType = value; } + set { data.ScheduleFreezeType = value; } } public DateTime ScheduleFreezeAtTime { get { return data.ScheduleFreezeAtTime; } - set { CheckChanged(data.ScheduleFreezeAtTime, value); data.ScheduleFreezeAtTime = value; } + set { data.ScheduleFreezeAtTime = value; } } public String ScheduleFreezeData { get { return data.ScheduleFreezeData; } - set { CheckChanged(data.ScheduleFreezeData, value); data.ScheduleFreezeData = value; } + set { data.ScheduleFreezeData = value; } } public DateTime ApplicationFrom { get { return data.ApplicationFrom; } - set { CheckChanged(data.ApplicationFrom, value); data.ApplicationFrom = value; } + set { data.ApplicationFrom = value; } } public DateTime ApplicationTo { get { return data.ApplicationTo; } - set { CheckChanged(data.ApplicationTo, value); data.ApplicationTo = value; } + set { data.ApplicationTo = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmFacilitySession.cs b/SaPatMgrCore/Core/Bus/SpmFacilitySession.cs index 836cee2..c3eb8c6 100644 --- a/SaPatMgrCore/Core/Bus/SpmFacilitySession.cs +++ b/SaPatMgrCore/Core/Bus/SpmFacilitySession.cs @@ -106,35 +106,148 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + 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 { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + 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; } + 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) { @@ -143,7 +256,7 @@ namespace Sarand.PatientMgr.Core.Bus SessionDate = data.SessionDate; TemplateType = data.TemplateType; Name = data.Name; - Desc = data.Desc; + Description = data.Description; SessionCode = data.SessionCode; StartTime = data.StartTime; FinishTime = data.FinishTime; @@ -252,67 +365,67 @@ namespace Sarand.PatientMgr.Core.Bus public SysId FacilityId { get { return data.FacilityId; } - set { CheckChanged(data.FacilityId, value); data.FacilityId = value; } + set { data.FacilityId = value; } } public SysId FacilityTemplateId { get { return data.FacilityTemplateId; } - set { CheckChanged(data.FacilityTemplateId, value); data.FacilityTemplateId = value; } + set { data.FacilityTemplateId = value; } } public DateTime SessionDate { get { return data.SessionDate; } - set { CheckChanged(data.SessionDate, value); data.SessionDate = value; } + set { data.SessionDate = value; } } public Spm.TemplateType TemplateType { get { return data.TemplateType; } - set { CheckChanged((int)data.TemplateType, (int)value); data.TemplateType = value; } + set { data.TemplateType = value; } } public String Name { get { return data.Name; } - set { CheckChanged(data.Name, value); data.Name = value; } + set { data.Name = value; } } public String Description { - get { return data.Desc; } - set { CheckChanged(data.Desc, value); data.Desc = value; } + get { return data.Description; } + set { data.Description = value; } } public String SessionCode { get { return data.SessionCode; } - set { CheckChanged(data.SessionCode, value); data.SessionCode = value; } + set { data.SessionCode = value; } } public DateTime StartTime { get { return data.StartTime; } - set { CheckChanged(data.StartTime, value); data.StartTime = value; } + set { data.StartTime = value; } } public DateTime FinishTime { get { return data.FinishTime; } - set { CheckChanged(data.FinishTime, value); data.FinishTime = value; } + set { data.FinishTime = value; } } public Spm.ResourceCapacityType ResourceCapacityType { get { return data.ResourceCapacityType; } - set { CheckChanged((int)data.ResourceCapacityType, (int)value); data.ResourceCapacityType = value; } + set { data.ResourceCapacityType = value; } } public short CapacityMin { get { return data.CapacityMin; } - set { CheckChanged(data.CapacityMin, value); data.CapacityMin = value; } + set { data.CapacityMin = value; } } public short CapacityMax { get { return data.CapacityMax; } - set { CheckChanged(data.CapacityMax, value); data.CapacityMax = value; } + set { data.CapacityMax = value; } } public decimal UnitsExp { get { return data.UnitsExp; } - set { CheckChanged(data.UnitsExp, value); data.UnitsExp = value; } + set { data.UnitsExp = value; } } public static ushort GetDurationIntervalDefault() { @@ -321,37 +434,37 @@ namespace Sarand.PatientMgr.Core.Bus public short DurationInterval { get { return data.DurationInterval; } - set { CheckChanged(data.DurationInterval, value); data.DurationInterval = value; } + set { data.DurationInterval = value; } } public short DurationMin { get { return data.DurationMin; } - set { CheckChanged(data.DurationMin, value); data.DurationMin = value; } + set { data.DurationMin = value; } } public short DurationMax { get { return data.DurationMax; } - set { CheckChanged(data.DurationMax, value); data.DurationMax = value; } + set { data.DurationMax = value; } } public short DurationBreaks { get { return data.DurationBreaks; } - set { CheckChanged(data.DurationBreaks, value); data.DurationBreaks = value; } + set { data.DurationBreaks = value; } } public SysId ConsultantId { get { return data.ConsultantId; } - set { CheckChanged(data.ConsultantId, value); data.ConsultantId = value; } + set { data.ConsultantId = value; } } public String ConsultantCode { get { return data.ConsultantCode; } - set { CheckChanged(data.ConsultantCode, value); data.ConsultantCode = value; } + set { data.ConsultantCode = value; } } public String SpecialityCode { get { return data.SpecialityCode; } - set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; } + set { data.SpecialityCode = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmFacilityTemplate.cs b/SaPatMgrCore/Core/Bus/SpmFacilityTemplate.cs index 33a9ab6..baa02ba 100644 --- a/SaPatMgrCore/Core/Bus/SpmFacilityTemplate.cs +++ b/SaPatMgrCore/Core/Bus/SpmFacilityTemplate.cs @@ -55,40 +55,180 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId FacilityId { get; set; } = new SysId(); + public Spm.ResourceCategory ResourceCategory { get; set; } = Spm.ResourceCategory.Unknown; + public Spm.TemplateType TemplateType { get; set; } = Spm.TemplateType.Unknown; + 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; } = Spm.ResourceCapacityType.Unknown; + public ushort CapacityMin { get; set; } = 0; + public ushort CapacityMax { get; set; } = 0; + public decimal UnitsExp { get; set; } = 0.0m; + public ushort DurationInterval { get; set; } = 0; + public ushort DurationMin { get; set; } = 0; + public ushort DurationMax { get; set; } = 0; + public ushort DurationBreaks { get; set; } = 0; + // Theatre & Clinic sessions. + public ushort WeekOfMonth { get; set; } = 0; + public ushort DayOfWeek { get; set; } = 0; + public SysId ConsultantId { get; set; } = new SysId(); // Employee role. + public String ConsultantCode { get; set; } = ""; + public String SpecialityCode { get; set; } = ""; + public DateTime StartTime { get; set; } = DateTime.MinValue; + public DateTime FinishTime { get; set; } = DateTime.MinValue; + public DateTime ApplicationFrom { get; set; } = DateTime.MinValue; + public DateTime ApplicationTo { get; set; } = DateTime.MinValue; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + 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; } + 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; 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; } + 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; 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; } + 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; } + } internal void PopulateFrom(Data data) { @@ -214,63 +354,63 @@ namespace Sarand.PatientMgr.Core.Bus public SysId FacilityId { get { return data.FacilityId; } - set { CheckChanged(data.FacilityId, value); data.FacilityId = value; } + set { data.FacilityId = value; } } public Spm.ResourceCategory ResourceCategory { get { return data.ResourceCategory; } - set { CheckChanged((int)data.ResourceCategory, (int)value); data.ResourceCategory = value; } + set { data.ResourceCategory = value; } } public Spm.TemplateType TemplateType { get { return data.TemplateType; } - set { CheckChanged((int)data.TemplateType, (int)value); data.TemplateType = value; } + set { data.TemplateType = value; } } public String Name { get { return data.Name; } - set { CheckChanged(data.Name, value); data.Name = value; } + set { data.Name = value; } } public String SortCode { get { return data.SortCode; } - set { CheckChanged(data.SortCode, value); data.SortCode = value; } + set { data.SortCode = value; } } public String Desc { get { return data.Desc; } - set { CheckChanged(data.Desc, value); data.Desc = value; } + set { data.Desc = value; } } public String SessionCode { get { return data.SessionCode; } - set { CheckChanged(data.SessionCode, value); data.SessionCode = value; } + set { data.SessionCode = value; } } public String Group { get { return data.Group; } - set { CheckChanged(data.Group, value); data.Group = value; } + set { 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; } + set { data.ResourceCapacityType = value; } } public ushort CapacityMin { get { return data.CapacityMin; } - set { CheckChanged(data.CapacityMin, value); data.CapacityMin = value; } + set { data.CapacityMin = value; } } public ushort CapacityMax { get { return data.CapacityMax; } - set { CheckChanged(data.CapacityMax, value); data.CapacityMax = value; } + set { data.CapacityMax = value; } } public decimal UnitsExp { get { return data.UnitsExp; } - set { CheckChanged(data.UnitsExp, value); data.UnitsExp = value; } + set { data.UnitsExp = value; } } public static ushort GetDurationIntervalDefault() { @@ -279,68 +419,68 @@ namespace Sarand.PatientMgr.Core.Bus public ushort DurationInterval { get { return data.DurationInterval; } - set { CheckChanged(data.DurationInterval, value); data.DurationInterval = value; } + set { data.DurationInterval = value; } } public ushort DurationMin { get { return data.DurationMin; } - set { CheckChanged(data.DurationMin, value); data.DurationMin = value; } + set { data.DurationMin = value; } } public ushort DurationMax { get { return data.DurationMax; } - set { CheckChanged(data.DurationMax, value); data.DurationMax = value; } + set { data.DurationMax = value; } } public ushort DurationBreaks { get { return data.DurationBreaks; } - set { CheckChanged(data.DurationBreaks, value); data.DurationBreaks = value; } + set { data.DurationBreaks = value; } } // Theatre & Clinic sessions. public ushort WeekOfMonth { get { return data.WeekOfMonth; } - set { CheckChanged(data.WeekOfMonth, value); data.WeekOfMonth = value; } + set { data.WeekOfMonth = value; } } public ushort DayOfWeek { get { return data.DayOfWeek; } - set { CheckChanged(data.DayOfWeek, value); data.DayOfWeek = value; } + set { data.DayOfWeek = value; } } public SysId ConsultantId { get { return data.ConsultantId; } - set { CheckChanged(data.ConsultantId, value); data.ConsultantId = value; } + set { data.ConsultantId = value; } } public String ConsultantCode { get { return data.ConsultantCode; } - set { CheckChanged(data.ConsultantCode, value); data.ConsultantCode = value; } + set { data.ConsultantCode = value; } } public String SpecialityCode { get { return data.SpecialityCode; } - set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; } + set { data.SpecialityCode = value; } } public DateTime StartTime { get { return data.StartTime; } - set { CheckChanged(data.StartTime, value); data.StartTime = value; } + set { data.StartTime = value; } } public DateTime FinishTime { get { return data.FinishTime; } - set { CheckChanged(data.FinishTime, value); data.FinishTime = value; } + set { data.FinishTime = value; } } public DateTime ApplicationFrom { get { return data.ApplicationFrom; } - set { CheckChanged(data.ApplicationFrom, value); data.ApplicationFrom = value; } + set { data.ApplicationFrom = value; } } public DateTime ApplicationTo { get { return data.ApplicationTo; } - set { CheckChanged(data.ApplicationTo, value); data.ApplicationTo = value; } + set { data.ApplicationTo = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmInstitution.cs b/SaPatMgrCore/Core/Bus/SpmInstitution.cs index fa03ce2..e17449a 100644 --- a/SaPatMgrCore/Core/Bus/SpmInstitution.cs +++ b/SaPatMgrCore/Core/Bus/SpmInstitution.cs @@ -29,14 +29,28 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public String Name { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = InstitutionStatus; } - public String Name { get; set; } + public String Name + { + get { return data.Name; } + set { CheckChanged(data.Name, value); data.Name = value; } + } internal void PopulateFrom(Data data) { @@ -109,7 +123,7 @@ namespace Sarand.PatientMgr.Core.Bus public String Name { get { return data.Name; } - set { CheckChanged(data.Name, value); data.Name = value; } + set { data.Name = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmOperation.cs b/SaPatMgrCore/Core/Bus/SpmOperation.cs index 4bdae67..973c077 100644 --- a/SaPatMgrCore/Core/Bus/SpmOperation.cs +++ b/SaPatMgrCore/Core/Bus/SpmOperation.cs @@ -31,16 +31,40 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId InstitutionId { get; set; } = new SysId(); + public String Code { get; set; } = ""; + public String Description { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = OperationStatus; } - public SysId InstitutionId { get; set; } - public String Code { get; set; } - public String Description { get; set; } + public SysId InstitutionId + { + get { return data.InstitutionId; } + set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + } + public String Code + { + get { return data.Code; } + set { CheckChanged(data.Code, value); data.Code = value; } + } + public String Description + { + get { return data.Description; } + set { CheckChanged(data.Description, value); data.Description = value; } + } internal void PopulateFrom(Data data) { @@ -118,17 +142,17 @@ namespace Sarand.PatientMgr.Core.Bus public SysId InstitutionId { get { return data.InstitutionId; } - set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + set { data.InstitutionId = value; } } public String Code { get { return data.Code; } - set { CheckChanged(data.Code, value); data.Code = value; } + set { data.Code = value; } } public String Description { get { return data.Description; } - set { CheckChanged(data.Description, value); data.Description = value; } + set { data.Description = value; } } diff --git a/SaPatMgrCore/Core/Bus/SpmPatient.cs b/SaPatMgrCore/Core/Bus/SpmPatient.cs index 9142aa7..56e6e3d 100644 --- a/SaPatMgrCore/Core/Bus/SpmPatient.cs +++ b/SaPatMgrCore/Core/Bus/SpmPatient.cs @@ -38,23 +38,96 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId InstitutionId { get; set; } = new SysId(); + public String PatientNo { get; set; } = ""; + public String NhsNumber { get; set; } = ""; + public String Title { get; set; } = ""; + public String Forename { get; set; } = ""; + public String Surname { get; set; } = ""; + public Spm.Gender Gender { get; set; } = Spm.Gender.Unknown; + public DateTime BirthOn { get; set; } = DateTime.MinValue; + public String Age { get; set; } = ""; + public DateTime AgeOn { get; set; } = DateTime.MinValue; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = PatientStatus; } - public SysId InstitutionId { get; set; } - public String PatientNo { get; set; } - public String NhsNumber { get; set; } - public String Title { get; set; } - public String Forename { get; set; } - public String Surname { get; set; } - public Spm.Gender Gender { get; set; } - public DateTime BirthOn { get; set; } - public String Age { get; set; } - public DateTime AgeOn { get; set; } + public SysId InstitutionId + { + get { return data.InstitutionId; } + set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + } + public String PatientNo + { + get { return data.PatientNo; } + set { CheckChanged(data.PatientNo, value); data.PatientNo = value; } + } + public String NhsNumber + { + get { return data.NhsNumber; } + set { CheckChanged(data.NhsNumber, value); data.NhsNumber = value; } + } + public String Title + { + get { return data.Title; } + set { CheckChanged(data.Title, value); data.Title = value; } + } + public String Forename + { + get { return data.Forename; } + set { CheckChanged(data.Forename, value); data.Forename = value; } + } + public String Surname + { + get { return data.Surname; } + set { CheckChanged(data.Surname, value); data.Surname = value; } + } + public static String GetDisplayName (String surname, String forename, bool upperSurname = true) + { + String name = surname; + if (upperSurname) + name.ToUpper(); + if (!StringUtil.IsEmpty(surname) && !StringUtil.IsEmpty(forename)) + name += ", "; + name += forename; + return name; + } + public String GetDisplayName (bool upperSurname = true) + { + return GetDisplayName(Surname, Forename, upperSurname); + } + public Spm.Gender Gender + { + get { return data.Gender; } + set { CheckChanged((int)data.Gender, (int)value); data.Gender = value; } + } + public DateTime BirthOn + { + get { return data.BirthOn; } + set { CheckChanged(data.BirthOn, value); data.BirthOn = value; } + } + public String Age + { + get { return data.Age; } + set { CheckChanged(data.Age, value); data.Age = value; } + } + public DateTime AgeOn + { + get { return data.AgeOn; } + set { CheckChanged(data.AgeOn, value); data.AgeOn = value; } + } internal void PopulateFrom(Data data) { @@ -146,32 +219,32 @@ namespace Sarand.PatientMgr.Core.Bus public SysId InstitutionId { get { return data.InstitutionId; } - set { CheckChanged(data.InstitutionId, value); data.InstitutionId = value; } + set { data.InstitutionId = value; } } public String PatientNo { get { return data.PatientNo; } - set { CheckChanged(data.PatientNo, value); data.PatientNo = value; } + set { data.PatientNo = value; } } public String NhsNumber { get { return data.NhsNumber; } - set { CheckChanged(data.NhsNumber, value); data.NhsNumber = value; } + set { data.NhsNumber = value; } } public String Title { get { return data.Title; } - set { CheckChanged(data.Title, value); data.Title = value; } + set { data.Title = value; } } public String Forename { get { return data.Forename; } - set { CheckChanged(data.Forename, value); data.Forename = value; } + set { data.Forename = value; } } public String Surname { get { return data.Surname; } - set { CheckChanged(data.Surname, value); data.Surname = value; } + set { data.Surname = value; } } public static String GetDisplayName(String surname, String forename, bool upperSurname = true) { @@ -190,25 +263,24 @@ namespace Sarand.PatientMgr.Core.Bus public Spm.Gender Gender { get { return data.Gender; } - set { CheckChanged((int)data.Gender, (int)value); data.Gender = value; } + set { data.Gender = value; } } public DateTime BirthOn { get { return data.BirthOn; } - set { CheckChanged(data.BirthOn, value); data.BirthOn = value; } + set { data.BirthOn = value; } } public String Age { get { return data.Age; } - set { CheckChanged(data.Age, value); data.Age = value; } + set { data.Age = value; } } public DateTime AgeOn { get { return data.AgeOn; } - set { CheckChanged(data.AgeOn, value); data.AgeOn = value; } + set { data.AgeOn = value; } } - //------------------------------------------------------------------- // Flags. diff --git a/SaPatMgrCore/Core/Bus/SpmProcedure.cs b/SaPatMgrCore/Core/Bus/SpmProcedure.cs index b931243..1c11539 100644 --- a/SaPatMgrCore/Core/Bus/SpmProcedure.cs +++ b/SaPatMgrCore/Core/Bus/SpmProcedure.cs @@ -36,23 +36,82 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId DepartmentId { get; set; } = new SysId(); // Department. + public SysId OperationId { get; set; } = new SysId(); // 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; } = 0; // Minutes. + public short DurationTraining { get; set; } = 0; // Minutes. + public decimal Units { get; set; } = 0.0m; + public decimal UnitsTraining { get; set; } = 0.0m; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + 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; } + 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; } + } internal void PopulateFrom(Data data) { @@ -144,52 +203,52 @@ namespace Sarand.PatientMgr.Core.Bus public SysId DepartmentId { get { return data.DepartmentId; } - set { CheckChanged(data.DepartmentId, value); data.DepartmentId = value; } + set { data.DepartmentId = value; } } public SysId OperationId { get { return data.OperationId; } - set { CheckChanged(data.OperationId, value); data.OperationId = value; } + set { data.OperationId = value; } } public String OperationCode { get { return data.OperationCode; } - set { CheckChanged(data.OperationCode, value); data.OperationCode = value; } + set { data.OperationCode = value; } } public String Description { get { return data.Description; } - set { CheckChanged(data.Description, value); data.Description = value; } + set { data.Description = value; } } public String SpecialityCode { get { return data.SpecialityCode; } - set { CheckChanged(data.SpecialityCode, value); data.SpecialityCode = value; } + set { data.SpecialityCode = value; } } public String ComplexityCode { get { return data.ComplexityCode; } - set { CheckChanged(data.ComplexityCode, value); data.ComplexityCode = value; } + set { data.ComplexityCode = value; } } public short Duration { get { return data.Duration; } - set { CheckChanged(data.Duration, value); data.Duration = value; } + set { data.Duration = value; } } public short DurationTraining { get { return data.DurationTraining; } - set { CheckChanged(data.DurationTraining, value); data.DurationTraining = value; } + set { data.DurationTraining = value; } } public decimal Units { get { return data.Units; } - set { CheckChanged(data.Units, value); data.Units = value; } + set { data.Units = value; } } public decimal UnitsTraining { get { return data.UnitsTraining; } - set { CheckChanged(data.UnitsTraining, value); data.UnitsTraining = value; } + set { data.UnitsTraining = value; } } //------------------------------------------------------------------- diff --git a/SaPatMgrCore/Core/Bus/SpmTemplateData.cs b/SaPatMgrCore/Core/Bus/SpmTemplateData.cs index 74069d2..3eb99e0 100644 --- a/SaPatMgrCore/Core/Bus/SpmTemplateData.cs +++ b/SaPatMgrCore/Core/Bus/SpmTemplateData.cs @@ -32,18 +32,52 @@ namespace Sarand.PatientMgr.Core.Bus UpdateOn_Date, } + //------------------------------------------------------------------- + /// Properties other than common. + public class DataProperties + { + public SysId FacilityTemplateId { get; set; } = new SysId(); + public Spm.TemplateDataType TemplateDataType { get; set; } = Spm.TemplateDataType.Unknown; + public short Seq { get; set; } = 0; + public String Identifier { get; set; } = ""; + public String Value { get; set; } = ""; + } + // Data. public new class Data : SacsHierarchyItem.Data { - public Data() + // Data members. + private readonly DataProperties data = new DataProperties(); + // Construction. + public Data () { //Status = TemplateDataStatus; } - public SysId FacilityTemplateId { get; set; } - public Spm.TemplateDataType TemplateDataType { get; set; } - public short Seq { get; set; } - public String Identifier { get; set; } - public String Value { get; set; } + public SysId FacilityTemplateId + { + get { return data.FacilityTemplateId; } + set { CheckChanged(data.FacilityTemplateId, value); data.FacilityTemplateId = value; } + } + public Spm.TemplateDataType TemplateDataType + { + get { return data.TemplateDataType; } + set { CheckChanged((int)data.TemplateDataType, (int)value); data.TemplateDataType = value; } + } + public short Seq + { + get { return data.Seq; } + set { CheckChanged(data.Seq, value); data.Seq = value; } + } + public String Identifier + { + get { return data.Identifier; } + set { CheckChanged(data.Identifier, value); data.Identifier = value; } + } + public String Value + { + get { return data.Value; } + set { CheckChanged(data.Value, value); data.Value = value; } + } internal void PopulateFrom(Data data) { FacilityTemplateId = FacilityTemplateId; @@ -123,27 +157,27 @@ namespace Sarand.PatientMgr.Core.Bus public SysId FacilityTemplateId { get { return data.FacilityTemplateId; } - set { CheckChanged(data.FacilityTemplateId, value); data.FacilityTemplateId = value; } + set { data.FacilityTemplateId = value; } } public Spm.TemplateDataType TemplateDataType { get { return data.TemplateDataType; } - set { CheckChanged((int)data.TemplateDataType, (int)value); data.TemplateDataType = value; } + set { data.TemplateDataType = value; } } public short Seq { get { return data.Seq; } - set { CheckChanged(data.Seq, value); data.Seq = value; } + set { data.Seq = value; } } public String Identifier { get { return data.Identifier; } - set { CheckChanged(data.Identifier, value); data.Identifier = value; } + set { data.Identifier = value; } } public String Value { get { return data.Value; } - set { CheckChanged(data.Value, value); data.Value = value; } + set { data.Value = value; } } diff --git a/SaPatMgrCore/Core/Data/SpmWindowsServiceCrypter.cs b/SaPatMgrCore/Core/Data/SpmWindowsServiceCrypter.cs new file mode 100644 index 0000000..48e6ad7 --- /dev/null +++ b/SaPatMgrCore/Core/Data/SpmWindowsServiceCrypter.cs @@ -0,0 +1,71 @@ +using Sarand.Core.Base; +using Sarand.Core.Data; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.PatientMgr.Core.Data +{ + //======================================================================= + public static class SpmWindowsServiceCrypter + { + //------------------------------------------------------------------- + // Data members. + /// + /// Encryption is shared between Windows Service app and mobile + /// + private static readonly String requestDataKey = "~{PatientMgr}#[WindowsService]&/DataCryption/*|RequestData|"; + private static readonly String responseDataKey = "{Sarand}+(PatientMgr)%\\WindowsService/=@:Response:"; + + //------------------------------------------------------------------- + // R e q u e s t D a t a + //------------------------------------------------------------------- + /// Encrypt request data + public static String EncryptRequestData (String value) + { + try + { + return SacsAesIvCrypter.Encrypt(value, requestDataKey); + } + catch (Exception exc) { Logger.Debug("EncryptRequestData " + exc.GetType().Name + ": " + exc.Message); } + return value; + } + /// Decrypt request data + public static String DecryptRequestData (String value) + { + try + { + return SacsAesIvCrypter.Decrypt(value, requestDataKey); + } + catch (Exception exc) { Logger.Debug("DecryptRequestData " + exc.GetType().Name + ": " + exc.Message); } + return value; + } + + //------------------------------------------------------------------- + // R e s p o n s e D a t a + //------------------------------------------------------------------- + /// Encrypt response data + public static String EncryptResponseData (String value) + { + try + { + return SacsAesIvCrypter.Encrypt(value, responseDataKey); + } + catch (Exception exc) { Logger.Debug("EncryptResponseData " + exc.GetType().Name + ": " + exc.Message); } + return value; + } + /// Decrypt response data + public static String DecryptResponseData (String value) + { + try + { + return SacsAesIvCrypter.Decrypt(value, responseDataKey); + } + catch (Exception exc) { Logger.Debug("DecryptResponseData " + exc.GetType().Name + ": " + exc.Message); } + return value; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/Core/Mgr/SpmDepartmentMgr_FacilitySession.cs b/SaPatMgrCore/Core/Mgr/SpmDepartmentMgr_FacilitySession.cs index 187467c..72249b5 100644 --- a/SaPatMgrCore/Core/Mgr/SpmDepartmentMgr_FacilitySession.cs +++ b/SaPatMgrCore/Core/Mgr/SpmDepartmentMgr_FacilitySession.cs @@ -65,7 +65,7 @@ namespace Sarand.PatientMgr.Core.Mgr errField.Name = SacsHierarchyItem.ValidValue.Invalid; return false; } - if (errField.Desc != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Desc, "Description", (long)SpmDbDfn.GetColTextLen(SpmDbDfn.ColumnIdx.SwmFacilitySession_Description), true)) + if (errField.Desc != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Description, "Description", (long)SpmDbDfn.GetColTextLen(SpmDbDfn.ColumnIdx.SwmFacilitySession_Description), true)) { errField.Desc = SacsHierarchyItem.ValidValue.Invalid; return false; diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceClient.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceClient.cs new file mode 100644 index 0000000..8b758d4 --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceClient.cs @@ -0,0 +1,432 @@ +using Sarand.Core.App; +using Sarand.Core.Base; +using Sarand.Core.Data; +using Sarand.Core.Net; +using Sarand.Core.Tasks; +using Sarand.Core.Xml; +using Sarand.PatientMgr.Core.Data; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + // Patient Web Service Client + // Make requests to PatientMgr Web Service hosted by Windows Service application. + //----------------------------------------------------------------------- + // Threading: + // Ref. https://blog.xamarin.com/getting-started-with-async-await/ + //======================================================================= + public class SpmWebServiceClient + { + //------------------------------------------------------------------- + // Definitions. + public class RequestData : SacsTaskData + { + /// + /// Web Service Request data. + /// Cancellation token can optionally be supplied if available higher up the chain. + /// + public RequestData (SpmWebServiceInstanceDefinition instanceDefinition, CancellationToken? cancellationToken = null) : + base(cancellationToken) + { + InstanceDefinition = instanceDefinition; + } + public SpmWebServiceInstanceDefinition InstanceDefinition { get; } + public String Data { get; set; } = ""; + } + + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public SpmWebServiceClient () + { + } + + //------------------------------------------------------------------- + // Properties. + + //------------------------------------------------------------------- + // I s A l i v e + //------------------------------------------------------------------- + public async Task RequestIsAlive (SpmWebServiceInstanceDefinition instanceDefinition) + { + String fn = GetType().Name + ".IsAlive"; + try + { + RequestData requestData = new RequestData(instanceDefinition); + SpmWebServiceResponse serviceResponse = await DoWebServiceRequest(requestData); + if (serviceResponse.ResponseData.EqualsCI(SpmWebServiceDfn.IsAliveResponse)) + return true; + } + catch (Exception exc) { Logger.Warn(fn + " " + exc.GetLogMessage()); } + return false; + } + + //------------------------------------------------------------------- + // I t e m C o u n t R e q u e s t + //------------------------------------------------------------------- + public class ItemCountResponseData : SpmWebServiceResponse + { + public ItemCountResponseData (SpmWebServiceResponse serviceResponse) : base(serviceResponse) { } + public long ItemCount { get; set; } + } + public async Task RequestItemCount (SpmWebServiceRequest.Config configRequest, Dictionary filters, SacsTaskData taskData) + { + String fn = GetType().Name + ".GetItemCount"; + if (SacsSystem.DebugMode && configRequest.RequestType != SpmWebServiceRequest.RequestType.Count) Debugger.Break(); + + // Service Request. + SpmWebServiceRequest serviceRequestData = new SpmWebServiceRequest(configRequest); + serviceRequestData.Filters.AddRange(filters); + + // Configure Web Service and make Request. + RequestData requestData = new RequestData(configRequest.Context.InstanceDefinition, taskData.CancellationToken) { Debug = taskData.Debug }; + requestData.Data = serviceRequestData.GenerateRequestData(); + SpmWebServiceResponse serviceResponse = await DoWebServiceRequest(requestData); + ItemCountResponseData responseData = new ItemCountResponseData(serviceResponse); + bool itemCountFound = false; + + // Interpret response. + if (serviceResponse.ResponseElement != null && !taskData.IsCancellationRequested) + { + foreach (XElement responseChildElement in serviceResponse.ResponseElement.Elements()) + { + if (responseChildElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Data)) + { + foreach (XElement dataElement in responseChildElement.Elements()) + { + if (dataElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Count)) + { + itemCountFound = true; + responseData.ItemCount = StringUtil.ToLong(dataElement.Value); + break; + } + if (taskData.IsCancellationRequested) break; + } + } + if (itemCountFound || taskData.IsCancellationRequested) break; + } + } + if (!itemCountFound) responseData.ErrorStateMessage = "Incomplete item count"; + if (taskData.IsCancellationRequested) responseData.TaskCancelled = true; + return responseData; + } + + //------------------------------------------------------------------- + // Q u e r y L i s t R e q u e s t + //------------------------------------------------------------------- + public class QueryListResponseData : SpmWebServiceResponse + { + public QueryListResponseData (SpmWebServiceResponse serviceResponse) : base(serviceResponse) { } + public List Items { get; } = new List(); + public int Count { get; set; } + public int Total { get; set; } + public uint PageNo { get; set; } + public ushort PageLength { get; set; } + } + public async Task RequestQueryList (SpmWebServiceRequest.Config configRequest, Dictionary filters, List columns, List sortColumns, SacsTaskData taskData) + { + String fn = GetType().Name + ".GetItemList"; + if (SacsSystem.DebugMode && configRequest.RequestType != SpmWebServiceRequest.RequestType.QueryList) Debugger.Break(); + + // Service Request. + SpmWebServiceRequest serviceRequestData = new SpmWebServiceRequest(configRequest); + serviceRequestData.Filters.AddRange(filters); + serviceRequestData.Columns.AddRange(columns); + if (sortColumns != null) serviceRequestData.SortColumns.AddRange(sortColumns); + + // Configure Web Service and make Request. + RequestData requestData = new RequestData(configRequest.Context.InstanceDefinition, taskData.CancellationToken) { Debug = taskData.Debug }; + requestData.Data = serviceRequestData.GenerateRequestData(); + SpmWebServiceResponse serviceResponse = await DoWebServiceRequest(requestData); + QueryListResponseData responseData = new QueryListResponseData(serviceResponse); + //if (SacsSystem.DebugMode && responseData.ResponseElement != null) Logger.Debug(fn + " Response:\n\n" + responseData.ResponseElement.FormatXml() + "\n"); + + // Interpret response. + if (serviceResponse.ResponseElement != null && !taskData.IsCancellationRequested) + { + foreach (XElement responseChildElement in serviceResponse.ResponseElement.Elements()) + { + if (responseChildElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Data)) + { + foreach (XElement dataElement in responseChildElement.Elements()) + { + if (dataElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.List)) + { + // Paging info. + // + responseData.Count = StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Count)); + responseData.Total = StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Total)); + responseData.PageNo = (uint)StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.PageNo)); + responseData.PageLength = (ushort)StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.PageLength)); + // Extract items. + foreach (XElement listElement in dataElement.Elements()) + { + taskData.ThrowIfCancellationRequested(); + if (listElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Item)) + { + SpmWebServiceItemData itemData = new SpmWebServiceItemData(""); + List fields = SacsCsvHandler.ParseCsvRecord(listElement.Value); + for (int fieldIdx = 0; fieldIdx < fields.Count && fieldIdx < columns.Count; fieldIdx++) + { + String column = columns[fieldIdx]; + String field = fields[fieldIdx]; + itemData.AddValue(column, field); + } + responseData.Items.Add(itemData); + } + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) responseData.TaskCancelled = true; + return responseData; + } + + //------------------------------------------------------------------- + // I t e m L i s t R e q u e s t + //------------------------------------------------------------------- + public class ItemListResponseData : SpmWebServiceResponse + { + public ItemListResponseData (SpmWebServiceResponse serviceResponse) : base(serviceResponse) { } + public List Items { get; } = new List(); + public int Count { get; set; } + public int Total { get; set; } + public uint PageNo { get; set; } + public ushort PageLength { get; set; } + } + public async Task RequestItemList (SpmWebServiceRequest.Config configRequest, Dictionary filters, List sortColumns, SacsTaskData taskData) + { + String fn = GetType().Name + ".GetItemList"; + if (SacsSystem.DebugMode && configRequest.RequestType != SpmWebServiceRequest.RequestType.ItemList) Debugger.Break(); + + // Service Request. + SpmWebServiceRequest serviceRequestData = new SpmWebServiceRequest(configRequest); + serviceRequestData.Filters.AddRange(filters); + if (sortColumns != null) serviceRequestData.SortColumns.AddRange(sortColumns); + + // Configure Web Service and make Request. + RequestData requestData = new RequestData(configRequest.Context.InstanceDefinition, taskData.CancellationToken) { Debug = taskData.Debug }; + requestData.Data = serviceRequestData.GenerateRequestData(); + SpmWebServiceResponse serviceResponse = await DoWebServiceRequest(requestData); + ItemListResponseData responseData = new ItemListResponseData(serviceResponse); + //if (SacsSystem.DebugMode && responseData.ResponseElement != null) Logger.Debug(fn + " Response:\n\n" + responseData.ResponseElement.FormatXml() + "\n"); + + // Interpret response. + if (serviceResponse.ResponseElement != null && !taskData.IsCancellationRequested) + { + foreach (XElement responseChildElement in serviceResponse.ResponseElement.Elements()) + { + if (responseChildElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Data)) + { + foreach (XElement dataElement in responseChildElement.Elements()) + { + if (dataElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.List)) + { + // Paging info. + // + responseData.Count = StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Count)); + responseData.Total = StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Total)); + responseData.PageNo = (uint)StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.PageNo)); + responseData.PageLength = (ushort)StringUtil.ToInt(dataElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.PageLength)); + // Extract items. + foreach (XElement listElement in dataElement.Elements()) + { + taskData.ThrowIfCancellationRequested(); + if (listElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Item)) + responseData.Items.Add(ExtractItemData(listElement, taskData)); + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) responseData.TaskCancelled = true; + return responseData; + } + + //------------------------------------------------------------------- + // I t e m D a t a R e q u e s t + //------------------------------------------------------------------- + public class ItemDataResponseData : SpmWebServiceResponse + { + public ItemDataResponseData (SpmWebServiceResponse serviceResponse) : base(serviceResponse) { } + public XElement DataElement => (ResponseElement?.GetFirstChildElement(SpmWebServiceDfn.ElementName.Data) ?? null); + public XElement ItemElement => (DataElement?.GetFirstChildElement(SpmWebServiceDfn.ElementName.Item) ?? null); + public SpmWebServiceItemData Item { get; set; } + } + public async Task RequestItemData (SpmWebServiceRequest.Config configRequest, Dictionary filters, SacsTaskData taskData) + { + String fn = GetType().Name + ".GetItemData"; + if (SacsSystem.DebugMode && configRequest.RequestType != SpmWebServiceRequest.RequestType.Item) Debugger.Break(); + + // Service Request. + SpmWebServiceRequest serviceRequestData = new SpmWebServiceRequest(configRequest); + serviceRequestData.Filters.AddRange(filters); + + // Configure Web Service and make Request. + RequestData requestData = new RequestData(configRequest.Context.InstanceDefinition, taskData.CancellationToken) { Debug = taskData.Debug }; + requestData.Data = serviceRequestData.GenerateRequestData(); + SpmWebServiceResponse serviceResponse = await DoWebServiceRequest(requestData); + ItemDataResponseData responseData = new ItemDataResponseData(serviceResponse); + //if (SacsSystem.DebugMode && responseData.ResponseElement != null) Logger.Debug("Response:\n\n" + responseData.ResponseElement.FormatXml()+"\n"); + + // Extract item properties. + if (serviceResponse.ResponseElement != null && !taskData.IsCancellationRequested) + { + foreach (XElement responseChildElement in serviceResponse.ResponseElement.Elements()) + { + requestData.ThrowIfCancellationRequested(); + if (responseChildElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Data)) + { + foreach (XElement dataElement in responseChildElement.Elements()) + { + requestData.ThrowIfCancellationRequested(); + if (dataElement.Name.LocalName.EqualsCI(SpmWebServiceDfn.ElementName.Item)) + responseData.Item = ExtractItemData(dataElement, taskData); + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) responseData.TaskCancelled = true; + return responseData; + } + + //------------------------------------------------------------------- + // E x t r a c t I t e m + //------------------------------------------------------------------- + private SpmWebServiceItemData ExtractItemData (XElement itemElement, SacsTaskData taskData) + { + SpmWebServiceItemData itemData = new SpmWebServiceItemData(itemElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.ItemType)); + foreach (XElement itemDataElement in itemElement.Elements()) + { + if (!itemDataElement.HasElements) + { + // No child elements - treat as item property. + itemData.AddValue(itemDataElement.Name.LocalName, itemDataElement.Value); + } + else if (itemDataElement.Name.LocalName.Length > 4 && itemDataElement.Name.LocalName.EndsWithCI("List")) + { + // Data elements has children and is a list of child items. + String childItemType = itemDataElement.Name.LocalName; + if (!itemData.ChildItems.ContainsKey(childItemType)) + itemData.ChildItems[childItemType] = new List(); + foreach (XElement childItemElement in itemDataElement.Elements()) + { + itemData.ChildItems[childItemType].Add(ExtractItemData(childItemElement, taskData)); + if (taskData.IsCancellationRequested) break; + } + } + if (taskData.IsCancellationRequested) break; + } + return itemData; + } + + //------------------------------------------------------------------- + // S t o r e I t e m R e q u e s t + //------------------------------------------------------------------- + public class StoreItemResponseData : SpmWebServiceResponse + { + public StoreItemResponseData (SpmWebServiceResponse serviceResponse) : base(serviceResponse) { } + public XElement DataElement => (ResponseElement?.GetFirstChildElement("Item") ?? null); + } + public async Task StoreItem (SpmWebServiceRequest.Config configRequest, XElement itemElement, SacsTaskData taskData) + { + String fn = GetType().Name + ".StoreItem"; + if (SacsSystem.DebugMode && configRequest.RequestType != SpmWebServiceRequest.RequestType.Store) Debugger.Break(); + + // Service Request. + SpmWebServiceRequest serviceRequestData = new SpmWebServiceRequest(configRequest); + serviceRequestData.ItemElement = itemElement; + + // Configure Web Service and make Request. + RequestData requestData = new RequestData(configRequest.Context.InstanceDefinition, taskData.CancellationToken) { Debug = taskData.Debug }; + requestData.Data = serviceRequestData.GenerateRequestData(); + SpmWebServiceResponse serviceResponse = await DoWebServiceRequest(requestData); + + // Return result. + return new StoreItemResponseData(serviceResponse); + } + + //------------------------------------------------------------------- + // W e b S e r v i c e R e q u e s t + //------------------------------------------------------------------- + /// + /// Execute the web service request. + /// Request data is encrypted and response data is decrypted automatically. + /// + public async Task DoWebServiceRequest (RequestData requestData) + { + String fn = GetType().Name + ".DoWebServiceRequest"; + SpmWebServiceResponse serviceResponse = null; + // Throw canceled exception if task has been cancelled - invoke at regular intervals. + requestData.ThrowIfCancellationRequested(); + + // Log request. + if (SacsSystem.DebugMode) Logger.Debug(fn + " Request URL:" + requestData.InstanceDefinition.URL); + if (requestData.Debug) + { + if (requestData.Data.Length < 512) + Logger.Debug(fn + " Request:\n\t" + requestData.Data); + else Logger.Debug(fn + " Request length:" + requestData.Data.Length); + } + + // Configure the request. + SacsHttpRequestData httpRequestData = new SacsHttpRequestData(requestData.CancellationToken) + { + Url = requestData.InstanceDefinition.URL, + TimeoutSecs = 1, + PostData = SpmWindowsServiceCrypter.EncryptRequestData(requestData.Data) + }; + + // Make the request. + DateTime started = DateTime.Now; + requestData.InstanceDefinition.LastRequestAt = started; + SacsHttpResponseData httpResponseData = await SacsHttpClient.DoRequest(httpRequestData); + + // Construct the response. + SpmWebServiceResponse.Config serviceResponseConfig = new SpmWebServiceResponse.Config() + { + RequestStarted = started, + RequestCompleted = DateTime.Now, + HttpResponseData = httpResponseData + }; + serviceResponse = new SpmWebServiceResponse(serviceResponseConfig); + + // Note if request was successful. + if (httpResponseData.Success) + requestData.InstanceDefinition.LastSuccessfulRequestAt = serviceResponseConfig.RequestCompleted; + + // Log response. + if (requestData.Debug) + { + if (serviceResponse.ResponseData.Length < 1024) + Logger.Debug(fn + " Response: " + serviceResponse.ResponseData); + else Logger.Debug(fn + " Response size: " + serviceResponse.ResponseData.Length); + } + return serviceResponse; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceDfn.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceDfn.cs new file mode 100644 index 0000000..b5eb715 --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceDfn.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + public static class SpmWebServiceDfn + { + //------------------------------------------------------------------- + // Web Service XML element names. + public class ElementNameData + { + // Common. + public String Data { get; } = "Data"; + public String List { get; } = "List"; + public String Item { get; } = "Item"; + public String Filter { get; } = "Filter"; + public String Property { get; } = "Property"; + public String Columns { get; } = "Columns"; + public String SortColumns { get; } = "SortColumns"; + public String SortColumn { get; } = "SortColumn"; + // Request. + public String Config { get; } = "Config"; + public String Context { get; } = "Context"; + public String Site { get; } = "Site"; + public String Host { get; } = "Host"; + public String User { get; } = "User"; + public String Email { get; } = "Email"; + public String AffiliateIdOrganisation { get; } = "AffiliateIdOrganisation"; + public String Debug { get; } = "Debug"; + // Response. + public String SpmResponse { get; } = "SpmResponse"; + public String Status { get; } = "Status"; + public String Messages { get; } = "Messages"; + public String Message { get; } = "Message"; + public String Count { get; } = "Count"; + // Item. + public String Id { get; } = "Id"; + public String Code { get; } = "Code"; + public String Notes { get; } = "Notes"; + public String Flags { get; } = "Flags"; + public String CreatedOn { get; } = "CreatedOn"; + public String UpdatedOn { get; } = "UpdatedOn"; + } + public static ElementNameData ElementName { get; } = new ElementNameData(); + + //------------------------------------------------------------------- + // Web Service XML attribute names. + public class AttributeNameData + { + // Common. + public String ItemType { get; } = "ItemType"; + public String Name { get; } = "Name"; + public String Value { get; } = "Value"; + public String Code { get; } = "Code"; + public String Debug { get; } = "Debug"; + // Messages. + public String Context { get; } = "Context"; + public String Level { get; } = "Level"; + // Item list. + public String Total { get; } = "Total"; + public String Count { get; } = "Count"; + public String PageNo { get; } = "PageNo"; + public String PageLength { get; } = "PageLength"; + } + public static AttributeNameData AttributeName { get; } = new AttributeNameData(); + + //------------------------------------------------------------------- + // Properties. + public static String IsAliveResponse { get; } = "Hello"; + public static String StatusSuccess { get; } = "OK"; + public static String StatusFatal { get; } = "Fatal"; + public static String StatusError { get; } = "Error"; + public static String StatusWarning { get; } = "Warning"; + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceInstanceDefinition.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceInstanceDefinition.cs new file mode 100644 index 0000000..5e60769 --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceInstanceDefinition.cs @@ -0,0 +1,37 @@ +using Sarand.Core.Base; +using Sarand.PatientMgr.Core.App; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + public class SpmWebServiceInstanceDefinition + { + //------------------------------------------------------------------- + // Definitions. + + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public SpmWebServiceInstanceDefinition (String caption, String url) + { + Caption = caption; + URL = url; + } + + //------------------------------------------------------------------- + // Properties. + public String Caption { get; } + public String URL { get; } + public DateTime LastRequestAt { get; set; } + public DateTime LastSuccessfulRequestAt { get; set; } + public bool Valid { get { return (!StringUtil.IsEmpty(URL)); } } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceItemData.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceItemData.cs new file mode 100644 index 0000000..281b6b0 --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceItemData.cs @@ -0,0 +1,129 @@ +using Sarand.Core.Base; +using Sarand.Core.Bus; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + public class SpmWebServiceItemData + { + //------------------------------------------------------------------- + // Data members. + private readonly Dictionary values = new Dictionary(); + + //------------------------------------------------------------------- + // Construction. + public SpmWebServiceItemData (String itemType) + { + ItemType = itemType; + } + // Copy construction. + public SpmWebServiceItemData (SpmWebServiceItemData itemData) + { + values.AddRange(itemData.values); + } + + //------------------------------------------------------------------- + // Properties. + public String ItemType { get; } + /// + /// Child items. + /// Dictionary key identifies type of item. + /// + public Dictionary> ChildItems { get; } = new Dictionary>(); + + //------------------------------------------------------------------- + // Population. + public void AddValue (String name, String value) + { + values[name] = value; + } + + //------------------------------------------------------------------- + // Value exists. + public bool HasValue (T name) + { + return HasValue(name.ToString()); + } + public bool HasValue (string name) + { + return values.ContainsKey(name); + } + + //------------------------------------------------------------------- + // String value. + public String GetValue (T name) + { + return GetValue(name.ToString()); + } + public String GetValue (string name) + { + return values.GetValue(name, ""); + } + + //------------------------------------------------------------------- + // SysId value. + public SysId GetIdValue (T name) + { + return GetIdValue(name.ToString()); + } + public SysId GetIdValue (string name) + { + return new SysId(StringUtil.ToInt(GetValue(name))); + } + + //------------------------------------------------------------------- + // Bool value. + public bool GetBoolValue (T name) + { + return GetBoolValue(name.ToString()); + } + public bool GetBoolValue (string name) + { + return StringUtil.ToBool(GetValue(name)); + } + // Int value. + public int GetIntValue (T name) + { + return GetIntValue(name.ToString()); + } + public int GetIntValue (string name) + { + return StringUtil.ToInt(GetValue(name)); + } + // Decimal value. + public decimal GetDecimalValue (T name) + { + return GetDecimalValue(name.ToString()); + } + public decimal GetDecimalValue (string name) + { + return StringUtil.ToDecimal(GetValue(name)); + } + + //------------------------------------------------------------------- + // Date value. + public DateTime GetDateValue (T name) + { + return GetDateValue(name.ToString()); + } + public DateTime GetDateValue (string name) + { + return DateUtil.ParseXmlDate(GetValue(name)); + } + // DateTime value. + public DateTime GetDateTimeValue (T name) + { + return GetDateTimeValue(name.ToString()); + } + public DateTime GetDateTimeValue (string name) + { + return DateUtil.ParseXmlDateTime(GetValue(name)); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceMessage.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceMessage.cs new file mode 100644 index 0000000..7257a70 --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceMessage.cs @@ -0,0 +1,46 @@ +using Sarand.Core.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + public class SpmWebServiceMessage + { + //------------------------------------------------------------------- + // Construction. + public SpmWebServiceMessage (String context, String code, String message, SaMessageLevel level = SaMessageLevel.Info) + { + Level = level; + Context = context; + Code = code; + Message = message; + } + + //------------------------------------------------------------------- + // Properties. + public SaMessageLevel Level { get; } + public string Context { get; } + public string Code { get; } + public string Message { get; } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmWebServiceMessageList + { + public static bool HasMessagesOfLevel (this IEnumerable messages, SaMessageLevel level) + { + return messages.Any(msg => msg.Level == level); + } + public static List GetMessagesOfLevel (this IEnumerable messages, SaMessageLevel level) + { + return messages.Where(msg => msg.Level == level).ToList(); + } + } + + //======================================================================= +} diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceRequest.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceRequest.cs new file mode 100644 index 0000000..ac1d27d --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceRequest.cs @@ -0,0 +1,219 @@ +using Sarand.Core.Base; +using Sarand.Core.Xml; +using Sarand.PatientMgr.Core.App; +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Linq; +using Sarand.Core.Bus; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + public class SpmWebServiceRequest + { + //------------------------------------------------------------------- + // Definitions. + public enum RequestType + { + Unknown, + IsAlive, + /// Item count + Count, + /// Query list - specific columns, compressed (csv etc) response data + QueryList, + /// Item list - full xml for each item with optional associated items. + ItemList, + /// Single Item with optional associated items. + Item, + /// Validate item properties without update. + Validate, + /// Validate properties and store (insert/update) item. + Store, + /// Delete item. + Delete, + /// List - as per Query List + [Obsolete("Deprecated. Use QueryList instead.", true)] + List, + /// Single Item with optional associated items. + [Obsolete("Deprecated. Use Item instead.", true)] + Data, + } + public enum DataType + { + Unknown, + // Security. + UserProfile, + // Reference data. + CodeType, + Code, + // Admission. + Admission, + AdmissionAction, + AdmissionData, + AdmissionRole, + // Department. + Department, + EmployeeRole, + Facility, + FacilitySession, + FacilityTemplate, + Procedure, + TemplateData, + // Institution. + Employee, + Institution, + Operation, + Patient + } + + //------------------------------------------------------------------- + /// + /// Sort column identified by column name with ascending flag. + /// + public class SortColumnData + { + public SortColumnData (String columnName, bool ascending) + { + ColumnName = columnName; + Ascending = ascending; + } + public String ColumnName { get; } + public bool Ascending { get; } + } + + //------------------------------------------------------------------- + // Configuration. + public class Config + { + public bool SoapEnvelope { get; set; } + public String SoapPrefix { get; set; } + public DataType DataType { get; set; } + public RequestType RequestType { get; set; } + public class ContextProperties + { + public SpmWebServiceInstanceDefinition InstanceDefinition { get; set; } + public String Url { get; set; } + public String User { get; set; } + public String Email { get; set; } + public SysId AffiliateIdOrganisation { get; set; } + public bool Commit { get; set; } + public bool Debug { get; set; } + } + public ContextProperties Context { get; } = new ContextProperties(); + } + + //------------------------------------------------------------------- + // Data members. + private readonly Config config; + + //------------------------------------------------------------------- + // Construction. + public SpmWebServiceRequest (Config config) + { + this.config = config; + } + + //------------------------------------------------------------------- + // Properties. + public Dictionary Filters { get; } = new Dictionary(); + public List Columns { get; } = new List(); + public List SortColumns { get; } = new List(); + public XElement ItemElement { get; set; } + + //------------------------------------------------------------------- + // D a t a G e n e r a t i o n + //------------------------------------------------------------------- + public String GetRequestName () + { + if (config.RequestType == RequestType.IsAlive) return ""; + String requestName = ""; + if (config.DataType > 0) + requestName += config.DataType.ToString(); + if (config.RequestType > 0) + requestName += config.RequestType.ToString(); + return requestName + "Request"; + } + public String GenerateRequestData (bool formatted = false) + { + if (config.RequestType == RequestType.IsAlive) return ""; + + // Request document. + XDocument requestDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); + // Request root. + XElement requestElement = null; + if (config.SoapEnvelope) + { + XElement envelopeElement = null; + XElement headerElement = null; + XElement bodyElement = null; + if (!StringUtil.IsEmpty(config.SoapPrefix)) + { + XNamespace soapNamespace = SacsSoapUtils.GetSoapNamespace(SoapNamespaceType.Soap_1_1); + envelopeElement = requestDoc.AppendElement(soapNamespace, SacsSoapUtils.GetElementName(SoapElementType.Envelope)); + envelopeElement.SetAttributeValue(XNamespace.Xmlns + config.SoapPrefix, soapNamespace); + headerElement = envelopeElement.AppendElement(soapNamespace, SacsSoapUtils.GetElementName(SoapElementType.Header)); + bodyElement = envelopeElement.AppendElement(soapNamespace, SacsSoapUtils.GetElementName(SoapElementType.Body)); + } + else + { + // No namespace. + envelopeElement = requestDoc.AppendElement(SacsSoapUtils.GetElementName(SoapElementType.Envelope)); + headerElement = envelopeElement.AppendElement(SacsSoapUtils.GetElementName(SoapElementType.Header)); + bodyElement = envelopeElement.AppendElement(SacsSoapUtils.GetElementName(SoapElementType.Body)); + } + requestElement = bodyElement.AppendElement(GetRequestName()); + } + else + { + // Otherwise add the request directly to the document. + requestElement = requestDoc.AppendElement(GetRequestName()); + } + + // Config. + XElement configElement = requestElement.AppendElement("Config"); + + // Context. + XElement contextElement = configElement.AppendElement("Context"); + if (!StringUtil.IsEmpty(config.Context.User)) contextElement.AppendElement("User", config.Context.User); + if (!StringUtil.IsEmpty(config.Context.Email)) contextElement.AppendElement("Email", config.Context.Email); + if (SysId.IsValid(config.Context.AffiliateIdOrganisation)) contextElement.AppendElement("AffiliateIdOrganisation", SysId.ToString(config.Context.AffiliateIdOrganisation)); + if (config.Context.Commit) contextElement.AppendElement("Commit", "1"); + if (config.Context.Debug) contextElement.AppendElement("Debug", "1"); + + // Filter. + if (Filters.Count > 0) + { + XElement filterElement = configElement.AppendElement("Filter"); + foreach (String name in Filters.Keys) + filterElement.AppendElement(name, Filters[name]); + } + + // Columns. + if (Columns.Count > 0) + { + XElement columnsElement = configElement.AppendElement("Columns", Columns.Concat(",", "", "")); + } + + // Sort columns. + if (SortColumns.Count > 0) + { + XElement sortColumnsElement = configElement.AppendElement("SortColumns", SortColumns.Concat(",", "", "")); + } + + // Item. + if (ItemElement != null) + { + XElement dataElement = requestElement.AppendElement("Data"); + dataElement.AppendElement(ItemElement); + } + + if (formatted) + return requestDoc.FormatXml(); + return requestDoc.GetXml(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/Core/WebService/SpmWebServiceResponse.cs b/SaPatMgrCore/Core/WebService/SpmWebServiceResponse.cs new file mode 100644 index 0000000..0a9a75d --- /dev/null +++ b/SaPatMgrCore/Core/WebService/SpmWebServiceResponse.cs @@ -0,0 +1,126 @@ +using Sarand.Core.App; +using Sarand.Core.Base; +using Sarand.Core.Net; +using Sarand.Core.Xml; +using Sarand.PatientMgr.Core.Data; +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Linq; + +namespace Sarand.PatientMgr.Core.WebService +{ + //======================================================================= + public class SpmWebServiceResponse + { + //------------------------------------------------------------------- + // Definitions. + + //------------------------------------------------------------------- + // Configuration. + public class Config + { + public DateTime RequestStarted { get; set; } = DateTime.Now; + public DateTime RequestCompleted { get; set; } + public SacsHttpResponseData HttpResponseData { get; set; } + } + + //------------------------------------------------------------------- + // Data members. + protected readonly Config config; + + //------------------------------------------------------------------- + // Construction. + public SpmWebServiceResponse (Config config) + { + this.config = config; + ResponseData = SpmWindowsServiceCrypter.DecryptResponseData(config.HttpResponseData.Data); + + try + { + // Identify the response element in the xml data. + ResponseDoc = XDocument.Parse(ResponseData, LoadOptions.None); + XElement rootElement = ResponseDoc.Root; + if (rootElement.Name.LocalName.EndsWithCI("Response")) + ResponseElement = rootElement; + else if (rootElement.Name.LocalName.EqualsCI(SacsSoapUtils.GetElementName(SoapElementType.Envelope))) + { + SoapEnvelope = true; + SoapPrefix = rootElement.GetNamespacePrefix(); + foreach (XElement soapElement in rootElement.Elements()) + { + if (soapElement.Name.LocalName.EqualsCI(SacsSoapUtils.GetElementName(SoapElementType.Body))) + { + foreach (XElement bodyElement in soapElement.Elements()) + { + if (bodyElement.Name.LocalName.EndsWithCI("Response")) + { + ResponseElement = bodyElement; + } + } + } + } + } + if (ResponseElement != null) + { + // Extract status code. + XElement statusElement = ResponseElement.GetFirstChildElement(SpmWebServiceDfn.ElementName.Status); + if (statusElement != null) + { + StatusCode = statusElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Code); + // Extract messages. + XElement messagesElement = statusElement.GetFirstChildElement(SpmWebServiceDfn.ElementName.Messages); + if (messagesElement != null) + { + foreach (XElement messageElement in messagesElement.GetChildElements(SpmWebServiceDfn.ElementName.Message)) + { + String context = messageElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Context); + String code = messageElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Code); + SaMessageLevel level = SacsSystem.GetMessageLevelFromCode(messageElement.GetAttributeValue(SpmWebServiceDfn.AttributeName.Level)); + SpmWebServiceMessage message = new SpmWebServiceMessage(context, code, messageElement.Value, level); + Messages.Add(message); + } + } + } + } + } + catch (Exception) { } + } + public SpmWebServiceResponse (SpmWebServiceResponse serviceResponse) + { + // Copied from another service reponse - don't re-intrepert properties. + this.config = serviceResponse.config; + // Structure. + SoapEnvelope = serviceResponse.SoapEnvelope; + SoapPrefix = serviceResponse.SoapPrefix; + // Response. + ResponseData = serviceResponse.ResponseData; + ResponseDoc = serviceResponse.ResponseDoc; + ResponseElement = serviceResponse.ResponseElement; + // Status. + StatusCode = serviceResponse.StatusCode; + Messages = serviceResponse.Messages; + } + + //------------------------------------------------------------------- + // Properties. + public DateTime RequestStarted { get { return config.RequestStarted; } } + public DateTime RequestCompleted { get { return config.RequestCompleted; } } + public SacsHttpResponseData HttpResponseData { get { return config.HttpResponseData; } } + // Structure. + public bool SoapEnvelope { get; } + public String SoapPrefix { get; } = ""; + // Response. + public String ResponseData { get; } + public XDocument ResponseDoc { get; } + public XElement ResponseElement { get; } + // Status. + public bool TaskCancelled { get; set; } + public String StatusCode { get; } = ""; + public List Messages { get; } = new List(); + public String ErrorStateMessage { get; set; } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrCore/SaPatMgrCore.csproj b/SaPatMgrCore/SaPatMgrCore.csproj index 6a0780c..6df9fe0 100644 --- a/SaPatMgrCore/SaPatMgrCore.csproj +++ b/SaPatMgrCore/SaPatMgrCore.csproj @@ -23,9 +23,7 @@ - - diff --git a/SaPatMgrWinForms/SaPatMgrWinForms.csproj b/SaPatMgrWinForms/SaPatMgrWinForms.csproj index bd1125c..c46c88e 100644 --- a/SaPatMgrWinForms/SaPatMgrWinForms.csproj +++ b/SaPatMgrWinForms/SaPatMgrWinForms.csproj @@ -285,6 +285,12 @@ SpmPanel.cs + + Form + + + SpmForm_Institution.cs + Form @@ -387,6 +393,30 @@ SpmForm_Department.cs + + UserControl + + + SpmPanel_Patients.cs + + + UserControl + + + SpmPanel_Operations.cs + + + UserControl + + + SpmPanel_Institutions.cs + + + UserControl + + + SpmPanel_Employees.cs + UserControl @@ -435,6 +465,48 @@ SpmPanel_UpdateStamp.cs + + Component + + + SpmTabPage_EmployeeRole.cs + + + Component + + + SpmTabPage_TemplateData.cs + + + Component + + + SpmTabPage_Operation.cs + + + Component + + + SpmTabPage_Patient.cs + + + Component + + + SpmTabPage_Procedure.cs + + + Component + + + SpmTabPage_Institution.cs + + + Component + + + SpmTabPage_Employee.cs + Component @@ -551,6 +623,9 @@ SpmItemListFilter_Admission.cs + + SpmForm_Institution.cs + SpmForm_Admission.cs @@ -596,6 +671,18 @@ SpmForm_Department.cs + + SpmPanel_Patients.cs + + + SpmPanel_Operations.cs + + + SpmPanel_Institutions.cs + + + SpmPanel_Employees.cs + SpmPanel_Departments.cs diff --git a/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.Designer.cs b/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.Designer.cs new file mode 100644 index 0000000..feccc69 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.Designer.cs @@ -0,0 +1,124 @@ +namespace Sarand.PatientMgr.Win.Forms.Maint +{ + partial class SpmForm_Institution + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonOk = new Sarand.Win.Forms.Controls.SacsButton(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.buttonCancel = new Sarand.Win.Forms.Controls.SacsButton(); + this.groupBoxProperties = new Sarand.Win.Forms.Controls.SacsGroupBox(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(411, 441); + this.buttonOk.Margin = new System.Windows.Forms.Padding(4); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 28); + this.buttonOk.TabIndex = 6; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(600, 197); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(600, 68); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tabControl + // + this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl.Controls.Add(this.tabPage1); + this.tabControl.Controls.Add(this.tabPage2); + this.tabControl.Location = new System.Drawing.Point(12, 208); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(608, 226); + this.tabControl.TabIndex = 5; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(519, 441); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(4); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 28); + this.buttonCancel.TabIndex = 7; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // groupBoxProperties + // + this.groupBoxProperties.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxProperties.BorderColour = System.Drawing.Color.Gray; + this.groupBoxProperties.Location = new System.Drawing.Point(12, 12); + this.groupBoxProperties.Name = "groupBoxProperties"; + this.groupBoxProperties.Size = new System.Drawing.Size(608, 190); + this.groupBoxProperties.TabIndex = 4; + this.groupBoxProperties.TabStop = false; + this.groupBoxProperties.Text = "Properties"; + // + // SpmForm_Institution + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(632, 482); + this.ControlBox = false; + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.groupBoxProperties); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(650, 500); + this.Name = "SpmForm_Institution"; + this.ShowIcon = false; + this.Text = "Update Institution"; + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Sarand.Win.Forms.Controls.SacsButton buttonOk; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabControl tabControl; + private Sarand.Win.Forms.Controls.SacsButton buttonCancel; + private Sarand.Win.Forms.Controls.SacsGroupBox groupBoxProperties; + } +} \ No newline at end of file diff --git a/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.cs b/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.cs new file mode 100644 index 0000000..fe302d5 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.cs @@ -0,0 +1,162 @@ +using Sarand.PatientMgr.Core.App; +using Sarand.PatientMgr.Core.Bus; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.Win.Forms.Utils; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Sarand.PatientMgr.Win.Forms.Maint +{ + //======================================================================= + public partial class SpmForm_Institution : SpmForm_Item + { + //------------------------------------------------------------------- + // Configuration. + public new class Config : SpmForm_Item.Config + { + public SpmInstitution InstitutionToUpdate { internal get; set; } = null; + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + + //------------------------------------------------------------------- + // Construction. + public SpmForm_Institution() : this(new Config()) { } + public SpmForm_Institution(Config config) : base(config) + { + this.config = config; + if (SpmGlobals.System != null) + { + } + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + [Browsable(false)] + protected override String DefaultMessageTitle { get { return "Institution"; } } + + //------------------------------------------------------------------- + // S h o w D i a l o g + //------------------------------------------------------------------- + public new DialogResult ShowDialog() + { + return base.ShowDialog(); + } + // Validate configuration to ensure that form can be opened correctly. + private bool ValidateConfiguration() + { + return true; + } + + //------------------------------------------------------------------- + // I n i t i a l i s a t i o n + //------------------------------------------------------------------- + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Complete dialog initialisation. + PositionControls(); + AcceptChanges(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + // Initial focus. + } + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + // PopulateToControls. + private void PopulateToControls(SpmInstitution.Data data) + { + // Populate item properties to controls. + + AcceptChanges(); + } + + //------------------------------------------------------------------- + // Validate properties. + public bool IsDataValid(SpmInstitution.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // PopulateFromControls. + private void PopulateFromControls(SpmInstitution.Data data) + { + } + + //------------------------------------------------------------------- + // UpdatedAssociated Data. + public bool UpdateAssociatedData() + { + return true; + } + + //------------------------------------------------------------------- + // C l o s e F o r m + //------------------------------------------------------------------- + private void buttonOk_Click(object sender, EventArgs e) + { + } + private void buttonCancel_Click(object sender, EventArgs e) + { + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected override void SetControlActivity() + { + SetControlsReadOnly(); + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + if (ReadOnly) return true; + + return false; + } + protected override void SetControlsReadOnly() + { + } + + //------------------------------------------------------------------- + // P o s i t i o n C o n t r o l s + //------------------------------------------------------------------- + protected override void PositionControls() + { + } + + //------------------------------------------------------------------- + // F o r m E v e n t s + //------------------------------------------------------------------- + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.resx b/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Maint/SpmForm_Institution.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.Designer.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.Designer.cs new file mode 100644 index 0000000..82b0bd8 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.Designer.cs @@ -0,0 +1,186 @@ +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + partial class SpmPanel_Employees + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.listFilterEmployee = new Sarand.PatientMgr.Win.Forms.Filters.SpmItemListFilter_Employee(); + this.listViewEmployee = new Sarand.PatientMgr.Win.Forms.Controls.SpmItemListView_Employee(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // listFilterEmployee + // + this.listFilterEmployee.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listFilterEmployee.Location = new System.Drawing.Point(0, 2); + this.listFilterEmployee.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.listFilterEmployee.Name = "listFilterEmployee"; + this.listFilterEmployee.Size = new System.Drawing.Size(400, 30); + this.listFilterEmployee.TabIndex = 0; + this.listFilterEmployee.FilterChanged += new System.EventHandler(this.listFilterEmployee_FilterChanged); + // + // listViewEmployee + // + this.listViewEmployee.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewEmployee.FullRowSelect = true; + this.listViewEmployee.HideSelection = false; + this.listViewEmployee.Location = new System.Drawing.Point(0, 37); + this.listViewEmployee.Margin = new System.Windows.Forms.Padding(2); + this.listViewEmployee.Name = "listViewEmployee"; + this.listViewEmployee.OwnerDraw = true; + this.listViewEmployee.Size = new System.Drawing.Size(317, 155); + this.listViewEmployee.TabIndex = 1; + this.listViewEmployee.UseCompatibleStateImageBehavior = false; + this.listViewEmployee.ItemCountChanged += new System.EventHandler(this.listViewEmployee_ItemCountChanged); + this.listViewEmployee.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewEmployee_ColumnClick); + this.listViewEmployee.SelectedIndexChanged += new System.EventHandler(this.listViewEmployee_SelectedIndexChanged); + this.listViewEmployee.DoubleClick += new System.EventHandler(this.listViewEmployee_DoubleClick); + this.listViewEmployee.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listViewEmployee_MouseUp); + // + // tabControl + // + this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl.Controls.Add(this.tabPage1); + this.tabControl.Controls.Add(this.tabPage2); + this.tabControl.Location = new System.Drawing.Point(2, 196); + this.tabControl.Margin = new System.Windows.Forms.Padding(2); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(398, 154); + this.tabControl.TabIndex = 6; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(2); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(2); + this.tabPage1.Size = new System.Drawing.Size(390, 128); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(2); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(2); + this.tabPage2.Size = new System.Drawing.Size(390, 128); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // buttonRemove + // + this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRemove.Location = new System.Drawing.Point(322, 95); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(75, 23); + this.buttonRemove.TabIndex = 15; + this.buttonRemove.Text = "Remove"; + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // buttonUpdate + // + this.buttonUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUpdate.Location = new System.Drawing.Point(322, 66); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(75, 23); + this.buttonUpdate.TabIndex = 14; + this.buttonUpdate.Text = "Update"; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click); + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCreate.Location = new System.Drawing.Point(322, 37); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(75, 23); + this.buttonCreate.TabIndex = 13; + this.buttonCreate.Text = "Create"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(322, 168); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 15; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(322, 139); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 15; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // SpmPanel_Employees + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonRemove); + this.Controls.Add(this.buttonUpdate); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.listViewEmployee); + this.Controls.Add(this.listFilterEmployee); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(400, 350); + this.Name = "SpmPanel_Employees"; + this.Size = new System.Drawing.Size(400, 350); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Filters.SpmItemListFilter_Employee listFilterEmployee; + private Controls.SpmItemListView_Employee listViewEmployee; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.Button buttonCreate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + } +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.cs new file mode 100644 index 0000000..8f7b070 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.cs @@ -0,0 +1,604 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.Core.Bus; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Win.Forms.Utils; +using Sarand.Core.Base; +using Sarand.PatientMgr.Core.App; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.TabPages; +using Sarand.PatientMgr.Win.Forms.Filters; +using Sarand.PatientMgr.Win.Forms.Base; + +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + //======================================================================= + public partial class SpmPanel_Employees : SpmPanel_Items + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelMode + { + Search, + Maintain, + } + public new class Config : SpmPanel_Items.Config + { + public Config (PanelMode mode) + { + Mode = mode; + // Defaults based on mode. + DisplayFilter = false; // Mode == PanelMode.Maintain || Mode == PanelMode.Search; + DisplayTabs = Mode == PanelMode.Maintain; + DisplayActionButtons = Mode == PanelMode.Maintain; + DisplayNavigationButtons = Mode == PanelMode.Search; + } + public PanelMode Mode { get; } = PanelMode.Maintain; + public SpmForm SearchForm { get; set; } + // Display options. + public bool DisplayFilter { get; set; } = false; + public bool DisplayContextMenu { get; set; } = true; + public bool DisplayActionButtons { get; set; } = false; + public bool DisplayNavigationButtons { get; set; } = false; + public bool DisplayTabs { get; set; } = false; + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(PanelMode.Search); + private readonly List tabPages = new List(); + + //------------------------------------------------------------------- + // Construction. + private SpmPanel_Employees () : this(new Config(PanelMode.Search)) { } + public SpmPanel_Employees (Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected override String DefaultMessageTitle { get { return "Employee"; } } + public override int ItemTotal { get { return listViewEmployee.ItemTotal; } } + public override int ItemCount { get { return listViewEmployee.ItemCount; } } + public override int SelectedItemCount { get { return listViewEmployee.SelectedItemCount; } } + public SysId SelectedItemId { get { return listViewEmployee.SelectedItemId; } } + public List SelectedItemIds { get { return listViewEmployee.SelectedItemIds; } } + public SpmEmployee SelectedEmployee { get { return listViewEmployee.SelectedEmployee; } } + + //------------------------------------------------------------------- + // Configure. + public void SetConfig (Config config) + { + base.SetConfig(config); + this.config = config; + ConfigurePanel(); + } + + //------------------------------------------------------------------- + // I n i t i a l i s a t i o n + //------------------------------------------------------------------- + protected override void OnCreateControl () + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + ConfigurePanel(); + } + + private void ConfigurePanel () + { + if (!Created || this.IsDesignerHosted()) return; + + // Configure filter. + if (config.DisplayFilter) + { + SpmItemListFilter_Employee.Config configFilter = new SpmItemListFilter_Employee.Config(); + configFilter.Internals = Internals; + listFilterEmployee.SetConfig(configFilter); + } + listFilterEmployee.Visible = config.DisplayFilter; + + // Configure list. + SpmItemListView_Employee.Config configList = new SpmItemListView_Employee.Config(); + configList.Internals = Internals; + configList.Mode = SpmItemListView_Employee.ListMode.General; + listViewEmployee.SetConfig(configList); + + // Tabs. + tabControl.TabPages.Clear(); + tabControl.Visible = config.DisplayTabs; + RefreshTabs(); + + // Configure buttons. + buttonCreate.Visible = config.DisplayActionButtons && SecurityProfile.Admin.CanManageConfig(); + buttonUpdate.Visible = config.DisplayActionButtons; + buttonRemove.Visible = config.DisplayActionButtons && buttonCreate.Visible; + buttonOk.Visible = config.DisplayNavigationButtons && config.Mode == PanelMode.Search; + buttonCancel.Visible = config.DisplayNavigationButtons; + + // Complete form initialisation. + RefreshDataItems(); + SetControlActivity(); + PositionControls(); + } + + //------------------------------------------------------------------- + // Initialise tabs. + private void InitTabs () + { + String fn = GetType().Name + ".InitTabs"; + tabControl.TabPages.Clear(); + tabPages.Clear(); + if (!config.DisplayTabs) + { + tabPages.Clear(); + tabControl.TabPages.Clear(); + tabControl.Visible = false; + return; + } + + // Selected Employee. + SpmEmployee employee = SelectedEmployee; + + // Updates. + List panelTypes_Updates = new List(); + panelTypes_Updates.Add(SpmTabPage_Employee.PanelType.Updates); + if (panelTypes_Updates.Count > 0) + { + SpmTabPage_Employee.Config configTabPage = new SpmTabPage_Employee.Config(); + configTabPage.Internals = Internals; + configTabPage.ReadOnly = ReadOnly; + configTabPage.PanelTypes.AddRange(panelTypes_Updates); + SpmTabPage_Employee tabPage = new SpmTabPage_Employee(configTabPage) { Text = "Updates" }; + tabPages.Add(tabPage); + } + + // Populate tab pages. + tabControl.Visible = tabPages.Count > 0; + foreach (var tabPage in tabPages) + tabControl.TabPages.Add(tabPage); + } + + //------------------------------------------------------------------- + // P a n e l I n t e r f a c e + //------------------------------------------------------------------- + private String previouslySelectedTabPageText = ""; + private void RefreshTabs () + { + if (tabControl.SelectedTab != null) + previouslySelectedTabPageText = tabControl.SelectedTab.Text; + + // Reinitialise tabs whenever the selection changes in case the set of tab pages displayed needs to be changed. + InitTabs(); + + // Select previous tab page if still present. + if (!StringUtil.IsEmpty(previouslySelectedTabPageText)) + { + foreach (TabPage tabPage in tabControl.TabPages) + { + if (tabPage.Text.Equals(previouslySelectedTabPageText)) + { + tabControl.SelectTab(tabPage); + break; + } + } + } + RefreshTabPages(); + + SetControlActivity(); + PositionControls(); + } + private void RefreshTabPages () + { + // Selected Employee - populated when needed. + SpmEmployee employee = null; + + // Refresh tabs. + if (tabControl.Visible) + { + if (employee == null) employee = SelectedEmployee; + SpmEmployee.Data employeeData = employee != null ? employee.GetData() : new SpmEmployee.Data(); + tabPages.PopulateToControls(employeeData); + } + } + + //------------------------------------------------------------------- + // F i l t e r + //------------------------------------------------------------------- + public bool ParamsAreValid (SpmEmployee.Params prmEmployee) + { + return true; + } + public SpmEmployee.Params GetParams () + { + SpmEmployee.Params prmEmployee = new SpmEmployee.Params(); + + // Sort columns. + prmEmployee.SortColumns.AddRange(listViewEmployee.GetSortColumns()); + return prmEmployee; + } + + //------------------------------------------------------------------- + // A c t i o n s + //------------------------------------------------------------------- + // Refresh. + public override void RefreshDataItems () + { + SpmEmployee.Params prmEmployee = GetParams(); + if (!ParamsAreValid(prmEmployee)) prmEmployee = null; + listViewEmployee.RefreshEmployees(prmEmployee); + } + public override void RefreshDataItem (SysId id) + { + listViewEmployee.RefreshEmployee(id); + } + public override void RemoveDataItem (SysId id) + { + listViewEmployee.RemoveItemById(id); + } + + //------------------------------------------------------------------- + // Create item. + public override bool CanCreateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void CreateItem () + { + if (!CanCreateItem()) return; + if (config.Mode == PanelMode.Search) return; + // Create new Employee. + SpmForm_Employee.Config configEmployee = new SpmForm_Employee.Config(); + using (var form = new SpmForm_Employee(configEmployee)) + { + if (form.ShowDialog() == DialogResult.OK) + { + RefreshDataItem(form.NewItemId); + InvokeItemCreatedEvent(Spm.DataItemType.Employee, form.NewItemId); + } + } + } + + //------------------------------------------------------------------- + // View/Update item. + public override bool CanViewItem () + { + return true; + } + public override bool CanUpdateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void UpdateItem (bool updateItem = true) + { + if (config.Mode == PanelMode.Search) return; + SpmEmployee employee = SelectedEmployee; + if (SelectedItemCount != 1) return; + if (!CanUpdateItem() && !CanViewItem()) return; + if (!CanUpdateItem()) updateItem = false; + if (employee == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve selected item"); + return; + } + SpmForm_Employee.Config configEmployee = new SpmForm_Employee.Config(); + configEmployee.EmployeeToUpdate = employee; + configEmployee.ReadOnly = (config.ReadOnly || !updateItem); + using (SpmForm_Employee formEmployee = new SpmForm_Employee(configEmployee)) + { + // Perform the update. + if (formEmployee.ShowDialog() == DialogResult.OK) + { + // Employee has been updated. + RefreshDataItem(employee.Id); + listViewEmployee.RefreshEmployee(employee.Id); + InvokeItemUpdatedEvent(Spm.DataItemType.Employee, employee.Id); + } + } + } + + //------------------------------------------------------------------- + // Delete item. + public override bool CanDeleteItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void DeleteItem () + { + if (!CanDeleteItem()) return; + if (config.Mode == PanelMode.Search) return; + if (SelectedItemCount != 1) return; + SpmEmployee employee = SelectedEmployee; + if (employee == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve item for deletion."); + return; + } + if (!InstitutionMgr.EmployeeCanBeDeleted(employee)) + { + MessageConsole.ShowMessageError("Unable to remove employee - " + InstitutionMgr.ErrorStateMessage + "."); + return; + } + if (MessageConsole.ShowMessageConfirm("Are you sure that this employee should be removed from the system?")) + { + if (InstitutionMgr.DeleteEmployee(employee, DbUpdateInfo)) + { + int selectIdx = listViewEmployee.SelectedIndex; + listViewEmployee.RemoveItemById(employee.Id.ToString()); + if (selectIdx >= listViewEmployee.ItemCount - 1) selectIdx--; + listViewEmployee.SelectedIndices.Clear(); + listViewEmployee.SelectedIndices.Add(selectIdx); + } + else MessageConsole.ShowMessageError("Failed to remove employee - " + InstitutionMgr.ErrorStateMessage + "."); + } + } + + //------------------------------------------------------------------- + // Import data. + public override bool CanImportData () + { + return false; + } + public override void ImportData () + { + if (!CanImportData()) return; + } + + //------------------------------------------------------------------- + // Export data. + public override bool CanExportData () + { + return false; + } + public override void ExportData () + { + } + + //------------------------------------------------------------------- + // C o n t e x t M e n u + //------------------------------------------------------------------- + private SpmContextMenuStrip contextMenuStrip = new SpmContextMenuStrip(); + private void RefreshContextMenu () + { + contextMenuStrip.Name = "Employee"; + contextMenuStrip.Items.Clear(); + if (CanCreateItem()) + contextMenuStrip.Items.Add("Create", null, CreateItem); + if (SysId.IsValid(listViewEmployee.SelectedItemId)) + { + SpmEmployee employee = SelectedEmployee; + if (employee != null) + { + if (CanUpdateItem() || CanDeleteItem()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + contextMenuStrip.Items.Add(CanUpdateItem() ? "Update" : "View", null, UpdateItem); + if (CanDeleteItem()) + contextMenuStrip.Items.Add("Remove", null, DeleteItem); + } + } + } + if (CanExportData() || CanImportData()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + if (CanImportData()) + contextMenuStrip.Items.Add("Import", null, ImportData); + if (CanExportData()) + contextMenuStrip.Items.Add("Export", null, ExportData); + } + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected override void SetControlActivity () + { + SetControlsReadOnly(); + bool itemSelected = SysId.IsValid(SelectedItemId); + + listViewEmployee.Enabled = Enabled; + buttonCreate.Enabled = Enabled; + buttonUpdate.Enabled = Enabled && itemSelected; + buttonRemove.Enabled = Enabled && itemSelected; + buttonOk.Enabled = Enabled; + buttonCancel.Enabled = Enabled; + } + protected override void SetControlsReadOnly () + { + } + + //------------------------------------------------------------------- + // P o s i t i o n C o n t r o l s + //------------------------------------------------------------------- + protected override void PositionControls () + { + if (this.IsDesignerHosted() || !Created) return; + Rectangle clientRect = ClientRectangle; + + //--------------------------------------------------------------- + // Filter panel. + if (listFilterEmployee.Visible) + { + listFilterEmployee.PositionAtTopLeftOf(this); + listFilterEmployee.SetFullWidthOf(this); + listFilterEmployee.ResizeToBottomControl(); + listViewEmployee.PositionBelow(listFilterEmployee); + } + else + { + listViewEmployee.PositionAtTopLeftOf(this); + } + + //--------------------------------------------------------------- + // List view. + int buttonLeft = clientRect.Width - buttonCreate.Width - buttonCreate.Margin.Right - Padding.Right; + listViewEmployee.Left = listViewEmployee.Margin.Left; + listViewEmployee.Width = buttonLeft - buttonCreate.Margin.Left - listViewEmployee.Left - listViewEmployee.Margin.Right; + if (!(buttonCreate.Visible || buttonUpdate.Visible || buttonRemove.Visible || buttonOk.Visible || buttonCancel.Visible)) + listViewEmployee.Width = clientRect.Width - Padding.Right - listViewEmployee.Left - listViewEmployee.Margin.Right; + + //--------------------------------------------------------------- + // Tab control. + if (tabControl.Visible) + { + tabControl.Left = listViewEmployee.Left; + tabControl.Width = clientRect.Width - (tabControl.Left * 2); + listViewEmployee.Height = (int)((clientRect.Height - listViewEmployee.Top) * 0.40); + tabControl.Top = listViewEmployee.Bottom + listViewEmployee.Margin.Bottom + tabControl.Margin.Top; + tabControl.Height = clientRect.Height - tabControl.Top - tabControl.Margin.Bottom - Padding.Bottom; + } + else + { + listViewEmployee.Height = clientRect.Height - listViewEmployee.Top - listViewEmployee.Margin.Bottom - Padding.Bottom; + } + + //--------------------------------------------------------------- + // Create button. + int buttonTop = listViewEmployee.Top + listViewEmployee.HeaderHeight; + buttonCreate.Top = buttonTop; + buttonCreate.Left = buttonLeft; + if (buttonCreate.Visible) + buttonTop += buttonCreate.Height + buttonCreate.Margin.Bottom; + + // Update button. + buttonUpdate.Top = buttonTop; + buttonUpdate.Left = buttonLeft; + if (buttonUpdate.Visible) + buttonTop += buttonUpdate.Height + buttonUpdate.Margin.Bottom; + + // Remove button. + buttonRemove.Top = buttonTop; + buttonRemove.Left = buttonLeft; + if (buttonRemove.Visible) + buttonTop += buttonRemove.Height + buttonRemove.Margin.Bottom; + + //--------------------------------------------------------------- + // Navigation buttons. + // Cancel button. + buttonCancel.Top = clientRect.Bottom - Padding.Bottom - buttonCancel.Margin.Bottom - buttonCancel.Height; + buttonCancel.Left = buttonLeft; + + // OK button. + buttonOk.Top = buttonCancel.Top - buttonOk.Height - buttonCancel.Padding.Top - buttonCancel.Margin.Bottom; + buttonOk.Left = buttonLeft; + if (buttonOk.Visible) + buttonTop += buttonOk.Height + buttonOk.Margin.Bottom; + + //--------------------------------------------------------------- + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + // Filter. + private void listFilterEmployee_FilterChanged (object sender, EventArgs e) + { + RefreshDataItems(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Item list. + private void listViewEmployee_ColumnClick (object sender, ColumnClickEventArgs e) + { + RefreshDataItems(); + } + private void listViewEmployee_ItemCountChanged (object sender, Sarand.Win.Forms.Controls.SacsListView.ItemCountChangedEventArgs e) + { + InvokeItemCountChangedEvent(e); + } + private void listViewEmployee_SelectedIndexChanged (object sender, EventArgs e) + { + RefreshTabs(); + InvokeItemSelectionChangedEvent(e); + SetControlActivity(); + } + private void listViewEmployee_DoubleClick (object sender, EventArgs e) + { + if (config.Mode == PanelMode.Search) + { + //if (config.SearchForm != null) config.SearchForm.OnOK(); + } + else + UpdateItem(); + SetControlActivity(); + } + private void listViewEmployee_MouseUp (object sender, MouseEventArgs e) + { + switch (e.Button) + { + case MouseButtons.Right: + // Refresh the context menu and display at pointer position. + RefreshContextMenu(); + contextMenuStrip.Show(listViewEmployee, new Point(e.X, e.Y), ToolStripDropDownDirection.Default); + break; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Actions. + private void buttonCreate_Click (object sender, EventArgs e) + { + CreateItem(); + SetControlActivity(); + } + private void buttonUpdate_Click (object sender, EventArgs e) + { + UpdateItem(); + SetControlActivity(); + } + private void buttonRemove_Click (object sender, EventArgs e) + { + DeleteItem(); + SetControlActivity(); + } + private void buttonOk_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnOK(); + return; + } + SetControlActivity(); + } + private void buttonCancel_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnCancel(); + return; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.resx b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Employees.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.Designer.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.Designer.cs new file mode 100644 index 0000000..a24eefd --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.Designer.cs @@ -0,0 +1,186 @@ +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + partial class SpmPanel_Institutions + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent () + { + this.listFilterInstitution = new Sarand.PatientMgr.Win.Forms.Filters.SpmItemListFilter_Institution(); + this.listViewInstitution = new Sarand.PatientMgr.Win.Forms.Controls.SpmItemListView_Institution(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // listFilterInstitution + // + this.listFilterInstitution.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listFilterInstitution.Location = new System.Drawing.Point(0, 2); + this.listFilterInstitution.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.listFilterInstitution.Name = "listFilterInstitution"; + this.listFilterInstitution.Size = new System.Drawing.Size(400, 30); + this.listFilterInstitution.TabIndex = 0; + this.listFilterInstitution.FilterChanged += new System.EventHandler(this.listFilterInstitution_FilterChanged); + // + // listViewInstitution + // + this.listViewInstitution.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewInstitution.FullRowSelect = true; + this.listViewInstitution.HideSelection = false; + this.listViewInstitution.Location = new System.Drawing.Point(0, 37); + this.listViewInstitution.Margin = new System.Windows.Forms.Padding(2); + this.listViewInstitution.Name = "listViewInstitution"; + this.listViewInstitution.OwnerDraw = true; + this.listViewInstitution.Size = new System.Drawing.Size(317, 155); + this.listViewInstitution.TabIndex = 1; + this.listViewInstitution.UseCompatibleStateImageBehavior = false; + this.listViewInstitution.ItemCountChanged += new System.EventHandler(this.listViewInstitution_ItemCountChanged); + this.listViewInstitution.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewInstitution_ColumnClick); + this.listViewInstitution.SelectedIndexChanged += new System.EventHandler(this.listViewInstitution_SelectedIndexChanged); + this.listViewInstitution.DoubleClick += new System.EventHandler(this.listViewInstitution_DoubleClick); + this.listViewInstitution.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listViewInstitution_MouseUp); + // + // tabControl + // + this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl.Controls.Add(this.tabPage1); + this.tabControl.Controls.Add(this.tabPage2); + this.tabControl.Location = new System.Drawing.Point(2, 196); + this.tabControl.Margin = new System.Windows.Forms.Padding(2); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(398, 154); + this.tabControl.TabIndex = 6; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(2); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(2); + this.tabPage1.Size = new System.Drawing.Size(390, 128); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(2); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(2); + this.tabPage2.Size = new System.Drawing.Size(390, 128); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // buttonRemove + // + this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRemove.Location = new System.Drawing.Point(322, 95); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(75, 23); + this.buttonRemove.TabIndex = 15; + this.buttonRemove.Text = "Remove"; + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // buttonUpdate + // + this.buttonUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUpdate.Location = new System.Drawing.Point(322, 66); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(75, 23); + this.buttonUpdate.TabIndex = 14; + this.buttonUpdate.Text = "Update"; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click); + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCreate.Location = new System.Drawing.Point(322, 37); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(75, 23); + this.buttonCreate.TabIndex = 13; + this.buttonCreate.Text = "Create"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(322, 168); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 15; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(322, 139); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 15; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // SpmPanel_Institutions + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonRemove); + this.Controls.Add(this.buttonUpdate); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.listViewInstitution); + this.Controls.Add(this.listFilterInstitution); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(400, 350); + this.Name = "SpmPanel_Institutions"; + this.Size = new System.Drawing.Size(400, 350); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Filters.SpmItemListFilter_Institution listFilterInstitution; + private Controls.SpmItemListView_Institution listViewInstitution; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.Button buttonCreate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + } +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.cs new file mode 100644 index 0000000..cf48fb5 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.cs @@ -0,0 +1,604 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.Core.Bus; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Win.Forms.Utils; +using Sarand.Core.Base; +using Sarand.PatientMgr.Core.App; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.TabPages; +using Sarand.PatientMgr.Win.Forms.Filters; +using Sarand.PatientMgr.Win.Forms.Base; + +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + //======================================================================= + public partial class SpmPanel_Institutions : SpmPanel_Items + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelMode + { + Search, + Maintain, + } + public new class Config : SpmPanel_Items.Config + { + public Config (PanelMode mode) + { + Mode = mode; + // Defaults based on mode. + DisplayFilter = false; // Mode == PanelMode.Maintain || Mode == PanelMode.Search; + DisplayTabs = Mode == PanelMode.Maintain; + DisplayActionButtons = Mode == PanelMode.Maintain; + DisplayNavigationButtons = Mode == PanelMode.Search; + } + public PanelMode Mode { get; } = PanelMode.Maintain; + public SpmForm SearchForm { get; set; } + // Display options. + public bool DisplayFilter { get; set; } = false; + public bool DisplayContextMenu { get; set; } = true; + public bool DisplayActionButtons { get; set; } = false; + public bool DisplayNavigationButtons { get; set; } = false; + public bool DisplayTabs { get; set; } = false; + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(PanelMode.Search); + private readonly List tabPages = new List(); + + //------------------------------------------------------------------- + // Construction. + private SpmPanel_Institutions () : this(new Config(PanelMode.Search)) { } + public SpmPanel_Institutions (Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected override String DefaultMessageTitle { get { return "Institution"; } } + public override int ItemTotal { get { return listViewInstitution.ItemTotal; } } + public override int ItemCount { get { return listViewInstitution.ItemCount; } } + public override int SelectedItemCount { get { return listViewInstitution.SelectedItemCount; } } + public SysId SelectedItemId { get { return listViewInstitution.SelectedItemId; } } + public List SelectedItemIds { get { return listViewInstitution.SelectedItemIds; } } + public SpmInstitution SelectedInstitution { get { return listViewInstitution.SelectedInstitution; } } + + //------------------------------------------------------------------- + // Configure. + public void SetConfig (Config config) + { + base.SetConfig(config); + this.config = config; + ConfigurePanel(); + } + + //------------------------------------------------------------------- + // I n i t i a l i s a t i o n + //------------------------------------------------------------------- + protected override void OnCreateControl () + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + ConfigurePanel(); + } + + private void ConfigurePanel () + { + if (!Created || this.IsDesignerHosted()) return; + + // Configure filter. + if (config.DisplayFilter) + { + SpmItemListFilter_Institution.Config configFilter = new SpmItemListFilter_Institution.Config(); + configFilter.Internals = Internals; + listFilterInstitution.SetConfig(configFilter); + } + listFilterInstitution.Visible = config.DisplayFilter; + + // Configure list. + SpmItemListView_Institution.Config configList = new SpmItemListView_Institution.Config(); + configList.Internals = Internals; + configList.Mode = SpmItemListView_Institution.ListMode.General; + listViewInstitution.SetConfig(configList); + + // Tabs. + tabControl.TabPages.Clear(); + tabControl.Visible = config.DisplayTabs; + RefreshTabs(); + + // Configure buttons. + buttonCreate.Visible = config.DisplayActionButtons && SecurityProfile.Admin.CanManageConfig(); + buttonUpdate.Visible = config.DisplayActionButtons; + buttonRemove.Visible = config.DisplayActionButtons && buttonCreate.Visible; + buttonOk.Visible = config.DisplayNavigationButtons && config.Mode == PanelMode.Search; + buttonCancel.Visible = config.DisplayNavigationButtons; + + // Complete form initialisation. + RefreshDataItems(); + SetControlActivity(); + PositionControls(); + } + + //------------------------------------------------------------------- + // Initialise tabs. + private void InitTabs () + { + String fn = GetType().Name + ".InitTabs"; + tabControl.TabPages.Clear(); + tabPages.Clear(); + if (!config.DisplayTabs) + { + tabPages.Clear(); + tabControl.TabPages.Clear(); + tabControl.Visible = false; + return; + } + + // Selected Institution. + SpmInstitution institution = SelectedInstitution; + + // Updates. + List panelTypes_Updates = new List(); + panelTypes_Updates.Add(SpmTabPage_Institution.PanelType.Updates); + if (panelTypes_Updates.Count > 0) + { + SpmTabPage_Institution.Config configTabPage = new SpmTabPage_Institution.Config(); + configTabPage.Internals = Internals; + configTabPage.ReadOnly = ReadOnly; + configTabPage.PanelTypes.AddRange(panelTypes_Updates); + SpmTabPage_Institution tabPage = new SpmTabPage_Institution(configTabPage) { Text = "Updates" }; + tabPages.Add(tabPage); + } + + // Populate tab pages. + tabControl.Visible = tabPages.Count > 0; + foreach (var tabPage in tabPages) + tabControl.TabPages.Add(tabPage); + } + + //------------------------------------------------------------------- + // P a n e l I n t e r f a c e + //------------------------------------------------------------------- + private String previouslySelectedTabPageText = ""; + private void RefreshTabs () + { + if (tabControl.SelectedTab != null) + previouslySelectedTabPageText = tabControl.SelectedTab.Text; + + // Reinitialise tabs whenever the selection changes in case the set of tab pages displayed needs to be changed. + InitTabs(); + + // Select previous tab page if still present. + if (!StringUtil.IsEmpty(previouslySelectedTabPageText)) + { + foreach (TabPage tabPage in tabControl.TabPages) + { + if (tabPage.Text.Equals(previouslySelectedTabPageText)) + { + tabControl.SelectTab(tabPage); + break; + } + } + } + RefreshTabPages(); + + SetControlActivity(); + PositionControls(); + } + private void RefreshTabPages () + { + // Selected Institution - populated when needed. + SpmInstitution institution = null; + + // Refresh tabs. + if (tabControl.Visible) + { + if (institution == null) institution = SelectedInstitution; + SpmInstitution.Data institutionData = institution != null ? institution.GetData() : new SpmInstitution.Data(); + tabPages.PopulateToControls(institutionData); + } + } + + //------------------------------------------------------------------- + // F i l t e r + //------------------------------------------------------------------- + public bool ParamsAreValid (SpmInstitution.Params prmInstitution) + { + return true; + } + public SpmInstitution.Params GetParams () + { + SpmInstitution.Params prmInstitution = new SpmInstitution.Params(); + + // Sort columns. + prmInstitution.SortColumns.AddRange(listViewInstitution.GetSortColumns()); + return prmInstitution; + } + + //------------------------------------------------------------------- + // A c t i o n s + //------------------------------------------------------------------- + // Refresh. + public override void RefreshDataItems () + { + SpmInstitution.Params prmInstitution = GetParams(); + if (!ParamsAreValid(prmInstitution)) prmInstitution = null; + listViewInstitution.RefreshInstitutions(prmInstitution); + } + public override void RefreshDataItem (SysId id) + { + listViewInstitution.RefreshInstitution(id); + } + public override void RemoveDataItem (SysId id) + { + listViewInstitution.RemoveItemById(id); + } + + //------------------------------------------------------------------- + // Create item. + public override bool CanCreateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void CreateItem () + { + if (!CanCreateItem()) return; + if (config.Mode == PanelMode.Search) return; + // Create new Institution. + SpmForm_Institution.Config configInstitution = new SpmForm_Institution.Config(); + using (var form = new SpmForm_Institution(configInstitution)) + { + if (form.ShowDialog() == DialogResult.OK) + { + RefreshDataItem(form.NewItemId); + InvokeItemCreatedEvent(Spm.DataItemType.Institution, form.NewItemId); + } + } + } + + //------------------------------------------------------------------- + // View/Update item. + public override bool CanViewItem () + { + return true; + } + public override bool CanUpdateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void UpdateItem (bool updateItem = true) + { + if (config.Mode == PanelMode.Search) return; + SpmInstitution institution = SelectedInstitution; + if (SelectedItemCount != 1) return; + if (!CanUpdateItem() && !CanViewItem()) return; + if (!CanUpdateItem()) updateItem = false; + if (institution == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve selected item"); + return; + } + SpmForm_Institution.Config configInstitution = new SpmForm_Institution.Config(); + configInstitution.InstitutionToUpdate = institution; + configInstitution.ReadOnly = (config.ReadOnly || !updateItem); + using (SpmForm_Institution formInstitution = new SpmForm_Institution(configInstitution)) + { + // Perform the update. + if (formInstitution.ShowDialog() == DialogResult.OK) + { + // Institution has been updated. + RefreshDataItem(institution.Id); + listViewInstitution.RefreshInstitution(institution.Id); + InvokeItemUpdatedEvent(Spm.DataItemType.Institution, institution.Id); + } + } + } + + //------------------------------------------------------------------- + // Delete item. + public override bool CanDeleteItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void DeleteItem () + { + if (!CanDeleteItem()) return; + if (config.Mode == PanelMode.Search) return; + if (SelectedItemCount != 1) return; + SpmInstitution institution = SelectedInstitution; + if (institution == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve item for deletion."); + return; + } + if (!InstitutionMgr.InstitutionCanBeDeleted(institution)) + { + MessageConsole.ShowMessageError("Unable to remove institution - " + InstitutionMgr.ErrorStateMessage + "."); + return; + } + if (MessageConsole.ShowMessageConfirm("Are you sure that this institution should be removed from the system?")) + { + if (InstitutionMgr.DeleteInstitution(institution, DbUpdateInfo)) + { + int selectIdx = listViewInstitution.SelectedIndex; + listViewInstitution.RemoveItemById(institution.Id.ToString()); + if (selectIdx >= listViewInstitution.ItemCount - 1) selectIdx--; + listViewInstitution.SelectedIndices.Clear(); + listViewInstitution.SelectedIndices.Add(selectIdx); + } + else MessageConsole.ShowMessageError("Failed to remove institution - " + InstitutionMgr.ErrorStateMessage + "."); + } + } + + //------------------------------------------------------------------- + // Import data. + public override bool CanImportData () + { + return false; + } + public override void ImportData () + { + if (!CanImportData()) return; + } + + //------------------------------------------------------------------- + // Export data. + public override bool CanExportData () + { + return false; + } + public override void ExportData () + { + } + + //------------------------------------------------------------------- + // C o n t e x t M e n u + //------------------------------------------------------------------- + private SpmContextMenuStrip contextMenuStrip = new SpmContextMenuStrip(); + private void RefreshContextMenu () + { + contextMenuStrip.Name = "Institution"; + contextMenuStrip.Items.Clear(); + if (CanCreateItem()) + contextMenuStrip.Items.Add("Create", null, CreateItem); + if (SysId.IsValid(listViewInstitution.SelectedItemId)) + { + SpmInstitution institution = SelectedInstitution; + if (institution != null) + { + if (CanUpdateItem() || CanDeleteItem()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + contextMenuStrip.Items.Add(CanUpdateItem() ? "Update" : "View", null, UpdateItem); + if (CanDeleteItem()) + contextMenuStrip.Items.Add("Remove", null, DeleteItem); + } + } + } + if (CanExportData() || CanImportData()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + if (CanImportData()) + contextMenuStrip.Items.Add("Import", null, ImportData); + if (CanExportData()) + contextMenuStrip.Items.Add("Export", null, ExportData); + } + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected override void SetControlActivity () + { + SetControlsReadOnly(); + bool itemSelected = SysId.IsValid(SelectedItemId); + + listViewInstitution.Enabled = Enabled; + buttonCreate.Enabled = Enabled; + buttonUpdate.Enabled = Enabled && itemSelected; + buttonRemove.Enabled = Enabled && itemSelected; + buttonOk.Enabled = Enabled; + buttonCancel.Enabled = Enabled; + } + protected override void SetControlsReadOnly () + { + } + + //------------------------------------------------------------------- + // P o s i t i o n C o n t r o l s + //------------------------------------------------------------------- + protected override void PositionControls () + { + if (this.IsDesignerHosted() || !Created) return; + Rectangle clientRect = ClientRectangle; + + //--------------------------------------------------------------- + // Filter panel. + if (listFilterInstitution.Visible) + { + listFilterInstitution.PositionAtTopLeftOf(this); + listFilterInstitution.SetFullWidthOf(this); + listFilterInstitution.ResizeToBottomControl(); + listViewInstitution.PositionBelow(listFilterInstitution); + } + else + { + listViewInstitution.PositionAtTopLeftOf(this); + } + + //--------------------------------------------------------------- + // List view. + int buttonLeft = clientRect.Width - buttonCreate.Width - buttonCreate.Margin.Right - Padding.Right; + listViewInstitution.Left = listViewInstitution.Margin.Left; + listViewInstitution.Width = buttonLeft - buttonCreate.Margin.Left - listViewInstitution.Left - listViewInstitution.Margin.Right; + if (!(buttonCreate.Visible || buttonUpdate.Visible || buttonRemove.Visible || buttonOk.Visible || buttonCancel.Visible)) + listViewInstitution.Width = clientRect.Width - Padding.Right - listViewInstitution.Left - listViewInstitution.Margin.Right; + + //--------------------------------------------------------------- + // Tab control. + if (tabControl.Visible) + { + tabControl.Left = listViewInstitution.Left; + tabControl.Width = clientRect.Width - (tabControl.Left * 2); + listViewInstitution.Height = (int)((clientRect.Height - listViewInstitution.Top) * 0.40); + tabControl.Top = listViewInstitution.Bottom + listViewInstitution.Margin.Bottom + tabControl.Margin.Top; + tabControl.Height = clientRect.Height - tabControl.Top - tabControl.Margin.Bottom - Padding.Bottom; + } + else + { + listViewInstitution.Height = clientRect.Height - listViewInstitution.Top - listViewInstitution.Margin.Bottom - Padding.Bottom; + } + + //--------------------------------------------------------------- + // Create button. + int buttonTop = listViewInstitution.Top + listViewInstitution.HeaderHeight; + buttonCreate.Top = buttonTop; + buttonCreate.Left = buttonLeft; + if (buttonCreate.Visible) + buttonTop += buttonCreate.Height + buttonCreate.Margin.Bottom; + + // Update button. + buttonUpdate.Top = buttonTop; + buttonUpdate.Left = buttonLeft; + if (buttonUpdate.Visible) + buttonTop += buttonUpdate.Height + buttonUpdate.Margin.Bottom; + + // Remove button. + buttonRemove.Top = buttonTop; + buttonRemove.Left = buttonLeft; + if (buttonRemove.Visible) + buttonTop += buttonRemove.Height + buttonRemove.Margin.Bottom; + + //--------------------------------------------------------------- + // Navigation buttons. + // Cancel button. + buttonCancel.Top = clientRect.Bottom - Padding.Bottom - buttonCancel.Margin.Bottom - buttonCancel.Height; + buttonCancel.Left = buttonLeft; + + // OK button. + buttonOk.Top = buttonCancel.Top - buttonOk.Height - buttonCancel.Padding.Top - buttonCancel.Margin.Bottom; + buttonOk.Left = buttonLeft; + if (buttonOk.Visible) + buttonTop += buttonOk.Height + buttonOk.Margin.Bottom; + + //--------------------------------------------------------------- + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + // Filter. + private void listFilterInstitution_FilterChanged (object sender, EventArgs e) + { + RefreshDataItems(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Item list. + private void listViewInstitution_ColumnClick (object sender, ColumnClickEventArgs e) + { + RefreshDataItems(); + } + private void listViewInstitution_ItemCountChanged (object sender, Sarand.Win.Forms.Controls.SacsListView.ItemCountChangedEventArgs e) + { + InvokeItemCountChangedEvent(e); + } + private void listViewInstitution_SelectedIndexChanged (object sender, EventArgs e) + { + RefreshTabs(); + InvokeItemSelectionChangedEvent(e); + SetControlActivity(); + } + private void listViewInstitution_DoubleClick (object sender, EventArgs e) + { + if (config.Mode == PanelMode.Search) + { + //if (config.SearchForm != null) config.SearchForm.OnOK(); + } + else + UpdateItem(); + SetControlActivity(); + } + private void listViewInstitution_MouseUp (object sender, MouseEventArgs e) + { + switch (e.Button) + { + case MouseButtons.Right: + // Refresh the context menu and display at pointer position. + RefreshContextMenu(); + contextMenuStrip.Show(listViewInstitution, new Point(e.X, e.Y), ToolStripDropDownDirection.Default); + break; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Actions. + private void buttonCreate_Click (object sender, EventArgs e) + { + CreateItem(); + SetControlActivity(); + } + private void buttonUpdate_Click (object sender, EventArgs e) + { + UpdateItem(); + SetControlActivity(); + } + private void buttonRemove_Click (object sender, EventArgs e) + { + DeleteItem(); + SetControlActivity(); + } + private void buttonOk_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnOK(); + return; + } + SetControlActivity(); + } + private void buttonCancel_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnCancel(); + return; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.resx b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Institutions.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.Designer.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.Designer.cs new file mode 100644 index 0000000..3825544 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.Designer.cs @@ -0,0 +1,186 @@ +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + partial class SpmPanel_Operations + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.listFilterOperation = new Sarand.PatientMgr.Win.Forms.Filters.SpmItemListFilter_Operation(); + this.listViewOperation = new Sarand.PatientMgr.Win.Forms.Controls.SpmItemListView_Operation(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // listFilterOperation + // + this.listFilterOperation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listFilterOperation.Location = new System.Drawing.Point(0, 2); + this.listFilterOperation.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.listFilterOperation.Name = "listFilterOperation"; + this.listFilterOperation.Size = new System.Drawing.Size(400, 30); + this.listFilterOperation.TabIndex = 0; + this.listFilterOperation.FilterChanged += new System.EventHandler(this.listFilterOperation_FilterChanged); + // + // listViewOperation + // + this.listViewOperation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewOperation.FullRowSelect = true; + this.listViewOperation.HideSelection = false; + this.listViewOperation.Location = new System.Drawing.Point(0, 37); + this.listViewOperation.Margin = new System.Windows.Forms.Padding(2); + this.listViewOperation.Name = "listViewOperation"; + this.listViewOperation.OwnerDraw = true; + this.listViewOperation.Size = new System.Drawing.Size(317, 155); + this.listViewOperation.TabIndex = 1; + this.listViewOperation.UseCompatibleStateImageBehavior = false; + this.listViewOperation.ItemCountChanged += new System.EventHandler(this.listViewOperation_ItemCountChanged); + this.listViewOperation.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewOperation_ColumnClick); + this.listViewOperation.SelectedIndexChanged += new System.EventHandler(this.listViewOperation_SelectedIndexChanged); + this.listViewOperation.DoubleClick += new System.EventHandler(this.listViewOperation_DoubleClick); + this.listViewOperation.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listViewOperation_MouseUp); + // + // tabControl + // + this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl.Controls.Add(this.tabPage1); + this.tabControl.Controls.Add(this.tabPage2); + this.tabControl.Location = new System.Drawing.Point(2, 196); + this.tabControl.Margin = new System.Windows.Forms.Padding(2); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(398, 154); + this.tabControl.TabIndex = 6; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(2); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(2); + this.tabPage1.Size = new System.Drawing.Size(390, 128); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(2); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(2); + this.tabPage2.Size = new System.Drawing.Size(390, 128); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // buttonRemove + // + this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRemove.Location = new System.Drawing.Point(322, 95); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(75, 23); + this.buttonRemove.TabIndex = 15; + this.buttonRemove.Text = "Remove"; + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // buttonUpdate + // + this.buttonUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUpdate.Location = new System.Drawing.Point(322, 66); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(75, 23); + this.buttonUpdate.TabIndex = 14; + this.buttonUpdate.Text = "Update"; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click); + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCreate.Location = new System.Drawing.Point(322, 37); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(75, 23); + this.buttonCreate.TabIndex = 13; + this.buttonCreate.Text = "Create"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(322, 168); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 15; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(322, 139); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 15; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // SpmPanel_Operations + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonRemove); + this.Controls.Add(this.buttonUpdate); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.listViewOperation); + this.Controls.Add(this.listFilterOperation); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(400, 350); + this.Name = "SpmPanel_Operations"; + this.Size = new System.Drawing.Size(400, 350); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Filters.SpmItemListFilter_Operation listFilterOperation; + private Controls.SpmItemListView_Operation listViewOperation; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.Button buttonCreate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + } +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.cs new file mode 100644 index 0000000..a90c94c --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.cs @@ -0,0 +1,604 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.Core.Bus; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Win.Forms.Utils; +using Sarand.Core.Base; +using Sarand.PatientMgr.Core.App; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.TabPages; +using Sarand.PatientMgr.Win.Forms.Filters; +using Sarand.PatientMgr.Win.Forms.Base; + +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + //======================================================================= + public partial class SpmPanel_Operations : SpmPanel_Items + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelMode + { + Search, + Maintain, + } + public new class Config : SpmPanel_Items.Config + { + public Config (PanelMode mode) + { + Mode = mode; + // Defaults based on mode. + DisplayFilter = false; // Mode == PanelMode.Maintain || Mode == PanelMode.Search; + DisplayTabs = Mode == PanelMode.Maintain; + DisplayActionButtons = Mode == PanelMode.Maintain; + DisplayNavigationButtons = Mode == PanelMode.Search; + } + public PanelMode Mode { get; } = PanelMode.Maintain; + public SpmForm SearchForm { get; set; } + // Display options. + public bool DisplayFilter { get; set; } = false; + public bool DisplayContextMenu { get; set; } = true; + public bool DisplayActionButtons { get; set; } = false; + public bool DisplayNavigationButtons { get; set; } = false; + public bool DisplayTabs { get; set; } = false; + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(PanelMode.Search); + private readonly List tabPages = new List(); + + //------------------------------------------------------------------- + // Construction. + private SpmPanel_Operations () : this(new Config(PanelMode.Search)) { } + public SpmPanel_Operations (Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected override String DefaultMessageTitle { get { return "Operation"; } } + public override int ItemTotal { get { return listViewOperation.ItemTotal; } } + public override int ItemCount { get { return listViewOperation.ItemCount; } } + public override int SelectedItemCount { get { return listViewOperation.SelectedItemCount; } } + public SysId SelectedItemId { get { return listViewOperation.SelectedItemId; } } + public List SelectedItemIds { get { return listViewOperation.SelectedItemIds; } } + public SpmOperation SelectedOperation { get { return listViewOperation.SelectedOperation; } } + + //------------------------------------------------------------------- + // Configure. + public void SetConfig (Config config) + { + base.SetConfig(config); + this.config = config; + ConfigurePanel(); + } + + //------------------------------------------------------------------- + // I n i t i a l i s a t i o n + //------------------------------------------------------------------- + protected override void OnCreateControl () + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + ConfigurePanel(); + } + + private void ConfigurePanel () + { + if (!Created || this.IsDesignerHosted()) return; + + // Configure filter. + if (config.DisplayFilter) + { + SpmItemListFilter_Operation.Config configFilter = new SpmItemListFilter_Operation.Config(); + configFilter.Internals = Internals; + listFilterOperation.SetConfig(configFilter); + } + listFilterOperation.Visible = config.DisplayFilter; + + // Configure list. + SpmItemListView_Operation.Config configList = new SpmItemListView_Operation.Config(); + configList.Internals = Internals; + configList.Mode = SpmItemListView_Operation.ListMode.General; + listViewOperation.SetConfig(configList); + + // Tabs. + tabControl.TabPages.Clear(); + tabControl.Visible = config.DisplayTabs; + RefreshTabs(); + + // Configure buttons. + buttonCreate.Visible = config.DisplayActionButtons && SecurityProfile.Admin.CanManageConfig(); + buttonUpdate.Visible = config.DisplayActionButtons; + buttonRemove.Visible = config.DisplayActionButtons && buttonCreate.Visible; + buttonOk.Visible = config.DisplayNavigationButtons && config.Mode == PanelMode.Search; + buttonCancel.Visible = config.DisplayNavigationButtons; + + // Complete form initialisation. + RefreshDataItems(); + SetControlActivity(); + PositionControls(); + } + + //------------------------------------------------------------------- + // Initialise tabs. + private void InitTabs () + { + String fn = GetType().Name + ".InitTabs"; + tabControl.TabPages.Clear(); + tabPages.Clear(); + if (!config.DisplayTabs) + { + tabPages.Clear(); + tabControl.TabPages.Clear(); + tabControl.Visible = false; + return; + } + + // Selected Operation. + SpmOperation operation = SelectedOperation; + + // Updates. + List panelTypes_Updates = new List(); + panelTypes_Updates.Add(SpmTabPage_Operation.PanelType.Updates); + if (panelTypes_Updates.Count > 0) + { + SpmTabPage_Operation.Config configTabPage = new SpmTabPage_Operation.Config(); + configTabPage.Internals = Internals; + configTabPage.ReadOnly = ReadOnly; + configTabPage.PanelTypes.AddRange(panelTypes_Updates); + SpmTabPage_Operation tabPage = new SpmTabPage_Operation(configTabPage) { Text = "Updates" }; + tabPages.Add(tabPage); + } + + // Populate tab pages. + tabControl.Visible = tabPages.Count > 0; + foreach (var tabPage in tabPages) + tabControl.TabPages.Add(tabPage); + } + + //------------------------------------------------------------------- + // P a n e l I n t e r f a c e + //------------------------------------------------------------------- + private String previouslySelectedTabPageText = ""; + private void RefreshTabs () + { + if (tabControl.SelectedTab != null) + previouslySelectedTabPageText = tabControl.SelectedTab.Text; + + // Reinitialise tabs whenever the selection changes in case the set of tab pages displayed needs to be changed. + InitTabs(); + + // Select previous tab page if still present. + if (!StringUtil.IsEmpty(previouslySelectedTabPageText)) + { + foreach (TabPage tabPage in tabControl.TabPages) + { + if (tabPage.Text.Equals(previouslySelectedTabPageText)) + { + tabControl.SelectTab(tabPage); + break; + } + } + } + RefreshTabPages(); + + SetControlActivity(); + PositionControls(); + } + private void RefreshTabPages () + { + // Selected Operation - populated when needed. + SpmOperation operation = null; + + // Refresh tabs. + if (tabControl.Visible) + { + if (operation == null) operation = SelectedOperation; + SpmOperation.Data operationData = operation != null ? operation.GetData() : new SpmOperation.Data(); + tabPages.PopulateToControls(operationData); + } + } + + //------------------------------------------------------------------- + // F i l t e r + //------------------------------------------------------------------- + public bool ParamsAreValid (SpmOperation.Params prmOperation) + { + return true; + } + public SpmOperation.Params GetParams () + { + SpmOperation.Params prmOperation = new SpmOperation.Params(); + + // Sort columns. + prmOperation.SortColumns.AddRange(listViewOperation.GetSortColumns()); + return prmOperation; + } + + //------------------------------------------------------------------- + // A c t i o n s + //------------------------------------------------------------------- + // Refresh. + public override void RefreshDataItems () + { + SpmOperation.Params prmOperation = GetParams(); + if (!ParamsAreValid(prmOperation)) prmOperation = null; + listViewOperation.RefreshOperations(prmOperation); + } + public override void RefreshDataItem (SysId id) + { + listViewOperation.RefreshOperation(id); + } + public override void RemoveDataItem (SysId id) + { + listViewOperation.RemoveItemById(id); + } + + //------------------------------------------------------------------- + // Create item. + public override bool CanCreateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void CreateItem () + { + if (!CanCreateItem()) return; + if (config.Mode == PanelMode.Search) return; + // Create new Operation. + SpmForm_Operation.Config configOperation = new SpmForm_Operation.Config(); + using (var form = new SpmForm_Operation(configOperation)) + { + if (form.ShowDialog() == DialogResult.OK) + { + RefreshDataItem(form.NewItemId); + InvokeItemCreatedEvent(Spm.DataItemType.Operation, form.NewItemId); + } + } + } + + //------------------------------------------------------------------- + // View/Update item. + public override bool CanViewItem () + { + return true; + } + public override bool CanUpdateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void UpdateItem (bool updateItem = true) + { + if (config.Mode == PanelMode.Search) return; + SpmOperation operation = SelectedOperation; + if (SelectedItemCount != 1) return; + if (!CanUpdateItem() && !CanViewItem()) return; + if (!CanUpdateItem()) updateItem = false; + if (operation == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve selected item"); + return; + } + SpmForm_Operation.Config configOperation = new SpmForm_Operation.Config(); + configOperation.OperationToUpdate = operation; + configOperation.ReadOnly = (config.ReadOnly || !updateItem); + using (SpmForm_Operation formOperation = new SpmForm_Operation(configOperation)) + { + // Perform the update. + if (formOperation.ShowDialog() == DialogResult.OK) + { + // Operation has been updated. + RefreshDataItem(operation.Id); + listViewOperation.RefreshOperation(operation.Id); + InvokeItemUpdatedEvent(Spm.DataItemType.Operation, operation.Id); + } + } + } + + //------------------------------------------------------------------- + // Delete item. + public override bool CanDeleteItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void DeleteItem () + { + if (!CanDeleteItem()) return; + if (config.Mode == PanelMode.Search) return; + if (SelectedItemCount != 1) return; + SpmOperation operation = SelectedOperation; + if (operation == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve item for deletion."); + return; + } + if (!InstitutionMgr.OperationCanBeDeleted(operation)) + { + MessageConsole.ShowMessageError("Unable to remove operation - " + InstitutionMgr.ErrorStateMessage + "."); + return; + } + if (MessageConsole.ShowMessageConfirm("Are you sure that this operation should be removed from the system?")) + { + if (InstitutionMgr.DeleteOperation(operation, DbUpdateInfo)) + { + int selectIdx = listViewOperation.SelectedIndex; + listViewOperation.RemoveItemById(operation.Id.ToString()); + if (selectIdx >= listViewOperation.ItemCount - 1) selectIdx--; + listViewOperation.SelectedIndices.Clear(); + listViewOperation.SelectedIndices.Add(selectIdx); + } + else MessageConsole.ShowMessageError("Failed to remove operation - " + InstitutionMgr.ErrorStateMessage + "."); + } + } + + //------------------------------------------------------------------- + // Import data. + public override bool CanImportData () + { + return false; + } + public override void ImportData () + { + if (!CanImportData()) return; + } + + //------------------------------------------------------------------- + // Export data. + public override bool CanExportData () + { + return false; + } + public override void ExportData () + { + } + + //------------------------------------------------------------------- + // C o n t e x t M e n u + //------------------------------------------------------------------- + private SpmContextMenuStrip contextMenuStrip = new SpmContextMenuStrip(); + private void RefreshContextMenu () + { + contextMenuStrip.Name = "Operation"; + contextMenuStrip.Items.Clear(); + if (CanCreateItem()) + contextMenuStrip.Items.Add("Create", null, CreateItem); + if (SysId.IsValid(listViewOperation.SelectedItemId)) + { + SpmOperation operation = SelectedOperation; + if (operation != null) + { + if (CanUpdateItem() || CanDeleteItem()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + contextMenuStrip.Items.Add(CanUpdateItem() ? "Update" : "View", null, UpdateItem); + if (CanDeleteItem()) + contextMenuStrip.Items.Add("Remove", null, DeleteItem); + } + } + } + if (CanExportData() || CanImportData()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + if (CanImportData()) + contextMenuStrip.Items.Add("Import", null, ImportData); + if (CanExportData()) + contextMenuStrip.Items.Add("Export", null, ExportData); + } + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected override void SetControlActivity () + { + SetControlsReadOnly(); + bool itemSelected = SysId.IsValid(SelectedItemId); + + listViewOperation.Enabled = Enabled; + buttonCreate.Enabled = Enabled; + buttonUpdate.Enabled = Enabled && itemSelected; + buttonRemove.Enabled = Enabled && itemSelected; + buttonOk.Enabled = Enabled; + buttonCancel.Enabled = Enabled; + } + protected override void SetControlsReadOnly () + { + } + + //------------------------------------------------------------------- + // P o s i t i o n C o n t r o l s + //------------------------------------------------------------------- + protected override void PositionControls () + { + if (this.IsDesignerHosted() || !Created) return; + Rectangle clientRect = ClientRectangle; + + //--------------------------------------------------------------- + // Filter panel. + if (listFilterOperation.Visible) + { + listFilterOperation.PositionAtTopLeftOf(this); + listFilterOperation.SetFullWidthOf(this); + listFilterOperation.ResizeToBottomControl(); + listViewOperation.PositionBelow(listFilterOperation); + } + else + { + listViewOperation.PositionAtTopLeftOf(this); + } + + //--------------------------------------------------------------- + // List view. + int buttonLeft = clientRect.Width - buttonCreate.Width - buttonCreate.Margin.Right - Padding.Right; + listViewOperation.Left = listViewOperation.Margin.Left; + listViewOperation.Width = buttonLeft - buttonCreate.Margin.Left - listViewOperation.Left - listViewOperation.Margin.Right; + if (!(buttonCreate.Visible || buttonUpdate.Visible || buttonRemove.Visible || buttonOk.Visible || buttonCancel.Visible)) + listViewOperation.Width = clientRect.Width - Padding.Right - listViewOperation.Left - listViewOperation.Margin.Right; + + //--------------------------------------------------------------- + // Tab control. + if (tabControl.Visible) + { + tabControl.Left = listViewOperation.Left; + tabControl.Width = clientRect.Width - (tabControl.Left * 2); + listViewOperation.Height = (int)((clientRect.Height - listViewOperation.Top) * 0.40); + tabControl.Top = listViewOperation.Bottom + listViewOperation.Margin.Bottom + tabControl.Margin.Top; + tabControl.Height = clientRect.Height - tabControl.Top - tabControl.Margin.Bottom - Padding.Bottom; + } + else + { + listViewOperation.Height = clientRect.Height - listViewOperation.Top - listViewOperation.Margin.Bottom - Padding.Bottom; + } + + //--------------------------------------------------------------- + // Create button. + int buttonTop = listViewOperation.Top + listViewOperation.HeaderHeight; + buttonCreate.Top = buttonTop; + buttonCreate.Left = buttonLeft; + if (buttonCreate.Visible) + buttonTop += buttonCreate.Height + buttonCreate.Margin.Bottom; + + // Update button. + buttonUpdate.Top = buttonTop; + buttonUpdate.Left = buttonLeft; + if (buttonUpdate.Visible) + buttonTop += buttonUpdate.Height + buttonUpdate.Margin.Bottom; + + // Remove button. + buttonRemove.Top = buttonTop; + buttonRemove.Left = buttonLeft; + if (buttonRemove.Visible) + buttonTop += buttonRemove.Height + buttonRemove.Margin.Bottom; + + //--------------------------------------------------------------- + // Navigation buttons. + // Cancel button. + buttonCancel.Top = clientRect.Bottom - Padding.Bottom - buttonCancel.Margin.Bottom - buttonCancel.Height; + buttonCancel.Left = buttonLeft; + + // OK button. + buttonOk.Top = buttonCancel.Top - buttonOk.Height - buttonCancel.Padding.Top - buttonCancel.Margin.Bottom; + buttonOk.Left = buttonLeft; + if (buttonOk.Visible) + buttonTop += buttonOk.Height + buttonOk.Margin.Bottom; + + //--------------------------------------------------------------- + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + // Filter. + private void listFilterOperation_FilterChanged (object sender, EventArgs e) + { + RefreshDataItems(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Item list. + private void listViewOperation_ColumnClick (object sender, ColumnClickEventArgs e) + { + RefreshDataItems(); + } + private void listViewOperation_ItemCountChanged (object sender, Sarand.Win.Forms.Controls.SacsListView.ItemCountChangedEventArgs e) + { + InvokeItemCountChangedEvent(e); + } + private void listViewOperation_SelectedIndexChanged (object sender, EventArgs e) + { + RefreshTabs(); + InvokeItemSelectionChangedEvent(e); + SetControlActivity(); + } + private void listViewOperation_DoubleClick (object sender, EventArgs e) + { + if (config.Mode == PanelMode.Search) + { + //if (config.SearchForm != null) config.SearchForm.OnOK(); + } + else + UpdateItem(); + SetControlActivity(); + } + private void listViewOperation_MouseUp (object sender, MouseEventArgs e) + { + switch (e.Button) + { + case MouseButtons.Right: + // Refresh the context menu and display at pointer position. + RefreshContextMenu(); + contextMenuStrip.Show(listViewOperation, new Point(e.X, e.Y), ToolStripDropDownDirection.Default); + break; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Actions. + private void buttonCreate_Click (object sender, EventArgs e) + { + CreateItem(); + SetControlActivity(); + } + private void buttonUpdate_Click (object sender, EventArgs e) + { + UpdateItem(); + SetControlActivity(); + } + private void buttonRemove_Click (object sender, EventArgs e) + { + DeleteItem(); + SetControlActivity(); + } + private void buttonOk_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnOK(); + return; + } + SetControlActivity(); + } + private void buttonCancel_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnCancel(); + return; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.resx b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Operations.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.Designer.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.Designer.cs new file mode 100644 index 0000000..52f907b --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.Designer.cs @@ -0,0 +1,186 @@ +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + partial class SpmPanel_Patients + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.listFilterPatient = new Sarand.PatientMgr.Win.Forms.Filters.SpmItemListFilter_Patient(); + this.listViewPatient = new Sarand.PatientMgr.Win.Forms.Controls.SpmItemListView_Patient(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // listFilterPatient + // + this.listFilterPatient.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listFilterPatient.Location = new System.Drawing.Point(0, 2); + this.listFilterPatient.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.listFilterPatient.Name = "listFilterPatient"; + this.listFilterPatient.Size = new System.Drawing.Size(400, 30); + this.listFilterPatient.TabIndex = 0; + this.listFilterPatient.FilterChanged += new System.EventHandler(this.listFilterPatient_FilterChanged); + // + // listViewPatient + // + this.listViewPatient.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewPatient.FullRowSelect = true; + this.listViewPatient.HideSelection = false; + this.listViewPatient.Location = new System.Drawing.Point(0, 37); + this.listViewPatient.Margin = new System.Windows.Forms.Padding(2); + this.listViewPatient.Name = "listViewPatient"; + this.listViewPatient.OwnerDraw = true; + this.listViewPatient.Size = new System.Drawing.Size(317, 155); + this.listViewPatient.TabIndex = 1; + this.listViewPatient.UseCompatibleStateImageBehavior = false; + this.listViewPatient.ItemCountChanged += new System.EventHandler(this.listViewPatient_ItemCountChanged); + this.listViewPatient.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewPatient_ColumnClick); + this.listViewPatient.SelectedIndexChanged += new System.EventHandler(this.listViewPatient_SelectedIndexChanged); + this.listViewPatient.DoubleClick += new System.EventHandler(this.listViewPatient_DoubleClick); + this.listViewPatient.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listViewPatient_MouseUp); + // + // tabControl + // + this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl.Controls.Add(this.tabPage1); + this.tabControl.Controls.Add(this.tabPage2); + this.tabControl.Location = new System.Drawing.Point(2, 196); + this.tabControl.Margin = new System.Windows.Forms.Padding(2); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(398, 154); + this.tabControl.TabIndex = 6; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(2); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(2); + this.tabPage1.Size = new System.Drawing.Size(390, 128); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(2); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(2); + this.tabPage2.Size = new System.Drawing.Size(390, 128); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // buttonRemove + // + this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRemove.Location = new System.Drawing.Point(322, 95); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(75, 23); + this.buttonRemove.TabIndex = 15; + this.buttonRemove.Text = "Remove"; + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // buttonUpdate + // + this.buttonUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUpdate.Location = new System.Drawing.Point(322, 66); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(75, 23); + this.buttonUpdate.TabIndex = 14; + this.buttonUpdate.Text = "Update"; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click); + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCreate.Location = new System.Drawing.Point(322, 37); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(75, 23); + this.buttonCreate.TabIndex = 13; + this.buttonCreate.Text = "Create"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(322, 168); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 15; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(322, 139); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 15; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // SpmPanel_Patients + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonRemove); + this.Controls.Add(this.buttonUpdate); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.listViewPatient); + this.Controls.Add(this.listFilterPatient); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(400, 350); + this.Name = "SpmPanel_Patients"; + this.Size = new System.Drawing.Size(400, 350); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Filters.SpmItemListFilter_Patient listFilterPatient; + private Controls.SpmItemListView_Patient listViewPatient; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.Button buttonCreate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + } +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.cs b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.cs new file mode 100644 index 0000000..e2f4952 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.cs @@ -0,0 +1,604 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.Core.Bus; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Win.Forms.Utils; +using Sarand.Core.Base; +using Sarand.PatientMgr.Core.App; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.TabPages; +using Sarand.PatientMgr.Win.Forms.Filters; +using Sarand.PatientMgr.Win.Forms.Base; + +namespace Sarand.PatientMgr.Win.Forms.Panels +{ + //======================================================================= + public partial class SpmPanel_Patients : SpmPanel_Items + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelMode + { + Search, + Maintain, + } + public new class Config : SpmPanel_Items.Config + { + public Config (PanelMode mode) + { + Mode = mode; + // Defaults based on mode. + DisplayFilter = false; // Mode == PanelMode.Maintain || Mode == PanelMode.Search; + DisplayTabs = Mode == PanelMode.Maintain; + DisplayActionButtons = Mode == PanelMode.Maintain; + DisplayNavigationButtons = Mode == PanelMode.Search; + } + public PanelMode Mode { get; } = PanelMode.Maintain; + public SpmForm SearchForm { get; set; } + // Display options. + public bool DisplayFilter { get; set; } = false; + public bool DisplayContextMenu { get; set; } = true; + public bool DisplayActionButtons { get; set; } = false; + public bool DisplayNavigationButtons { get; set; } = false; + public bool DisplayTabs { get; set; } = false; + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(PanelMode.Search); + private readonly List tabPages = new List(); + + //------------------------------------------------------------------- + // Construction. + private SpmPanel_Patients () : this(new Config(PanelMode.Search)) { } + public SpmPanel_Patients (Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected override String DefaultMessageTitle { get { return "Patient"; } } + public override int ItemTotal { get { return listViewPatient.ItemTotal; } } + public override int ItemCount { get { return listViewPatient.ItemCount; } } + public override int SelectedItemCount { get { return listViewPatient.SelectedItemCount; } } + public SysId SelectedItemId { get { return listViewPatient.SelectedItemId; } } + public List SelectedItemIds { get { return listViewPatient.SelectedItemIds; } } + public SpmPatient SelectedPatient { get { return listViewPatient.SelectedPatient; } } + + //------------------------------------------------------------------- + // Configure. + public void SetConfig (Config config) + { + base.SetConfig(config); + this.config = config; + ConfigurePanel(); + } + + //------------------------------------------------------------------- + // I n i t i a l i s a t i o n + //------------------------------------------------------------------- + protected override void OnCreateControl () + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + ConfigurePanel(); + } + + private void ConfigurePanel () + { + if (!Created || this.IsDesignerHosted()) return; + + // Configure filter. + if (config.DisplayFilter) + { + SpmItemListFilter_Patient.Config configFilter = new SpmItemListFilter_Patient.Config(); + configFilter.Internals = Internals; + listFilterPatient.SetConfig(configFilter); + } + listFilterPatient.Visible = config.DisplayFilter; + + // Configure list. + SpmItemListView_Patient.Config configList = new SpmItemListView_Patient.Config(); + configList.Internals = Internals; + configList.Mode = SpmItemListView_Patient.ListMode.General; + listViewPatient.SetConfig(configList); + + // Tabs. + tabControl.TabPages.Clear(); + tabControl.Visible = config.DisplayTabs; + RefreshTabs(); + + // Configure buttons. + buttonCreate.Visible = config.DisplayActionButtons && SecurityProfile.Admin.CanManageConfig(); + buttonUpdate.Visible = config.DisplayActionButtons; + buttonRemove.Visible = config.DisplayActionButtons && buttonCreate.Visible; + buttonOk.Visible = config.DisplayNavigationButtons && config.Mode == PanelMode.Search; + buttonCancel.Visible = config.DisplayNavigationButtons; + + // Complete form initialisation. + RefreshDataItems(); + SetControlActivity(); + PositionControls(); + } + + //------------------------------------------------------------------- + // Initialise tabs. + private void InitTabs () + { + String fn = GetType().Name + ".InitTabs"; + tabControl.TabPages.Clear(); + tabPages.Clear(); + if (!config.DisplayTabs) + { + tabPages.Clear(); + tabControl.TabPages.Clear(); + tabControl.Visible = false; + return; + } + + // Selected Patient. + SpmPatient patient = SelectedPatient; + + // Updates. + List panelTypes_Updates = new List(); + panelTypes_Updates.Add(SpmTabPage_Patient.PanelType.Updates); + if (panelTypes_Updates.Count > 0) + { + SpmTabPage_Patient.Config configTabPage = new SpmTabPage_Patient.Config(); + configTabPage.Internals = Internals; + configTabPage.ReadOnly = ReadOnly; + configTabPage.PanelTypes.AddRange(panelTypes_Updates); + SpmTabPage_Patient tabPage = new SpmTabPage_Patient(configTabPage) { Text = "Updates" }; + tabPages.Add(tabPage); + } + + // Populate tab pages. + tabControl.Visible = tabPages.Count > 0; + foreach (var tabPage in tabPages) + tabControl.TabPages.Add(tabPage); + } + + //------------------------------------------------------------------- + // P a n e l I n t e r f a c e + //------------------------------------------------------------------- + private String previouslySelectedTabPageText = ""; + private void RefreshTabs () + { + if (tabControl.SelectedTab != null) + previouslySelectedTabPageText = tabControl.SelectedTab.Text; + + // Reinitialise tabs whenever the selection changes in case the set of tab pages displayed needs to be changed. + InitTabs(); + + // Select previous tab page if still present. + if (!StringUtil.IsEmpty(previouslySelectedTabPageText)) + { + foreach (TabPage tabPage in tabControl.TabPages) + { + if (tabPage.Text.Equals(previouslySelectedTabPageText)) + { + tabControl.SelectTab(tabPage); + break; + } + } + } + RefreshTabPages(); + + SetControlActivity(); + PositionControls(); + } + private void RefreshTabPages () + { + // Selected Patient - populated when needed. + SpmPatient patient = null; + + // Refresh tabs. + if (tabControl.Visible) + { + if (patient == null) patient = SelectedPatient; + SpmPatient.Data patientData = patient != null ? patient.GetData() : new SpmPatient.Data(); + tabPages.PopulateToControls(patientData); + } + } + + //------------------------------------------------------------------- + // F i l t e r + //------------------------------------------------------------------- + public bool ParamsAreValid (SpmPatient.Params prmPatient) + { + return true; + } + public SpmPatient.Params GetParams () + { + SpmPatient.Params prmPatient = new SpmPatient.Params(); + + // Sort columns. + prmPatient.SortColumns.AddRange(listViewPatient.GetSortColumns()); + return prmPatient; + } + + //------------------------------------------------------------------- + // A c t i o n s + //------------------------------------------------------------------- + // Refresh. + public override void RefreshDataItems () + { + SpmPatient.Params prmPatient = GetParams(); + if (!ParamsAreValid(prmPatient)) prmPatient = null; + listViewPatient.RefreshPatients(prmPatient); + } + public override void RefreshDataItem (SysId id) + { + listViewPatient.RefreshPatient(id); + } + public override void RemoveDataItem (SysId id) + { + listViewPatient.RemoveItemById(id); + } + + //------------------------------------------------------------------- + // Create item. + public override bool CanCreateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void CreateItem () + { + if (!CanCreateItem()) return; + if (config.Mode == PanelMode.Search) return; + // Create new Patient. + SpmForm_Patient.Config configPatient = new SpmForm_Patient.Config(); + using (var form = new SpmForm_Patient(configPatient)) + { + if (form.ShowDialog() == DialogResult.OK) + { + RefreshDataItem(form.NewItemId); + InvokeItemCreatedEvent(Spm.DataItemType.Patient, form.NewItemId); + } + } + } + + //------------------------------------------------------------------- + // View/Update item. + public override bool CanViewItem () + { + return true; + } + public override bool CanUpdateItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void UpdateItem (bool updateItem = true) + { + if (config.Mode == PanelMode.Search) return; + SpmPatient patient = SelectedPatient; + if (SelectedItemCount != 1) return; + if (!CanUpdateItem() && !CanViewItem()) return; + if (!CanUpdateItem()) updateItem = false; + if (patient == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve selected item"); + return; + } + SpmForm_Patient.Config configPatient = new SpmForm_Patient.Config(); + configPatient.PatientToUpdate = patient; + configPatient.ReadOnly = (config.ReadOnly || !updateItem); + using (SpmForm_Patient formPatient = new SpmForm_Patient(configPatient)) + { + // Perform the update. + if (formPatient.ShowDialog() == DialogResult.OK) + { + // Patient has been updated. + RefreshDataItem(patient.Id); + listViewPatient.RefreshPatient(patient.Id); + InvokeItemUpdatedEvent(Spm.DataItemType.Patient, patient.Id); + } + } + } + + //------------------------------------------------------------------- + // Delete item. + public override bool CanDeleteItem () + { + if (ReadOnly) return false; + if (!SecurityProfile.Admin.CanManageConfig()) return false; + return true; + } + public override void DeleteItem () + { + if (!CanDeleteItem()) return; + if (config.Mode == PanelMode.Search) return; + if (SelectedItemCount != 1) return; + SpmPatient patient = SelectedPatient; + if (patient == null) + { + MessageConsole.ShowMessageWarning("Failed to retrieve item for deletion."); + return; + } + if (!InstitutionMgr.PatientCanBeDeleted(patient)) + { + MessageConsole.ShowMessageError("Unable to remove patient - " + InstitutionMgr.ErrorStateMessage + "."); + return; + } + if (MessageConsole.ShowMessageConfirm("Are you sure that this patient should be removed from the system?")) + { + if (InstitutionMgr.DeletePatient(patient, DbUpdateInfo)) + { + int selectIdx = listViewPatient.SelectedIndex; + listViewPatient.RemoveItemById(patient.Id.ToString()); + if (selectIdx >= listViewPatient.ItemCount - 1) selectIdx--; + listViewPatient.SelectedIndices.Clear(); + listViewPatient.SelectedIndices.Add(selectIdx); + } + else MessageConsole.ShowMessageError("Failed to remove patient - " + InstitutionMgr.ErrorStateMessage + "."); + } + } + + //------------------------------------------------------------------- + // Import data. + public override bool CanImportData () + { + return false; + } + public override void ImportData () + { + if (!CanImportData()) return; + } + + //------------------------------------------------------------------- + // Export data. + public override bool CanExportData () + { + return false; + } + public override void ExportData () + { + } + + //------------------------------------------------------------------- + // C o n t e x t M e n u + //------------------------------------------------------------------- + private SpmContextMenuStrip contextMenuStrip = new SpmContextMenuStrip(); + private void RefreshContextMenu () + { + contextMenuStrip.Name = "Patient"; + contextMenuStrip.Items.Clear(); + if (CanCreateItem()) + contextMenuStrip.Items.Add("Create", null, CreateItem); + if (SysId.IsValid(listViewPatient.SelectedItemId)) + { + SpmPatient patient = SelectedPatient; + if (patient != null) + { + if (CanUpdateItem() || CanDeleteItem()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + contextMenuStrip.Items.Add(CanUpdateItem() ? "Update" : "View", null, UpdateItem); + if (CanDeleteItem()) + contextMenuStrip.Items.Add("Remove", null, DeleteItem); + } + } + } + if (CanExportData() || CanImportData()) + { + if (contextMenuStrip.Items.Count > 0) + contextMenuStrip.Items.Add(new ToolStripSeparator()); + if (CanImportData()) + contextMenuStrip.Items.Add("Import", null, ImportData); + if (CanExportData()) + contextMenuStrip.Items.Add("Export", null, ExportData); + } + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected override void SetControlActivity () + { + SetControlsReadOnly(); + bool itemSelected = SysId.IsValid(SelectedItemId); + + listViewPatient.Enabled = Enabled; + buttonCreate.Enabled = Enabled; + buttonUpdate.Enabled = Enabled && itemSelected; + buttonRemove.Enabled = Enabled && itemSelected; + buttonOk.Enabled = Enabled; + buttonCancel.Enabled = Enabled; + } + protected override void SetControlsReadOnly () + { + } + + //------------------------------------------------------------------- + // P o s i t i o n C o n t r o l s + //------------------------------------------------------------------- + protected override void PositionControls () + { + if (this.IsDesignerHosted() || !Created) return; + Rectangle clientRect = ClientRectangle; + + //--------------------------------------------------------------- + // Filter panel. + if (listFilterPatient.Visible) + { + listFilterPatient.PositionAtTopLeftOf(this); + listFilterPatient.SetFullWidthOf(this); + listFilterPatient.ResizeToBottomControl(); + listViewPatient.PositionBelow(listFilterPatient); + } + else + { + listViewPatient.PositionAtTopLeftOf(this); + } + + //--------------------------------------------------------------- + // List view. + int buttonLeft = clientRect.Width - buttonCreate.Width - buttonCreate.Margin.Right - Padding.Right; + listViewPatient.Left = listViewPatient.Margin.Left; + listViewPatient.Width = buttonLeft - buttonCreate.Margin.Left - listViewPatient.Left - listViewPatient.Margin.Right; + if (!(buttonCreate.Visible || buttonUpdate.Visible || buttonRemove.Visible || buttonOk.Visible || buttonCancel.Visible)) + listViewPatient.Width = clientRect.Width - Padding.Right - listViewPatient.Left - listViewPatient.Margin.Right; + + //--------------------------------------------------------------- + // Tab control. + if (tabControl.Visible) + { + tabControl.Left = listViewPatient.Left; + tabControl.Width = clientRect.Width - (tabControl.Left * 2); + listViewPatient.Height = (int)((clientRect.Height - listViewPatient.Top) * 0.40); + tabControl.Top = listViewPatient.Bottom + listViewPatient.Margin.Bottom + tabControl.Margin.Top; + tabControl.Height = clientRect.Height - tabControl.Top - tabControl.Margin.Bottom - Padding.Bottom; + } + else + { + listViewPatient.Height = clientRect.Height - listViewPatient.Top - listViewPatient.Margin.Bottom - Padding.Bottom; + } + + //--------------------------------------------------------------- + // Create button. + int buttonTop = listViewPatient.Top + listViewPatient.HeaderHeight; + buttonCreate.Top = buttonTop; + buttonCreate.Left = buttonLeft; + if (buttonCreate.Visible) + buttonTop += buttonCreate.Height + buttonCreate.Margin.Bottom; + + // Update button. + buttonUpdate.Top = buttonTop; + buttonUpdate.Left = buttonLeft; + if (buttonUpdate.Visible) + buttonTop += buttonUpdate.Height + buttonUpdate.Margin.Bottom; + + // Remove button. + buttonRemove.Top = buttonTop; + buttonRemove.Left = buttonLeft; + if (buttonRemove.Visible) + buttonTop += buttonRemove.Height + buttonRemove.Margin.Bottom; + + //--------------------------------------------------------------- + // Navigation buttons. + // Cancel button. + buttonCancel.Top = clientRect.Bottom - Padding.Bottom - buttonCancel.Margin.Bottom - buttonCancel.Height; + buttonCancel.Left = buttonLeft; + + // OK button. + buttonOk.Top = buttonCancel.Top - buttonOk.Height - buttonCancel.Padding.Top - buttonCancel.Margin.Bottom; + buttonOk.Left = buttonLeft; + if (buttonOk.Visible) + buttonTop += buttonOk.Height + buttonOk.Margin.Bottom; + + //--------------------------------------------------------------- + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + // Filter. + private void listFilterPatient_FilterChanged (object sender, EventArgs e) + { + RefreshDataItems(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Item list. + private void listViewPatient_ColumnClick (object sender, ColumnClickEventArgs e) + { + RefreshDataItems(); + } + private void listViewPatient_ItemCountChanged (object sender, Sarand.Win.Forms.Controls.SacsListView.ItemCountChangedEventArgs e) + { + InvokeItemCountChangedEvent(e); + } + private void listViewPatient_SelectedIndexChanged (object sender, EventArgs e) + { + RefreshTabs(); + InvokeItemSelectionChangedEvent(e); + SetControlActivity(); + } + private void listViewPatient_DoubleClick (object sender, EventArgs e) + { + if (config.Mode == PanelMode.Search) + { + //if (config.SearchForm != null) config.SearchForm.OnOK(); + } + else + UpdateItem(); + SetControlActivity(); + } + private void listViewPatient_MouseUp (object sender, MouseEventArgs e) + { + switch (e.Button) + { + case MouseButtons.Right: + // Refresh the context menu and display at pointer position. + RefreshContextMenu(); + contextMenuStrip.Show(listViewPatient, new Point(e.X, e.Y), ToolStripDropDownDirection.Default); + break; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + // Actions. + private void buttonCreate_Click (object sender, EventArgs e) + { + CreateItem(); + SetControlActivity(); + } + private void buttonUpdate_Click (object sender, EventArgs e) + { + UpdateItem(); + SetControlActivity(); + } + private void buttonRemove_Click (object sender, EventArgs e) + { + DeleteItem(); + SetControlActivity(); + } + private void buttonOk_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnOK(); + return; + } + SetControlActivity(); + } + private void buttonCancel_Click (object sender, EventArgs e) + { + if (config.SearchForm != null) + { + //config.SearchForm.OnCancel(); + return; + } + SetControlActivity(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.resx b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/Panels/SpmPanel_Patients.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.Designer.cs new file mode 100644 index 0000000..ae8acb1 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_Employee + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.cs new file mode 100644 index 0000000..dcae492 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Employee.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_Employee : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// Employee form hosting the tab control. + public SpmForm_Employee EmployeeForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_Employee(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmEmployee.Data data) + { + if (panelUpdates != null) + panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.Employee, data.Id); + } + public bool IsDataValid(SpmEmployee.Data data) + { + return true; + } + public void PopulateFromControls(SpmEmployee.Data data) + { + } + public bool UpdateAssociatedData(SpmEmployee.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_EmployeeList + { + public static void PopulateToControls (this List tabPages, SpmEmployee.Data data) + { + foreach (SpmTabPage_Employee tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmEmployee.Data data) + { + foreach (SpmTabPage_Employee tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.Designer.cs new file mode 100644 index 0000000..91f960d --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_EmployeeRole + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.cs new file mode 100644 index 0000000..df7af89 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_EmployeeRole.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_EmployeeRole : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// EmployeeRole form hosting the tab control. + public SpmForm_EmployeeRole EmployeeRoleForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_EmployeeRole(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmEmployeeRole.Data data) + { + if (panelUpdates != null) + panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.EmployeeRole, data.Id); + } + public bool IsDataValid(SpmEmployeeRole.Data data) + { + return true; + } + public void PopulateFromControls(SpmEmployeeRole.Data data) + { + } + public bool UpdateAssociatedData(SpmEmployeeRole.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_EmployeeRoleList + { + public static void PopulateToControls (this List tabPages, SpmEmployeeRole.Data data) + { + foreach (SpmTabPage_EmployeeRole tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmEmployeeRole.Data data) + { + foreach (SpmTabPage_EmployeeRole tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.Designer.cs new file mode 100644 index 0000000..60a481f --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_Institution + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.cs new file mode 100644 index 0000000..3a79d46 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Institution.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_Institution : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// Institution form hosting the tab control. + public SpmForm_Institution InstitutionForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_Institution(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmInstitution.Data data) + { + if (panelUpdates != null) + panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.Institution, data.Id); + } + public bool IsDataValid(SpmInstitution.Data data) + { + return true; + } + public void PopulateFromControls(SpmInstitution.Data data) + { + } + public bool UpdateAssociatedData(SpmInstitution.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_InstitutionList + { + public static void PopulateToControls (this List tabPages, SpmInstitution.Data data) + { + foreach (SpmTabPage_Institution tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmInstitution.Data data) + { + foreach (SpmTabPage_Institution tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.Designer.cs new file mode 100644 index 0000000..8a2992f --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_Operation + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.cs new file mode 100644 index 0000000..e0e6b44 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Operation.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_Operation : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// Operation form hosting the tab control. + public SpmForm_Operation OperationForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_Operation(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmOperation.Data data) + { + if (panelUpdates != null) + panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.Operation, data.Id); + } + public bool IsDataValid(SpmOperation.Data data) + { + return true; + } + public void PopulateFromControls(SpmOperation.Data data) + { + } + public bool UpdateAssociatedData(SpmOperation.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_OperationList + { + public static void PopulateToControls (this List tabPages, SpmOperation.Data data) + { + foreach (SpmTabPage_Operation tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmOperation.Data data) + { + foreach (SpmTabPage_Operation tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.Designer.cs new file mode 100644 index 0000000..5190c5c --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_Patient + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.cs new file mode 100644 index 0000000..4b0f417 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Patient.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_Patient : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// Patient form hosting the tab control. + public SpmForm_Patient PatientForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_Patient(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmPatient.Data data) + { + if (panelUpdates != null) + panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.Patient, data.Id); + } + public bool IsDataValid(SpmPatient.Data data) + { + return true; + } + public void PopulateFromControls(SpmPatient.Data data) + { + } + public bool UpdateAssociatedData(SpmPatient.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_PatientList + { + public static void PopulateToControls (this List tabPages, SpmPatient.Data data) + { + foreach (SpmTabPage_Patient tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmPatient.Data data) + { + foreach (SpmTabPage_Patient tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.Designer.cs new file mode 100644 index 0000000..a7ebfa3 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_Procedure + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.cs new file mode 100644 index 0000000..4a8f23a --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_Procedure.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_Procedure : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// Procedure form hosting the tab control. + public SpmForm_Procedure ProcedureForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_Procedure(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmProcedure.Data data) + { + if (panelUpdates != null) + panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.Procedure, data.Id); + } + public bool IsDataValid(SpmProcedure.Data data) + { + return true; + } + public void PopulateFromControls(SpmProcedure.Data data) + { + } + public bool UpdateAssociatedData(SpmProcedure.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_ProcedureList + { + public static void PopulateToControls (this List tabPages, SpmProcedure.Data data) + { + foreach (SpmTabPage_Procedure tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmProcedure.Data data) + { + foreach (SpmTabPage_Procedure tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.Designer.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.Designer.cs new file mode 100644 index 0000000..c68ba09 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.Designer.cs @@ -0,0 +1,23 @@ +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + partial class SpmTabPage_TemplateData + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.cs b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.cs new file mode 100644 index 0000000..a3a6a94 --- /dev/null +++ b/SaPatMgrWinForms/Win/Forms/TabPages/SpmTabPage_TemplateData.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Sarand.PatientMgr.Win.Forms.Base; +using Sarand.PatientMgr.Core.Bus; +using Sarand.Core.Base; +using Sarand.PatientMgr.Win.Forms.Panels; +using Sarand.Win.Forms.UpdateLog; +using Sarand.Win.Forms.Controls; +using Sarand.PatientMgr.Win.Forms.Maint; +using Sarand.PatientMgr.Core.App; +using Sarand.Core.Bus; +using Sarand.Win.Forms.Utils; + +namespace Sarand.PatientMgr.Win.Forms.TabPages +{ + //======================================================================= + public partial class SpmTabPage_TemplateData : SpmTabPage + { + //------------------------------------------------------------------- + // Configuration. + public enum PanelType + { + Unknown = 0, + Updates, + } + public new class Config : SpmTabPage.Config + { + /// TemplateData form hosting the tab control. + //public SpmForm_TemplateData TemplateDataForm { get; set; } = null; + /// Panels to display on this tab page. + public List PanelTypes { get; } = new List(); + /// Number of panels on this tab page. + public override int PanelCount { get { return PanelTypes.Count; } } + } + + //------------------------------------------------------------------- + // Data members. + private Config config = new Config(); + private SaPanel_UpdateLog panelUpdates = null; + + //------------------------------------------------------------------- + // Construction. + public SpmTabPage_TemplateData(Config config) : base(config) + { + this.config = config; + InitializeComponent(); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + /// Panels to display on this tab page. + public List PanelTypes { get { return config.PanelTypes; } } + + //------------------------------------------------------------------- + // Initialisation. + protected override void OnCreateControl() + { + base.OnCreateControl(); + if (this.IsDesignerHosted()) return; + + // Configure page. + + // Initial panels. + List panels = new List(); + foreach (var panelType in config.PanelTypes) + { + SacsPanel panel = null; + switch (panelType) + { + case PanelType.Updates: + { + SaPanel_UpdateLog.Config configUpdateLog = new SaPanel_UpdateLog.Config(); + configUpdateLog.UpdateLogConsole = UpdateLogConsole; + panelUpdates = new SaPanel_UpdateLog(); + panelUpdates.SetConfig(configUpdateLog); + panel = panelUpdates; + panel.SizeChanged += Panel_Resize; + break; + } + } + if (panel != null) + panels.Add(panel); + else Logger.Warn(GetType().Name + ".OnCreateControl Panel type not supported: " + panelType.ToString()); + } + AddPanelsToPage(panels); + + // Complete panel initialisation. + SetControlsReadOnly(); + SetControlActivity(); + } + + //------------------------------------------------------------------- + // P a g e I n t e r f a c e + //------------------------------------------------------------------- + + + //------------------------------------------------------------------- + // P o p u l a t i o n + //------------------------------------------------------------------- + public void PopulateToControls(SpmTemplateData.Data data) + { + //if (panelUpdates != null) + //panelUpdates.ItemId = new ItemId((short)Spm.DataItemType.TemplateData, data.Id); + } + public bool IsDataValid(SpmTemplateData.Data data) + { + return true; + } + public void PopulateFromControls(SpmTemplateData.Data data) + { + } + public bool UpdateAssociatedData(SpmTemplateData.Data data) + { + return true; + } + + //------------------------------------------------------------------- + // C o n t r o l A c t i v i t y + //------------------------------------------------------------------- + protected void SetControlActivity() + { + if (panelUpdates != null) + panelUpdates.Enabled = Enabled; + } + public bool IsFieldReadOnly(SpmDbDfn.ColumnIdx col) + { + return false; + } + protected void SetControlsReadOnly() + { + return; + } + + //------------------------------------------------------------------- + // P a n e l E v e n t s + //------------------------------------------------------------------- + private void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemCreatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId); + } + private void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e) + { + InvokeItemDeletedEvent((short)e.ItemType, e.ItemId); + } + + //------------------------------------------------------------------- + // P a n e l S i z e a n d P o s i t i o n + //------------------------------------------------------------------- + protected override void PositionControls() + { + base.PositionControls(); + Rectangle clientRect = ClientRectangle; + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SpmTabPage_TemplateDataList + { + public static void PopulateToControls (this List tabPages, SpmTemplateData.Data data) + { + foreach (SpmTabPage_TemplateData tabPage in tabPages) + tabPage.PopulateToControls(data); + } + public static void PopulateFromControls (this List tabPages, SpmTemplateData.Data data) + { + foreach (SpmTabPage_TemplateData tabPage in tabPages) + tabPage.PopulateFromControls(data); + } + } + + //======================================================================= +}