diff --git a/cs/bsdx0200GUISourceCode/AssemblyInfo.cs b/cs/bsdx0200GUISourceCode/AssemblyInfo.cs index dd165cb..834d793 100644 --- a/cs/bsdx0200GUISourceCode/AssemblyInfo.cs +++ b/cs/bsdx0200GUISourceCode/AssemblyInfo.cs @@ -27,7 +27,7 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.5.0.*")] +[assembly: AssemblyVersion("1.5.1.*")] // // In order to sign your assembly you must specify a key to use. Refer to the @@ -57,5 +57,5 @@ using System.Runtime.InteropServices; [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("")] -[assembly: AssemblyFileVersionAttribute("1.5.0.0")] +[assembly: AssemblyFileVersionAttribute("1.5.1.0")] [assembly: ComVisibleAttribute(false)] diff --git a/cs/bsdx0200GUISourceCode/CGAppointment.cs b/cs/bsdx0200GUISourceCode/CGAppointment.cs index ea44962..810e418 100644 --- a/cs/bsdx0200GUISourceCode/CGAppointment.cs +++ b/cs/bsdx0200GUISourceCode/CGAppointment.cs @@ -3,48 +3,76 @@ using System; using System.Drawing; /// - /// Data Structuer to Represent an Appointment - /// + /// Data Structure to Represent an Appointment /// [Serializable] public class CGAppointment { - private bool m_bAccessBlock; - private bool m_bNoShow; - private bool m_bSelected = false; - private bool m_bWalkIn; - public DateTime m_dAuxTime; - public DateTime m_dCheckIn; - private DateTime m_EndTime; - public int m_nAccessTypeID = -1; - private int m_nColumn; - public int m_nKey; - private string m_Note; - public int m_nPatientID; - public int m_nSlots; - private Rectangle m_rectangle; - public string m_sAccessTypeName; - private string m_sHRN = ""; - private string m_sPatientName; - public string m_sResource; - private DateTime m_StartTime; - private string m_Text; + public int AccessTypeID { get; set; } + public string AccessTypeName { get; set; } + + public int AppointmentKey { get; set; } + + public DateTime AuxTime { get; set; } + public DateTime CheckInTime { get; set; } + public DateTime EndTime { get; set; } + public DateTime StartTime { get; set; } + + public int GridColumn { get; set; } + public Rectangle GridRectangle { get; set; } + + public bool IsAccessBlock { get; set; } + + public bool NoShow { get; set; } + + public string Note { get; set; } + + public int PatientID { get; set; } + public string PatientName { get; set; } + public string Resource { get; set; } + public string HealthRecordNumber { get; set; } + + public bool Selected { get; set; } + + public int Slots { get; set; } + + public bool WalkIn { get; set; } + + public Patient Patient { get; set; } + public Provider Provider { get; set; } + + public int? RadiologyExamIEN { get; set; } + + + public CGAppointment() + { + AccessTypeID = -1; + Selected = false; + HealthRecordNumber = ""; + } public void CreateAppointment(DateTime StartTime, DateTime EndTime, string Note, int Key, string sResource) { - this.m_StartTime = StartTime; - this.m_EndTime = EndTime; - this.m_Note = Note; - this.m_nKey = Key; - this.m_sResource = sResource; - } + this.StartTime = StartTime; + this.EndTime = EndTime; + this.Note = Note; + this.AppointmentKey = Key; + this.Resource = sResource; + } + + public int Duration + { + get + { + TimeSpan span = (TimeSpan) (this.EndTime - this.StartTime); + return (int) span.TotalMinutes; + } + } public override string ToString() { - //StringFormat sf = new StringFormat(); - //sf.SetDigitSubstitution(System.Threading.Thread.CurrentThread.CurrentCulture.LCID, StringDigitSubstitute.National); string patientName = ""; - if (this.m_bAccessBlock) + if (this.IsAccessBlock) { string str2 = (this.Slots == 1) ? " Slot, " : " Slots, "; return ((((this.AccessTypeName + ": ") + this.Slots.ToString() + str2) + this.Duration.ToString() + " Minutes. ") + this.Note); @@ -56,255 +84,6 @@ } return (patientName + " " + this.Note); } - - public int AccessTypeID - { - get - { - return this.m_nAccessTypeID; } - set - { - this.m_nAccessTypeID = value; - } - } - - public string AccessTypeName - { - get - { - return this.m_sAccessTypeName; - } - set - { - this.m_sAccessTypeName = value; - } - } - - public int AppointmentKey - { - get - { - return this.m_nKey; - } - set - { - this.m_nKey = value; - } - } - - public DateTime AuxTime - { - get - { - return this.m_dAuxTime; - } - set - { - this.m_dAuxTime = value; - } - } - - public DateTime CheckInTime - { - get - { - return this.m_dCheckIn; - } - set - { - this.m_dCheckIn = value; - } - } - - public int Duration - { - get - { - TimeSpan span = (TimeSpan) (this.EndTime - this.StartTime); - return (int) span.TotalMinutes; - } - } - - public DateTime EndTime - { - get - { - return this.m_EndTime; - } - set - { - this.m_EndTime = value; - } - } - - public int GridColumn - { - get - { - return this.m_nColumn; - } - set - { - this.m_nColumn = value; - } - } - - public Rectangle GridRectangle - { - get - { - return this.m_rectangle; - } - set - { - this.m_rectangle = value; - } - } - - public string HealthRecordNumber - { - get - { - return this.m_sHRN; - } - set - { - this.m_sHRN = value; - } - } - - public bool IsAccessBlock - { - get - { - return this.m_bAccessBlock; - } - set - { - this.m_bAccessBlock = value; - } - } - - public bool NoShow - { - get - { - return this.m_bNoShow; - } - set - { - this.m_bNoShow = value; - } - } - - public string Note - { - get - { - return this.m_Note; - } - set - { - this.m_Note = value; - } - } - - public int PatientID - { - get - { - return this.m_nPatientID; - } - set - { - this.m_nPatientID = value; - } - } - - public string PatientName - { - get - { - return this.m_sPatientName; - } - set - { - this.m_sPatientName = value; - } - } - - public string Resource - { - get - { - return this.m_sResource; - } - set - { - this.m_sResource = value; - } - } - - public bool Selected - { - get - { - return this.m_bSelected; - } - set - { - this.m_bSelected = value; - } - } - - public int Slots - { - get - { - return this.m_nSlots; - } - set - { - this.m_nSlots = value; - } - } - - public DateTime StartTime - { - get - { - return this.m_StartTime; - } - set - { - this.m_StartTime = value; - } - } - - public string Text - { - get - { - this.m_Text = this.m_sPatientName; - return this.m_Text; - } - } - - public bool WalkIn - { - get - { - return this.m_bWalkIn; - } - set - { - this.m_bWalkIn = value; - } - } - - public Patient Patient { get; set; } - public Provider Provider { get; set; } - } } diff --git a/cs/bsdx0200GUISourceCode/CGDocument.cs b/cs/bsdx0200GUISourceCode/CGDocument.cs index 28da426..845ad6d 100644 --- a/cs/bsdx0200GUISourceCode/CGDocument.cs +++ b/cs/bsdx0200GUISourceCode/CGDocument.cs @@ -237,6 +237,7 @@ namespace IndianHealthService.ClinicalScheduling nAccessTypeID = (int)r["ACCESSTYPEID"]; sWalkIn = r["WALKIN"].ToString(); bWalkIn = (sWalkIn == "1") ? true : false; + int? RadiologyExamIEN = r["RADIOLOGY_EXAM"] as Int32?; //new in v 1.6 - Get Radiology Exam Patient pt = new Patient() { @@ -261,6 +262,7 @@ namespace IndianHealthService.ClinicalScheduling pAppointment.HealthRecordNumber = sHRN; pAppointment.AccessTypeID = nAccessTypeID; pAppointment.WalkIn = bWalkIn; + pAppointment.RadiologyExamIEN = RadiologyExamIEN; this.m_appointments.AddAppointment(pAppointment); } @@ -972,7 +974,7 @@ namespace IndianHealthService.ClinicalScheduling sApptID = rApptInfo.AccessTypeID.ToString(); } - string sSql = "BSDX ADD NEW APPOINTMENT^" + sStart + "^" + sEnd + "^" + sPatID + "^" + sResource + "^" + sLen + "^" + sNote + "^" + sApptID; + string sSql = "BSDX ADD NEW APPOINTMENT^" + sStart + "^" + sEnd + "^" + sPatID + "^" + sResource + "^" + sLen + "^" + sNote + "^" + sApptID + "^" + rApptInfo.RadiologyExamIEN; System.Data.DataTable dtAppt = m_DocManager.RPMSDataTable(sSql, "NewAppointment"); Debug.Assert(dtAppt.Rows.Count == 1); diff --git a/cs/bsdx0200GUISourceCode/CGSchedLib.cs b/cs/bsdx0200GUISourceCode/CGSchedLib.cs index 39e1125..cbca9cd 100644 --- a/cs/bsdx0200GUISourceCode/CGSchedLib.cs +++ b/cs/bsdx0200GUISourceCode/CGSchedLib.cs @@ -1,8 +1,6 @@ using System; using System.Data; using System.Collections; -using System.Diagnostics; -using System.Drawing; namespace IndianHealthService.ClinicalScheduling { diff --git a/cs/bsdx0200GUISourceCode/CGView.cs b/cs/bsdx0200GUISourceCode/CGView.cs index 51be879..45b302e 100644 --- a/cs/bsdx0200GUISourceCode/CGView.cs +++ b/cs/bsdx0200GUISourceCode/CGView.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Diagnostics; @@ -47,7 +48,7 @@ namespace IndianHealthService.ClinicalScheduling private System.Windows.Forms.Panel panelCenter; private System.Windows.Forms.Panel panelBottom; private System.Windows.Forms.Label lblResource; - private System.Windows.Forms.ContextMenu contextMenu1; + private System.Windows.Forms.ContextMenu ctxResourceTree; private System.Windows.Forms.MenuItem ctxOpenSchedule; private System.Windows.Forms.MenuItem ctxEditAvailability; private System.Windows.Forms.MenuItem ctxProperties; @@ -89,15 +90,15 @@ namespace IndianHealthService.ClinicalScheduling private System.Windows.Forms.MenuItem mnuPrintRebookLetters; private System.Windows.Forms.MenuItem mnuPrintCancellationLetters; private System.Windows.Forms.MenuItem mnuWalkIn; - private System.Windows.Forms.MenuItem menuItem5; - private System.Windows.Forms.MenuItem menuItem8; + private System.Windows.Forms.MenuItem sepApptMenu1; + private System.Windows.Forms.MenuItem sepApptMenu2; private System.Windows.Forms.MenuItem ctxCalGridWalkin; - private System.Windows.Forms.MenuItem menuItem2; - private System.Windows.Forms.MenuItem menuItem9; + private System.Windows.Forms.MenuItem ctxCalGridSep1; + private System.Windows.Forms.MenuItem ctxCalGridSep2; private System.Windows.Forms.MenuItem mnuOpenMultipleSchedules; private System.Windows.Forms.MenuItem mnuDisplayWalkIns; private System.Windows.Forms.MenuItem mnuRPMSDivision; - private MenuItem menuItem10; + private MenuItem ctxCalGridSep3; private MenuItem ctxCalGridReprintApptSlip; private MenuItem ctxCalGridUndoCheckin; private MenuItem ctxPrintScheduleT0; @@ -105,6 +106,13 @@ namespace IndianHealthService.ClinicalScheduling private MenuItem ctxPrintScheduleT3; private MenuItem menuItem12; private MenuItem mnuRefresh; + private MenuItem ctxCalGridMkRadAppt; + private MenuItem ctxCalGridCancelRadAppt; + private MenuItem mnuMkRadAppt; + private MenuItem mnuCancelRadAppt; + private MenuItem mnuUndoCheckin; + private MenuItem sepApptMenu3; + private MenuItem mnuReprintApptSlip; private IContainer components; #region Initialization @@ -193,17 +201,22 @@ namespace IndianHealthService.ClinicalScheduling this.mnuClose = new System.Windows.Forms.MenuItem(); this.mnuAppointment = new System.Windows.Forms.MenuItem(); this.mnuNewAppointment = new System.Windows.Forms.MenuItem(); + this.mnuWalkIn = new System.Windows.Forms.MenuItem(); + this.mnuMkRadAppt = new System.Windows.Forms.MenuItem(); this.mnuEditAppointment = new System.Windows.Forms.MenuItem(); this.mnuDeleteAppointment = new System.Windows.Forms.MenuItem(); - this.menuItem5 = new System.Windows.Forms.MenuItem(); + this.mnuCancelRadAppt = new System.Windows.Forms.MenuItem(); + this.sepApptMenu1 = new System.Windows.Forms.MenuItem(); this.mnuNoShow = new System.Windows.Forms.MenuItem(); this.mnuNoShowUndo = new System.Windows.Forms.MenuItem(); - this.menuItem8 = new System.Windows.Forms.MenuItem(); - this.mnuCopyAppointment = new System.Windows.Forms.MenuItem(); - this.mnuWalkIn = new System.Windows.Forms.MenuItem(); - this.mnuFindAppt = new System.Windows.Forms.MenuItem(); + this.sepApptMenu2 = new System.Windows.Forms.MenuItem(); this.mnuCheckIn = new System.Windows.Forms.MenuItem(); + this.mnuUndoCheckin = new System.Windows.Forms.MenuItem(); + this.sepApptMenu3 = new System.Windows.Forms.MenuItem(); + this.mnuFindAppt = new System.Windows.Forms.MenuItem(); + this.mnuCopyAppointment = new System.Windows.Forms.MenuItem(); this.mnuViewPatientAppts = new System.Windows.Forms.MenuItem(); + this.mnuReprintApptSlip = new System.Windows.Forms.MenuItem(); this.mnuCalendar = new System.Windows.Forms.MenuItem(); this.mnuDisplayWalkIns = new System.Windows.Forms.MenuItem(); this.mnu1Day = new System.Windows.Forms.MenuItem(); @@ -224,7 +237,7 @@ namespace IndianHealthService.ClinicalScheduling this.mnuTest = new System.Windows.Forms.MenuItem(); this.mnuTest1 = new System.Windows.Forms.MenuItem(); this.tvSchedules = new System.Windows.Forms.TreeView(); - this.contextMenu1 = new System.Windows.Forms.ContextMenu(); + this.ctxResourceTree = new System.Windows.Forms.ContextMenu(); this.ctxOpenSchedule = new System.Windows.Forms.MenuItem(); this.ctxEditAvailability = new System.Windows.Forms.MenuItem(); this.ctxProperties = new System.Windows.Forms.MenuItem(); @@ -245,16 +258,18 @@ namespace IndianHealthService.ClinicalScheduling this.panelCenter = new System.Windows.Forms.Panel(); this.ctxCalendarGrid = new System.Windows.Forms.ContextMenu(); this.ctxCalGridAdd = new System.Windows.Forms.MenuItem(); + this.ctxCalGridMkRadAppt = new System.Windows.Forms.MenuItem(); this.ctxCalGridEdit = new System.Windows.Forms.MenuItem(); this.ctxCalGridDelete = new System.Windows.Forms.MenuItem(); + this.ctxCalGridCancelRadAppt = new System.Windows.Forms.MenuItem(); this.ctxCalGridCheckIn = new System.Windows.Forms.MenuItem(); this.ctxCalGridUndoCheckin = new System.Windows.Forms.MenuItem(); - this.menuItem2 = new System.Windows.Forms.MenuItem(); + this.ctxCalGridSep1 = new System.Windows.Forms.MenuItem(); this.ctxCalGridNoShow = new System.Windows.Forms.MenuItem(); this.ctxCalGridNoShowUndo = new System.Windows.Forms.MenuItem(); - this.menuItem9 = new System.Windows.Forms.MenuItem(); + this.ctxCalGridSep2 = new System.Windows.Forms.MenuItem(); this.ctxCalGridWalkin = new System.Windows.Forms.MenuItem(); - this.menuItem10 = new System.Windows.Forms.MenuItem(); + this.ctxCalGridSep3 = new System.Windows.Forms.MenuItem(); this.ctxCalGridReprintApptSlip = new System.Windows.Forms.MenuItem(); this.panelBottom = new System.Windows.Forms.Panel(); this.statusBar1 = new System.Windows.Forms.StatusBar(); @@ -368,7 +383,7 @@ namespace IndianHealthService.ClinicalScheduling // mnuPrintReminderLetters // this.mnuPrintReminderLetters.Index = 10; - this.mnuPrintReminderLetters.Shortcut = System.Windows.Forms.Shortcut.CtrlI; + this.mnuPrintReminderLetters.Shortcut = System.Windows.Forms.Shortcut.CtrlE; this.mnuPrintReminderLetters.Text = "Print Rem&inder Letters"; this.mnuPrintReminderLetters.Click += new System.EventHandler(this.mnuPrintReminderLetters_Click); // @@ -410,17 +425,22 @@ namespace IndianHealthService.ClinicalScheduling this.mnuAppointment.Index = 1; this.mnuAppointment.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuNewAppointment, + this.mnuWalkIn, + this.mnuMkRadAppt, this.mnuEditAppointment, this.mnuDeleteAppointment, - this.menuItem5, + this.mnuCancelRadAppt, + this.sepApptMenu1, this.mnuNoShow, this.mnuNoShowUndo, - this.menuItem8, - this.mnuCopyAppointment, - this.mnuWalkIn, - this.mnuFindAppt, + this.sepApptMenu2, this.mnuCheckIn, - this.mnuViewPatientAppts}); + this.mnuUndoCheckin, + this.sepApptMenu3, + this.mnuFindAppt, + this.mnuCopyAppointment, + this.mnuViewPatientAppts, + this.mnuReprintApptSlip}); this.mnuAppointment.Text = "&Appointment"; this.mnuAppointment.Popup += new System.EventHandler(this.mnuAppointment_Popup); // @@ -431,73 +451,112 @@ namespace IndianHealthService.ClinicalScheduling this.mnuNewAppointment.Text = "&New Appointment"; this.mnuNewAppointment.Click += new System.EventHandler(this.mnuNewAppointment_Click); // + // mnuWalkIn + // + this.mnuWalkIn.Index = 1; + this.mnuWalkIn.Shortcut = System.Windows.Forms.Shortcut.ShiftIns; + this.mnuWalkIn.Text = "Create Wal&k-In Appointment"; + this.mnuWalkIn.Click += new System.EventHandler(this.mnuWalkIn_Click); + // + // mnuMkRadAppt + // + this.mnuMkRadAppt.Index = 2; + this.mnuMkRadAppt.Shortcut = System.Windows.Forms.Shortcut.CtrlIns; + this.mnuMkRadAppt.Text = "Make Radiology Appointment"; + this.mnuMkRadAppt.Click += new System.EventHandler(this.mnuMkRadAppt_Click); + // // mnuEditAppointment // - this.mnuEditAppointment.Index = 1; + this.mnuEditAppointment.Index = 3; this.mnuEditAppointment.Shortcut = System.Windows.Forms.Shortcut.F2; this.mnuEditAppointment.Text = "&Edit Appointment"; this.mnuEditAppointment.Click += new System.EventHandler(this.mnuEditAppointment_Click); // // mnuDeleteAppointment // - this.mnuDeleteAppointment.Index = 2; + this.mnuDeleteAppointment.Index = 4; this.mnuDeleteAppointment.Shortcut = System.Windows.Forms.Shortcut.Del; this.mnuDeleteAppointment.Text = "Cance&l Appointment"; this.mnuDeleteAppointment.Click += new System.EventHandler(this.mnuDeleteAppointment_Click); // - // menuItem5 + // mnuCancelRadAppt // - this.menuItem5.Index = 3; - this.menuItem5.Text = "-"; + this.mnuCancelRadAppt.Index = 5; + this.mnuCancelRadAppt.Shortcut = System.Windows.Forms.Shortcut.CtrlDel; + this.mnuCancelRadAppt.Text = "Cancel Radiology Appointment"; + this.mnuCancelRadAppt.Click += new System.EventHandler(this.mnuCancelRadAppt_Click); + // + // sepApptMenu1 + // + this.sepApptMenu1.Index = 6; + this.sepApptMenu1.Text = "-"; // // mnuNoShow // - this.mnuNoShow.Index = 4; + this.mnuNoShow.Index = 7; + this.mnuNoShow.Shortcut = System.Windows.Forms.Shortcut.CtrlN; this.mnuNoShow.Text = "Mark as No Sho&w"; this.mnuNoShow.Click += new System.EventHandler(this.mnuNoShow_Click); // // mnuNoShowUndo // - this.mnuNoShowUndo.Index = 5; + this.mnuNoShowUndo.Index = 8; + this.mnuNoShowUndo.Shortcut = System.Windows.Forms.Shortcut.CtrlShiftN; this.mnuNoShowUndo.Text = "&Undo No Show"; this.mnuNoShowUndo.Click += new System.EventHandler(this.mnuNoShowUndo_Click); // - // menuItem8 + // sepApptMenu2 // - this.menuItem8.Index = 6; - this.menuItem8.Text = "-"; - // - // mnuCopyAppointment - // - this.mnuCopyAppointment.Index = 7; - this.mnuCopyAppointment.Text = "&Copy Appointment to Clipboard"; - this.mnuCopyAppointment.Click += new System.EventHandler(this.mnuCopyAppointment_Click); - // - // mnuWalkIn - // - this.mnuWalkIn.Index = 8; - this.mnuWalkIn.Text = "Create Wal&k-In Appointment"; - this.mnuWalkIn.Click += new System.EventHandler(this.mnuWalkIn_Click); - // - // mnuFindAppt - // - this.mnuFindAppt.Index = 9; - this.mnuFindAppt.Shortcut = System.Windows.Forms.Shortcut.CtrlF; - this.mnuFindAppt.Text = "&Find Empty Slots"; - this.mnuFindAppt.Click += new System.EventHandler(this.mnuFindAppt_Click); + this.sepApptMenu2.Index = 9; + this.sepApptMenu2.Text = "-"; // // mnuCheckIn // this.mnuCheckIn.Index = 10; + this.mnuCheckIn.Shortcut = System.Windows.Forms.Shortcut.CtrlI; this.mnuCheckIn.Text = "Check &In Patient"; this.mnuCheckIn.Click += new System.EventHandler(this.mnuCheckIn_Click); // + // mnuUndoCheckin + // + this.mnuUndoCheckin.Index = 11; + this.mnuUndoCheckin.Shortcut = System.Windows.Forms.Shortcut.CtrlShiftI; + this.mnuUndoCheckin.Text = "Undo Checkin"; + this.mnuUndoCheckin.Click += new System.EventHandler(this.mnuUndoCheckin_Click); + // + // sepApptMenu3 + // + this.sepApptMenu3.Index = 12; + this.sepApptMenu3.Text = "-"; + // + // mnuFindAppt + // + this.mnuFindAppt.Index = 13; + this.mnuFindAppt.Shortcut = System.Windows.Forms.Shortcut.CtrlF; + this.mnuFindAppt.Text = "&Find Empty Slots"; + this.mnuFindAppt.Click += new System.EventHandler(this.mnuFindAppt_Click); + // + // mnuCopyAppointment + // + this.mnuCopyAppointment.Index = 14; + this.mnuCopyAppointment.Shortcut = System.Windows.Forms.Shortcut.CtrlC; + this.mnuCopyAppointment.Text = "&Copy Appointment to Clipboard"; + this.mnuCopyAppointment.Click += new System.EventHandler(this.mnuCopyAppointment_Click); + // // mnuViewPatientAppts // - this.mnuViewPatientAppts.Index = 11; + this.mnuViewPatientAppts.Index = 15; + this.mnuViewPatientAppts.Shortcut = System.Windows.Forms.Shortcut.CtrlShiftZ; this.mnuViewPatientAppts.Text = "&View Patient Appointments"; this.mnuViewPatientAppts.Click += new System.EventHandler(this.mnuViewPatientAppts_Click); // + // mnuReprintApptSlip + // + this.mnuReprintApptSlip.Index = 16; + this.mnuReprintApptSlip.Shortcut = System.Windows.Forms.Shortcut.CtrlShiftP; + this.mnuReprintApptSlip.Text = "Reprint Appointment Slip"; + this.mnuReprintApptSlip.Click += new System.EventHandler(this.mnuReprintApptSlip_Click); + // // mnuCalendar // this.mnuCalendar.Index = 2; @@ -518,6 +577,7 @@ namespace IndianHealthService.ClinicalScheduling // this.mnuDisplayWalkIns.Checked = true; this.mnuDisplayWalkIns.Index = 0; + this.mnuDisplayWalkIns.Shortcut = System.Windows.Forms.Shortcut.F12; this.mnuDisplayWalkIns.Text = "&Display Walk-Ins"; this.mnuDisplayWalkIns.Click += new System.EventHandler(this.mnuDisplayWalkIns_Click); // @@ -591,7 +651,9 @@ namespace IndianHealthService.ClinicalScheduling // // mnuViewScheduleTree // + this.mnuViewScheduleTree.Checked = true; this.mnuViewScheduleTree.Index = 6; + this.mnuViewScheduleTree.Shortcut = System.Windows.Forms.Shortcut.F4; this.mnuViewScheduleTree.Text = "&Schedule Tree"; this.mnuViewScheduleTree.Click += new System.EventHandler(this.mnuViewScheduleTree_Click); // @@ -644,12 +706,12 @@ namespace IndianHealthService.ClinicalScheduling // tvSchedules // this.tvSchedules.BackColor = System.Drawing.SystemColors.ControlLight; - this.tvSchedules.ContextMenu = this.contextMenu1; + this.tvSchedules.ContextMenu = this.ctxResourceTree; this.tvSchedules.Dock = System.Windows.Forms.DockStyle.Left; this.tvSchedules.HotTracking = true; this.tvSchedules.Location = new System.Drawing.Point(0, 0); this.tvSchedules.Name = "tvSchedules"; - this.tvSchedules.Size = new System.Drawing.Size(128, 317); + this.tvSchedules.Size = new System.Drawing.Size(128, 392); this.tvSchedules.Sorted = true; this.tvSchedules.TabIndex = 1; this.tvSchedules.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvSchedules_AfterSelect); @@ -657,9 +719,9 @@ namespace IndianHealthService.ClinicalScheduling this.tvSchedules.DoubleClick += new System.EventHandler(this.tvSchedules_DoubleClick); this.tvSchedules.MouseEnter += new System.EventHandler(this.tvSchedules_MouseEnter); // - // contextMenu1 + // ctxResourceTree // - this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.ctxResourceTree.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.ctxOpenSchedule, this.ctxEditAvailability, this.ctxProperties, @@ -667,7 +729,7 @@ namespace IndianHealthService.ClinicalScheduling this.ctxPrintScheduleT0, this.ctxPrintScheduleT1, this.ctxPrintScheduleT3}); - this.contextMenu1.Popup += new System.EventHandler(this.contextMenu1_Popup); + this.ctxResourceTree.Popup += new System.EventHandler(this.contextMenu1_Popup); // // ctxOpenSchedule // @@ -718,7 +780,7 @@ namespace IndianHealthService.ClinicalScheduling this.panelRight.Dock = System.Windows.Forms.DockStyle.Right; this.panelRight.Location = new System.Drawing.Point(996, 0); this.panelRight.Name = "panelRight"; - this.panelRight.Size = new System.Drawing.Size(128, 317); + this.panelRight.Size = new System.Drawing.Size(128, 392); this.panelRight.TabIndex = 3; this.panelRight.Visible = false; // @@ -814,23 +876,25 @@ namespace IndianHealthService.ClinicalScheduling this.panelCenter.Dock = System.Windows.Forms.DockStyle.Fill; this.panelCenter.Location = new System.Drawing.Point(136, 24); this.panelCenter.Name = "panelCenter"; - this.panelCenter.Size = new System.Drawing.Size(857, 269); + this.panelCenter.Size = new System.Drawing.Size(857, 344); this.panelCenter.TabIndex = 7; // // ctxCalendarGrid // this.ctxCalendarGrid.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.ctxCalGridAdd, + this.ctxCalGridMkRadAppt, this.ctxCalGridEdit, this.ctxCalGridDelete, + this.ctxCalGridCancelRadAppt, this.ctxCalGridCheckIn, this.ctxCalGridUndoCheckin, - this.menuItem2, + this.ctxCalGridSep1, this.ctxCalGridNoShow, this.ctxCalGridNoShowUndo, - this.menuItem9, + this.ctxCalGridSep2, this.ctxCalGridWalkin, - this.menuItem10, + this.ctxCalGridSep3, this.ctxCalGridReprintApptSlip}); this.ctxCalendarGrid.Popup += new System.EventHandler(this.ctxCalendarGrid_Popup); // @@ -840,66 +904,78 @@ namespace IndianHealthService.ClinicalScheduling this.ctxCalGridAdd.Text = "Add Appointment"; this.ctxCalGridAdd.Click += new System.EventHandler(this.ctxCalGridAdd_Click); // + // ctxCalGridMkRadAppt + // + this.ctxCalGridMkRadAppt.Index = 1; + this.ctxCalGridMkRadAppt.Text = "Make Radiology Appointment"; + this.ctxCalGridMkRadAppt.Click += new System.EventHandler(this.ctxCalGridMkRadAppt_Click); + // // ctxCalGridEdit // - this.ctxCalGridEdit.Index = 1; + this.ctxCalGridEdit.Index = 2; this.ctxCalGridEdit.Text = "Edit Appointment"; this.ctxCalGridEdit.Click += new System.EventHandler(this.ctxCalGridEdit_Click); // // ctxCalGridDelete // - this.ctxCalGridDelete.Index = 2; + this.ctxCalGridDelete.Index = 3; this.ctxCalGridDelete.Text = "Cancel Appointment"; this.ctxCalGridDelete.Click += new System.EventHandler(this.ctxCalGridDelete_Click); // + // ctxCalGridCancelRadAppt + // + this.ctxCalGridCancelRadAppt.Index = 4; + this.ctxCalGridCancelRadAppt.Text = "Cancel Radiology Appointment"; + this.ctxCalGridCancelRadAppt.Click += new System.EventHandler(this.ctxCalGridCancelRadAppt_Click); + // // ctxCalGridCheckIn // - this.ctxCalGridCheckIn.Index = 3; + this.ctxCalGridCheckIn.Index = 5; this.ctxCalGridCheckIn.Text = "Check In Patient"; this.ctxCalGridCheckIn.Click += new System.EventHandler(this.ctxCalGridCheckIn_Click); // // ctxCalGridUndoCheckin // - this.ctxCalGridUndoCheckin.Index = 4; + this.ctxCalGridUndoCheckin.Index = 6; this.ctxCalGridUndoCheckin.Text = "&Undo Check In"; this.ctxCalGridUndoCheckin.Click += new System.EventHandler(this.ctxCalGridUndoCheckin_Click); // - // menuItem2 + // ctxCalGridSep1 // - this.menuItem2.Index = 5; - this.menuItem2.Text = "-"; + this.ctxCalGridSep1.Index = 7; + this.ctxCalGridSep1.Text = "-"; // // ctxCalGridNoShow // - this.ctxCalGridNoShow.Index = 6; + this.ctxCalGridNoShow.Index = 8; this.ctxCalGridNoShow.Text = "Mark as No Show"; this.ctxCalGridNoShow.Click += new System.EventHandler(this.ctxCalGridNoShow_Click); // // ctxCalGridNoShowUndo // - this.ctxCalGridNoShowUndo.Index = 7; + this.ctxCalGridNoShowUndo.Index = 9; this.ctxCalGridNoShowUndo.Text = "Undo NoShow"; this.ctxCalGridNoShowUndo.Click += new System.EventHandler(this.ctxCalGridNoShowUndo_Click); // - // menuItem9 + // ctxCalGridSep2 // - this.menuItem9.Index = 8; - this.menuItem9.Text = "-"; + this.ctxCalGridSep2.Index = 10; + this.ctxCalGridSep2.Text = "-"; // // ctxCalGridWalkin // - this.ctxCalGridWalkin.Index = 9; + this.ctxCalGridWalkin.Index = 11; this.ctxCalGridWalkin.Text = "Create Wal&k-In Appointment"; this.ctxCalGridWalkin.Click += new System.EventHandler(this.ctxCalGridWalkin_Click); // - // menuItem10 + // ctxCalGridSep3 // - this.menuItem10.Index = 10; - this.menuItem10.Text = "-"; + this.ctxCalGridSep3.Index = 12; + this.ctxCalGridSep3.Text = "-"; // // ctxCalGridReprintApptSlip // - this.ctxCalGridReprintApptSlip.Index = 11; + this.ctxCalGridReprintApptSlip.Index = 13; this.ctxCalGridReprintApptSlip.Text = "&Reprint Appointment Slip"; this.ctxCalGridReprintApptSlip.Click += new System.EventHandler(this.ctxCalGridReprintApptSlip_Click); // @@ -907,7 +983,7 @@ namespace IndianHealthService.ClinicalScheduling // this.panelBottom.Controls.Add(this.statusBar1); this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panelBottom.Location = new System.Drawing.Point(136, 293); + this.panelBottom.Location = new System.Drawing.Point(136, 368); this.panelBottom.Name = "panelBottom"; this.panelBottom.Size = new System.Drawing.Size(857, 24); this.panelBottom.TabIndex = 8; @@ -925,7 +1001,7 @@ namespace IndianHealthService.ClinicalScheduling // this.splitter1.Location = new System.Drawing.Point(128, 24); this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(8, 293); + this.splitter1.Size = new System.Drawing.Size(8, 368); this.splitter1.TabIndex = 9; this.splitter1.TabStop = false; // @@ -934,7 +1010,7 @@ namespace IndianHealthService.ClinicalScheduling this.splitter2.Dock = System.Windows.Forms.DockStyle.Right; this.splitter2.Location = new System.Drawing.Point(993, 24); this.splitter2.Name = "splitter2"; - this.splitter2.Size = new System.Drawing.Size(3, 293); + this.splitter2.Size = new System.Drawing.Size(3, 368); this.splitter2.TabIndex = 10; this.splitter2.TabStop = false; // @@ -957,7 +1033,7 @@ namespace IndianHealthService.ClinicalScheduling this.calendarGrid1.Name = "calendarGrid1"; this.calendarGrid1.Resources = ((System.Collections.ArrayList)(resources.GetObject("calendarGrid1.Resources"))); this.calendarGrid1.SelectedAppointment = 0; - this.calendarGrid1.Size = new System.Drawing.Size(857, 269); + this.calendarGrid1.Size = new System.Drawing.Size(857, 344); this.calendarGrid1.StartDate = new System.DateTime(2003, 1, 27, 0, 0, 0, 0); this.calendarGrid1.TabIndex = 0; this.calendarGrid1.TimeScale = 20; @@ -970,7 +1046,7 @@ namespace IndianHealthService.ClinicalScheduling // CGView // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); - this.ClientSize = new System.Drawing.Size(1124, 317); + this.ClientSize = new System.Drawing.Size(1124, 392); this.Controls.Add(this.panelCenter); this.Controls.Add(this.panelBottom); this.Controls.Add(this.splitter2); @@ -1081,26 +1157,35 @@ namespace IndianHealthService.ClinicalScheduling #endregion - #region AppointmentMenu Handlers private void mnuAppointment_Popup(object sender, System.EventArgs e) { - bool bEnabled = (this.Document.Resources.Count > 0)? true : false ; - this.mnuFindAppt.Enabled = bEnabled; + // our flags + bool _findApptsEnabled = (this.Document.Resources.Count > 0)? true : false ; + bool _addApptsEnabled = AddAppointmentEnabled(); + bool _editApptsEnabled = EditAppointmentEnabled(); + bool _isRadAppt = IsThisARadiologyResource(); + bool _noShowEnabled = NoShowEnabled(); + bool _undoCheckinEnabled = UndoCheckinEnabled(); + //end flags - //Toggle availability of make, edit, checkin and delete appointments - //based on whether a range is selected. + mnuNewAppointment.Enabled = _addApptsEnabled && !_isRadAppt; + mnuWalkIn.Enabled = _addApptsEnabled && !_isRadAppt; + mnuMkRadAppt.Enabled = _isRadAppt && _addApptsEnabled; - mnuNewAppointment.Enabled = AddAppointmentEnabled(); - this.mnuWalkIn.Enabled = mnuNewAppointment.Enabled; - bool bEditAppointments = this.EditAppointmentEnabled(); + mnuEditAppointment.Enabled = _editApptsEnabled && !_isRadAppt; + mnuDeleteAppointment.Enabled = _editApptsEnabled && !_isRadAppt; + mnuCancelRadAppt.Enabled = _isRadAppt && _editApptsEnabled; + mnuNoShow.Enabled = _noShowEnabled && _editApptsEnabled; + mnuNoShowUndo.Enabled = !_noShowEnabled && _editApptsEnabled; + mnuCheckIn.Enabled = _editApptsEnabled && !_isRadAppt; + mnuUndoCheckin.Enabled = _undoCheckinEnabled && !_isRadAppt; - mnuDeleteAppointment.Enabled = bEditAppointments; - mnuCheckIn.Enabled = bEditAppointments; - mnuEditAppointment.Enabled = bEditAppointments; - mnuNoShow.Enabled = bEditAppointments; - mnuNoShowUndo.Enabled = bEditAppointments; + mnuFindAppt.Enabled = _findApptsEnabled; + mnuCopyAppointment.Enabled = _editApptsEnabled && !_isRadAppt; + mnuViewPatientAppts.Enabled = true; + mnuReprintApptSlip.Enabled = _editApptsEnabled; } private void mnuCheckIn_Click(object sender, System.EventArgs e) @@ -1117,12 +1202,12 @@ namespace IndianHealthService.ClinicalScheduling { foreach (CGAppointment a in this.calendarGrid1.SelectedAppointments.AppointmentTable.Values) { - if (m_ClipList.AppointmentTable.Contains((int) a.AppointmentKey)) + if (m_ClipList.AppointmentTable.Contains((int)a.AppointmentKey)) { return; } m_ClipList.AddAppointment(a); - lstClip.Items.Add(a.PatientName); + lstClip.Items.Add(a); } } catch (Exception ex) @@ -1163,6 +1248,31 @@ namespace IndianHealthService.ClinicalScheduling AppointmentUndoCheckin(); } + private void mnuMkRadAppt_Click(object sender, EventArgs e) + { + AppointmentAddNewRadiology(); + } + + private void mnuCancelRadAppt_Click(object sender, EventArgs e) + { + AppointmentDeleteOneRadiology(); + } + + private void mnuUndoCheckin_Click(object sender, EventArgs e) + { + AppointmentUndoCheckin(); + } + + private void mnuReprintApptSlip_Click(object sender, EventArgs e) + { + int apptID = this.CGrid.SelectedAppointment; + if (apptID <= 0) return; + + CGAppointment a = (CGAppointment)this.Appointments.AppointmentTable[apptID]; + + PrintAppointmentSlip(a); + } + #endregion AppointmentMenu Handlers #region ContextMenu1 Handlers @@ -1291,20 +1401,60 @@ namespace IndianHealthService.ClinicalScheduling private void ctxCalendarGrid_Popup(object sender, System.EventArgs e) { + bool bEditAppointments = (EditAppointmentEnabled() && (calendarGrid1.SelectedAppointment > 0)) ; + + if (IsThisARadiologyResource())//this is a radiology resource + { + ctxCalGridAdd.Visible = false; + ctxCalGridDelete.Visible = false; + ctxCalGridEdit.Visible = false; + ctxCalGridCheckIn.Visible = false; + ctxCalGridNoShow.Visible = false; + ctxCalGridNoShowUndo.Visible = false; + ctxCalGridWalkin.Visible = false; + ctxCalGridUndoCheckin.Visible = false; + ctxCalGridSep1.Visible = false; + ctxCalGridSep2.Visible = false; + + ctxCalGridMkRadAppt.Visible = true; + ctxCalGridCancelRadAppt.Visible = true; + + + } + + else // this is a normal resource + { + ctxCalGridAdd.Visible = true; + ctxCalGridDelete.Visible = true; + ctxCalGridEdit.Visible = true; + ctxCalGridCheckIn.Visible = true; + ctxCalGridNoShow.Visible = true; + ctxCalGridNoShowUndo.Visible = true; + ctxCalGridWalkin.Visible = true; + ctxCalGridUndoCheckin.Visible = true; + ctxCalGridSep1.Visible = true; + ctxCalGridSep2.Visible = true; + + ctxCalGridMkRadAppt.Visible = false; + ctxCalGridCancelRadAppt.Visible = false; + } + //Toggle availability of make, edit, checkin and delete appointments //based on whether appropriate element is selected. ctxCalGridAdd.Enabled = AddAppointmentEnabled(); - bool bEditAppointments = (EditAppointmentEnabled() && (calendarGrid1.SelectedAppointment > 0)) ; + ctxCalGridDelete.Enabled = bEditAppointments; ctxCalGridEdit.Enabled = bEditAppointments; ctxCalGridCheckIn.Enabled = bEditAppointments; ctxCalGridNoShow.Enabled = NoShowEnabled(); ctxCalGridNoShowUndo.Enabled = !NoShowEnabled() && calendarGrid1.SelectedAppointment > 0; ctxCalGridWalkin.Enabled = ctxCalGridAdd.Enabled; - //smh new code ctxCalGridReprintApptSlip.Enabled = bEditAppointments; ctxCalGridUndoCheckin.Enabled = UndoCheckinEnabled(); - //end new code + + //if the rad ones are visible, then these apply + ctxCalGridMkRadAppt.Enabled = !bEditAppointments; + ctxCalGridCancelRadAppt.Enabled = bEditAppointments; } private void ctxCalGridAdd_Click(object sender, System.EventArgs e) @@ -1343,7 +1493,16 @@ namespace IndianHealthService.ClinicalScheduling AppointmentNoShow(false); } - //new code smh + private void ctxCalGridMkRadAppt_Click(object sender, EventArgs e) + { + AppointmentAddNewRadiology(); + } + + private void ctxCalGridCancelRadAppt_Click(object sender, EventArgs e) + { + AppointmentDeleteOneRadiology(); + } + private void ctxCalGridReprintApptSlip_Click(object sender, EventArgs e) { int apptID = this.CGrid.SelectedAppointment; @@ -1353,12 +1512,68 @@ namespace IndianHealthService.ClinicalScheduling PrintAppointmentSlip(a); } - //end new code #endregion ctxCalGridMenu Handlers #region Methods + /// + /// Decides whether this is a Radiology Resource. Local Helper to decide what menu items to enable/display + /// + /// + private bool IsThisARadiologyResource() + { + //I don't like this logic!!! but works for now! + //Note: I use banana peeling model below + + //If no cell is selected AND no appointment is selected, then it's false + if (this.calendarGrid1.SelectedRange.Cells.CellCount < 1 && this.calendarGrid1.SelectedAppointment < 1) + return false; + + //If an appointment is selected then... + if (this.calendarGrid1.SelectedAppointment > 0) + { + CGAppointment appt = this.Appointments.AppointmentTable[this.calendarGrid1.SelectedAppointment] as CGAppointment; + if (appt == null) return false; //appt doesn't exist; old appointment and grid wasn't refreshed yet + if (appt.RadiologyExamIEN.HasValue && appt.RadiologyExamIEN.Value > 0) return true; //this appointment is a radiology appointment since it has that member + else return false; + + } + + //Otherwise, we are for sure dealing with a cell. + //We need to determine if the cell resource is mapped to a Radiology Hospital Location. + DateTime dStart; + DateTime dEnd; + string sResource; + + // Get resource + bool bRet = this.calendarGrid1.GetSelectedTime(out dStart, out dEnd, out sResource); + + // If we fail, return false (but this is not supposed to ever happen) + if (bRet == false) + { + return false; + } + + // see if resource is mapped to a Radiology Hospital Location. + return IsThisARadiologyResource(sResource); + } + + private bool IsThisARadiologyResource(string sResource) + { + // see if resource is mapped to a Radiology Hospital Location. + return ( //select all Hospital Locations which are radiology locations + from hl in CGDocumentManager.Current.GlobalDataSet.Tables["HospitalLocation"].AsEnumerable() + where hl.Field("IS_RADIOLOGY_LOCATION") == "1" + //join this to the resources table using the foreign ID (plain jane relational join) + join res in CGDocumentManager.Current.GlobalDataSet.Tables["Resources"].AsEnumerable() + on hl.Field("HOSPITAL_LOCATION_ID") equals res.Field("HOSPITAL_LOCATION_ID") + //then filter this down to the resource that we have + where res.Field("RESOURCE_NAME") == sResource + //if we have any row left, then it is true. + select hl).Any(); + } + private bool EditAppointmentEnabled() { try @@ -1979,6 +2194,30 @@ namespace IndianHealthService.ClinicalScheduling } } + /// + /// Delete one Radiology Appointment + /// + private void AppointmentDeleteOneRadiology() + { + Debug.Assert(this.calendarGrid1.SelectedAppointment > 0); + + CGAppointment a = this.Appointments.AppointmentTable[this.calendarGrid1.SelectedAppointment] as CGAppointment; + + Debug.Assert(a.RadiologyExamIEN.HasValue); + + //Prior to making expensive db calls, tell the grid nothing is selected anymore so nobody would try to pick it up + this.calendarGrid1.SelectedAppointment = 0; + + //Cancel Radiology Exam + CGDocumentManager.Current.DAL.CancelRadiologyExam(a.PatientID, a.RadiologyExamIEN.Value); + + //Now, Cancel the appointment + this.Document.DeleteAppointment(a.AppointmentKey); + + //redraw the grid to display new set of appointments after this appt was removed. + this.UpdateArrays(); + } + /// /// Delete appointment ApptID /// @@ -2015,6 +2254,11 @@ namespace IndianHealthService.ClinicalScheduling return; } + //At this point, the appointment will be deleted... + //Remove the Selected Appointment from the grid because we don't anybody to think there's still + //an appointment selected while we are still updating the grid + this.calendarGrid1.SelectedAppointment = 0; + bool bClinic = dCancel.ClinicCancelled; int nReason = dCancel.CancelReason; string sRemarks = dCancel.CancelRemarks; @@ -2380,6 +2624,85 @@ namespace IndianHealthService.ClinicalScheduling } } + /// + /// Add a new Radiology Appointment to VISTA (ÒÝÊì as my mom calls it) + /// + private void AppointmentAddNewRadiology() + { + DateTime dStart, dEnd; //return vales for below + string sResource; //ditto + int nAccessTypeID = 0; //ditto + + this.calendarGrid1.GetSelectedTime(out dStart, out dEnd, out sResource); + this.calendarGrid1.GetSelectedType(out nAccessTypeID); + + Debug.Assert(sResource != null); + Debug.Assert(dStart > DateTime.MinValue); + + //Display a dialog to collect Patient Name + DPatientLookup dPat = new DPatientLookup(); + dPat.DocManager = m_DocManager; + + if (dPat.ShowDialog(this) == DialogResult.Cancel) + { + return; + } + + int DFN = Int32.Parse(dPat.PatientIEN); + // Hospital Location IEN + int hlIEN = (from resource in CGDocumentManager.Current.GlobalDataSet.Tables["Resources"].AsEnumerable() + where resource.Field("RESOURCE_NAME") == sResource + select resource.Field("HOSPITAL_LOCATION_ID")).FirstOrDefault(); + + //Get Radiology Exams from the DB + List _radExams = CGDocumentManager.Current.DAL.GetRadiologyExamsForPatientinHL(DFN, hlIEN); + + //If none found... + if (!_radExams.Any()) + { + MessageBox.Show("Patient does not have any radiology exams to register."); + return; + } + + //Display a form for the user to select radiology exams. + DRadExamsSelect _radform = new DRadExamsSelect(_radExams); + + if (_radform.ShowDialog() == DialogResult.Cancel) return; + + //Get some return values + int _examien = _radform.ExamIEN; + string _procedurename = _radform.ProcedureName; + + //Save Radiology Exam Schedule Info to Radiology Package + CGDocumentManager.Current.DAL.ScheduleRadiologyExam(DFN, _examien, dStart); + + //Now create and save the appointment + CGAppointment appt = new CGAppointment(); + string _sNote = "Radiology Exam (" + _examien + "): " + _procedurename; + appt.CreateAppointment(dStart, dEnd, _sNote, 0, sResource); + appt.PatientID = Int32.Parse(dPat.PatientIEN); + appt.PatientName = dPat.PatientName; + appt.AccessTypeID = nAccessTypeID; + appt.RadiologyExamIEN = _examien; + appt.Patient = new Patient + { + DFN = Convert.ToInt32(dPat.PatientIEN), + ID = dPat.PatientPID, + Name = dPat.PatientName, + HRN = dPat.HealthRecordNumber, + DOB = dPat.PatientDOB + }; + + this.Document.CreateAppointment(appt); + + //Print Appointment Slip if requested + if (_radform.PrintAppointmentSlip) this.PrintAppointmentSlip(appt); + + //Now redraw the grid to display the new appointments + this.UpdateArrays(); + } + + #region BMX Event Processing and Callbacks /// /// Loosely typed delegate used several times below. @@ -2891,9 +3214,25 @@ namespace IndianHealthService.ClinicalScheduling { try { + // added April 13 2011 + // Can't edit radiology appointments (Why? b/c it's intimately tied to Radiology Entry of the Hosp Loc) + if (e.Appointment.RadiologyExamIEN.HasValue && e.Appointment.RadiologyExamIEN.Value > 0) + { + MessageBox.Show("You cannot move a radiology appointment.", "Clinical Scheduling"); + return; + } + + // added May 5 2011 + // Can't move an appointment to a radiology resource + if (IsThisARadiologyResource(e.Resource)) + { + MessageBox.Show("You cannot move an appointment to a radiology location.", "Clinical Scheduling"); + return; + } + if (e.Appointment.CheckInTime.Ticks > 0) { - MessageBox.Show("You cannot change the appointment time because the patient has already checked in.", "Clinical Scheduling", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); + MessageBox.Show("You cannot change the appointment time because the patient has already checked in.", "Clinical Scheduling"); return; } @@ -3565,8 +3904,5 @@ namespace IndianHealthService.ClinicalScheduling } - - - }//End class } diff --git a/cs/bsdx0200GUISourceCode/CGView.resx b/cs/bsdx0200GUISourceCode/CGView.resx index 1e41e14..5e70d0f 100644 --- a/cs/bsdx0200GUISourceCode/CGView.resx +++ b/cs/bsdx0200GUISourceCode/CGView.resx @@ -120,7 +120,7 @@ 17, 17 - + 126, 17 diff --git a/cs/bsdx0200GUISourceCode/CalendarGrid.cs b/cs/bsdx0200GUISourceCode/CalendarGrid.cs index 94c2a23..cd5dff1 100644 --- a/cs/bsdx0200GUISourceCode/CalendarGrid.cs +++ b/cs/bsdx0200GUISourceCode/CalendarGrid.cs @@ -479,7 +479,7 @@ if (bRet && (!appointment.WalkIn || this.m_bDrawWalkIns)) { rect.Inflate(-10, 0); - num = (int) this.m_ApptOverlapTable[appointment.m_nKey]; + num = (int) this.m_ApptOverlapTable[appointment.AppointmentKey]; num2 = rect.Right - rect.Left; x = num2 / (num + 1); rect.Width = x; @@ -1266,7 +1266,7 @@ num2 = appointment.EndTime.Minute + (60 * appointment.EndTime.Hour); x = (this.m_sResourcesArray.Count > 1) ? (((int) this.m_ColumnInfoTable[resource]) + 1) : appointment.StartTime.DayOfYear; Rectangle rectangle = new Rectangle(x, y, 1, num2 - y); - hashtable.Add(appointment.m_nKey, rectangle); + hashtable.Add(appointment.AppointmentKey, rectangle); } } this.m_ApptOverlapTable.Clear(); diff --git a/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj b/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj index 4798f44..33b0894 100644 --- a/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj +++ b/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj @@ -139,7 +139,14 @@ + + Form + + + DRadExamsSelect.cs + + True True @@ -151,7 +158,6 @@ strings.resx - dsPatientApptDisplay2.xsd @@ -391,6 +397,9 @@ DPatientLookup.cs Designer + + DRadExamsSelect.cs + DResource.cs Designer diff --git a/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo b/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo index 1d5cfa6..5fae8a6 100644 Binary files a/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo and b/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo differ diff --git a/cs/bsdx0200GUISourceCode/DAL.cs b/cs/bsdx0200GUISourceCode/DAL.cs index 2ca24d9..ed3794c 100644 --- a/cs/bsdx0200GUISourceCode/DAL.cs +++ b/cs/bsdx0200GUISourceCode/DAL.cs @@ -1,4 +1,6 @@ -using System; +/* Licensed under LGPL */ + +using System; using System.Collections.Generic; using System.Linq; using System.Data; @@ -185,6 +187,52 @@ namespace IndianHealthService.ClinicalScheduling return RPMSDataTable(cmd, ""); } + /// + /// Gets All radiology exams for a Patient in a specific hospital location + /// + /// + /// Hospital Location IEN + /// Generic List of type RadiologyExam + public List GetRadiologyExamsForPatientinHL(int DFN, int SCIEN) + { + string cmd = string.Format("BSDX GET RAD EXAM FOR PT^{0}^{1}", DFN, SCIEN); + DataTable tbl = RPMSDataTable(cmd, ""); + return (from row in tbl.AsEnumerable() + select new RadiologyExam + { + IEN = row.Field("BMXIEN"), + Status = row.Field("STATUS"), + Procedure = row.Field("PROCEDURE"), + RequestDate = row.Field("REQUEST_DATE") + }).ToList(); + } + + /// + /// Schedules a Single Radiology Exam for a patient + /// + /// + /// IEN of exam in 75.1 (RAD/NUC MED ORDERS) file + /// Start DateTime of appointment + /// should always return true + public bool ScheduleRadiologyExam(int DFN, int examIEN, DateTime dStart) + { + string fmStartDate = FMDateTime.Create(dStart).FMDateString; + string result = _thisConnection.bmxNetLib.TransmitRPC("BSDX SCHEDULE RAD EXAM", string.Format("{0}^{1}^{2}", DFN, examIEN, fmStartDate)); + return result == "1" ? true : false; + } + + /// + /// Put the radiology exam on Hold because the appointment has been cancelled for it + /// + /// + /// IEN of exam in 75.1 (RAD/NUC MED ORDERS) file + /// should always return true + public bool CancelRadiologyExam(int DFN, int examIEN) + { + string result = _thisConnection.bmxNetLib.TransmitRPC("BSDX HOLD RAD EXAM", string.Format("{0}^{1}", DFN, examIEN)); + return result == "1" ? true : false; + } + /// /// Save User Preference in DB For Printing Routing Slip /// Uses Parameter BSDX AUTO PRINT RS diff --git a/cs/bsdx0200GUISourceCode/DRadExamsSelect.Designer.cs b/cs/bsdx0200GUISourceCode/DRadExamsSelect.Designer.cs new file mode 100644 index 0000000..15fe9b8 --- /dev/null +++ b/cs/bsdx0200GUISourceCode/DRadExamsSelect.Designer.cs @@ -0,0 +1,195 @@ +namespace IndianHealthService.ClinicalScheduling +{ + partial class DRadExamsSelect + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #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.lstExams = new System.Windows.Forms.ListBox(); + this.tableOKCancel = new System.Windows.Forms.TableLayoutPanel(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.lblInfo = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.chkPrint = new System.Windows.Forms.CheckBox(); + this.tableOKCancel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // lstExams + // + this.lstExams.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstExams.FormattingEnabled = true; + this.lstExams.Location = new System.Drawing.Point(0, 0); + this.lstExams.Name = "lstExams"; + this.lstExams.Size = new System.Drawing.Size(497, 237); + this.lstExams.TabIndex = 0; + this.lstExams.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lstExams_MouseDoubleClick); + // + // tableOKCancel + // + this.tableOKCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.tableOKCancel.ColumnCount = 2; + this.tableOKCancel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableOKCancel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableOKCancel.Controls.Add(this.btnOK, 0, 0); + this.tableOKCancel.Controls.Add(this.btnCancel, 1, 0); + this.tableOKCancel.Location = new System.Drawing.Point(328, -1); + this.tableOKCancel.Name = "tableOKCancel"; + this.tableOKCancel.RowCount = 1; + this.tableOKCancel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableOKCancel.Size = new System.Drawing.Size(166, 29); + this.tableOKCancel.TabIndex = 1; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(3, 3); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(75, 23); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(86, 3); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 23); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + // + // lblInfo + // + this.lblInfo.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblInfo.AutoSize = true; + this.lblInfo.Location = new System.Drawing.Point(4, 6); + this.lblInfo.Name = "lblInfo"; + this.lblInfo.Size = new System.Drawing.Size(245, 13); + this.lblInfo.TabIndex = 2; + this.lblInfo.Text = "Select an Exam from the exams listed to Schedule"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.lstExams); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(497, 302); + this.splitContainer1.SplitterDistance = 237; + this.splitContainer1.TabIndex = 3; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.lblInfo); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.chkPrint); + this.splitContainer2.Panel2.Controls.Add(this.tableOKCancel); + this.splitContainer2.Size = new System.Drawing.Size(497, 61); + this.splitContainer2.SplitterDistance = 25; + this.splitContainer2.TabIndex = 3; + // + // chkPrint + // + this.chkPrint.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.chkPrint.AutoSize = true; + this.chkPrint.Location = new System.Drawing.Point(3, 11); + this.chkPrint.Name = "chkPrint"; + this.chkPrint.Size = new System.Drawing.Size(131, 17); + this.chkPrint.TabIndex = 2; + this.chkPrint.Text = "Print Appointment Slip"; + this.chkPrint.UseVisualStyleBackColor = true; + this.chkPrint.CheckedChanged += new System.EventHandler(this.chkPrint_CheckedChanged); + // + // DRadExamsSelect + // + this.AcceptButton = this.btnOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(497, 302); + this.ControlBox = false; + this.Controls.Add(this.splitContainer1); + this.MinimumSize = new System.Drawing.Size(500, 250); + this.Name = "DRadExamsSelect"; + this.Text = "Select an Exam"; + this.tableOKCancel.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListBox lstExams; + private System.Windows.Forms.TableLayoutPanel tableOKCancel; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Label lblInfo; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.CheckBox chkPrint; + + + + } +} \ No newline at end of file diff --git a/cs/bsdx0200GUISourceCode/DRadExamsSelect.cs b/cs/bsdx0200GUISourceCode/DRadExamsSelect.cs new file mode 100644 index 0000000..210f7f7 --- /dev/null +++ b/cs/bsdx0200GUISourceCode/DRadExamsSelect.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IndianHealthService.ClinicalScheduling +{ + /// + /// Form which displays exams for User so that the user would pick one of them + /// for which to make an appointment + /// + public partial class DRadExamsSelect : Form + { + //return values + public int ExamIEN { get; private set; } + public string ProcedureName { get; private set; } + public bool PrintAppointmentSlip { get { return chkPrint.Checked; } } + //end return values + + //private fields + public bool _myCodeIsFiringIstheCheckBoxChangedEvent = false; + //private fields + + /// + /// ctor + /// + /// Strongly Typed Table of Exams + public DRadExamsSelect(List _radExams) + { + InitializeComponent(); + + this.lstExams.DataSource = _radExams; + this.lstExams.SelectionMode = SelectionMode.One; + + //Set Default Checkbox + _myCodeIsFiringIstheCheckBoxChangedEvent = true; + chkPrint.Checked = CGDocumentManager.Current.UserPreferences.PrintAppointmentSlipAutomacially; + _myCodeIsFiringIstheCheckBoxChangedEvent = false; + } + + private void btnOK_Click(object sender, EventArgs e) + { + SharedFinishLine(); + } + + private void lstExams_MouseDoubleClick(object sender, MouseEventArgs e) + { + SharedFinishLine(); + } + + private void SharedFinishLine() + { + if (lstExams.SelectedIndex < 0) + { + this.DialogResult = DialogResult.None; + return; + } + + ExamIEN = (lstExams.Items[lstExams.SelectedIndex] as RadiologyExam).IEN; + ProcedureName = (lstExams.Items[lstExams.SelectedIndex] as RadiologyExam).Procedure; + this.DialogResult = DialogResult.OK; + } + + /// + /// Save preference for Auto Printing Appointment Slip in the DB + /// + /// + /// + private void chkPrint_CheckedChanged(object sender, EventArgs e) + { + if (_myCodeIsFiringIstheCheckBoxChangedEvent) return; + + CGDocumentManager.Current.UserPreferences.PrintAppointmentSlipAutomacially = chkPrint.Checked; + } + + + } +} diff --git a/cs/bsdx0200GUISourceCode/DRadExamsSelect.resx b/cs/bsdx0200GUISourceCode/DRadExamsSelect.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/cs/bsdx0200GUISourceCode/DRadExamsSelect.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/cs/bsdx0200GUISourceCode/FMDateTime.cs b/cs/bsdx0200GUISourceCode/FMDateTime.cs index 8b37b19..23ad858 100644 --- a/cs/bsdx0200GUISourceCode/FMDateTime.cs +++ b/cs/bsdx0200GUISourceCode/FMDateTime.cs @@ -16,7 +16,7 @@ * * - Mods by Sam Habiel to use in Scheduling GUI. + Modified by Sam Habiel to use in Scheduling GUI. Modified class licensed under LGPL. */ @@ -249,6 +249,12 @@ namespace IndianHealthService.ClinicalScheduling return Create (d, FMDateTimePrecision.DateAndTime); } + /*public static string FMDate (this DateTime d) + { + return Create(d, FMDateTimePrecision.DateAndTime).FMDateString; + }*/ + + public static FMDateTime Parse (string str) { return Parse (str, FMDateTime.ValidationMethod); diff --git a/cs/bsdx0200GUISourceCode/Patient.cs b/cs/bsdx0200GUISourceCode/Patient.cs index 869b4a6..f12d174 100644 --- a/cs/bsdx0200GUISourceCode/Patient.cs +++ b/cs/bsdx0200GUISourceCode/Patient.cs @@ -17,6 +17,7 @@ namespace IndianHealthService.ClinicalScheduling /// /// Puppet standing for a Real Patient /// + [Serializable] public class Patient { public int DFN { get; set; } diff --git a/cs/bsdx0200GUISourceCode/Provider.cs b/cs/bsdx0200GUISourceCode/Provider.cs index 4c287e6..3bf7348 100644 --- a/cs/bsdx0200GUISourceCode/Provider.cs +++ b/cs/bsdx0200GUISourceCode/Provider.cs @@ -8,6 +8,7 @@ namespace IndianHealthService.ClinicalScheduling /// /// Provider puppet /// + [Serializable] public class Provider { public int IEN { get; set; } diff --git a/cs/bsdx0200GUISourceCode/RadiologyExam.cs b/cs/bsdx0200GUISourceCode/RadiologyExam.cs new file mode 100644 index 0000000..fba6cd8 --- /dev/null +++ b/cs/bsdx0200GUISourceCode/RadiologyExam.cs @@ -0,0 +1,29 @@ +/* Licensed under LGPL */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IndianHealthService.ClinicalScheduling +{ + /// + /// Class to stand for a Radiology Exam Order from file 75.1 (RAD/NUC MED ORDERS) + /// IEN: IEN in file 75.1 + /// Status: Text: Pending or Hold + /// Procedure: Text + /// RequestDate: Time procedure was requested by physician + /// + public class RadiologyExam + { + public int IEN { get; set; } + public string Status { get; set; } + public string Procedure { get; set; } + public DateTime RequestDate { get; set; } + + public override string ToString() + { + return Procedure + "\t" + "Requested: " + RequestDate.ToString(); + } + } +} diff --git a/cs/bsdx0200GUISourceCode/UserPreferences.cs b/cs/bsdx0200GUISourceCode/UserPreferences.cs index e04d79c..0957a09 100644 --- a/cs/bsdx0200GUISourceCode/UserPreferences.cs +++ b/cs/bsdx0200GUISourceCode/UserPreferences.cs @@ -1,4 +1,6 @@ -using System; +/*Licensed under LGPL*/ + +using System; using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/cs/bsdx0200GUISourceCode/bin/Release/BMXNet23.dll b/cs/bsdx0200GUISourceCode/bin/Release/BMXNet23.dll index 415d960..9688a58 100644 Binary files a/cs/bsdx0200GUISourceCode/bin/Release/BMXNet23.dll and b/cs/bsdx0200GUISourceCode/bin/Release/BMXNet23.dll differ diff --git a/cs/bsdx0200GUISourceCode/bin/Release/ClinicalScheduling.exe b/cs/bsdx0200GUISourceCode/bin/Release/ClinicalScheduling.exe index f9da1c4..23eff4a 100644 Binary files a/cs/bsdx0200GUISourceCode/bin/Release/ClinicalScheduling.exe and b/cs/bsdx0200GUISourceCode/bin/Release/ClinicalScheduling.exe differ diff --git a/cs/bsdx0200GUISourceCode/bin/Release/ar/ClinicalScheduling.resources.dll b/cs/bsdx0200GUISourceCode/bin/Release/ar/ClinicalScheduling.resources.dll index d462849..f5084b2 100644 Binary files a/cs/bsdx0200GUISourceCode/bin/Release/ar/ClinicalScheduling.resources.dll and b/cs/bsdx0200GUISourceCode/bin/Release/ar/ClinicalScheduling.resources.dll differ