using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; using Sarand.Core.App; using Sarand.Core.Base; using Sarand.Core.Bus; using Sarand.Core.Dbas.Base; using Sarand.Win.Dbas.Base; using Sarand.PatientMgr.Core.App; using Sarand.PatientMgr.Core.Bus; using Sarand.PatientMgr.Core.Mgr; using Sarand.PatientMgr.Win.Dbas.Bus; using Sarand.PatientMgr.Win.Dbas.Internal; //using Sarand.PatientMgr.Win.Dbas.UpdateLog; using Sarand.Win.Dbas.Data; namespace Sarand.PatientMgr.Win.Dbas.Mgr { //======================================================================= internal partial class SpmAdmissionMgr_Dbas : SpmAdmissionMgr { //******************************************************************* // A d m i s s i o n s //******************************************************************* // Utilities. public bool CanMoveUp(SpmAdmission admission) { ClearErrorState(); return false; } public bool CanMoveDown(SpmAdmission admission) { ClearErrorState(); return false; } public bool Resequence(SysId facilityId, SysId facilityTemplateId, DateTime admissionDate) { ClearErrorState(); return false; } public short GetNextAdmissionSequence(SpmAdmission admission) { ClearErrorState(); return 0; } public bool MoveUp(SpmAdmission admission) { ClearErrorState(); return false; } public bool MoveDown(SpmAdmission admission) { ClearErrorState(); return false; } public long AdmissionsForFacility(DateTime sessionDate, SysId facilityId) { ClearErrorState(); if (DateUtil.IsValid(sessionDate) && SysId.IsValid(facilityId)) { // Dummy query to set DBMS - for correct formatting of strings and dates etc. DbQuery qryDummy = new DbQuery(Database != null ? Database.DbmsType : DbmsType.General); // Filter to identify matching templates. // Admission.AdmissionFrom <= Session date // Admission.AdmissionTo >= Session date // Admission.FacilityId = Facility Id // Admission.CancelType = None List filters = new List(); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom) + "<" + DbQuery.FormatDateForCondition(sessionDate.AddDays(1))); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo) + ">=" + DbQuery.FormatDateForCondition(sessionDate)); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityId) + "=" + facilityId.ToString()); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_CancelType) + "=" + ((int)Spm.AdmissionCancelType.None).ToString()); return Database.GetRowCount(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission), filters.Concat(" AND ", "(", ")")); } return 0; } public long AdmissionsForTemplate(DateTime sessionDate, SysId templateId) { ClearErrorState(); if (DateUtil.IsValid(sessionDate) && SysId.IsValid(templateId)) { // Dummy query to set DBMS - for correct formatting of strings and dates etc. DbQuery qryDummy = new DbQuery(Database != null ? Database.DbmsType : DbmsType.General); // Filter to identify matching templates. // Admission.AdmissionFrom <= Session date // Admission.AdmissionTo >= Session date // Admission.FacilityId = Facility Id // Admission.CancelType = None List filters = new List(); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom) + "<" + DbQuery.FormatDateForCondition(sessionDate.AddDays(1))); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo) + ">=" + DbQuery.FormatDateForCondition(sessionDate)); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId) + "=" + templateId.ToString()); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_CancelType) + "=" + ((int)Spm.AdmissionCancelType.None).ToString()); return Database.GetRowCount(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission), filters.Concat(" AND ", "(", ")")); } return 0; } //------------------------------------------------------------------- // Create Admission. public override SpmAdmission CreateAdmission(SysId facilityId, SysId facilityTemplateId) { return new SpmAdmission_Dbas(UserContext, facilityId, facilityTemplateId, 0); } private SpmAdmission_Dbas CreateAdmission(SwmAdmission_Db dbAdmission) { ClearErrorState(); SpmAdmission_Dbas admission = new SpmAdmission_Dbas(UserContext, new SysId(dbAdmission._FacilityId), new SysId(dbAdmission._FacilityTemplateId), (ushort)dbAdmission._Flags); PopulateFrom(dbAdmission, admission); return admission; } //------------------------------------------------------------------- // Get Admission. public override SpmAdmission GetAdmission(SpmAdmission.Params prm) { return GetAdmission(GetAdmissionQueryFilter(prm).Concat(" AND ", "(", ")")); } private SpmAdmission GetAdmission(String filter) { ClearErrorState(); long count = GetAdmissionCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple Admissiones found"); return null; } SpmAdmission admission = null; // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SwmAdmission_Db dbAdmission = new SwmAdmission_Db(DbInfo); dbAdmission.PopulateFrom(dbCommand, aliasAdmission, filter); admission = CreateAdmission(dbAdmission); } catch (Exception exc) { SetErrorState("Database query exception"); Logger.Warn(GetType().Name + ".GetAdmission\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return admission; } //------------------------------------------------------------------- // Validate Admission. public override bool IsValidAdmissionData(SpmAdmission.Data data, SpmAdmission.ErrField errField) { ClearErrorState(); if (!base.IsValidAdmissionData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert Admission. public override bool InsertAdmission(SpmAdmission admission, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidAdmission(admission)) return false; if (SysId.IsValid(admission.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SwmAdmission_Db dbAdmission = new SwmAdmission_Db(DbInfo); PopulateTo(dbAdmission, admission, dbUpdateInfo); if (SwmAdmission_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbAdmission._Id = SysId.ToInt(Database.GetNextId("Admission", dbUpdateInfo)); } dbAdmission.ExecuteInsertCommand(dbCommand); admission.Id = new SysId(dbAdmission._Id); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update Admission. public override bool UpdateAdmission(SpmAdmission admission, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidAdmission(admission)) return false; if (!SysId.IsValid(admission.Id)) return SetErrorState(ErrorMessage.InvalidItemId); using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve Admission. dbConnection.Open(); SwmAdmission_Db dbAdmission = new SwmAdmission_Db(DbInfo); dbAdmission.PopulateFrom(dbCommand, aliasAdmission, "Id=" + SysId.ToString(admission.Id)); //SpmUpdateLogItemMonitor_Admission updateLogMonitor = new SpmUpdateLogItemMonitor_Admission(UserContext, CreateAdmission(dbAdmission)); // Update properties. PopulateTo(dbAdmission, admission, dbUpdateInfo); dbAdmission.ExecuteUpdateCommand(dbCommand); /* Record updates. updateLogMonitor.RecordUpdatedValues(admission); updateLogMonitor.LogUpdates();*/ } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete Admission. public override bool AdmissionCanBeDeleted(SpmAdmission admission) { ClearErrorState(); if (!base.AdmissionCanBeDeleted(admission)) return false; return true; } public override bool DeleteAdmission(SpmAdmission admission, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!AdmissionCanBeDeleted(admission)) return false; using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve Admission. dbConnection.Open(); SwmAdmission_Db dbAdmission = new SwmAdmission_Db(DbInfo); dbAdmission.PopulateFrom(dbCommand, aliasAdmission, "Id=" + admission.Id.ToString()); // Delete Admission. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission) + " WHERE Id=" + SysId.ToString(admission.Id) + ";"; dbCommand.ExecuteNonQuery(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(SwmAdmission_Db dbAdmission, SpmAdmission admission, DbUpdateInfo dbUpdateInfo) { dbAdmission._Id = admission.Id.ToInt(); dbAdmission._FacilityId = admission.FacilityId.ToInt(); dbAdmission._FacilityTemplateId = admission.FacilityTemplateId.ToInt(); dbAdmission._AdmissionFrom = admission.AdmissionFrom; dbAdmission._AdmissionTo = admission.AdmissionTo; dbAdmission._ToComeIn = admission.ToComeIn; dbAdmission._Seq = (byte)admission.Seq; dbAdmission._Type = (short)admission.AdmissionType; dbAdmission._Occupancy = (short)admission.Occupancy; dbAdmission._DecisionToReferOn = admission.DecisionToReferOn; dbAdmission._ReferredOn = admission.ReferredOn; dbAdmission._DecisionToAdmitOn = admission.DecisionToAdmitOn; dbAdmission._BreechOn = admission.BreechOn; dbAdmission._PatientId = admission.PatientId.ToInt(); dbAdmission._PatientNo = admission.PatientNo; dbAdmission._NhsNumber = admission.NhsNumber; dbAdmission._Title = admission.Title; dbAdmission._Forename = admission.Forename; dbAdmission._Surname = admission.Surname; dbAdmission._Gender = (short)admission.Gender; dbAdmission._BirthOn = DateUtil.DateToInt32(admission.BirthOn); dbAdmission._Age = admission.Age; dbAdmission._AgeOn = admission.AgeOn; dbAdmission._FacilityIdWard = admission.FacilityIdWard.ToInt(); dbAdmission._Ward = admission.Ward; dbAdmission._ProcedureId = admission.ProcedureId.ToInt(); dbAdmission._SpecialityCode = admission.SpecialityCode; dbAdmission._ProcedureDesc = admission.ProcedureDesc; dbAdmission._ComplexityCode = admission.ComplexityCode; dbAdmission._ProcedureIndication = admission.ProcedureIndication; dbAdmission._PatientHistory = admission.PatientHistory; dbAdmission._GestationPeriod = admission.GestationPeriod; dbAdmission._SystemRef = admission.SystemRef; dbAdmission._DurationExp = (short)admission.DurationExp; dbAdmission._DurationAct = (short)admission.DurationAct; dbAdmission._UnitsExp = (short)admission.UnitsExp; dbAdmission._UnitsAct = (short)admission.UnitsAct; dbAdmission._Anaesthetic = admission.Anaesthetic; dbAdmission._Position = admission.Position; dbAdmission._SpecialEquipment = admission.SpecialEquipment; dbAdmission._AttendanceType = (short)admission.AttendanceType; dbAdmission._AttendanceStatus = admission.AttendanceStatus; dbAdmission._ComfortScore = admission.ComfortScore; dbAdmission._TimeCalled = admission.TimeCalled; dbAdmission._TimeArrived = admission.TimeArrived; dbAdmission._TimeAnaesStart = admission.TimeAnaesStart; dbAdmission._TimeProcStart = admission.TimeProcStart; dbAdmission._TimeProcEnd = admission.TimeProcEnd; dbAdmission._TimeInRecovery = admission.TimeInRecovery; dbAdmission._TimeInformDest = admission.TimeInformDest; dbAdmission._TimeLeave = admission.TimeLeave; dbAdmission._CancelType = (short)admission.CancelType; dbAdmission._CancelDate = admission.CancelDate; dbAdmission._CancelCount = (short)admission.CancelCount; dbAdmission._CancelCode = admission.CancelCode; dbAdmission._CancelReason = admission.CancelReason; dbAdmission._Notes = admission.Notes; dbAdmission._Status = SacsSystem.GetStatusCode(admission.Status); dbAdmission._Flags = (short)admission.Flags; if (!SysId.IsValid(admission.Id)) { dbAdmission._CreateOn = DateTime.UtcNow; dbAdmission._CreateBy = dbUpdateInfo.UserId.ToInt(); dbAdmission._CreateHost = dbUpdateInfo.Host; } dbAdmission._UpdateOn = DateTime.UtcNow; dbAdmission._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbAdmission._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(SwmAdmission_Db dbAdmission, SpmAdmission admission) { admission.Id = new SysId(dbAdmission._Id); admission.FacilityId = new SysId(dbAdmission._FacilityId); admission.FacilityTemplateId = new SysId(dbAdmission._FacilityTemplateId); admission.AdmissionFrom = dbAdmission._AdmissionFrom; admission.AdmissionTo = dbAdmission._AdmissionTo; admission.ToComeIn = dbAdmission._ToComeIn; admission.Seq = dbAdmission._Seq; admission.AdmissionType = (Spm.AdmissionType)dbAdmission._Type; admission.Occupancy = (Spm.AdmissionOccupancy)dbAdmission._Occupancy; admission.DecisionToReferOn = dbAdmission._DecisionToReferOn; admission.ReferredOn = dbAdmission._ReferredOn; admission.DecisionToAdmitOn = dbAdmission._DecisionToAdmitOn; admission.BreechOn = dbAdmission._BreechOn; admission.PatientId = new SysId(dbAdmission._PatientId); admission.PatientNo = dbAdmission._PatientNo; admission.NhsNumber = dbAdmission._NhsNumber; admission.Title = dbAdmission._Title; admission.Forename = dbAdmission._Forename; admission.Surname = dbAdmission._Surname; admission.Gender = (Spm.Gender)dbAdmission._Gender; admission.BirthOn = DateUtil.Int32ToDate(dbAdmission._BirthOn); admission.Age = dbAdmission._Age; admission.AgeOn = dbAdmission._AgeOn; admission.FacilityIdWard = new SysId(dbAdmission._FacilityIdWard); admission.Ward = dbAdmission._Ward; admission.ProcedureId = new SysId(dbAdmission._ProcedureId); admission.SpecialityCode = dbAdmission._SpecialityCode; admission.ProcedureDesc = dbAdmission._ProcedureDesc; admission.ComplexityCode = dbAdmission._ComplexityCode; admission.ProcedureIndication = dbAdmission._ProcedureIndication; admission.PatientHistory = dbAdmission._PatientHistory; admission.GestationPeriod = dbAdmission._GestationPeriod; admission.SystemRef = dbAdmission._SystemRef; admission.DurationExp = (ushort)dbAdmission._DurationExp; admission.DurationAct = (ushort)dbAdmission._DurationAct; admission.UnitsExp = (short)dbAdmission._UnitsExp; admission.UnitsAct = (short)dbAdmission._UnitsAct; admission.Anaesthetic = dbAdmission._Anaesthetic; admission.Position = dbAdmission._Position; admission.SpecialEquipment = dbAdmission._SpecialEquipment; admission.AttendanceType = (Spm.AttendanceType)dbAdmission._AttendanceType; admission.AttendanceStatus = dbAdmission._AttendanceStatus; admission.ComfortScore = dbAdmission._ComfortScore; admission.TimeCalled = dbAdmission._TimeCalled; admission.TimeArrived = dbAdmission._TimeArrived; admission.TimeAnaesStart = dbAdmission._TimeAnaesStart; admission.TimeProcStart = dbAdmission._TimeProcStart; admission.TimeProcEnd = dbAdmission._TimeProcEnd; admission.TimeInRecovery = dbAdmission._TimeInRecovery; admission.TimeInformDest = dbAdmission._TimeInformDest; admission.TimeLeave = dbAdmission._TimeLeave; admission.CancelType = (Spm.AdmissionCancelType)dbAdmission._CancelType; admission.CancelDate = dbAdmission._CancelDate; admission.CancelCount = (ushort)dbAdmission._CancelCount; admission.CancelCode = dbAdmission._CancelCode; admission.CancelReason = dbAdmission._CancelReason; admission.Notes = dbAdmission._Notes; admission.Status = SacsSystem.GetStatusForCode(dbAdmission._Status); admission.SetCreateStamp(dbAdmission._CreateOn, new SysId(dbAdmission._CreateBy), dbAdmission._CreateHost); admission.SetUpdateStamp(dbAdmission._UpdateOn, new SysId(dbAdmission._UpdateBy), dbAdmission._UpdateHost); admission.AcceptChanges(); } //------------------------------------------------------------------- // alias & prefix column definitions. private static readonly String aliasAdmission = "aAdm"; private static readonly String prefixAdmission = "Adm_"; private static readonly String aliasAdmission_Facility = "aAdmFac"; private static readonly String prefixAdmission_Facility = "AdmFac_"; private static readonly String aliasAdmission_Template = "aAdmTmpl"; private static readonly String prefixAdmission_Template = "AdmTmpl_"; private static readonly String aliasAdmission_Session = "aAdmSess"; private static readonly String prefixAdmission_Session = "AdmSess_"; private static readonly String aliasAdmission_Patient = "aAdmPat"; private static readonly String prefixAdmission_Patient = "AdmPat_"; private static readonly String aliasAdmission_AdmRoleConsOpn = "aAdmArCo"; private static readonly String prefixAdmission_AdmRoleConsOpn = "AdmArCo_"; private static readonly String aliasAdmission_AdmRoleConsRef = "aAdmArCr"; private static readonly String prefixAdmission_AdmRoleConsRef = "AdmArCr_"; private static readonly String aliasAdmission_AdmRoleSurgOpn = "aAdmArSo"; private static readonly String prefixAdmission_AdmRoleSurgOpn = "AdmArSo_"; private static readonly String aliasAdmission_AdmRoleAnaeOpn = "aAdmArAo"; private static readonly String prefixAdmission_AdmRoleAnaeOpn = "AdmArAo_"; private static readonly String colAdmission_CancelTypeDesc = "CancelTypeDesc"; //------------------------------------------------------------------- // Setting Admission column definitions. private void SetAdmissionColDfn (ColumnDfn col, String caption, int width, SpmDbDfn.ColumnIdx dbCol, ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, String alias = "", String prefix = "") { if (String.IsNullOrEmpty(alias) && SpmDbDfn.GetTableForColumn(dbCol) == SpmDbDfn.TableIdx.SwmAdmission) alias = aliasAdmission; col.Set(caption, width, (int)dbCol, prefix + SpmDbDfn.GetColumnName(dbCol, false), SpmDbDfn.GetColumnNameQual(dbCol, alias), dataType, align); if (dataType == DataValue.DataType.String && dbCol != SpmDbDfn.ColumnIdx.Unknown) col.MaxLength = (int)SpmDbDfn.GetColTextLen(dbCol); } //------------------------------------------------------------------- // Getting Admission column definition. public override ColumnDfn GetAdmissionColumnDfn(SpmAdmission.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { case SpmAdmission.Column.Pos: SetAdmissionColDfn(columnDfn, "Pos", 42, SpmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SpmAdmission.Column.Session: SetAdmissionColDfn(columnDfn, "Session", 120, SpmDbDfn.ColumnIdx.Unknown); break; case SpmAdmission.Column.Id: SetAdmissionColDfn(columnDfn, "Id", 40, SpmDbDfn.ColumnIdx.SwmAdmission_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; // Admission Properties. case SpmAdmission.Column.FacilityId: SetAdmissionColDfn(columnDfn, "FacilityId", 45, SpmDbDfn.ColumnIdx.SwmAdmission_FacilityId, ColumnAlignment.Right); break; case SpmAdmission.Column.TemplateId: SetAdmissionColDfn(columnDfn, "TmplId", 45, SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId, ColumnAlignment.Right); break; case SpmAdmission.Column.Seq: SetAdmissionColDfn(columnDfn, "Seq", 45, SpmDbDfn.ColumnIdx.SwmAdmission_Seq, ColumnAlignment.Right); break; // Common Properties. case SpmAdmission.Column.Notes: SetAdmissionColDfn(columnDfn, "Notes", 200, SpmDbDfn.ColumnIdx.SwmAdmission_Notes); break; case SpmAdmission.Column.Status: SetAdmissionColDfn(columnDfn, "Status", 50, SpmDbDfn.ColumnIdx.SwmAdmission_Status, ColumnAlignment.Center); break; case SpmAdmission.Column.Status_Desc: SetAdmissionColDfn(columnDfn, "Status", 50, SpmDbDfn.ColumnIdx.SwmAdmission_Status, ColumnAlignment.Center); break; case SpmAdmission.Column.Status_Ind: SetAdmissionColDfn(columnDfn, "Status", 50, SpmDbDfn.ColumnIdx.SwmAdmission_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SpmAdmission.Column.CreateOn_Date: SetAdmissionColDfn(columnDfn, "Created", 65, SpmDbDfn.ColumnIdx.SwmAdmission_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SpmAdmission.Column.UpdateOn_Date: SetAdmissionColDfn(columnDfn, "Updated", 65, SpmDbDfn.ColumnIdx.SwmAdmission_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; // Admission dates and times. case SpmAdmission.Column.AdmissionFromDate: SetAdmissionColDfn(columnDfn, "Admission", 70, SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.AdmissionFromTime: SetAdmissionColDfn(columnDfn, "Admission at", 75, SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom, ColumnAlignment.Center, DataValue.DataType.Time); columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.AdmissionFromDateTime: SetAdmissionColDfn(columnDfn, "Admission", 100, SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom, ColumnAlignment.Center, DataValue.DataType.DateTime); columnDfn.DateFormat = "d-MMM-yy"; columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.AdmissionToDate: SetAdmissionColDfn(columnDfn, "Discharge", 70, SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.AdmissionToTime: SetAdmissionColDfn(columnDfn, "Discharge at", 75, SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo, ColumnAlignment.Center, DataValue.DataType.Time); columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.AdmissionToDateTime: SetAdmissionColDfn(columnDfn, "Discharge", 100, SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo, ColumnAlignment.Center, DataValue.DataType.DateTime); columnDfn.DateFormat = "d-MMM-yy"; columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.Type: SetAdmissionColDfn(columnDfn, "Type", 40, SpmDbDfn.ColumnIdx.SwmAdmission_Type, ColumnAlignment.Center); break; case SpmAdmission.Column.Type_Desc: SetAdmissionColDfn(columnDfn, "Type", 90, SpmDbDfn.ColumnIdx.SwmAdmission_Type, ColumnAlignment.Center); break; // Dates. case SpmAdmission.Column.DecisionToReferOn: SetAdmissionColDfn(columnDfn, "DTR", 70, SpmDbDfn.ColumnIdx.SwmAdmission_DecisionToReferOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.ReferredOn: SetAdmissionColDfn(columnDfn, "Referred", 70, SpmDbDfn.ColumnIdx.SwmAdmission_ReferredOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.BreechOn: SetAdmissionColDfn(columnDfn, "Breech", 70, SpmDbDfn.ColumnIdx.SwmAdmission_BreechOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.DecisionToAdmitOn: SetAdmissionColDfn(columnDfn, "DTA", 70, SpmDbDfn.ColumnIdx.SwmAdmission_DecisionToAdmitOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; // Patient. case SpmAdmission.Column.Patient: SetAdmissionColDfn(columnDfn, "Patient", 140, SpmDbDfn.ColumnIdx.SwmAdmission_PatientNo); break; case SpmAdmission.Column.PatientId: SetAdmissionColDfn(columnDfn, "Patient Id", 80, SpmDbDfn.ColumnIdx.SwmAdmission_PatientId); break; case SpmAdmission.Column.PatientNo: SetAdmissionColDfn(columnDfn, "Patient No", 80, SpmDbDfn.ColumnIdx.SwmAdmission_PatientNo); break; case SpmAdmission.Column.PatientName: SetAdmissionColDfn(columnDfn, "Patient name", 140, SpmDbDfn.ColumnIdx.SwmAdmission_Surname); break; case SpmAdmission.Column.PatientSurname: SetAdmissionColDfn(columnDfn, "Surname", 90, SpmDbDfn.ColumnIdx.SwmAdmission_Surname); break; case SpmAdmission.Column.PatientForename: SetAdmissionColDfn(columnDfn, "Forename", 90, SpmDbDfn.ColumnIdx.SwmAdmission_Forename); break; case SpmAdmission.Column.BirthAge: SetAdmissionColDfn(columnDfn, "DOB [Age]", 100, SpmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center); break; case SpmAdmission.Column.BirthOn: SetAdmissionColDfn(columnDfn, "DOB", 75, SpmDbDfn.ColumnIdx.SwmAdmission_BirthOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "dd-MMM-yyyy"; break; case SpmAdmission.Column.Age: SetAdmissionColDfn(columnDfn, "Age", 40, SpmDbDfn.ColumnIdx.SwmAdmission_Age, ColumnAlignment.Center); break; case SpmAdmission.Column.AgeOn: SetAdmissionColDfn(columnDfn, "AgeOn", 75, SpmDbDfn.ColumnIdx.SwmAdmission_AgeOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.FacilityIdWard: SetAdmissionColDfn(columnDfn, "WardId", 50, SpmDbDfn.ColumnIdx.SwmAdmission_FacilityIdWard, ColumnAlignment.Center); break; case SpmAdmission.Column.Ward: SetAdmissionColDfn(columnDfn, "Ward", 50, SpmDbDfn.ColumnIdx.SwmAdmission_Ward, ColumnAlignment.Center); break; // Procedure. case SpmAdmission.Column.ProcedureId: SetAdmissionColDfn(columnDfn, "ProcedureId", 80, SpmDbDfn.ColumnIdx.SwmAdmission_ProcedureId, ColumnAlignment.Center); break; case SpmAdmission.Column.SpecialityCode: SetAdmissionColDfn(columnDfn, "Speciality", 80, SpmDbDfn.ColumnIdx.SwmAdmission_SpecialityCode, ColumnAlignment.Center); break; case SpmAdmission.Column.Procedure: SetAdmissionColDfn(columnDfn, "Procedure", 140, SpmDbDfn.ColumnIdx.SwmAdmission_ProcedureDesc); break; case SpmAdmission.Column.ComplexityCode: SetAdmissionColDfn(columnDfn, "Complexity", 80, SpmDbDfn.ColumnIdx.SwmAdmission_ComplexityCode, ColumnAlignment.Center); break; case SpmAdmission.Column.ProcedureIndication: SetAdmissionColDfn(columnDfn, "Indication", 90, SpmDbDfn.ColumnIdx.SwmAdmission_ProcedureIndication, ColumnAlignment.Left); break; case SpmAdmission.Column.DurationExp: SetAdmissionColDfn(columnDfn, "Dur (exp)", 80, SpmDbDfn.ColumnIdx.SwmAdmission_DurationExp, ColumnAlignment.Center); break; case SpmAdmission.Column.DurationAct: SetAdmissionColDfn(columnDfn, "Dur (act)", 80, SpmDbDfn.ColumnIdx.SwmAdmission_DurationAct, ColumnAlignment.Center); break; case SpmAdmission.Column.Anaesthetic: SetAdmissionColDfn(columnDfn, "Anaesthetic", 90, SpmDbDfn.ColumnIdx.SwmAdmission_Anaesthetic); break; case SpmAdmission.Column.Position: SetAdmissionColDfn(columnDfn, "Position", 80, SpmDbDfn.ColumnIdx.SwmAdmission_Position); break; case SpmAdmission.Column.SpecialEquipment: SetAdmissionColDfn(columnDfn, "Special equipment", 140, SpmDbDfn.ColumnIdx.SwmAdmission_SpecialEquipment); break; case SpmAdmission.Column.AttendanceStatusDesc: SetAdmissionColDfn(columnDfn, "Attendance", 90, SpmDbDfn.ColumnIdx.SwmAdmission_AttendanceStatus, ColumnAlignment.Center); break; case SpmAdmission.Column.ComfortScore: SetAdmissionColDfn(columnDfn, "Comfort score", 90, SpmDbDfn.ColumnIdx.SwmAdmission_ComfortScore, ColumnAlignment.Center); break; // Admission timings. case SpmAdmission.Column.TimeCalled: SetAdmissionColDfn(columnDfn, "Time called", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeCalled, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeArrived: SetAdmissionColDfn(columnDfn, "Time Arrived", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeArrived, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeAnaesStart: SetAdmissionColDfn(columnDfn, "Time AnaesStart", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeAnaesStart, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeProcStart: SetAdmissionColDfn(columnDfn, "Time ProcStart", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeProcStart, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeProcEnd: SetAdmissionColDfn(columnDfn, "Time ProcEnd", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeProcEnd, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeInRecovery: SetAdmissionColDfn(columnDfn, "Time InRecovery", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeInRecovery, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeInformDest: SetAdmissionColDfn(columnDfn, "Time InformDest", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeInformDest, ColumnAlignment.Center, DataValue.DataType.Time); break; case SpmAdmission.Column.TimeLeave: SetAdmissionColDfn(columnDfn, "Time Leave", 80, SpmDbDfn.ColumnIdx.SwmAdmission_TimeLeave, ColumnAlignment.Center, DataValue.DataType.Time); break; // Cancelations. case SpmAdmission.Column.CancelType: SetAdmissionColDfn(columnDfn, "Cancel Type", 90, SpmDbDfn.ColumnIdx.SwmAdmission_CancelType, ColumnAlignment.Center); break; case SpmAdmission.Column.CancelTypeDesc: SetAdmissionColDfn(columnDfn, "Cancel Type", 90, SpmDbDfn.ColumnIdx.SwmAdmission_CancelType, ColumnAlignment.Center); break; case SpmAdmission.Column.CancelDate: SetAdmissionColDfn(columnDfn, "Cancelled", 70, SpmDbDfn.ColumnIdx.SwmAdmission_CancelDate, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.CancelElapsed: SetAdmissionColDfn(columnDfn, "Elapsed", 60, SpmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center); break; case SpmAdmission.Column.CancelReBookBy: SetAdmissionColDfn(columnDfn, "ReBook by", 70, SpmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.CancelReBookDue: SetAdmissionColDfn(columnDfn, "Due", 32, SpmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SpmAdmission.Column.CancelCount: SetAdmissionColDfn(columnDfn, "Cancel#", 54, SpmDbDfn.ColumnIdx.SwmAdmission_CancelCount, ColumnAlignment.Center); break; // Facility. case SpmAdmission.Column.Facility_Type: SetAdmissionColDfn(columnDfn, "Facility Type", 80, SpmDbDfn.ColumnIdx.SwmFacility_Type, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Facility, prefixAdmission_Facility); break; case SpmAdmission.Column.Facility_TypeDesc: SetAdmissionColDfn(columnDfn, "Facility Type", 100, SpmDbDfn.ColumnIdx.SwmFacility_Type, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Facility, prefixAdmission_Facility); break; case SpmAdmission.Column.Facility_Name: SetAdmissionColDfn(columnDfn, "Facility Name", 100, SpmDbDfn.ColumnIdx.SwmFacility_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Facility, prefixAdmission_Facility); break; case SpmAdmission.Column.Facility_Desc: SetAdmissionColDfn(columnDfn, "Facility Desc", 120, SpmDbDfn.ColumnIdx.SwmFacility_Description, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Facility, prefixAdmission_Facility); break; case SpmAdmission.Column.Facility_TemplateMapType: SetAdmissionColDfn(columnDfn, "Facility Tmpl Map Type", 100, SpmDbDfn.ColumnIdx.SwmFacility_TemplateMapType, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Facility, prefixAdmission_Facility); break; case SpmAdmission.Column.Facility_ApplicFrom: SetAdmissionColDfn(columnDfn, "Facility Applic From", 80, SpmDbDfn.ColumnIdx.SwmFacility_ApplicFrom, ColumnAlignment.Center, DataValue.DataType.Date, aliasAdmission_Facility, prefixAdmission_Facility); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.Facility_ApplicTo: SetAdmissionColDfn(columnDfn, "Facility Applic To", 80, SpmDbDfn.ColumnIdx.SwmFacility_ApplicTo, ColumnAlignment.Center, DataValue.DataType.Date, aliasAdmission_Facility, prefixAdmission_Facility); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.Facility_Notes: SetAdmissionColDfn(columnDfn, "Facility Notes", 200, SpmDbDfn.ColumnIdx.SwmFacility_Notes, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Facility, prefixAdmission_Facility); break; // Facility Template. case SpmAdmission.Column.Template_WeekOfMonth: SetAdmissionColDfn(columnDfn, "Tmpl Week of Month", 90, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_WeekOfMonth, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_DayOfWeek: SetAdmissionColDfn(columnDfn, "Tmpl Day of Week", 90, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_DayOfWeek, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_ConsultantId: SetAdmissionColDfn(columnDfn, "Tmpl Cons Id", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ConsultantId, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_ConsultantCode: SetAdmissionColDfn(columnDfn, "Tmpl Cons", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ConsultantCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_SpecialityCode: SetAdmissionColDfn(columnDfn, "Tmpl Spec", 60, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_SpecialityCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_StartAt: SetAdmissionColDfn(columnDfn, "Template Id", 60, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_StartAt, ColumnAlignment.Center, DataValue.DataType.Time, aliasAdmission_Template, prefixAdmission_Template); columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.Template_FinishAt: SetAdmissionColDfn(columnDfn, "Finish at", 60, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_FinishAt, ColumnAlignment.Center, DataValue.DataType.Time, aliasAdmission_Template, prefixAdmission_Template); columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.Template_CategoryDesc: SetAdmissionColDfn(columnDfn, "Tmpl category", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Category, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_TypeDesc: SetAdmissionColDfn(columnDfn, "Tmpl type", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Type, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_Name: SetAdmissionColDfn(columnDfn, "Tmpl name", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_Desc: SetAdmissionColDfn(columnDfn, "Tmpl desc", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Description, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_Group: SetAdmissionColDfn(columnDfn, "Tmpl group", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Group, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; case SpmAdmission.Column.Template_ApplicFrom: SetAdmissionColDfn(columnDfn, "Facility Applic From", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ApplicFrom, ColumnAlignment.Center, DataValue.DataType.Date, aliasAdmission_Template, prefixAdmission_Template); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.Template_ApplicTo: SetAdmissionColDfn(columnDfn, "Facility Applic To", 80, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ApplicTo, ColumnAlignment.Center, DataValue.DataType.Date, aliasAdmission_Template, prefixAdmission_Template); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.Template_Notes: SetAdmissionColDfn(columnDfn, "Tmpl Notes", 200, SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Notes, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Template, prefixAdmission_Template); break; // Facility Session. case SpmAdmission.Column.Session_TemplateId: SetAdmissionColDfn(columnDfn, "SessTmplId", 80, SpmDbDfn.ColumnIdx.SwmFacilitySession_FacilityTemplateId, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_ConsultantId: SetAdmissionColDfn(columnDfn, "Sess Cons Id", 80, SpmDbDfn.ColumnIdx.SwmFacilitySession_ConsultantId, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_ConsultantCode: SetAdmissionColDfn(columnDfn, "Sess Cons", 80, SpmDbDfn.ColumnIdx.SwmFacilitySession_ConsultantCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_SpecialityCode: SetAdmissionColDfn(columnDfn, "Sess Spec", 60, SpmDbDfn.ColumnIdx.SwmFacilitySession_SpecialityCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_StartAt: SetAdmissionColDfn(columnDfn, "Session Id", 60, SpmDbDfn.ColumnIdx.SwmFacilitySession_StartAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasAdmission_Session, prefixAdmission_Session); columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.Session_FinishAt: SetAdmissionColDfn(columnDfn, "Finish at", 60, SpmDbDfn.ColumnIdx.SwmFacilitySession_FinishAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasAdmission_Session, prefixAdmission_Session); columnDfn.TimeFormat = "HH:mm"; break; case SpmAdmission.Column.Session_Name: SetAdmissionColDfn(columnDfn, "Sess Name", 80, SpmDbDfn.ColumnIdx.SwmFacilitySession_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_Desc: SetAdmissionColDfn(columnDfn, "Sess Desc", 80, SpmDbDfn.ColumnIdx.SwmFacilitySession_Description, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_Flags: SetAdmissionColDfn(columnDfn, "Sess Flags", 50, SpmDbDfn.ColumnIdx.SwmFacilitySession_Flags, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; case SpmAdmission.Column.Session_Notes: SetAdmissionColDfn(columnDfn, "Sess Notes", 200, SpmDbDfn.ColumnIdx.SwmFacilitySession_Notes, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Session, prefixAdmission_Session); break; // Session definition (combined template and date-specific session info). case SpmAdmission.Column.SessionDfn_Summary: SetAdmissionColDfn(columnDfn, "Session", 160, SpmDbDfn.ColumnIdx.Unknown); break; case SpmAdmission.Column.SessionDfn_Name: SetAdmissionColDfn(columnDfn, "Session", 120, SpmDbDfn.ColumnIdx.Unknown); break; // Patient. case SpmAdmission.Column.Patient_PatientNo: SetAdmissionColDfn(columnDfn, "Pat Patient NO", 90, SpmDbDfn.ColumnIdx.SwmPatient_PatientNo, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Patient, prefixAdmission_Patient); break; case SpmAdmission.Column.Patient_Surname: SetAdmissionColDfn(columnDfn, "Pat Surname", 100, SpmDbDfn.ColumnIdx.SwmPatient_Surname, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Patient, prefixAdmission_Patient); break; case SpmAdmission.Column.Patient_Forename: SetAdmissionColDfn(columnDfn, "Pat Forename", 100, SpmDbDfn.ColumnIdx.SwmPatient_Forename, ColumnAlignment.Default, DataValue.DataType.String, aliasAdmission_Patient, prefixAdmission_Patient); break; case SpmAdmission.Column.Patient_BirthOn: SetAdmissionColDfn(columnDfn, "Pat DOB", 80, SpmDbDfn.ColumnIdx.SwmPatient_BirthOn, ColumnAlignment.Center, DataValue.DataType.Date, aliasAdmission_Patient, prefixAdmission_Patient); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.Patient_Age: SetAdmissionColDfn(columnDfn, "Pat Age", 80, SpmDbDfn.ColumnIdx.SwmPatient_Age, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_Patient, prefixAdmission_Patient); break; case SpmAdmission.Column.Patient_AgeOn: SetAdmissionColDfn(columnDfn, "Pat Age On", 80, SpmDbDfn.ColumnIdx.SwmPatient_AgeOn, ColumnAlignment.Center, DataValue.DataType.Date, aliasAdmission_Patient, prefixAdmission_Patient); columnDfn.DateFormat = "d-MMM-yy"; break; case SpmAdmission.Column.Role_Consultant_Operating_Code: SetAdmissionColDfn(columnDfn, "Cons. [opn]", 100, SpmDbDfn.ColumnIdx.SwmAdmissionRole_EmployeeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_AdmRoleConsOpn, prefixAdmission_AdmRoleConsOpn); break; case SpmAdmission.Column.Role_Consultant_Referring_Code: SetAdmissionColDfn(columnDfn, "Cons. [ref]", 100, SpmDbDfn.ColumnIdx.SwmAdmissionRole_EmployeeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_AdmRoleConsRef, prefixAdmission_AdmRoleConsRef); break; //eSwmAdmColRole_Consultant_Attending_Code: case SpmAdmission.Column.Role_Surgeon_Operating_Code: SetAdmissionColDfn(columnDfn, "Surg. [opn]", 100, SpmDbDfn.ColumnIdx.SwmAdmissionRole_EmployeeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_AdmRoleSurgOpn, prefixAdmission_AdmRoleSurgOpn); break; //eSwmAdmColRole_Surgeon_Referring_Code: //eSwmAdmColRole_Surgeon_Attending_Code: case SpmAdmission.Column.Role_Anaesthetist_Operating_Code: SetAdmissionColDfn(columnDfn, "Anaesth. [opn]", 100, SpmDbDfn.ColumnIdx.SwmAdmissionRole_EmployeeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasAdmission_AdmRoleAnaeOpn, prefixAdmission_AdmRoleAnaeOpn); break; } if (!String.IsNullOrEmpty(caption)) columnDfn.Caption = caption; if (width > 0) columnDfn.Width = width; return columnDfn; } //------------------------------------------------------------------- // Admission query filter. public override List GetAdmissionQueryFilter(SpmAdmission.Params prm) { List filters = new List(); // Admission Id. String includedIds = prm.IncludedIds.Concat(","); String colAdmissionId = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Id, aliasAdmission); if (!includedIds.IsEmpty()) filters.Add(colAdmissionId + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.Concat(","); if (!excludedIds.IsEmpty()) filters.Add(colAdmissionId + " NOT IN (" + excludedIds + ")"); // Template based filters - Department Id and Facility type. List filterDeptIdFacType = new List(); if (SysId.IsValid(prm.DepartmentId) || prm.FacilityType > Spm.FacilityType.Unknown) { if (SysId.IsValid(prm.DepartmentId)) { // Facility must belong to the specified department. String colFacility_DepartmentId = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacility_DepartmentId, aliasAdmission_Facility); filterDeptIdFacType.Add(colFacility_DepartmentId + "=" + prm.DepartmentId.ToString()); } if (prm.FacilityType > Spm.FacilityType.Unknown) { // Facility must be of the specified type. String colFacilityType = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacility_Type, aliasAdmission_Facility); filterDeptIdFacType.Add(colFacilityType + "=" + ((int)prm.FacilityType).ToString()); } else { // Sub-query to retrict to facilities that belong to this department. String colFacilityId = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacility_Id, aliasAdmission_Facility); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(new StringPair(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmFacility), aliasAdmission_Facility)); qry.Columns.Add(colFacilityId); qry.Filters.AddRange(filterDeptIdFacType); qry.Filters.Add(colFacilityId + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityId, aliasAdmission)); filters.Add("EXISTS (" + qry.BuildQuery() + ")"); } } // Facility. String colAdmisssion_FacilityId = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityId, aliasAdmission); if (SysId.IsValid(prm.FacilityId)) filters.Add(colAdmisssion_FacilityId + "=" + prm.FacilityId.ToString()); // Facility template. String colAdmission_FacilityTemplateId = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId, aliasAdmission); if (SysId.IsValid(prm.FacilityTemplateId)) filters.Add(colAdmission_FacilityTemplateId + "=" + prm.FacilityTemplateId.ToString()); // Admission date. String colAdmissionFrom = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom, aliasAdmission); String colAdmissionTo = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo, aliasAdmission); if (DateUtil.IsValid(prm.Admission)) { filters.Add(colAdmissionFrom + ">=" + DbQuery.FormatDateForCondition(prm.Admission)); filters.Add(colAdmissionTo + "<" + DbQuery.FormatDateForCondition(prm.Admission.AddDays(1))); } else { // Has a date range been specified. if (DateUtil.IsValid(prm.AdmissionFrom)) filters.Add(colAdmissionTo + ">=" + DbQuery.FormatDateForCondition(prm.AdmissionFrom)); if (DateUtil.IsValid(prm.AdmissionTo)) filters.Add(colAdmissionFrom + "<" + DbQuery.FormatDateForCondition(prm.AdmissionTo.AddDays(1))); } // Admission sequence. String colSeq = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Seq, aliasAdmission); if (prm.MinSeq > 0) filters.Add(colSeq + ">=" + ((int)prm.MinSeq).ToString()); if (prm.MaxSeq > 0) filters.Add(colSeq + "<=" + ((int)prm.MaxSeq).ToString()); // Cancel type. String colCancelType = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CancelType, aliasAdmission); if (prm.CancelType == Spm.AdmissionCancelType.Cancelled) filters.Add(colCancelType + "<>" + ((int)Spm.AdmissionCancelType.None).ToString()); else if (prm.CancelType > Spm.AdmissionCancelType.Unknown) filters.Add(colCancelType + "=" + ((int)prm.CancelType).ToString()); // Patient number. String colPatientNo = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_PatientNo, aliasAdmission); String patientNoFull = DbQuery.FormatForCondition(prm.PatientNoFull); String patientNoPartial = DbQuery.FormatForCondition(prm.PatientNoPartial); if (!StringUtil.IsEmpty(patientNoFull)) filters.Add(colPatientNo + "='" + patientNoFull + "'"); else if (!StringUtil.IsEmpty(patientNoPartial)) filters.Add(DbQuery.FormatFn_Left(colPatientNo, prm.PatientNoPartial.Length) + "='" + patientNoPartial + "'"); // Patient surname. String colPatientSurname = SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Surname, aliasAdmission); String patientSurname = DbQuery.FormatForCondition(prm.PatientSurname); if (!StringUtil.IsEmpty(patientSurname)) filters.Add(DbQuery.FormatFn_Left(colPatientSurname, prm.PatientSurname.Length) + "='" + patientSurname + "'"); //--------------------------------------------------------------- // Common Properties. if (filters.Count < 1) filters.Add("1=1"); return filters; } //------------------------------------------------------------------- // Admission sort columns. public List GetAdmissionSortColumns(SpmAdmission.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for Admission columns in case of conflict. String sortCol = String.Empty; if (SpmDbDfn.GetTableForColumn((SpmDbDfn.ColumnIdx)columnDfn.DbColumn) == SpmDbDfn.TableIdx.SwmAdmission) { sortCol = SpmDbDfn.GetColumnNameQual((SpmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasAdmission); } else { sortCol = columnDfn.DataName; if (!StringUtil.IsEmpty(columnDfn.SortDataName)) sortCol = columnDfn.SortDataName; } if (!sortCol.IsEmpty()) { DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", ")); } } sortColumnNames.RemoveBlanks(); if (sortColumnNames.IsEmpty()) { // Default sort columns: //sortColumnNames.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Type, aliasAdmission) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Admission count. private long GetAdmissionCount(String filter) { ClearErrorState(); return Database.GetRowCount(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission) + " As " + aliasAdmission, filter); } public override long GetAdmissionCount(SpmAdmission.Params prm) { ClearErrorState(); return GetAdmissionCount(GetAdmissionQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Admission list. public override List GetAdmissionList(SpmAdmission.Params prm) { List Admissiones = new List(); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission), aliasAdmission); qry.Columns.AddRange(SwmAdmission_Db.Fields); qry.Filters.AddRange(GetAdmissionQueryFilter(prm)); // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qry.BuildQuery(); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { SwmAdmission_Db dbAdmission = new SwmAdmission_Db(DbInfo); dbAdmission.PopulateFrom(dbDataReader); Admissiones.Add(CreateAdmission(dbAdmission)); } } } catch (Exception exc) { Logger.Warn(GetType().Name + ".GetAdmissionList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return Admissiones; } //------------------------------------------------------------------- // Admission query execution. public override DbResultSet ExecuteAdmissionQuery(List columns, SpmAdmission.Params prm) { ClearErrorState(); //--------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(Database.DbmsType); query.Tables.Add(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission), aliasAdmission); // Admission Properties - add columns as defined in query list. if (columns.HasId((int)SpmAdmission.Column.Id)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Id, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.FacilityId)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityId)); if (columns.HasId((int)SpmAdmission.Column.TemplateId)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId)); if (columns.HasId((int)SpmAdmission.Column.AdmissionFromDate) || columns.HasId((int)SpmAdmission.Column.AdmissionFromDateTime) || columns.HasId((int)SpmAdmission.Column.AdmissionFromTime)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.AdmissionToDate) || columns.HasId((int)SpmAdmission.Column.AdmissionToDateTime) || columns.HasId((int)SpmAdmission.Column.AdmissionToTime)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.Seq)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Seq, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.Type)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Type, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.PatientId)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_PatientId)); if (columns.HasId((int)SpmAdmission.Column.PatientNo)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_PatientNo)); if (columns.HasId((int)SpmAdmission.Column.PatientSurname)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Surname, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.PatientForename)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Forename, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.BirthOn) || columns.HasId((int)SpmAdmission.Column.BirthAge)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_BirthOn)); if (columns.HasId((int)SpmAdmission.Column.Age) || columns.HasId((int)SpmAdmission.Column.BirthAge)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Age)); if (columns.HasId((int)SpmAdmission.Column.AgeOn) || columns.HasId((int)SpmAdmission.Column.BirthAge)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AgeOn)); if (columns.HasId((int)SpmAdmission.Column.FacilityIdWard) || columns.HasId((int)SpmAdmission.Column.Ward)) { query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityIdWard)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Ward)); } if (columns.HasId((int)SpmAdmission.Column.SpecialityCode)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_SpecialityCode)); if (columns.HasId((int)SpmAdmission.Column.ProcedureId)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_ProcedureId)); if (columns.HasId((int)SpmAdmission.Column.Procedure)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_ProcedureDesc)); if (columns.HasId((int)SpmAdmission.Column.ComplexityCode)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_ComplexityCode)); if (columns.HasId((int)SpmAdmission.Column.ProcedureIndication)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_ProcedureIndication)); if (columns.HasId((int)SpmAdmission.Column.DurationExp)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_DurationExp)); if (columns.HasId((int)SpmAdmission.Column.DurationAct)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_DurationAct)); if (columns.HasId((int)SpmAdmission.Column.Anaesthetic)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Anaesthetic)); if (columns.HasId((int)SpmAdmission.Column.Position)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Position)); if (columns.HasId((int)SpmAdmission.Column.SpecialEquipment)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_SpecialEquipment)); if (columns.HasId((int)SpmAdmission.Column.AttendanceStatusDesc)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AttendanceStatus)); if (columns.HasId((int)SpmAdmission.Column.ComfortScore) && Database.ColumnExists(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission), SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_ComfortScore))) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_ComfortScore)); // Common Properties if (columns.HasId((int)SpmAdmission.Column.Notes)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Notes, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.Status) || columns.HasId((int)SpmAdmission.Column.Status_Desc) || columns.HasId((int)SpmAdmission.Column.Status_Ind)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Status, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.CreateOn_Date)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CreateOn, aliasAdmission)); if (columns.HasId((int)SpmAdmission.Column.UpdateOn_Date)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_UpdateOn, aliasAdmission)); // Admission cancellation status. if (columns.HasId((int)SpmAdmission.Column.CancelType) || columns.HasId((int)SpmAdmission.Column.CancelTypeDesc) || columns.HasId((int)SpmAdmission.Column.CancelDate) || columns.HasId((int)SpmAdmission.Column.CancelElapsed) || columns.HasId((int)SpmAdmission.Column.CancelReBookBy) || columns.HasId((int)SpmAdmission.Column.CancelReBookDue) || columns.HasId((int)SpmAdmission.Column.CancelCount)) { query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CancelType)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CancelDate)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CancelCount)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CancelCode)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_CancelReason)); } if (columns.HasId((int)SpmAdmission.Column.Notes)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Notes)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Flags)); query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Status)); // Facility. bool hasFacilityCols = false; if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_Type); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_Name); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_Desc); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_TypeDesc); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_TemplateMapType); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_ApplicFrom); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_ApplicTo); if (!hasFacilityCols) hasFacilityCols = columns.HasId((int)SpmAdmission.Column.Facility_Notes); if (hasFacilityCols) { // Join to the Facility. DbQueryJoin joinFacility = new DbQueryJoin(DbJoinType.LeftOuter); joinFacility.Table = new StringPair(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmFacility), aliasAdmission_Facility); joinFacility.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacility_Id, aliasAdmission_Facility) + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityId)); query.Joins.Add(joinFacility); // Add the Facility columns. List facilityCols = new List(); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_Type); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_Name); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_Description); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_TemplateMapType); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_ApplicFrom); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_ApplicTo); facilityCols.Add(SpmDbDfn.ColumnIdx.SwmFacility_Notes); foreach (SpmDbDfn.ColumnIdx dbColumn in facilityCols) query.Columns.Add(SpmDbDfn.GetColumnNameQual(dbColumn, aliasAdmission_Facility), prefixAdmission_Facility + SpmDbDfn.GetColumnName(dbColumn, false)); } // Template. bool hasTemplateCols = false; if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_WeekOfMonth); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_DayOfWeek); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_ConsultantId); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_ConsultantCode); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_SpecialityCode); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_StartAt); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_FinishAt); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_CategoryDesc); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_TypeDesc); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_Name); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_Desc); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_Group); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_ApplicFrom); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_ApplicTo); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.Template_Notes); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.SessionDfn_Summary); if (!hasTemplateCols) hasTemplateCols = columns.HasId((int)SpmAdmission.Column.SessionDfn_Name); if (hasTemplateCols) { // Join to the Template table. DbQueryJoin joinTemplate = new DbQueryJoin(DbJoinType.LeftOuter); joinTemplate.Table = new StringPair(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmFacilityTemplate), aliasAdmission_Template); joinTemplate.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Id, aliasAdmission_Template) + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId)); query.Joins.Add(joinTemplate); // Add the template columns. List templateCols = new List(); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_WeekOfMonth); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_DayOfWeek); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ConsultantId); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ConsultantCode); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_SpecialityCode); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_StartAt); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_FinishAt); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Category); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Type); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Name); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Description); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Group); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ApplicFrom); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_ApplicTo); templateCols.Add(SpmDbDfn.ColumnIdx.SwmFacilityTemplate_Notes); foreach (SpmDbDfn.ColumnIdx dbColumn in templateCols) query.Columns.Add(SpmDbDfn.GetColumnNameQual(dbColumn, aliasAdmission_Template), prefixAdmission_Template + SpmDbDfn.GetColumnName(dbColumn, false)); } // Session. bool hasSessionCols = false; if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_TemplateId); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_ConsultantId); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_ConsultantCode); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_SpecialityCode); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_StartAt); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_FinishAt); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_Name); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_Desc); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_Flags); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.Session_Notes); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.SessionDfn_Summary); if (!hasSessionCols) hasSessionCols = columns.HasId((int)SpmAdmission.Column.SessionDfn_Name); if (hasSessionCols) { // Join to the Session table. DbQueryJoin joinTmpl = new DbQueryJoin(DbJoinType.LeftOuter); joinTmpl.Table = new StringPair(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmFacilitySession), aliasAdmission_Session); joinTmpl.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacilitySession_FacilityTemplateId, aliasAdmission_Session) + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId)); joinTmpl.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmFacilitySession_Session, aliasAdmission_Session) + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom)); query.Joins.Add(joinTmpl); // Add the Session columns. List sessionCols = new List(); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_FacilityTemplateId); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_Name); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_Description); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_ConsultantId); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_ConsultantCode); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_SpecialityCode); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_StartAt); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_FinishAt); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_Flags); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmFacilitySession_Notes); foreach (SpmDbDfn.ColumnIdx dbColumn in sessionCols) query.Columns.Add(SpmDbDfn.GetColumnNameQual(dbColumn, aliasAdmission_Session), prefixAdmission_Session + SpmDbDfn.GetColumnName(dbColumn, false)); } // Patient details. bool hasPatientCols = false; if (!hasPatientCols) hasPatientCols = columns.HasId((int)SpmAdmission.Column.Patient_PatientNo); if (!hasPatientCols) hasPatientCols = columns.HasId((int)SpmAdmission.Column.Patient_Surname); if (!hasPatientCols) hasPatientCols = columns.HasId((int)SpmAdmission.Column.Patient_Forename); if (!hasPatientCols) hasPatientCols = columns.HasId((int)SpmAdmission.Column.Patient_BirthOn); if (!hasPatientCols) hasPatientCols = columns.HasId((int)SpmAdmission.Column.Patient_Age); if (!hasPatientCols) hasPatientCols = columns.HasId((int)SpmAdmission.Column.Patient_AgeOn); if (hasPatientCols) { // Join to the Patient table. DbQueryJoin joinPatient = new DbQueryJoin(DbJoinType.LeftOuter); joinPatient.Table = new StringPair(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmPatient), aliasAdmission_Patient); joinPatient.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmPatient_Id, aliasAdmission_Patient) + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_PatientId)); query.Joins.Add(joinPatient); // Add the Patient columns. List sessionCols = new List(); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmPatient_PatientNo); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmPatient_Surname); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmPatient_Forename); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmPatient_BirthOn); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmPatient_Age); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmPatient_AgeOn); foreach (SpmDbDfn.ColumnIdx dbColumn in sessionCols) query.Columns.Add(SpmDbDfn.GetColumnNameQual(dbColumn, aliasAdmission_Patient), prefixAdmission_Patient + SpmDbDfn.GetColumnName(dbColumn, false)); } // Admission Roles - Operating Consultant. bool bHasAdmRoleConsOpnCols = false; if (!bHasAdmRoleConsOpnCols) bHasAdmRoleConsOpnCols = columns.HasId((int)SpmAdmission.Column.Role_Consultant_Operating_Code); if (bHasAdmRoleConsOpnCols) { // Join to the Admission Role table. DbQueryJoin joinAdmRole = new DbQueryJoin(DbJoinType.LeftOuter); joinAdmRole.Table = new StringPair(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmissionRole), aliasAdmission_AdmRoleConsOpn); joinAdmRole.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmissionRole_AdmissionId, aliasAdmission_AdmRoleConsOpn) + "=" + SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmission_Id)); joinAdmRole.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmissionRole_Role, aliasAdmission_AdmRoleConsOpn) + "=" + ((int)Spm.EmployeeRole.Consultant).ToString()); joinAdmRole.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmissionRole_Seq, aliasAdmission_AdmRoleConsOpn) + "=1"); joinAdmRole.Filters.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmAdmissionRole_Category, aliasAdmission_AdmRoleConsOpn) + " In (0," + ((int)Spm.EmployeeRoleCategory.Operating).ToString() + ")"); query.Joins.Add(joinAdmRole); // Add the Patient columns. List sessionCols = new List(); sessionCols.Add(SpmDbDfn.ColumnIdx.SwmAdmissionRole_EmployeeCode); foreach (SpmDbDfn.ColumnIdx dbColumn in sessionCols) query.Columns.Add(SpmDbDfn.GetColumnNameQual(dbColumn, aliasAdmission_AdmRoleConsOpn), prefixAdmission_AdmRoleConsOpn + SpmDbDfn.GetColumnName(dbColumn, false)); } //--------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetAdmissionQueryFilter(prm)); if (prm.IncludedIds.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetAdmissionSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------- //return new DbResultSet_DataTableReader(Database, query.BuildQuery()); return new Sarand.Win.Dbas.Data.DbResultSet_DataReader(Database, query.BuildQuery()); } //------------------------------------------------------------------- } //======================================================================= }