Changeset 1083 for Scheduling


Ignore:
Timestamp:
Jan 26, 2011, 6:01:39 AM (13 years ago)
Author:
Sam Habiel
Message:

New exe and dll
calendarGrid: Minor documentation updates.
CGAppointments: Object now supports Deep cloning
CGDocument:

  1. Major changes on how m_pAvArrays is handled. Now it is locked whenever it is updated or queried. Some refactoring to make sure there are no db calls during the locks so that the locks won't be expensive.
  2. Removed ClearResources, an unused method.
  3. Appointment aCopy walkin property is set to true if the appointment is a walkin. This makes sure that the grid draws it correctly between it is added to the appointment array and we fetch new data from the server.
  4. Create appointment is not responsible anymore for requesting updates from the server. All requests to update data must be done through CGView, as it is the only party interested in displaying accurate data on the grid. Just send the create appt event to the server.
  5. CheckInAppointment: Same thing. Now responsible for requesting updates from the server. Just send the checkin event to the server.

CGDocumentManager: Removed tracing. Done in BMX Library only now.
CGView:

  1. CGAppointment fetched from Document, not from the copy maintained by the calendarGrid.
  2. RefreshDocument calls before an appointment is made have been removed (need to find another way to make sure that the appointment has just not been booked). RefreshDocument & UpdateArrays are called async after appointments are made.
  3. Appointment List passed to Calendar grid is now a copy, to prevent issues with concurrent access.
  4. Message if a patient has apppointment at the same time vastly improved.
Location:
Scheduling/trunk/cs/bsdx0200GUISourceCode
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • Scheduling/trunk/cs/bsdx0200GUISourceCode/CGAppointments.cs

    r1075 r1083  
    6161        {
    6262            CGAppointments newappts = new CGAppointments();
    63             //appts.apptList = (Hashtable)apptList.Clone();
    6463            foreach (DictionaryEntry d in this.apptList)
    6564            {
  • Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocument.cs

    r1073 r1083  
    272272        //sam: This is a test that duplicates RefreshDocument, but without the UpdateAllViews,
    273273        // as that has to be done synchornously.
    274         //XXXXXX: Needs to be refactored obviously, but now for testing.
     274        //XXX: Needs to be refactored obviously, but now for testing.
     275        //XXX: Tested extensively enough. Less refactoring now. 2011-01-26
    275276        public void RefreshDocumentAsync()
    276277        {
     278            Debug.WriteLine("IN REFERSH DOCUMENT ASYNC\n\n");
     279
    277280            bool bRet = false;
    278281            if (m_sResourcesArray.Count == 0)
     
    423426                    m_DocManager.ConnectInfo.LoadConnectInfo();
    424427                }
    425 
    426                 m_pAvArray.Clear();
    427428
    428429                ArrayList saryApptTypes = new ArrayList();
     
    464465                string sAccessRuleList;
    465466
    466 
    467                 foreach (DataRow rTemp in rAvailabilitySchedule.Rows)
    468                 {
    469                     //get StartTime, EndTime and Slots
    470                     dStart = (DateTime)rTemp["START_TIME"];
    471                     dEnd = (DateTime)rTemp["END_TIME"];
    472 
    473                     //TODO: Fix this slots datatype problem
    474                     string sSlots = rTemp["SLOTS"].ToString();
    475                     nSlots = Convert.ToInt16(sSlots);
    476 
    477                     sResourceList = rTemp["RESOURCE"].ToString();
    478                     sAccessRuleList = rTemp["ACCESS_TYPE"].ToString();
    479 
    480                     string sNote = rTemp["NOTE"].ToString();
    481 
    482                     if ((nSlots < -1000) || (sAccessRuleList == ""))
     467                //smh: moved clear availabilities down here.
     468                //smh: Temporary solution to make sure that people don't touch the availability table at the same time!!!
     469                //NOTE: This lock makes sure that availabilities aren't queried for slots when the array is an intermediate
     470                //state. The other place that has this lock is SlotsAvailable function.
     471                lock (this.m_pAvArray)
     472                {
     473                    m_pAvArray.Clear();
     474
     475                    foreach (DataRow rTemp in rAvailabilitySchedule.Rows)
    483476                    {
    484                         nApptTypeID = 0;
    485                     }
    486                     else
    487                     {
    488                         foreach (DataRow rType in rTypeSchedule.Rows)
     477                        //get StartTime, EndTime and Slots
     478                        dStart = (DateTime)rTemp["START_TIME"];
     479                        dEnd = (DateTime)rTemp["END_TIME"];
     480
     481                        //TODO: Fix this slots datatype problem
     482                        string sSlots = rTemp["SLOTS"].ToString();
     483                        nSlots = Convert.ToInt16(sSlots);
     484
     485                        sResourceList = rTemp["RESOURCE"].ToString();
     486                        sAccessRuleList = rTemp["ACCESS_TYPE"].ToString();
     487
     488                        string sNote = rTemp["NOTE"].ToString();
     489
     490                        if ((nSlots < -1000) || (sAccessRuleList == ""))
    489491                        {
    490 
    491                             dTypeStart = (DateTime)rType["StartTime"];
    492                             dTypeEnd = (DateTime)rType["EndTime"];
    493                             //if start & end times overlap, then
    494                             string sTypeResource = rType["ResourceName"].ToString();
    495                             if ((dTypeStart.DayOfYear == dStart.DayOfYear) && (sResourceList == sTypeResource))
     492                            nApptTypeID = 0;
     493                        }
     494                        else
     495                        {
     496                            foreach (DataRow rType in rTypeSchedule.Rows)
    496497                            {
    497                                 crRectA.Y = GetTotalMinutes(dStart);
    498                                 crRectA.Height = GetTotalMinutes(dEnd) - crRectA.Top;
    499                                 crRectB.Y = GetTotalMinutes(dTypeStart);
    500                                 crRectB.Height = GetTotalMinutes(dTypeEnd) - crRectB.Top;
    501                                 bIsect = crRectA.IntersectsWith(crRectB);
    502                                 if (bIsect == true)
     498
     499                                dTypeStart = (DateTime)rType["StartTime"];
     500                                dTypeEnd = (DateTime)rType["EndTime"];
     501                                //if start & end times overlap, then
     502                                string sTypeResource = rType["ResourceName"].ToString();
     503                                if ((dTypeStart.DayOfYear == dStart.DayOfYear) && (sResourceList == sTypeResource))
    503504                                {
    504                                     //TODO: This code:
    505                                     //  nApptTypeID = (int) rType["AppointmentTypeID"];
    506                                     //Causes this exception:
    507                                     //Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
    508                                     string sTemp = rType["AppointmentTypeID"].ToString();
    509                                     nApptTypeID = Convert.ToInt16(sTemp);
    510                                     break;
     505                                    crRectA.Y = GetTotalMinutes(dStart);
     506                                    crRectA.Height = GetTotalMinutes(dEnd) - crRectA.Top;
     507                                    crRectB.Y = GetTotalMinutes(dTypeStart);
     508                                    crRectB.Height = GetTotalMinutes(dTypeEnd) - crRectB.Top;
     509                                    bIsect = crRectA.IntersectsWith(crRectB);
     510                                    if (bIsect == true)
     511                                    {
     512                                        //TODO: This code:
     513                                        //      nApptTypeID = (int) rType["AppointmentTypeID"];
     514                                        //Causes this exception:
     515                                        //Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
     516                                        string sTemp = rType["AppointmentTypeID"].ToString();
     517                                        nApptTypeID = Convert.ToInt16(sTemp);
     518                                        break;
     519                                    }
    511520                                }
    512                             }
    513                         }//end foreach datarow rType
    514                     }
    515 
    516                     AddAvailability(dStart, dEnd, nApptTypeID, nSlots, false, sResourceList, sAccessRuleList, sNote);
    517                 }//end foreach datarow rTemp
    518 
     521                            }//end foreach datarow rType
     522                        }
     523
     524
     525                        AddAvailability(dStart, dEnd, nApptTypeID, nSlots, false, sResourceList, sAccessRuleList, sNote);
     526                    }//end foreach datarow rTemp
     527                }//end lock
    519528                return true;
    520529            }
     
    531540        }
    532541
     542        /// <summary>
     543        /// Adds Availability to Availability Array held by document
     544        /// </summary>
     545        /// <param name="StartTime">Self-Explan</param>
     546        /// <param name="EndTime">Self-Explan</param>
     547        /// <param name="nType"></param>
     548        /// <param name="nSlots"></param>
     549        /// <param name="UpdateView"></param>
     550        /// <param name="sResourceList"></param>
     551        /// <param name="sAccessRuleList"></param>
     552        /// <param name="sNote"></param>
     553        /// <returns></returns>
    533554        public int AddAvailability(DateTime StartTime, DateTime EndTime, int nType, int nSlots, bool UpdateView, string sResourceList, string sAccessRuleList, string sNote)
    534555        {
     
    579600            //TODO:  Test that resource is not currently in list, that it IS a resource, etc
    580601            this.m_sResourcesArray.Add(sResource);
    581             //SAM: removing: Remove UpdateAllViews: Redraws all the open views. But does not call server.
    582             //this.UpdateAllViews();
    583         }
    584 
    585         public void ClearResources()
    586         {
    587             this.m_sResourcesArray.Clear();
    588602        }
    589603
     
    604618            crRectB.Height = GetTotalMinutes(dSelEnd) - crRectB.Y;
    605619
    606             //                  //loop thru m_pAvArray
    607             //                  //Compare the start time and end time of eachblock
    608             while (i < m_pAvArray.Count)
    609             {
    610                 pAv = (CGAvailability)m_pAvArray[i];
    611                 dStart = pAv.StartTime;
    612                 dEnd = pAv.EndTime;
    613                 if ((sResource == pAv.ResourceList) &&
    614                     ((dSelStart.Date == dStart.Date) || (dSelStart.Date == dEnd.Date)))
    615                 {
    616                     crRectA.Y = (dStart.Date < dSelStart.Date) ? 0 : GetTotalMinutes(dStart);
    617                     crRectA.Height = (dEnd.Date > dSelEnd.Date) ? 1440 : GetTotalMinutes(dEnd);
    618                     crRectA.Height = crRectA.Height - crRectA.Y;
    619                     bIsect = crRectA.IntersectsWith(crRectB);
    620                     if (bIsect != false)
     620            //NOTE: What's this lock? This lock makes sure that nobody is editing the availability array
     621            //when we are looking at it. Since the availability array could potentially be updated on
     622            //a different thread, we are can be potentially left stuck with an empty array.
     623            //
     624            //The other place that uses this lock is the RefershAvailabilitySchedule method
     625            //
     626            //This is a temporary fix until I figure out how to divorce the availbilities here from those drawn
     627            //on the calendar. Appointments are cloned b/c they are in an object that supports that; and b/c I
     628            //don't need to suddenly query them at runtime like I do with Availabilities.
     629
     630            lock (this.m_pAvArray)
     631            {
     632                //loop thru m_pAvArray
     633                //Compare the start time and end time of eachblock
     634                while (i < m_pAvArray.Count)
     635                {
     636                    pAv = (CGAvailability)m_pAvArray[i];
     637                    dStart = pAv.StartTime;
     638                    dEnd = pAv.EndTime;
     639                    if ((sResource == pAv.ResourceList) &&
     640                        ((dSelStart.Date == dStart.Date) || (dSelStart.Date == dEnd.Date)))
    621641                    {
    622                         nSlots = pAv.Slots;
    623                         if (nSlots < 1)
     642                        crRectA.Y = (dStart.Date < dSelStart.Date) ? 0 : GetTotalMinutes(dStart);
     643                        crRectA.Height = (dEnd.Date > dSelEnd.Date) ? 1440 : GetTotalMinutes(dEnd);
     644                        crRectA.Height = crRectA.Height - crRectA.Y;
     645                        bIsect = crRectA.IntersectsWith(crRectB);
     646                        if (bIsect != false)
    624647                        {
    625                             nAvailableSlots = 0;
    626                             break;
    627                         }
    628                         if (nSlots < nAvailableSlots)
    629                         {
    630                             nAvailableSlots = nSlots;
    631                             sAccessType = pAv.AccessTypeName;
    632                             sAvailabilityMessage = pAv.Note;
    633 
    634                         }
    635                     }
    636                 }
    637                 i++;
    638             }
     648                            nSlots = pAv.Slots;
     649                            if (nSlots < 1)
     650                            {
     651                                nAvailableSlots = 0;
     652                                break;
     653                            }
     654                            if (nSlots < nAvailableSlots)
     655                            {
     656                                nAvailableSlots = nSlots;
     657                                sAccessType = pAv.AccessTypeName;
     658                                sAvailabilityMessage = pAv.Note;
     659
     660                            }
     661                        }//end if
     662                    }//end if
     663                    i++;
     664                }//end while
     665            }//end lock
     666
    639667            if (nAvailableSlots == 999)
    640668            {
     
    759787            aCopy.HealthRecordNumber = rApptInfo.HealthRecordNumber;
    760788            aCopy.AccessTypeID = rApptInfo.AccessTypeID;
     789            aCopy.WalkIn = bWalkin ? true : false;
    761790
    762791            string sSql = "BSDX ADD NEW APPOINTMENT^" + sStart + "^" + sEnd + "^" + sPatID + "^" + sResource + "^" + sLen + "^" + sNote + "^" + sApptID;
     
    773802            aCopy.AppointmentKey = nApptID;
    774803            this.m_appointments.AddAppointment(aCopy);
    775 
    776             bool bRet = RefreshAvailabilitySchedule();
    777 
    778             UpdateAllViews();
     804           
     805           
     806            //Have make appointment from CGView responsible for requesting an update for the avialability.
     807            //bool bRet = RefreshAvailabilitySchedule();
     808
     809            //Sam: don't think this is needed as it is called from CGView.
     810            //Make CGView responsible for all drawing.
     811            //UpdateAllViews();
    779812
    780813            return nApptID;
     
    822855            string sErrorID = r["ERRORID"].ToString();
    823856
    824             if (this.m_appointments.AppointmentTable.ContainsKey(nApptID))
    825             {
    826                 bool bRet = RefreshSchedule();
    827                 UpdateAllViews();
    828             }
     857
    829858        }
    830859
  • Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocumentManager.cs

    r1073 r1083  
    11821182            DataTable dtOut;
    11831183
    1184 #if TRACE
    1185             DateTime sendTime = DateTime.Now;
    1186 #endif
    11871184                        try
    11881185                        {
     
    11981195                                throw ex;
    11991196                        }
    1200 
    1201 #if TRACE
    1202             DateTime receiveTime = DateTime.Now;
    1203             TimeSpan executionTime = receiveTime - sendTime;
    1204             Debug.Write("CGDocumentManager::RPMSDataTable Execution Time: " + executionTime.Milliseconds + " ms.\n");
    1205 #endif
    12061197
    12071198            return dtOut;
  • Scheduling/trunk/cs/bsdx0200GUISourceCode/CGView.cs

    r1075 r1083  
    617617            this.tvSchedules.Location = new System.Drawing.Point(0, 0);
    618618            this.tvSchedules.Name = "tvSchedules";
    619             this.tvSchedules.Size = new System.Drawing.Size(128, 332);
     619            this.tvSchedules.Size = new System.Drawing.Size(128, 290);
    620620            this.tvSchedules.Sorted = true;
    621621            this.tvSchedules.TabIndex = 1;
     
    664664            this.panelRight.Location = new System.Drawing.Point(941, 0);
    665665            this.panelRight.Name = "panelRight";
    666             this.panelRight.Size = new System.Drawing.Size(128, 332);
     666            this.panelRight.Size = new System.Drawing.Size(128, 290);
    667667            this.panelRight.TabIndex = 3;
    668668            this.panelRight.Visible = false;
     
    762762            this.panelCenter.Location = new System.Drawing.Point(136, 24);
    763763            this.panelCenter.Name = "panelCenter";
    764             this.panelCenter.Size = new System.Drawing.Size(802, 284);
     764            this.panelCenter.Size = new System.Drawing.Size(802, 242);
    765765            this.panelCenter.TabIndex = 7;
    766766            //
     
    848848            this.panelBottom.Controls.Add(this.statusBar1);
    849849            this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
    850             this.panelBottom.Location = new System.Drawing.Point(136, 308);
     850            this.panelBottom.Location = new System.Drawing.Point(136, 266);
    851851            this.panelBottom.Name = "panelBottom";
    852852            this.panelBottom.Size = new System.Drawing.Size(802, 24);
     
    866866            this.splitter1.Location = new System.Drawing.Point(128, 24);
    867867            this.splitter1.Name = "splitter1";
    868             this.splitter1.Size = new System.Drawing.Size(8, 308);
     868            this.splitter1.Size = new System.Drawing.Size(8, 266);
    869869            this.splitter1.TabIndex = 9;
    870870            this.splitter1.TabStop = false;
     
    875875            this.splitter2.Location = new System.Drawing.Point(938, 24);
    876876            this.splitter2.Name = "splitter2";
    877             this.splitter2.Size = new System.Drawing.Size(3, 308);
     877            this.splitter2.Size = new System.Drawing.Size(3, 266);
    878878            this.splitter2.TabIndex = 10;
    879879            this.splitter2.TabStop = false;
     
    903903            this.calendarGrid1.Resources = ((System.Collections.ArrayList)(resources.GetObject("calendarGrid1.Resources")));
    904904            this.calendarGrid1.SelectedAppointment = 0;
    905             this.calendarGrid1.Size = new System.Drawing.Size(802, 284);
     905            this.calendarGrid1.Size = new System.Drawing.Size(802, 242);
    906906            this.calendarGrid1.StartDate = new System.DateTime(2003, 1, 27, 0, 0, 0, 0);
    907907            this.calendarGrid1.TabIndex = 0;
     
    916916            //
    917917            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    918             this.ClientSize = new System.Drawing.Size(1069, 332);
     918            this.ClientSize = new System.Drawing.Size(1069, 290);
    919919            this.Controls.Add(this.panelCenter);
    920920            this.Controls.Add(this.panelBottom);
     
    19231923                        Debug.Assert(nApptID != 0);
    19241924
    1925                         CGAppointment a = (CGAppointment) this.Appointments.AppointmentTable[nApptID];
    1926 
     1925            //smh
     1926                        //CGAppointment a = (CGAppointment) this.Appointments.AppointmentTable[nApptID];
     1927            CGAppointment a = (CGAppointment)this.Document.Appointments.AppointmentTable[nApptID];
    19271928                        try
    19281929                        {
     
    19801981                                DateTime dtCheckIn = dlgCheckin.CheckInTime;
    19811982
    1982                                 this.Document.CheckInAppointment(nApptID, dtCheckIn);
     1983                                //Save to Database
     1984                this.Document.CheckInAppointment(nApptID, dtCheckIn);
     1985
     1986                //Tell appointment that it is checked in--smh cancel that!
     1987                //a.CheckInTime = DateTime.Now;
     1988
    19831989                //smh new code
    19841990                if (dlgCheckin.PrintRouteSlip)
     
    19861992                // end new code
    19871993
     1994                //redraw grid (would this work???)
    19881995                                this.calendarGrid1.Invalidate();
    19891996                        }
     
    20342041                                 * 8-10-05 Added overbook prompt for walkin
    20352042                                */
    2036                                 this.Document.RefreshDocument();
     2043                //SMH: Takes too long to do.
     2044                                //this.Document.RefreshDocument();
    20372045                                string sAccessType = "";
    20382046                                string sAvailabilityMessage = "";
     
    20672075                                appt.HealthRecordNumber = dPat.HealthRecordNumber;
    20682076
    2069                                 this.Document.RefreshDocument();
     2077                //smh: Takes too long
     2078                                //this.Document.RefreshDocument();
    20702079
    20712080                                //Call Document to add a walkin appointment
     
    20742083                                //Now check them in.
    20752084                                calendarGrid1.SelectedAppointment = nApptID;
    2076 
    20772085                                AppointmentCheckIn();
    20782086
    2079                                 try
    2080                                 {
    2081                                         RaiseRPMSEvent("BSDX SCHEDULE" , m_Document.DocName);
    2082                                 }
    2083                                 catch (Exception ex)
    2084                                 {
    2085                                         Debug.Write(ex.Message);
    2086                                 }
     2087                //Show the new set of appointments by calling UpdateArrays. Fetches Document's CGAppointments
     2088                this.UpdateArrays();
     2089
     2090                //Get the appointments and availabilities, async, from Server. Callback updates this thread's controls.
     2091                OnUpdateScheduleDelegate ousd = new OnUpdateScheduleDelegate(OnUpdateSchedule);
     2092                ousd.BeginInvoke(OnUpdateScheduleCallback, null);
     2093
     2094
     2095                        }
     2096                        catch (Exception ex)
     2097                        {
     2098                string msg;
     2099                if (BMXNetLib.Piece(ex.Message, "~", 1) == "-10") // -10 means that BSDXAPI reported an error.
     2100                    msg = BMXNetLib.Piece(ex.Message, "~", 4);
     2101                else
     2102                    msg = ex.Message;
     2103
     2104                MessageBox.Show("VISTA says: \r\n" + msg, "Unable to Make Walk-in Appointment");
     2105                return;
     2106                        }
     2107
     2108            try
     2109            {
     2110                RaiseRPMSEvent("BSDX SCHEDULE", m_Document.DocName);
     2111            }
     2112            catch (Exception ex)
     2113            {
     2114                Debug.Write(ex.Message);
     2115            }
    20872116                       
    2088                         }
    2089                         catch (Exception ex)
    2090                         {
    2091                                 MessageBox.Show("Unable to add walk-in appointment  " +  ex.Message, "Clinical Scheduling");
    2092                                 return;
    2093 
    2094                         }
     2117
    20952118                }
    20962119
     
    21332156                                Debug.Assert(nDuration > 0);
    21342157
    2135                                 this.Document.RefreshDocument();
     2158
     2159                //Sam: takes too long. Remove this call; deal with the issue of concurrent appointments another way.
     2160                //this.Document.RefreshDocument();
    21362161                                string sAccessType = "";
    21372162                                string sAvailabilityMessage = "";
     
    21802205                                appt.AccessTypeID = nAccessTypeID;
    21812206
    2182                                 //Call Document to add a new appointment
     2207                                //Call Document to add a new appointment. Document adds appointment to CGAppointments array.
    21832208                                this.Document.CreateAppointment(appt);
    2184                 this.Document.RefreshDocument();
    2185 
     2209
     2210                //Show the new set of appointments by calling UpdateArrays. Fetches Document's CGAppointments
     2211                this.UpdateArrays();
     2212               
     2213                //Get the appointments and availabilities, async, from Server. Callback updates this thread's controls.
     2214                OnUpdateScheduleDelegate ousd = new OnUpdateScheduleDelegate(OnUpdateSchedule);
     2215                ousd.BeginInvoke(OnUpdateScheduleCallback, null);
    21862216                        }
    21872217                        catch (Exception ex)
    2188                         {
    2189                                 MessageBox.Show("Unable to add new appointment  " +  ex.Message, "Clinical Scheduling");
     2218                        {   
     2219                string msg;
     2220                if (BMXNetLib.Piece(ex.Message, "~", 1) == "-10") // -10 means that BSDXAPI reported an error.
     2221                    msg = BMXNetLib.Piece(ex.Message, "~", 4);
     2222                else
     2223                    msg = ex.Message;
     2224
     2225                                MessageBox.Show("VISTA says: \r\n" + msg, "Unable to Make Appointment");
    21902226                                return;
    2191 
    2192                         }
     2227                        }
     2228
    21932229                        try
    21942230                        {
     
    23202356                        Debug.Assert(this.InvokeRequired == false,"CGView.UpdateArrays InvokeRequired");
    23212357            // This is where you set how the grid will look
     2358
     2359            //Create Deep copy of Availability Array
     2360            ArrayList availArrayCopy = new ArrayList();
     2361            foreach (CGAvailability av in this.m_Document.AvailabilityArray)
     2362                availArrayCopy.Add(av);
     2363
    23222364                        try
    23232365                        {
    23242366                //Tell the grid about Avails, Appts, and Resources.
    2325                 this.calendarGrid1.AvailabilityArray = this.m_Document.AvailabilityArray;
     2367                this.calendarGrid1.AvailabilityArray = availArrayCopy;
    23262368                //Appts are cloned b/c if we tie into  the class directly, we shoot off errors when we manipulate it.
    2327                 this.calendarGrid1.Appointments = (CGAppointments)this.m_Document.Appointments.Clone(); //smh new line again
     2369                this.calendarGrid1.Appointments = (CGAppointments)this.m_Document.Appointments.Clone();
    23282370                                this.calendarGrid1.Resources = this.m_Document.Resources;
    23292371                //Redraw the calendar grid
     
    31353177
    31363178       
    3137 
     3179        /// <summary>
     3180        /// Update Selection of date if user does not pick a date/time
     3181        /// </summary>
     3182        /// <param name="sender"></param>
     3183        /// <param name="e"></param>
    31383184        private void dateTimePicker1_Leave(object sender, EventArgs e)
    31393185        {
     
    31423188        }
    31433189
     3190        /// <summary>
     3191        /// Handle Selection of Date via mouse from datetimepicker dropdown
     3192        /// </summary>
     3193        /// <param name="sender"></param>
     3194        /// <param name="e"></param>
    31443195        private void dateTimePicker1_CloseUp(object sender, EventArgs e)
    31453196        {
     
    31483199        }
    31493200
     3201        /// <summary>
     3202        /// Handle Enter and Escape key on dateTimePicker
     3203        /// </summary>
     3204        /// <param name="sender"></param>
     3205        /// <param name="e"></param>
    31503206        private void dateTimePicker1_KeyPress(object sender, KeyPressEventArgs e)
    31513207        {
  • Scheduling/trunk/cs/bsdx0200GUISourceCode/CalendarGrid.cs

    r1075 r1083  
    10281028        }
    10291029
     1030        /// <summary>
     1031        /// Draws Availabilities. Draws Some of the Empty cells (don't know where the rest go) with the Khaki color
     1032        /// </summary>
    10301033        private void SetAppointmentTypes()
    10311034        {
Note: See TracChangeset for help on using the changeset viewer.