diff --git a/cs/bsdx0200GUISourceCode/CGDocumentManager.cs b/cs/bsdx0200GUISourceCode/CGDocumentManager.cs index b9b65c5..4a1dd7f 100644 --- a/cs/bsdx0200GUISourceCode/CGDocumentManager.cs +++ b/cs/bsdx0200GUISourceCode/CGDocumentManager.cs @@ -187,7 +187,9 @@ namespace IndianHealthService.ClinicalScheduling opset.Parse(args); - _current.InitializeApp(); + bool isEverythingOkay = _current.InitializeApp(); + + if (!isEverythingOkay) return; //Create the first empty document CGDocument doc = new CGDocument(); @@ -250,9 +252,9 @@ namespace IndianHealthService.ClinicalScheduling /// /// See InitializeApp(bool) below /// - private void InitializeApp() + private bool InitializeApp() { - InitializeApp(false); + return InitializeApp(false); } /// @@ -263,7 +265,7 @@ namespace IndianHealthService.ClinicalScheduling /// /// Is the User logging in again from a currently running instance? /// If so, display a dialog to collect access and verify codes. - private void InitializeApp(bool bReLogin) + private bool InitializeApp(bool bReLogin) { //Set M connection info m_ConnectInfo = new BMXNetConnectInfo(m_Encoding); // Encoding is "" unless passed in command line @@ -277,33 +279,33 @@ namespace IndianHealthService.ClinicalScheduling //Disable polling (But does this really work???? I don't see how it gets disabled) m_ConnectInfo.EventPollingEnabled = false; - //Show a splash screen while initializing + //Show a splash screen while initializing; define delegates to remote thread DSplash m_ds = new DSplash(); DSplash.dSetStatus setStatusDelegate = new DSplash.dSetStatus(m_ds.SetStatus); DSplash.dAny closeSplashDelegate = new DSplash.dAny(m_ds.RemoteClose); - DSplash.dAny hideSplashDelegate = new DSplash.dAny(m_ds.RemoteHide); + DSplash.dProgressBarSet setMaxProgressDelegate = new DSplash.dProgressBarSet(m_ds.RemoteProgressBarMaxSet); + DSplash.dProgressBarSet setProgressDelegate = new DSplash.dProgressBarSet(m_ds.RemoteProgressBarValueSet); + //Start new thread for the Splash screen. Thread threadSplash = new Thread(new ParameterizedThreadStart(StartSplash)); - threadSplash.IsBackground = true; //expendable -- exit even if still running. - threadSplash.Start(m_ds); + threadSplash.IsBackground = true; //expendable thread -- exit even if still running. + threadSplash.Name = "Splash Thread"; + threadSplash.Start(m_ds); // pass form as parameter. + //There are 20 steps to load the application. That's max for the progress bar. + setMaxProgressDelegate(20); + + // smh--not used: System.Configuration.ConfigurationManager.GetSection("appSettings"); - //m_ds.SetStatus("Loading Configuration Settings..."); - //m_ds.Refresh(); - //this.Activate(); - // smh--not used System.Configuration.ConfigurationManager.GetSection("appSettings"); setStatusDelegate("Connecting to VISTA"); - //m_ds.Refresh(); + bool bRetry = true; //Try to connect using supplied values for Server and Port //Why am I doing this? The library BMX net uses prompts for access and verify code //whether you can connect or not. Not good. So I test first whether //we can connect at all by doing a simple connection and disconnect. - //TODO: Make this more robust by sending a TCPConnect message and seeing if you get a response. - - //m_ds.Refresh(); - + //TODO: Make this more robust by sending a TCPConnect message and seeing if you get a response if (m_Server != "" && m_Port != 0) { System.Net.Sockets.TcpClient tcpClient = new System.Net.Sockets.TcpClient(); @@ -312,13 +314,16 @@ namespace IndianHealthService.ClinicalScheduling tcpClient.Connect(m_Server, m_Port); // open it tcpClient.Close(); // then close it } - catch (System.Net.Sockets.SocketException ex) + catch (System.Net.Sockets.SocketException) { - throw ex; + MessageBox.Show("Cannot connect to VistA. Network Error"); + return false; } } - do + + // Do block is Log-in logic + do { // login crap try @@ -346,11 +351,10 @@ namespace IndianHealthService.ClinicalScheduling } catch (System.Net.Sockets.SocketException) { - MessageBox.Show("Cannot connect to VistA. "); + MessageBox.Show("Cannot connect to VistA. Network Error"); } - catch (Exception ex) + catch (BMXNetException ex) { - //m_ds.Close(); if (MessageBox.Show("Unable to connect to VistA. " + ex.Message, "Clinical Scheduling", MessageBoxButtons.RetryCancel) == DialogResult.Retry) { bRetry = true; @@ -360,7 +364,7 @@ namespace IndianHealthService.ClinicalScheduling { closeSplashDelegate(); bRetry = false; - throw ex; + return false; //tell main that it's a no go. } } }while (bRetry == true); @@ -369,7 +373,8 @@ namespace IndianHealthService.ClinicalScheduling _current.m_dsGlobal = new DataSet("GlobalDataSet"); //Version info - //m_ds.Activate(); + // Table #1 + setProgressDelegate(1); setStatusDelegate("Getting Version Info from Server..."); DataTable ver = _dal.GetVersion("BSDX"); @@ -405,6 +410,8 @@ namespace IndianHealthService.ClinicalScheduling //Change encoding + // Call #2 + setProgressDelegate(2); setStatusDelegate("Setting encoding..."); if (m_Encoding == String.Empty) @@ -413,7 +420,10 @@ namespace IndianHealthService.ClinicalScheduling if (utf8_server_support == "1") m_ConnectInfo.bmxNetLib.Encoder = System.Text.UTF8Encoding.UTF8; } - //Set application context + + //Set application context + // Call #3 + setProgressDelegate(3); setStatusDelegate("Setting Application Context to BSDXRPC..."); m_ConnectInfo.AppContext = "BSDXRPC"; @@ -423,8 +433,10 @@ namespace IndianHealthService.ClinicalScheduling string sCommandText; - setStatusDelegate(statusConst + " Schedule User"); //Schedule User Info + // Table #4 + setProgressDelegate(4); + setStatusDelegate(statusConst + " Schedule User"); DataTable dtUser = _dal.GetUserInfo(m_ConnectInfo.DUZ); dtUser.TableName = "SchedulingUser"; m_dsGlobal.Tables.Add(dtUser); @@ -436,14 +448,18 @@ namespace IndianHealthService.ClinicalScheduling string sUser = oUser.ToString(); m_bSchedManager = (sUser == "YES") ? true : false; - setStatusDelegate(statusConst + " Access Types"); //Get Access Types + // Table #5 + setProgressDelegate(5); + setStatusDelegate(statusConst + " Access Types"); DataTable dtAccessTypes = _dal.GetAccessTypes(); dtAccessTypes.TableName = "AccessTypes"; m_dsGlobal.Tables.Add(dtAccessTypes); + //Get Access Groups + // Table #6 + setProgressDelegate(6); setStatusDelegate(statusConst + " Access Groups"); - //AccessGroups LoadAccessGroupsTable(); //Build Primary Key for AccessGroup table @@ -453,8 +469,10 @@ namespace IndianHealthService.ClinicalScheduling dcKeys[0] = dcKey; dtGroups.PrimaryKey = dcKeys; + //Get Access Group Types (??) + // Table #7 + setProgressDelegate(7); setStatusDelegate(statusConst + " Access Group Types"); - //AccessGroupType LoadAccessGroupTypesTable(); //Build Primary Key for AccessGroupType table @@ -470,12 +488,16 @@ namespace IndianHealthService.ClinicalScheduling m_dsGlobal.Tables["AccessGroupType"].Columns["ACCESS_GROUP_ID"]); //Child m_dsGlobal.Relations.Add(dr); - setStatusDelegate(statusConst + " Resource Groups By User"); //ResourceGroup Table (Resource Groups by User) + // Table #8 + setProgressDelegate(8); + setStatusDelegate(statusConst + " Resource Groups By User"); LoadResourceGroupTable(); - setStatusDelegate(statusConst + " Resources By User"); //Resources by user + // Table #9 + setProgressDelegate(9); + setStatusDelegate(statusConst + " Resources By User"); LoadBSDXResourcesTable(); //Build Primary Key for Resources table @@ -483,8 +505,10 @@ namespace IndianHealthService.ClinicalScheduling dc[0] = m_dsGlobal.Tables["Resources"].Columns["RESOURCEID"]; m_dsGlobal.Tables["Resources"].PrimaryKey = dc; - setStatusDelegate(statusConst + " Group Resources"); //GroupResources table + // Table #10 + setProgressDelegate(10); + setStatusDelegate(statusConst + " Group Resources"); LoadGroupResourcesTable(); //Build Primary Key for ResourceGroup table @@ -499,8 +523,10 @@ namespace IndianHealthService.ClinicalScheduling CGSchedLib.OutputArray(m_dsGlobal.Tables["GroupResources"], "GroupResources"); m_dsGlobal.Relations.Add(dr); - setStatusDelegate(statusConst + " Clinics"); //HospitalLocation table + //Table #11 + setProgressDelegate(11); + setStatusDelegate(statusConst + " Clinics"); //cmd.CommandText = "SELECT BMXIEN 'HOSPITAL_LOCATION_ID', NAME 'HOSPITAL_LOCATION', DEFAULT_PROVIDER, STOP_CODE_NUMBER, INACTIVATE_DATE, REACTIVATE_DATE FROM HOSPITAL_LOCATION"; sCommandText = "BSDX HOSPITAL LOCATION"; ConnectInfo.RPMSDataTable(sCommandText, "HospitalLocation", m_dsGlobal); @@ -518,8 +544,10 @@ namespace IndianHealthService.ClinicalScheduling m_dsGlobal.Tables["Resources"].Columns["HOSPITAL_LOCATION_ID"], false); //Child m_dsGlobal.Relations.Add(dr); - setStatusDelegate(statusConst + " Schedule User"); //Build ScheduleUser table + //Table #12 + setProgressDelegate(12); + setStatusDelegate(statusConst + " Schedule User"); this.LoadScheduleUserTable(); //Build Primary Key for ScheduleUser table @@ -528,8 +556,10 @@ namespace IndianHealthService.ClinicalScheduling dc[0] = dtTemp.Columns["USERID"]; m_dsGlobal.Tables["ScheduleUser"].PrimaryKey = dc; - setStatusDelegate(statusConst + " Resource User"); //Build ResourceUser table + //Table #13 + setProgressDelegate(13); + setStatusDelegate(statusConst + " Resource User"); this.LoadResourceUserTable(); //Build Primary Key for ResourceUser table @@ -544,21 +574,27 @@ namespace IndianHealthService.ClinicalScheduling m_dsGlobal.Tables["ResourceUser"].Columns["RESOURCEID"]); //Child m_dsGlobal.Relations.Add(dr); - setStatusDelegate(statusConst + " Providers"); //Build active provider table + //Table #14 + setProgressDelegate(14); + setStatusDelegate(statusConst + " Providers"); sCommandText = "SELECT BMXIEN, NAME FROM NEW_PERSON WHERE INACTIVE_DATE = '' AND BMXIEN > 1"; ConnectInfo.RPMSDataTable(sCommandText, "Provider", m_dsGlobal); Debug.Write("LoadGlobalRecordsets -- Provider loaded\n"); - setStatusDelegate(statusConst + " Clinic Stops"); //Build the CLINIC_STOP table + //Table #15 + setProgressDelegate(15); + setStatusDelegate(statusConst + " Clinic Stops"); // sCommandText = "SELECT BMXIEN, CODE, NAME FROM CLINIC_STOP"; //SMH sCommandText = "SELECT BMXIEN, AMIS_REPORTING_STOP_CODE, NAME FROM CLINIC_STOP"; ConnectInfo.RPMSDataTable(sCommandText, "ClinicStop", m_dsGlobal); Debug.Write("LoadGlobalRecordsets -- ClinicStop loaded\n"); - setStatusDelegate(statusConst + " Holiday"); //Build the HOLIDAY table + //Table #16 + setProgressDelegate(16); + setStatusDelegate(statusConst + " Holiday"); sCommandText = "SELECT NAME, DATE FROM HOLIDAY WHERE DATE > '" + DateTime.Today.ToShortDateString() + "'"; ConnectInfo.RPMSDataTable(sCommandText, "HOLIDAY", m_dsGlobal); Debug.Write("LoadingGlobalRecordsets -- Holidays loaded\n"); @@ -567,17 +603,27 @@ namespace IndianHealthService.ClinicalScheduling //Save the xml schema //m_dsGlobal.WriteXmlSchema(@"..\..\csSchema20060526.xsd"); //---------------------------------------------- - + setStatusDelegate("Setting Receive Timeout"); _current.m_ConnectInfo.ReceiveTimeout = 30000; //30-second timeout #if DEBUG _current.m_ConnectInfo.ReceiveTimeout = 600000; //longer timeout for debugging #endif - _current.m_ConnectInfo.SubscribeEvent("BSDX SCHEDULE"); - _current.m_ConnectInfo.SubscribeEvent("BSDX CALL WORKSTATIONS"); - _current.m_ConnectInfo.SubscribeEvent("BSDX ADMIN MESSAGE"); - _current.m_ConnectInfo.SubscribeEvent("BSDX ADMIN SHUTDOWN"); + // Event Subsriptions + setStatusDelegate("Subscribing to Server Events"); + //Table #17 + setProgressDelegate(17); + _current.m_ConnectInfo.SubscribeEvent("BSDX SCHEDULE"); + //Table #18 + setProgressDelegate(18); + _current.m_ConnectInfo.SubscribeEvent("BSDX CALL WORKSTATIONS"); + //Table #19 + setProgressDelegate(19); + _current.m_ConnectInfo.SubscribeEvent("BSDX ADMIN MESSAGE"); + //Table #20 + setProgressDelegate(20); + _current.m_ConnectInfo.SubscribeEvent("BSDX ADMIN SHUTDOWN"); _current.m_ConnectInfo.EventPollingInterval = 5000; //in milliseconds _current.m_ConnectInfo.EventPollingEnabled = true; @@ -585,6 +631,8 @@ namespace IndianHealthService.ClinicalScheduling //Close Splash Screen closeSplashDelegate(); + + return true; } diff --git a/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user b/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user index 4f1737c..ffde694 100644 --- a/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user +++ b/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user @@ -36,7 +36,7 @@ Project - /s=10.161.20.25 /p=9280 /a=s.habiel /v=catdog.55 + /s=192.168.56.101 /p=9260 /a=shabiel12 /v=catdog.66 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\IEExec.exe diff --git a/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo b/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo index 70ce019..00fcae6 100644 Binary files a/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo and b/cs/bsdx0200GUISourceCode/ClinicalScheduling.suo differ diff --git a/cs/bsdx0200GUISourceCode/DSplash.cs b/cs/bsdx0200GUISourceCode/DSplash.cs index 24a537d..f873b03 100644 --- a/cs/bsdx0200GUISourceCode/DSplash.cs +++ b/cs/bsdx0200GUISourceCode/DSplash.cs @@ -16,6 +16,7 @@ namespace IndianHealthService.ClinicalScheduling private System.Windows.Forms.Label lblStatus; private Label lblVersion; private Label label2; + private ProgressBar progressBar1; /// /// Required designer variable. /// @@ -61,6 +62,7 @@ namespace IndianHealthService.ClinicalScheduling this.lblStatus = new System.Windows.Forms.Label(); this.lblVersion = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.SuspendLayout(); // // label1 @@ -109,12 +111,21 @@ namespace IndianHealthService.ClinicalScheduling this.label2.TabIndex = 6; this.label2.Text = "VISTA"; // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(18, 207); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(458, 14); + this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; + this.progressBar1.TabIndex = 7; + // // DSplash // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); this.ClientSize = new System.Drawing.Size(488, 252); this.ControlBox = false; + this.Controls.Add(this.progressBar1); this.Controls.Add(this.label2); this.Controls.Add(this.lblVersion); this.Controls.Add(this.lblStatus); @@ -134,6 +145,7 @@ namespace IndianHealthService.ClinicalScheduling public delegate void dSetStatus(string sStatus); public delegate void dAny(); + public delegate void dProgressBarSet(int number); public void SetStatus(string sStatus) { @@ -144,9 +156,7 @@ namespace IndianHealthService.ClinicalScheduling return; } - System.Diagnostics.Debug.Assert(this.InvokeRequired == false); this.lblStatus.Text = sStatus; - this.Refresh(); } private void DSplash_Load(object sender, System.EventArgs e) @@ -165,6 +175,31 @@ namespace IndianHealthService.ClinicalScheduling dAny d = new dAny(this.Hide); this.Invoke(d); } + + public void RemoteProgressBarMaxSet(int max) + { + if (this.InvokeRequired == true) + { + dProgressBarSet d = new dProgressBarSet(RemoteProgressBarMaxSet); + this.Invoke(d, new object[] { max }); + return; + } + + this.progressBar1.Maximum = max; + } + + public void RemoteProgressBarValueSet(int val) + { + if (this.InvokeRequired == true) + { + dProgressBarSet d = new dProgressBarSet(RemoteProgressBarValueSet); + this.Invoke(d, new object[] { val }); + return; + } + + this.progressBar1.Value = val; + } + }