[614] | 1 | using System;
|
---|
| 2 | using System.Collections;
|
---|
[1097] | 3 | using System.Collections.Generic;
|
---|
[614] | 4 | using System.Windows.Forms;
|
---|
| 5 | using System.Data;
|
---|
[1097] | 6 | using System.Linq;
|
---|
[614] | 7 | //using System.Data.OleDb;
|
---|
| 8 |
|
---|
| 9 | namespace IndianHealthService.ClinicalScheduling
|
---|
| 10 | {
|
---|
| 11 | /// <summary>
|
---|
[1097] | 12 | /// Modal Dialog for searching for Patient Slots
|
---|
[614] | 13 | /// </summary>
|
---|
| 14 | public class DApptSearch : System.Windows.Forms.Form
|
---|
| 15 | {
|
---|
| 16 | private System.Windows.Forms.Panel panel1;
|
---|
| 17 | private System.Windows.Forms.Button cmdCancel;
|
---|
[1097] | 18 | private System.Windows.Forms.Button btnAccept;
|
---|
[614] | 19 | private System.Windows.Forms.Panel pnlDescription;
|
---|
| 20 | private System.Windows.Forms.GroupBox grpDescription;
|
---|
| 21 | private System.Windows.Forms.Label lblDescription;
|
---|
| 22 | private System.Windows.Forms.GroupBox groupBox1;
|
---|
| 23 | private System.Windows.Forms.Label label3;
|
---|
| 24 | private System.Windows.Forms.Label label2;
|
---|
| 25 | private System.Windows.Forms.CheckedListBox lstAccessTypes;
|
---|
| 26 | private System.Windows.Forms.ComboBox cboAccessTypeFilter;
|
---|
| 27 | private System.Windows.Forms.GroupBox grpDayOfWeek;
|
---|
| 28 | private System.Windows.Forms.CheckBox chkSun;
|
---|
| 29 | private System.Windows.Forms.CheckBox chkSat;
|
---|
| 30 | private System.Windows.Forms.CheckBox chkFri;
|
---|
| 31 | private System.Windows.Forms.CheckBox chkThu;
|
---|
| 32 | private System.Windows.Forms.CheckBox chkWed;
|
---|
| 33 | private System.Windows.Forms.CheckBox chkTue;
|
---|
| 34 | private System.Windows.Forms.CheckBox chkMon;
|
---|
| 35 | private System.Windows.Forms.GroupBox grpTimeOfDay;
|
---|
| 36 | private System.Windows.Forms.RadioButton rdoBoth;
|
---|
| 37 | private System.Windows.Forms.RadioButton rdoPM;
|
---|
| 38 | private System.Windows.Forms.RadioButton rdoAM;
|
---|
[1097] | 39 | private System.Windows.Forms.Label label1;
|
---|
| 40 | private System.Windows.Forms.GroupBox groupBox2;
|
---|
| 41 | private System.Windows.Forms.Button cmdSearch;
|
---|
| 42 | private ListView lstResults;
|
---|
| 43 | private ColumnHeader colStartTime;
|
---|
| 44 | private ColumnHeader colEndTime;
|
---|
| 45 | private ColumnHeader colResource;
|
---|
| 46 | private ColumnHeader colSlots;
|
---|
| 47 | private ColumnHeader colAccessType;
|
---|
| 48 | private ColumnHeader colDate;
|
---|
| 49 | private Label lblEnd;
|
---|
| 50 | private Label lblStart;
|
---|
| 51 | private DateTimePicker dtEnd;
|
---|
| 52 | private DateTimePicker dtStart;
|
---|
| 53 | private ColumnHeader colDOW;
|
---|
| 54 | private ColumnHeader colID;
|
---|
[1106] | 55 | private Label lblMessage;
|
---|
[1097] | 56 |
|
---|
| 57 | private System.ComponentModel.IContainer components;
|
---|
[614] | 58 |
|
---|
| 59 | public DApptSearch()
|
---|
| 60 | {
|
---|
| 61 | InitializeComponent();
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | #region Fields
|
---|
| 65 |
|
---|
| 66 | private CGDocumentManager m_DocManager;
|
---|
| 67 |
|
---|
| 68 | private DataSet m_dsGlobal;
|
---|
| 69 | DataTable m_dtTypes;
|
---|
| 70 | DataView m_dvTypes;
|
---|
[1097] | 71 | List<CGAvailability> lstResultantAvailabilities;
|
---|
| 72 | private CGAvailability _selectedAvailability;
|
---|
[614] | 73 | DateTime m_dStart;
|
---|
| 74 | DateTime m_dEnd;
|
---|
| 75 | ArrayList m_alResources;
|
---|
| 76 | ArrayList m_alAccessTypes;
|
---|
[1097] | 77 | string m_sWeekDays; //only practical use now is for sending to server
|
---|
| 78 | string m_sAmpm; // same here.
|
---|
[614] | 79 |
|
---|
| 80 | #endregion Fields
|
---|
| 81 |
|
---|
| 82 | #region Methods
|
---|
| 83 |
|
---|
| 84 | public void LoadListBox(string sGroup)
|
---|
| 85 | {
|
---|
| 86 | if (sGroup == "ALL")
|
---|
| 87 | {
|
---|
| 88 | //Load the Access Type list box with ALL access types
|
---|
| 89 | m_dtTypes = m_dsGlobal.Tables["AccessTypes"];
|
---|
| 90 | m_dvTypes = new DataView(m_dtTypes);
|
---|
| 91 | lstAccessTypes.DataSource = m_dvTypes;
|
---|
| 92 | lstAccessTypes.DisplayMember = "ACCESS_TYPE_NAME";
|
---|
| 93 | lstAccessTypes.Tag = 1; //This holds the column index of the ACCESS_TYPE_NAME column
|
---|
| 94 | lstAccessTypes.ValueMember = "BMXIEN";
|
---|
| 95 | }
|
---|
| 96 | else
|
---|
| 97 | {
|
---|
| 98 | //Load the Access Type list box with active access types belonging
|
---|
| 99 | //to group sGroup
|
---|
| 100 |
|
---|
| 101 | //Build AccessGroup table containing *active* AccessTypes and their Groups
|
---|
| 102 | m_dtTypes = m_dsGlobal.Tables["AccessGroupType"];
|
---|
| 103 | //Create a view that is filterable on Access Group
|
---|
| 104 | m_dvTypes = new DataView(m_dtTypes);
|
---|
| 105 | m_dvTypes.RowFilter = "ACCESS_GROUP = '" + this.cboAccessTypeFilter.Text + "'";
|
---|
| 106 | lstAccessTypes.DataSource = m_dvTypes;
|
---|
| 107 | lstAccessTypes.DisplayMember = "ACCESS_TYPE";
|
---|
| 108 | lstAccessTypes.ValueMember = "ACCESS_TYPE_ID";
|
---|
| 109 | lstAccessTypes.Tag = 4; //This holds the column index of the ACCESS_TYPE column
|
---|
| 110 | }
|
---|
| 111 | }
|
---|
| 112 |
|
---|
| 113 | public void InitializePage(ArrayList alResources, CGDocumentManager docManager)
|
---|
| 114 | {
|
---|
| 115 |
|
---|
[1097] | 116 | this.Text = "Searching for Appointments in: " + string.Join(" | ", alResources.Cast<string>());
|
---|
| 117 |
|
---|
| 118 | this.m_DocManager = docManager;
|
---|
[614] | 119 | this.m_dsGlobal = m_DocManager.GlobalDataSet;
|
---|
[1097] | 120 |
|
---|
[614] | 121 | LoadListBox("ALL");
|
---|
| 122 |
|
---|
| 123 | m_dStart = DateTime.Today;
|
---|
| 124 | m_dEnd = new DateTime(9999);
|
---|
| 125 | this.m_alResources = alResources;
|
---|
| 126 | this.m_alAccessTypes = new ArrayList();
|
---|
| 127 | this.m_sAmpm="both";
|
---|
| 128 | this.m_sWeekDays = "";
|
---|
| 129 |
|
---|
| 130 | //Load filter combo with list of access type groups
|
---|
| 131 | DataTable dtGroup = m_dsGlobal.Tables["AccessGroup"];
|
---|
| 132 | DataSet dsTemp = new DataSet("dsTemp");
|
---|
| 133 | dsTemp.Tables.Add(dtGroup.Copy());
|
---|
| 134 | DataTable dtTemp = dsTemp.Tables["AccessGroup"];
|
---|
| 135 | DataView dvGroup = new DataView(dtTemp);
|
---|
| 136 | DataRowView drv = dvGroup.AddNew();
|
---|
| 137 | drv["ACCESS_GROUP"]="<Show All Access Types>";
|
---|
| 138 | cboAccessTypeFilter.DataSource = dvGroup;
|
---|
| 139 | cboAccessTypeFilter.DisplayMember = "ACCESS_GROUP";
|
---|
| 140 | cboAccessTypeFilter.SelectedText = "<Show All Access Types>";
|
---|
| 141 | cboAccessTypeFilter.SelectedIndex = cboAccessTypeFilter.Items.Count - 1;
|
---|
| 142 | cboAccessTypeFilter.Refresh();
|
---|
| 143 |
|
---|
[1097] | 144 |
|
---|
| 145 | /* OLD CODE
|
---|
| 146 | //Create DataGridTableStyle for Result grid
|
---|
[614] | 147 | DataGridTableStyle tsResult = new DataGridTableStyle();
|
---|
| 148 | tsResult.MappingName = "Result";
|
---|
| 149 | tsResult.ReadOnly = true;
|
---|
[1097] | 150 |
|
---|
[614] | 151 | // Add START_TIME column style.
|
---|
| 152 | DataGridTextBoxColumn colStartTime = new DataGridTextBoxColumn();
|
---|
[1097] | 153 | colStartTime.MappingName = "StartTime";
|
---|
[614] | 154 | colStartTime.HeaderText = "Start Time";
|
---|
| 155 | colStartTime.Width = 200;
|
---|
| 156 | colStartTime.Format = "f";
|
---|
| 157 | tsResult.GridColumnStyles.Add(colStartTime);
|
---|
| 158 |
|
---|
| 159 | // Add END_TIME column style.
|
---|
| 160 | DataGridTextBoxColumn colEndTime = new DataGridTextBoxColumn();
|
---|
[1097] | 161 | colEndTime.MappingName = "EndTime";
|
---|
[614] | 162 | colEndTime.HeaderText = "End Time";
|
---|
| 163 | colEndTime.Width = 75;
|
---|
| 164 | colEndTime.Format = "h:mm tt";
|
---|
| 165 | tsResult.GridColumnStyles.Add(colEndTime);
|
---|
| 166 |
|
---|
| 167 | // Add RESOURCE column style.
|
---|
| 168 | DataGridTextBoxColumn colResource = new DataGridTextBoxColumn();
|
---|
[1097] | 169 | colResource.MappingName = "ResourceList";
|
---|
[614] | 170 | colResource.HeaderText = "Resource";
|
---|
| 171 | colResource.Width = 200;
|
---|
| 172 | tsResult.GridColumnStyles.Add(colResource);
|
---|
| 173 |
|
---|
| 174 | // Add SLOTS column style.
|
---|
| 175 | DataGridTextBoxColumn colSlots = new DataGridTextBoxColumn();
|
---|
| 176 | colSlots.MappingName = "SLOTS";
|
---|
| 177 | colSlots.HeaderText = "Slots";
|
---|
| 178 | colSlots.Width = 50;
|
---|
| 179 | tsResult.GridColumnStyles.Add(colSlots);
|
---|
| 180 |
|
---|
| 181 | // Add AMPM column style.
|
---|
| 182 | DataGridTextBoxColumn colAccess = new DataGridTextBoxColumn();
|
---|
| 183 | colAccess.MappingName = "ACCESSNAME";
|
---|
| 184 | colAccess.HeaderText = "Access Type";
|
---|
| 185 | colAccess.Width = 200;
|
---|
| 186 | tsResult.GridColumnStyles.Add(colAccess);
|
---|
[1097] | 187 | //grdResult.TableStyles.Add(tsResult);
|
---|
| 188 | */
|
---|
| 189 |
|
---|
[614] | 190 | this.UpdateDialogData(true);
|
---|
| 191 |
|
---|
| 192 | }
|
---|
| 193 |
|
---|
| 194 | /// <summary>
|
---|
| 195 | /// If b is true, moves member vars into control data
|
---|
| 196 | /// otherwise, moves control data into member vars
|
---|
| 197 | /// </summary>
|
---|
| 198 | /// <param name="b"></param>
|
---|
| 199 | private void UpdateDialogData(bool b)
|
---|
| 200 | {
|
---|
| 201 | if (b == true) //move member vars into controls
|
---|
| 202 | {
|
---|
| 203 |
|
---|
| 204 | }
|
---|
| 205 | else //move control data into member vars
|
---|
| 206 | {
|
---|
| 207 |
|
---|
| 208 | //Build AccessType list
|
---|
| 209 |
|
---|
| 210 | this.m_alAccessTypes.Clear();
|
---|
| 211 |
|
---|
| 212 | for (int j = 0; j < this.lstAccessTypes.CheckedItems.Count; j++)
|
---|
| 213 | {
|
---|
| 214 | DataRowView drv = (DataRowView) lstAccessTypes.CheckedItems[j];
|
---|
| 215 | int nIndex = (int) lstAccessTypes.Tag;
|
---|
| 216 | string sItem = drv.Row.ItemArray[nIndex].ToString();
|
---|
| 217 | m_alAccessTypes.Add(sItem);
|
---|
| 218 | }
|
---|
| 219 |
|
---|
| 220 | //AM/PM
|
---|
| 221 | this.m_sAmpm = (this.rdoAM.Checked == true) ? "AM":"BOTH";
|
---|
| 222 | if (this.m_sAmpm != "AM")
|
---|
| 223 | this.m_sAmpm = (this.rdoPM.Checked == true) ? "PM":"BOTH";
|
---|
| 224 |
|
---|
| 225 |
|
---|
| 226 | //Weekday
|
---|
| 227 | this.m_sWeekDays = ""; //any
|
---|
| 228 | if (chkMon.Checked == true)
|
---|
| 229 | m_sWeekDays += "Monday";
|
---|
| 230 | if (chkTue.Checked == true)
|
---|
| 231 | m_sWeekDays += "Tuesday";
|
---|
| 232 | if (chkWed.Checked == true)
|
---|
| 233 | m_sWeekDays += "Wednesday";
|
---|
| 234 | if (chkThu.Checked == true)
|
---|
| 235 | m_sWeekDays += "Thursday";
|
---|
| 236 | if (chkFri.Checked == true)
|
---|
| 237 | m_sWeekDays += "Friday";
|
---|
| 238 | if (chkSat.Checked == true)
|
---|
| 239 | m_sWeekDays += "Saturday";
|
---|
| 240 | if (chkSun.Checked == true)
|
---|
| 241 | m_sWeekDays += "Sunday";
|
---|
| 242 |
|
---|
| 243 | //Start
|
---|
[1097] | 244 | this.m_dStart = this.dtStart.Value;
|
---|
[614] | 245 |
|
---|
| 246 | //End
|
---|
[1123] | 247 | this.m_dEnd = this.dtEnd.Value;
|
---|
[614] | 248 | }
|
---|
| 249 | }
|
---|
| 250 |
|
---|
| 251 |
|
---|
| 252 | /// <summary>
|
---|
| 253 | /// Clean up any resources being used.
|
---|
| 254 | /// </summary>
|
---|
| 255 | protected override void Dispose( bool disposing )
|
---|
| 256 | {
|
---|
| 257 | if( disposing )
|
---|
| 258 | {
|
---|
| 259 | if(components != null)
|
---|
| 260 | {
|
---|
| 261 | components.Dispose();
|
---|
| 262 | }
|
---|
| 263 | }
|
---|
| 264 | base.Dispose( disposing );
|
---|
| 265 | }
|
---|
| 266 |
|
---|
| 267 | #endregion Methods
|
---|
| 268 |
|
---|
| 269 | #region Windows Form Designer generated code
|
---|
| 270 | /// <summary>
|
---|
| 271 | /// Required method for Designer support - do not modify
|
---|
| 272 | /// the contents of this method with the code editor.
|
---|
| 273 | /// </summary>
|
---|
| 274 | private void InitializeComponent()
|
---|
| 275 | {
|
---|
[908] | 276 | this.panel1 = new System.Windows.Forms.Panel();
|
---|
| 277 | this.cmdSearch = new System.Windows.Forms.Button();
|
---|
| 278 | this.cmdCancel = new System.Windows.Forms.Button();
|
---|
[1097] | 279 | this.btnAccept = new System.Windows.Forms.Button();
|
---|
[908] | 280 | this.pnlDescription = new System.Windows.Forms.Panel();
|
---|
| 281 | this.grpDescription = new System.Windows.Forms.GroupBox();
|
---|
| 282 | this.lblDescription = new System.Windows.Forms.Label();
|
---|
| 283 | this.groupBox1 = new System.Windows.Forms.GroupBox();
|
---|
[1097] | 284 | this.lblEnd = new System.Windows.Forms.Label();
|
---|
| 285 | this.lblStart = new System.Windows.Forms.Label();
|
---|
| 286 | this.dtEnd = new System.Windows.Forms.DateTimePicker();
|
---|
| 287 | this.dtStart = new System.Windows.Forms.DateTimePicker();
|
---|
[908] | 288 | this.label3 = new System.Windows.Forms.Label();
|
---|
| 289 | this.label2 = new System.Windows.Forms.Label();
|
---|
| 290 | this.lstAccessTypes = new System.Windows.Forms.CheckedListBox();
|
---|
| 291 | this.cboAccessTypeFilter = new System.Windows.Forms.ComboBox();
|
---|
| 292 | this.grpDayOfWeek = new System.Windows.Forms.GroupBox();
|
---|
| 293 | this.chkSun = new System.Windows.Forms.CheckBox();
|
---|
| 294 | this.chkSat = new System.Windows.Forms.CheckBox();
|
---|
| 295 | this.chkFri = new System.Windows.Forms.CheckBox();
|
---|
| 296 | this.chkThu = new System.Windows.Forms.CheckBox();
|
---|
| 297 | this.chkWed = new System.Windows.Forms.CheckBox();
|
---|
| 298 | this.chkTue = new System.Windows.Forms.CheckBox();
|
---|
| 299 | this.chkMon = new System.Windows.Forms.CheckBox();
|
---|
| 300 | this.grpTimeOfDay = new System.Windows.Forms.GroupBox();
|
---|
| 301 | this.rdoBoth = new System.Windows.Forms.RadioButton();
|
---|
| 302 | this.rdoPM = new System.Windows.Forms.RadioButton();
|
---|
| 303 | this.rdoAM = new System.Windows.Forms.RadioButton();
|
---|
| 304 | this.label1 = new System.Windows.Forms.Label();
|
---|
| 305 | this.groupBox2 = new System.Windows.Forms.GroupBox();
|
---|
[1097] | 306 | this.lstResults = new System.Windows.Forms.ListView();
|
---|
| 307 | this.colID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 308 | this.colDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 309 | this.colDOW = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 310 | this.colStartTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 311 | this.colEndTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 312 | this.colResource = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 313 | this.colSlots = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
| 314 | this.colAccessType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
---|
[1106] | 315 | this.lblMessage = new System.Windows.Forms.Label();
|
---|
[908] | 316 | this.panel1.SuspendLayout();
|
---|
| 317 | this.pnlDescription.SuspendLayout();
|
---|
| 318 | this.grpDescription.SuspendLayout();
|
---|
| 319 | this.groupBox1.SuspendLayout();
|
---|
| 320 | this.grpDayOfWeek.SuspendLayout();
|
---|
| 321 | this.grpTimeOfDay.SuspendLayout();
|
---|
| 322 | this.groupBox2.SuspendLayout();
|
---|
| 323 | this.SuspendLayout();
|
---|
| 324 | //
|
---|
| 325 | // panel1
|
---|
| 326 | //
|
---|
[1106] | 327 | this.panel1.Controls.Add(this.lblMessage);
|
---|
[908] | 328 | this.panel1.Controls.Add(this.cmdSearch);
|
---|
| 329 | this.panel1.Controls.Add(this.cmdCancel);
|
---|
[1097] | 330 | this.panel1.Controls.Add(this.btnAccept);
|
---|
[908] | 331 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
---|
| 332 | this.panel1.Location = new System.Drawing.Point(0, 461);
|
---|
| 333 | this.panel1.Name = "panel1";
|
---|
| 334 | this.panel1.Size = new System.Drawing.Size(923, 40);
|
---|
| 335 | this.panel1.TabIndex = 4;
|
---|
| 336 | //
|
---|
| 337 | // cmdSearch
|
---|
| 338 | //
|
---|
[1106] | 339 | this.cmdSearch.Location = new System.Drawing.Point(33, 6);
|
---|
[908] | 340 | this.cmdSearch.Name = "cmdSearch";
|
---|
| 341 | this.cmdSearch.Size = new System.Drawing.Size(72, 24);
|
---|
| 342 | this.cmdSearch.TabIndex = 2;
|
---|
| 343 | this.cmdSearch.Text = "Search";
|
---|
| 344 | this.cmdSearch.Click += new System.EventHandler(this.cmdSearch_Click);
|
---|
| 345 | //
|
---|
| 346 | // cmdCancel
|
---|
| 347 | //
|
---|
| 348 | this.cmdCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
---|
[1106] | 349 | this.cmdCancel.Location = new System.Drawing.Point(828, 8);
|
---|
[908] | 350 | this.cmdCancel.Name = "cmdCancel";
|
---|
| 351 | this.cmdCancel.Size = new System.Drawing.Size(64, 24);
|
---|
| 352 | this.cmdCancel.TabIndex = 1;
|
---|
| 353 | this.cmdCancel.Text = "Cancel";
|
---|
| 354 | //
|
---|
[1097] | 355 | // btnAccept
|
---|
[908] | 356 | //
|
---|
[1097] | 357 | this.btnAccept.DialogResult = System.Windows.Forms.DialogResult.OK;
|
---|
[1106] | 358 | this.btnAccept.Location = new System.Drawing.Point(135, 8);
|
---|
[1097] | 359 | this.btnAccept.Name = "btnAccept";
|
---|
| 360 | this.btnAccept.Size = new System.Drawing.Size(176, 24);
|
---|
| 361 | this.btnAccept.TabIndex = 0;
|
---|
| 362 | this.btnAccept.Text = "Select Slot for Appointment";
|
---|
| 363 | this.btnAccept.Click += new System.EventHandler(this.btnAccept_Click);
|
---|
[908] | 364 | //
|
---|
| 365 | // pnlDescription
|
---|
| 366 | //
|
---|
| 367 | this.pnlDescription.Controls.Add(this.grpDescription);
|
---|
| 368 | this.pnlDescription.Dock = System.Windows.Forms.DockStyle.Bottom;
|
---|
| 369 | this.pnlDescription.Location = new System.Drawing.Point(0, 397);
|
---|
| 370 | this.pnlDescription.Name = "pnlDescription";
|
---|
| 371 | this.pnlDescription.Size = new System.Drawing.Size(923, 64);
|
---|
| 372 | this.pnlDescription.TabIndex = 47;
|
---|
| 373 | //
|
---|
| 374 | // grpDescription
|
---|
| 375 | //
|
---|
| 376 | this.grpDescription.Controls.Add(this.lblDescription);
|
---|
| 377 | this.grpDescription.Dock = System.Windows.Forms.DockStyle.Fill;
|
---|
| 378 | this.grpDescription.Location = new System.Drawing.Point(0, 0);
|
---|
| 379 | this.grpDescription.Name = "grpDescription";
|
---|
| 380 | this.grpDescription.Size = new System.Drawing.Size(923, 64);
|
---|
| 381 | this.grpDescription.TabIndex = 0;
|
---|
| 382 | this.grpDescription.TabStop = false;
|
---|
| 383 | this.grpDescription.Text = "Description";
|
---|
| 384 | //
|
---|
| 385 | // lblDescription
|
---|
| 386 | //
|
---|
| 387 | this.lblDescription.Dock = System.Windows.Forms.DockStyle.Fill;
|
---|
| 388 | this.lblDescription.Location = new System.Drawing.Point(3, 16);
|
---|
| 389 | this.lblDescription.Name = "lblDescription";
|
---|
| 390 | this.lblDescription.Size = new System.Drawing.Size(917, 45);
|
---|
| 391 | this.lblDescription.TabIndex = 1;
|
---|
| 392 | this.lblDescription.Text = "Search for available appointment times using this panel. You may narrow your sea" +
|
---|
| 393 | "rch by selecting an access type or by selecting specific days of the week or tim" +
|
---|
| 394 | "es of day.";
|
---|
| 395 | //
|
---|
| 396 | // groupBox1
|
---|
| 397 | //
|
---|
[1097] | 398 | this.groupBox1.Controls.Add(this.lblEnd);
|
---|
| 399 | this.groupBox1.Controls.Add(this.lblStart);
|
---|
| 400 | this.groupBox1.Controls.Add(this.dtEnd);
|
---|
| 401 | this.groupBox1.Controls.Add(this.dtStart);
|
---|
[908] | 402 | this.groupBox1.Controls.Add(this.label3);
|
---|
| 403 | this.groupBox1.Controls.Add(this.label2);
|
---|
| 404 | this.groupBox1.Controls.Add(this.lstAccessTypes);
|
---|
| 405 | this.groupBox1.Controls.Add(this.cboAccessTypeFilter);
|
---|
| 406 | this.groupBox1.Controls.Add(this.grpDayOfWeek);
|
---|
| 407 | this.groupBox1.Controls.Add(this.grpTimeOfDay);
|
---|
| 408 | this.groupBox1.Controls.Add(this.label1);
|
---|
| 409 | this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top;
|
---|
| 410 | this.groupBox1.Location = new System.Drawing.Point(0, 0);
|
---|
| 411 | this.groupBox1.Name = "groupBox1";
|
---|
| 412 | this.groupBox1.Size = new System.Drawing.Size(923, 208);
|
---|
| 413 | this.groupBox1.TabIndex = 56;
|
---|
| 414 | this.groupBox1.TabStop = false;
|
---|
| 415 | this.groupBox1.Text = "Search Parameters";
|
---|
| 416 | //
|
---|
[1097] | 417 | // lblEnd
|
---|
| 418 | //
|
---|
| 419 | this.lblEnd.AutoSize = true;
|
---|
| 420 | this.lblEnd.Location = new System.Drawing.Point(12, 124);
|
---|
| 421 | this.lblEnd.Name = "lblEnd";
|
---|
| 422 | this.lblEnd.Size = new System.Drawing.Size(153, 13);
|
---|
| 423 | this.lblEnd.TabIndex = 67;
|
---|
| 424 | this.lblEnd.Text = "End Date to Search (Inclusive)";
|
---|
| 425 | //
|
---|
| 426 | // lblStart
|
---|
| 427 | //
|
---|
| 428 | this.lblStart.AutoSize = true;
|
---|
| 429 | this.lblStart.Location = new System.Drawing.Point(12, 35);
|
---|
| 430 | this.lblStart.Name = "lblStart";
|
---|
| 431 | this.lblStart.Size = new System.Drawing.Size(159, 13);
|
---|
| 432 | this.lblStart.TabIndex = 66;
|
---|
| 433 | this.lblStart.Text = "Start Date to Search (Inclusive)";
|
---|
| 434 | //
|
---|
| 435 | // dtEnd
|
---|
| 436 | //
|
---|
| 437 | this.dtEnd.Location = new System.Drawing.Point(12, 141);
|
---|
| 438 | this.dtEnd.Name = "dtEnd";
|
---|
| 439 | this.dtEnd.Size = new System.Drawing.Size(200, 20);
|
---|
| 440 | this.dtEnd.TabIndex = 65;
|
---|
[1106] | 441 | this.dtEnd.ValueChanged += new System.EventHandler(this.dtEnd_ValueChanged);
|
---|
[1097] | 442 | //
|
---|
| 443 | // dtStart
|
---|
| 444 | //
|
---|
| 445 | this.dtStart.Location = new System.Drawing.Point(12, 54);
|
---|
| 446 | this.dtStart.Name = "dtStart";
|
---|
| 447 | this.dtStart.Size = new System.Drawing.Size(200, 20);
|
---|
| 448 | this.dtStart.TabIndex = 64;
|
---|
[1106] | 449 | this.dtStart.ValueChanged += new System.EventHandler(this.dtStart_ValueChanged);
|
---|
[1097] | 450 | //
|
---|
[908] | 451 | // label3
|
---|
| 452 | //
|
---|
| 453 | this.label3.Location = new System.Drawing.Point(684, 64);
|
---|
| 454 | this.label3.Name = "label3";
|
---|
| 455 | this.label3.Size = new System.Drawing.Size(80, 16);
|
---|
| 456 | this.label3.TabIndex = 63;
|
---|
| 457 | this.label3.Text = "Access Type:";
|
---|
| 458 | //
|
---|
| 459 | // label2
|
---|
| 460 | //
|
---|
| 461 | this.label2.Location = new System.Drawing.Point(684, 21);
|
---|
| 462 | this.label2.Name = "label2";
|
---|
| 463 | this.label2.Size = new System.Drawing.Size(104, 16);
|
---|
| 464 | this.label2.TabIndex = 62;
|
---|
| 465 | this.label2.Text = "Access Group:";
|
---|
| 466 | //
|
---|
| 467 | // lstAccessTypes
|
---|
| 468 | //
|
---|
| 469 | this.lstAccessTypes.CheckOnClick = true;
|
---|
| 470 | this.lstAccessTypes.HorizontalScrollbar = true;
|
---|
| 471 | this.lstAccessTypes.Location = new System.Drawing.Point(661, 88);
|
---|
| 472 | this.lstAccessTypes.MultiColumn = true;
|
---|
| 473 | this.lstAccessTypes.Name = "lstAccessTypes";
|
---|
| 474 | this.lstAccessTypes.Size = new System.Drawing.Size(250, 109);
|
---|
| 475 | this.lstAccessTypes.TabIndex = 61;
|
---|
| 476 | //
|
---|
| 477 | // cboAccessTypeFilter
|
---|
| 478 | //
|
---|
| 479 | this.cboAccessTypeFilter.Location = new System.Drawing.Point(661, 40);
|
---|
| 480 | this.cboAccessTypeFilter.Name = "cboAccessTypeFilter";
|
---|
| 481 | this.cboAccessTypeFilter.Size = new System.Drawing.Size(250, 21);
|
---|
| 482 | this.cboAccessTypeFilter.TabIndex = 60;
|
---|
| 483 | this.cboAccessTypeFilter.Text = "cboAccessTypeFilter";
|
---|
| 484 | this.cboAccessTypeFilter.SelectionChangeCommitted += new System.EventHandler(this.cboAccessTypeFilter_SelectionChangeCommitted);
|
---|
| 485 | //
|
---|
| 486 | // grpDayOfWeek
|
---|
| 487 | //
|
---|
| 488 | this.grpDayOfWeek.Controls.Add(this.chkSun);
|
---|
| 489 | this.grpDayOfWeek.Controls.Add(this.chkSat);
|
---|
| 490 | this.grpDayOfWeek.Controls.Add(this.chkFri);
|
---|
| 491 | this.grpDayOfWeek.Controls.Add(this.chkThu);
|
---|
| 492 | this.grpDayOfWeek.Controls.Add(this.chkWed);
|
---|
| 493 | this.grpDayOfWeek.Controls.Add(this.chkTue);
|
---|
| 494 | this.grpDayOfWeek.Controls.Add(this.chkMon);
|
---|
| 495 | this.grpDayOfWeek.Location = new System.Drawing.Point(311, 94);
|
---|
| 496 | this.grpDayOfWeek.Name = "grpDayOfWeek";
|
---|
| 497 | this.grpDayOfWeek.Size = new System.Drawing.Size(240, 101);
|
---|
| 498 | this.grpDayOfWeek.TabIndex = 59;
|
---|
| 499 | this.grpDayOfWeek.TabStop = false;
|
---|
| 500 | this.grpDayOfWeek.Text = "Day of the Week";
|
---|
| 501 | //
|
---|
| 502 | // chkSun
|
---|
| 503 | //
|
---|
| 504 | this.chkSun.Location = new System.Drawing.Point(176, 64);
|
---|
| 505 | this.chkSun.Name = "chkSun";
|
---|
| 506 | this.chkSun.Size = new System.Drawing.Size(48, 16);
|
---|
| 507 | this.chkSun.TabIndex = 6;
|
---|
| 508 | this.chkSun.Text = "Sun";
|
---|
| 509 | //
|
---|
| 510 | // chkSat
|
---|
| 511 | //
|
---|
| 512 | this.chkSat.Location = new System.Drawing.Point(128, 64);
|
---|
| 513 | this.chkSat.Name = "chkSat";
|
---|
| 514 | this.chkSat.Size = new System.Drawing.Size(48, 16);
|
---|
| 515 | this.chkSat.TabIndex = 5;
|
---|
| 516 | this.chkSat.Text = "Sat";
|
---|
| 517 | //
|
---|
| 518 | // chkFri
|
---|
| 519 | //
|
---|
| 520 | this.chkFri.Location = new System.Drawing.Point(72, 64);
|
---|
| 521 | this.chkFri.Name = "chkFri";
|
---|
| 522 | this.chkFri.Size = new System.Drawing.Size(48, 16);
|
---|
| 523 | this.chkFri.TabIndex = 4;
|
---|
| 524 | this.chkFri.Text = "Fri";
|
---|
| 525 | //
|
---|
| 526 | // chkThu
|
---|
| 527 | //
|
---|
| 528 | this.chkThu.Location = new System.Drawing.Point(16, 64);
|
---|
| 529 | this.chkThu.Name = "chkThu";
|
---|
| 530 | this.chkThu.Size = new System.Drawing.Size(48, 16);
|
---|
| 531 | this.chkThu.TabIndex = 3;
|
---|
| 532 | this.chkThu.Text = "Thu";
|
---|
| 533 | //
|
---|
| 534 | // chkWed
|
---|
| 535 | //
|
---|
| 536 | this.chkWed.Location = new System.Drawing.Point(128, 32);
|
---|
| 537 | this.chkWed.Name = "chkWed";
|
---|
| 538 | this.chkWed.Size = new System.Drawing.Size(48, 16);
|
---|
| 539 | this.chkWed.TabIndex = 2;
|
---|
| 540 | this.chkWed.Text = "Wed";
|
---|
| 541 | //
|
---|
| 542 | // chkTue
|
---|
| 543 | //
|
---|
| 544 | this.chkTue.Location = new System.Drawing.Point(72, 32);
|
---|
| 545 | this.chkTue.Name = "chkTue";
|
---|
| 546 | this.chkTue.Size = new System.Drawing.Size(48, 16);
|
---|
| 547 | this.chkTue.TabIndex = 1;
|
---|
| 548 | this.chkTue.Text = "Tue";
|
---|
| 549 | //
|
---|
| 550 | // chkMon
|
---|
| 551 | //
|
---|
| 552 | this.chkMon.Location = new System.Drawing.Point(16, 32);
|
---|
| 553 | this.chkMon.Name = "chkMon";
|
---|
| 554 | this.chkMon.Size = new System.Drawing.Size(48, 16);
|
---|
| 555 | this.chkMon.TabIndex = 0;
|
---|
| 556 | this.chkMon.Text = "Mon";
|
---|
| 557 | //
|
---|
| 558 | // grpTimeOfDay
|
---|
| 559 | //
|
---|
| 560 | this.grpTimeOfDay.Controls.Add(this.rdoBoth);
|
---|
| 561 | this.grpTimeOfDay.Controls.Add(this.rdoPM);
|
---|
| 562 | this.grpTimeOfDay.Controls.Add(this.rdoAM);
|
---|
| 563 | this.grpTimeOfDay.Location = new System.Drawing.Point(311, 32);
|
---|
| 564 | this.grpTimeOfDay.Name = "grpTimeOfDay";
|
---|
| 565 | this.grpTimeOfDay.Size = new System.Drawing.Size(240, 48);
|
---|
| 566 | this.grpTimeOfDay.TabIndex = 58;
|
---|
| 567 | this.grpTimeOfDay.TabStop = false;
|
---|
| 568 | this.grpTimeOfDay.Text = "Time of Day";
|
---|
| 569 | //
|
---|
| 570 | // rdoBoth
|
---|
| 571 | //
|
---|
| 572 | this.rdoBoth.Checked = true;
|
---|
| 573 | this.rdoBoth.Location = new System.Drawing.Point(176, 24);
|
---|
| 574 | this.rdoBoth.Name = "rdoBoth";
|
---|
| 575 | this.rdoBoth.Size = new System.Drawing.Size(48, 16);
|
---|
| 576 | this.rdoBoth.TabIndex = 2;
|
---|
| 577 | this.rdoBoth.TabStop = true;
|
---|
| 578 | this.rdoBoth.Text = "Both";
|
---|
| 579 | //
|
---|
| 580 | // rdoPM
|
---|
| 581 | //
|
---|
| 582 | this.rdoPM.Location = new System.Drawing.Point(96, 24);
|
---|
| 583 | this.rdoPM.Name = "rdoPM";
|
---|
| 584 | this.rdoPM.Size = new System.Drawing.Size(72, 16);
|
---|
| 585 | this.rdoPM.TabIndex = 1;
|
---|
| 586 | this.rdoPM.Text = "PM Only";
|
---|
| 587 | //
|
---|
| 588 | // rdoAM
|
---|
| 589 | //
|
---|
| 590 | this.rdoAM.Location = new System.Drawing.Point(16, 24);
|
---|
| 591 | this.rdoAM.Name = "rdoAM";
|
---|
| 592 | this.rdoAM.Size = new System.Drawing.Size(72, 16);
|
---|
| 593 | this.rdoAM.TabIndex = 0;
|
---|
| 594 | this.rdoAM.Text = "AM Only";
|
---|
| 595 | //
|
---|
| 596 | // label1
|
---|
| 597 | //
|
---|
| 598 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
---|
[1097] | 599 | this.label1.Location = new System.Drawing.Point(6, 16);
|
---|
[908] | 600 | this.label1.Name = "label1";
|
---|
| 601 | this.label1.Size = new System.Drawing.Size(136, 16);
|
---|
| 602 | this.label1.TabIndex = 57;
|
---|
| 603 | this.label1.Text = "Date Range:";
|
---|
| 604 | //
|
---|
| 605 | // groupBox2
|
---|
| 606 | //
|
---|
[1097] | 607 | this.groupBox2.Controls.Add(this.lstResults);
|
---|
[908] | 608 | this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
|
---|
| 609 | this.groupBox2.Location = new System.Drawing.Point(0, 208);
|
---|
| 610 | this.groupBox2.Name = "groupBox2";
|
---|
| 611 | this.groupBox2.Size = new System.Drawing.Size(923, 189);
|
---|
| 612 | this.groupBox2.TabIndex = 57;
|
---|
| 613 | this.groupBox2.TabStop = false;
|
---|
| 614 | this.groupBox2.Text = "Search Result";
|
---|
| 615 | //
|
---|
[1097] | 616 | // lstResults
|
---|
[908] | 617 | //
|
---|
[1097] | 618 | this.lstResults.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
---|
| 619 | this.colID,
|
---|
| 620 | this.colDate,
|
---|
| 621 | this.colDOW,
|
---|
| 622 | this.colStartTime,
|
---|
| 623 | this.colEndTime,
|
---|
| 624 | this.colResource,
|
---|
| 625 | this.colSlots,
|
---|
| 626 | this.colAccessType});
|
---|
| 627 | this.lstResults.Dock = System.Windows.Forms.DockStyle.Fill;
|
---|
| 628 | this.lstResults.FullRowSelect = true;
|
---|
| 629 | this.lstResults.GridLines = true;
|
---|
| 630 | this.lstResults.Location = new System.Drawing.Point(3, 16);
|
---|
| 631 | this.lstResults.MultiSelect = false;
|
---|
| 632 | this.lstResults.Name = "lstResults";
|
---|
| 633 | this.lstResults.Size = new System.Drawing.Size(917, 170);
|
---|
| 634 | this.lstResults.TabIndex = 0;
|
---|
| 635 | this.lstResults.UseCompatibleStateImageBehavior = false;
|
---|
| 636 | this.lstResults.View = System.Windows.Forms.View.Details;
|
---|
| 637 | this.lstResults.DoubleClick += new System.EventHandler(this.lstResults_DoubleClick);
|
---|
[908] | 638 | //
|
---|
[1097] | 639 | // colID
|
---|
| 640 | //
|
---|
| 641 | this.colID.Text = "ID";
|
---|
| 642 | this.colID.Width = 0;
|
---|
| 643 | //
|
---|
| 644 | // colDate
|
---|
| 645 | //
|
---|
| 646 | this.colDate.Text = "Date";
|
---|
| 647 | this.colDate.Width = 91;
|
---|
| 648 | //
|
---|
| 649 | // colDOW
|
---|
| 650 | //
|
---|
| 651 | this.colDOW.Text = "Day of Week";
|
---|
| 652 | this.colDOW.Width = 80;
|
---|
| 653 | //
|
---|
| 654 | // colStartTime
|
---|
| 655 | //
|
---|
| 656 | this.colStartTime.Text = "Start Time";
|
---|
| 657 | this.colStartTime.Width = 87;
|
---|
| 658 | //
|
---|
| 659 | // colEndTime
|
---|
| 660 | //
|
---|
| 661 | this.colEndTime.Text = "End Time";
|
---|
| 662 | this.colEndTime.Width = 116;
|
---|
| 663 | //
|
---|
| 664 | // colResource
|
---|
| 665 | //
|
---|
| 666 | this.colResource.Text = "Resource";
|
---|
| 667 | this.colResource.Width = 370;
|
---|
| 668 | //
|
---|
| 669 | // colSlots
|
---|
| 670 | //
|
---|
| 671 | this.colSlots.Text = "Slots";
|
---|
| 672 | this.colSlots.Width = 47;
|
---|
| 673 | //
|
---|
| 674 | // colAccessType
|
---|
| 675 | //
|
---|
| 676 | this.colAccessType.Text = "Access Type";
|
---|
| 677 | this.colAccessType.Width = 101;
|
---|
| 678 | //
|
---|
[1106] | 679 | // lblMessage
|
---|
| 680 | //
|
---|
| 681 | this.lblMessage.AutoSize = true;
|
---|
| 682 | this.lblMessage.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
---|
| 683 | this.lblMessage.ForeColor = System.Drawing.Color.Red;
|
---|
| 684 | this.lblMessage.Location = new System.Drawing.Point(337, 16);
|
---|
| 685 | this.lblMessage.Name = "lblMessage";
|
---|
| 686 | this.lblMessage.Size = new System.Drawing.Size(0, 16);
|
---|
| 687 | this.lblMessage.TabIndex = 3;
|
---|
| 688 | //
|
---|
[908] | 689 | // DApptSearch
|
---|
| 690 | //
|
---|
| 691 | this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
|
---|
| 692 | this.CancelButton = this.cmdCancel;
|
---|
| 693 | this.ClientSize = new System.Drawing.Size(923, 501);
|
---|
| 694 | this.Controls.Add(this.groupBox2);
|
---|
| 695 | this.Controls.Add(this.groupBox1);
|
---|
| 696 | this.Controls.Add(this.pnlDescription);
|
---|
| 697 | this.Controls.Add(this.panel1);
|
---|
| 698 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
---|
| 699 | this.Name = "DApptSearch";
|
---|
| 700 | this.Text = "Find Clinic Availability";
|
---|
| 701 | this.panel1.ResumeLayout(false);
|
---|
[1106] | 702 | this.panel1.PerformLayout();
|
---|
[908] | 703 | this.pnlDescription.ResumeLayout(false);
|
---|
| 704 | this.grpDescription.ResumeLayout(false);
|
---|
| 705 | this.groupBox1.ResumeLayout(false);
|
---|
[1097] | 706 | this.groupBox1.PerformLayout();
|
---|
[908] | 707 | this.grpDayOfWeek.ResumeLayout(false);
|
---|
| 708 | this.grpTimeOfDay.ResumeLayout(false);
|
---|
| 709 | this.groupBox2.ResumeLayout(false);
|
---|
| 710 | this.ResumeLayout(false);
|
---|
[614] | 711 |
|
---|
| 712 | }
|
---|
| 713 | #endregion
|
---|
| 714 |
|
---|
| 715 | #region Event Handlers
|
---|
| 716 |
|
---|
| 717 | private void cmdSearch_Click(object sender, System.EventArgs e)
|
---|
| 718 | {
|
---|
[1097] | 719 | //Tell user we are processing
|
---|
| 720 | this.Cursor = Cursors.WaitCursor;
|
---|
[1106] | 721 | this.lblMessage.Text = String.Empty;
|
---|
| 722 |
|
---|
[1097] | 723 | //Get the control data into local vars
|
---|
[614] | 724 | UpdateDialogData(false);
|
---|
| 725 | //Resource array, Begin date, Access type array, MTWTF , AM PM
|
---|
| 726 |
|
---|
[1097] | 727 | //Get Availabilities and Appointments from the DB
|
---|
| 728 | //NB: m_sAmpm and m_sWeekDays don't have an effect on the M side side right now
|
---|
[1123] | 729 | m_dStart = m_dStart.Date; // move to 1200
|
---|
| 730 | m_dEnd = m_dEnd.Date.AddHours(23).AddMinutes(59).AddSeconds(59); //move to 235959
|
---|
| 731 | string sSearchInfo = "1|" + m_sAmpm + "|" + m_sWeekDays;
|
---|
[1097] | 732 | DataTable m_availTable = CGSchedLib.CreateAvailabilitySchedule(m_DocManager, m_alResources, m_dStart, m_dEnd, m_alAccessTypes, ScheduleType.Resource, sSearchInfo);
|
---|
| 733 | DataTable m_apptTable = CGSchedLib.CreateAppointmentSchedule(m_DocManager, m_alResources, m_dStart, m_dEnd);
|
---|
[614] | 734 |
|
---|
[1097] | 735 | #if DEBUG
|
---|
| 736 | System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
|
---|
| 737 | stopwatch.Start();
|
---|
| 738 | #endif
|
---|
| 739 | lstResultantAvailabilities = (from rowAV in m_availTable.AsEnumerable()
|
---|
| 740 |
|
---|
| 741 | // Calculate the number of slots consumed in this availability by appointments
|
---|
| 742 | let slotsConsumed = (from appt in m_apptTable.AsEnumerable()
|
---|
| 743 | //If the resource is the same and the user selection overlaps, then...
|
---|
| 744 | where (rowAV.Field<string>("RESOURCE") == appt.Field<string>("RESOURCENAME")
|
---|
| 745 | && CalendarGrid.TimesOverlap(rowAV.Field<DateTime>("START_TIME"), rowAV.Field<DateTime>("END_TIME"), appt.Field<DateTime>("START_TIME"), appt.Field<DateTime>("END_TIME")))
|
---|
| 746 | // if appt starttime is before avail start time, only count against the avail starting from the availability start time
|
---|
| 747 | let startTimeToCountAgainstBlock = appt.Field<DateTime>("START_TIME") < rowAV.Field<DateTime>("START_TIME") ? rowAV.Field<DateTime>("START_TIME") : appt.Field<DateTime>("START_TIME")
|
---|
| 748 | // if appt endtime is after the avail ends, only count against the avail up to where the avail ends
|
---|
| 749 | let endTimeToCountAgainstBlock = appt.Field<DateTime>("END_TIME") > rowAV.Field<DateTime>("END_TIME") ? rowAV.Field<DateTime>("END_TIME") : appt.Field<DateTime>("END_TIME")
|
---|
| 750 | // theoretical minutes per slot for the availability
|
---|
| 751 | let minPerSlot = (rowAV.Field<DateTime>("END_TIME") - rowAV.Field<DateTime>("START_TIME")).TotalMinutes / rowAV.Field<int>("SLOTS")
|
---|
| 752 | // how many minutes does this appointment take away from the slot
|
---|
| 753 | let minPerAppt = (endTimeToCountAgainstBlock - startTimeToCountAgainstBlock).TotalMinutes
|
---|
| 754 | // how many slots the appointment takes up using this availability's scale
|
---|
| 755 | let slotsConsumed = minPerAppt / minPerSlot
|
---|
| 756 | select slotsConsumed).Sum()
|
---|
| 757 |
|
---|
| 758 | // Subtract the number consumed from the original ones
|
---|
| 759 | let slotsLeft = (float)rowAV.Field<int>("SLOTS") - slotsConsumed
|
---|
| 760 | // filter by that value if it is at least one slot
|
---|
| 761 | where slotsLeft >= 1
|
---|
| 762 | // Sort by Start Time, then by Resource Name
|
---|
| 763 | orderby rowAV.Field<DateTime>("START_TIME"), rowAV.Field<string>("RESOURCE")
|
---|
| 764 | //return as a CGAvailability
|
---|
| 765 | select new CGAvailability
|
---|
| 766 | {
|
---|
| 767 | ResourceList = rowAV.Field<string>("RESOURCE"),
|
---|
| 768 | StartTime = rowAV.Field<DateTime>("START_TIME"),
|
---|
| 769 | EndTime = rowAV.Field<DateTime>("END_TIME"),
|
---|
| 770 | Slots = (int)slotsLeft,
|
---|
| 771 | // AccessTypeName is grabbed from the Access Type Table using a psuedojoin syntax.
|
---|
| 772 | // "ACCESS_TYPE" is the IEN of the AcceesType.
|
---|
| 773 | // Single or default is b/c we are expecting one result.
|
---|
| 774 | AccessTypeName = (from at in m_dsGlobal.Tables["AccessTypes"].AsEnumerable()
|
---|
| 775 | where at.Field<int>("BMXIEN")==Int32.Parse(rowAV.Field<string>("ACCESS_TYPE"))
|
---|
| 776 | select at.Field<string>("ACCESS_TYPE_NAME")).SingleOrDefault<string>(),
|
---|
| 777 | AvailabilityType = rowAV.Field<int>("AVAILABILITYID")
|
---|
| 778 | })
|
---|
| 779 | // convert to Generic List
|
---|
| 780 | .ToList<CGAvailability>();
|
---|
[614] | 781 |
|
---|
[1097] | 782 | // if specific access types are chosen, filter the results based on a join against them.
|
---|
| 783 | if (m_alAccessTypes.Count > 0)
|
---|
| 784 | lstResultantAvailabilities = (from av in lstResultantAvailabilities
|
---|
| 785 | join at in m_alAccessTypes.Cast<string>() on av.AccessTypeName equals at
|
---|
| 786 | select av).ToList<CGAvailability>();
|
---|
[614] | 787 |
|
---|
[1097] | 788 | // if user chose AM radio button, get morning appointments
|
---|
| 789 | // TimeSpan.FromHours(12) gets the number of ticks since Midnight
|
---|
| 790 | if (rdoAM.Checked) // less than 12 pm
|
---|
| 791 | {
|
---|
| 792 | lstResultantAvailabilities = (from av in lstResultantAvailabilities
|
---|
| 793 | where av.StartTime.TimeOfDay < TimeSpan.FromHours(12)
|
---|
| 794 | select av).ToList<CGAvailability>();
|
---|
| 795 | }
|
---|
| 796 | // if user chose PM radio button, get morning appointments
|
---|
| 797 | if (rdoPM.Checked) // after or equal to 12 pm
|
---|
| 798 | {
|
---|
| 799 | lstResultantAvailabilities = (from av in lstResultantAvailabilities
|
---|
| 800 | where av.StartTime.TimeOfDay >= TimeSpan.FromHours(12)
|
---|
| 801 | select av).ToList<CGAvailability>();
|
---|
| 802 | }
|
---|
[1095] | 803 |
|
---|
[1097] | 804 | // if any of the days of week are checked, create a new list based on them
|
---|
| 805 | // and clear the original list, and join the new lists together
|
---|
| 806 | if (chkMon.Checked || chkTue.Checked || chkWed.Checked || chkThu.Checked || chkFri.Checked || chkSat.Checked || chkSun.Checked)
|
---|
| 807 | {
|
---|
[614] | 808 |
|
---|
[1097] | 809 | var lstMonday = new List<CGAvailability>();
|
---|
| 810 | var lstTuesday = new List<CGAvailability>();
|
---|
| 811 | var lstWednesday = new List<CGAvailability>();
|
---|
| 812 | var lstThursday = new List<CGAvailability>();
|
---|
| 813 | var lstFriday = new List<CGAvailability>();
|
---|
| 814 | var lstSaturday = new List<CGAvailability>();
|
---|
| 815 | var lstSunday = new List<CGAvailability>();
|
---|
[1095] | 816 |
|
---|
[1097] | 817 | if (chkMon.Checked == true)
|
---|
| 818 | {
|
---|
| 819 | lstMonday = (from av in lstResultantAvailabilities
|
---|
| 820 | where av.StartTime.DayOfWeek == DayOfWeek.Monday
|
---|
| 821 | select av).ToList<CGAvailability>();
|
---|
| 822 | }
|
---|
[614] | 823 |
|
---|
[1097] | 824 | if (chkTue.Checked == true)
|
---|
| 825 | {
|
---|
| 826 | lstTuesday = (from av in lstResultantAvailabilities
|
---|
| 827 | where av.StartTime.DayOfWeek == DayOfWeek.Tuesday
|
---|
| 828 | select av).ToList<CGAvailability>();
|
---|
| 829 | }
|
---|
[614] | 830 |
|
---|
[1097] | 831 | if (chkWed.Checked == true)
|
---|
| 832 | {
|
---|
| 833 | lstWednesday = (from av in lstResultantAvailabilities
|
---|
| 834 | where av.StartTime.DayOfWeek == DayOfWeek.Wednesday
|
---|
| 835 | select av).ToList<CGAvailability>();
|
---|
[614] | 836 |
|
---|
[1097] | 837 | }
|
---|
[614] | 838 |
|
---|
[1097] | 839 | if (chkThu.Checked == true)
|
---|
| 840 | {
|
---|
| 841 | lstThursday = (from av in lstResultantAvailabilities
|
---|
| 842 | where av.StartTime.DayOfWeek == DayOfWeek.Thursday
|
---|
| 843 | select av).ToList<CGAvailability>();
|
---|
[614] | 844 |
|
---|
[1097] | 845 | }
|
---|
| 846 |
|
---|
| 847 | if (chkFri.Checked == true)
|
---|
| 848 | {
|
---|
| 849 | lstFriday = (from av in lstResultantAvailabilities
|
---|
| 850 | where av.StartTime.DayOfWeek == DayOfWeek.Friday
|
---|
| 851 | select av).ToList<CGAvailability>();
|
---|
| 852 | }
|
---|
| 853 |
|
---|
| 854 | if (chkSat.Checked == true)
|
---|
| 855 | {
|
---|
| 856 | lstSaturday = (from av in lstResultantAvailabilities
|
---|
| 857 | where av.StartTime.DayOfWeek == DayOfWeek.Saturday
|
---|
| 858 | select av).ToList<CGAvailability>();
|
---|
| 859 |
|
---|
| 860 | }
|
---|
| 861 |
|
---|
| 862 | if (chkSun.Checked == true)
|
---|
| 863 | {
|
---|
| 864 | lstSunday = (from av in lstResultantAvailabilities
|
---|
| 865 | where av.StartTime.DayOfWeek == DayOfWeek.Sunday
|
---|
| 866 | select av).ToList<CGAvailability>();
|
---|
| 867 |
|
---|
| 868 | }
|
---|
| 869 |
|
---|
| 870 |
|
---|
| 871 | lstResultantAvailabilities.Clear();
|
---|
| 872 | lstResultantAvailabilities.AddRange(lstMonday);
|
---|
| 873 | lstResultantAvailabilities.AddRange(lstTuesday);
|
---|
| 874 | lstResultantAvailabilities.AddRange(lstWednesday);
|
---|
| 875 | lstResultantAvailabilities.AddRange(lstThursday);
|
---|
| 876 | lstResultantAvailabilities.AddRange(lstFriday);
|
---|
| 877 | lstResultantAvailabilities.AddRange(lstSaturday);
|
---|
| 878 | lstResultantAvailabilities.AddRange(lstSunday);
|
---|
| 879 |
|
---|
| 880 | lstResultantAvailabilities.OrderBy(av => av.StartTime).ThenBy(av => av.ResourceList);
|
---|
| 881 | }
|
---|
| 882 |
|
---|
| 883 |
|
---|
| 884 |
|
---|
| 885 | #if DEBUG
|
---|
| 886 | System.Diagnostics.Debug.Write("LINQ took this long: " + stopwatch.ElapsedMilliseconds + "\n");
|
---|
| 887 | stopwatch = null;
|
---|
| 888 | #endif
|
---|
| 889 |
|
---|
| 890 | //Then, convert the availabilities to ListViewItems
|
---|
| 891 | var items = (from item in lstResultantAvailabilities
|
---|
| 892 | let s = new string[] {item.AvailabilityType.ToString(), item.StartTime.ToShortDateString(), item.StartTime.DayOfWeek.ToString(),item.StartTime.ToShortTimeString() ,item.EndTime.ToShortTimeString() ,item.ResourceList,item.Slots.ToString(),item.AccessTypeName}
|
---|
| 893 | let lvItem = new ListViewItem(s)
|
---|
| 894 | select lvItem).ToArray<ListViewItem>();
|
---|
| 895 |
|
---|
| 896 | //--Updating Listview
|
---|
| 897 | lstResults.BeginUpdate(); //tell listview to suspend drawing for now
|
---|
| 898 | lstResults.Items.Clear(); //empty it from old data
|
---|
| 899 |
|
---|
| 900 | if (items.Length > 0) lstResults.Items.AddRange(items); // add new data
|
---|
[1106] | 901 | else this.lblMessage.Text = "No available Appointment Slots Found!";
|
---|
[1097] | 902 |
|
---|
| 903 | lstResults.EndUpdate(); // ok done adding items, draw now.
|
---|
| 904 | //--End Update Listview
|
---|
| 905 |
|
---|
| 906 | //We are done
|
---|
| 907 | this.Cursor = Cursors.Default;
|
---|
[614] | 908 | }
|
---|
| 909 |
|
---|
| 910 | private void cboAccessTypeFilter_SelectionChangeCommitted(object sender, System.EventArgs e)
|
---|
| 911 | {
|
---|
| 912 | //Load Access Types listbox & filter
|
---|
| 913 | string sGroup = cboAccessTypeFilter.Text;
|
---|
| 914 | if (sGroup == "<Show All Access Types>")
|
---|
| 915 | {
|
---|
| 916 | LoadListBox("ALL");
|
---|
| 917 | }
|
---|
| 918 | else
|
---|
| 919 | {
|
---|
| 920 | LoadListBox("SELECTED");
|
---|
| 921 | }
|
---|
| 922 |
|
---|
| 923 | }
|
---|
| 924 |
|
---|
| 925 |
|
---|
[1106] | 926 | private void lstResults_DoubleClick(object sender, EventArgs e)
|
---|
| 927 | {
|
---|
| 928 | ProcessChoice(sender, e);
|
---|
| 929 | }
|
---|
[614] | 930 |
|
---|
[1106] | 931 | private void btnAccept_Click(object sender, EventArgs e)
|
---|
| 932 | {
|
---|
| 933 | ProcessChoice(sender, e);
|
---|
[1097] | 934 | }
|
---|
[614] | 935 |
|
---|
[1097] | 936 | /// <summary>
|
---|
[1106] | 937 | /// Shared method to process a user's choice
|
---|
[1097] | 938 | /// </summary>
|
---|
[1106] | 939 | /// <param name="s">sender</param>
|
---|
| 940 | /// <param name="e">EventArgs</param>
|
---|
| 941 | private void ProcessChoice(object s, EventArgs e)
|
---|
[1097] | 942 | {
|
---|
| 943 | if (lstResults.SelectedIndices.Count == 0)
|
---|
| 944 | {
|
---|
| 945 | this.DialogResult = DialogResult.None;
|
---|
[1106] | 946 | lblMessage.Text = "No Appointment Slot selected!";
|
---|
[1097] | 947 | return;
|
---|
| 948 | }
|
---|
| 949 |
|
---|
| 950 | long availabilityKey = long.Parse(lstResults.SelectedItems[0].SubItems[0].Text);
|
---|
| 951 | _selectedAvailability = (from av in lstResultantAvailabilities
|
---|
| 952 | where av.AvailabilityType == availabilityKey
|
---|
| 953 | select av).Single<CGAvailability>();
|
---|
| 954 | this.DialogResult = DialogResult.OK;
|
---|
| 955 | }
|
---|
| 956 |
|
---|
[1106] | 957 | /// <summary>
|
---|
| 958 | /// Adjust start date based on end date.
|
---|
| 959 | /// </summary>
|
---|
| 960 | /// <param name="sender"></param>
|
---|
| 961 | /// <param name="e"></param>
|
---|
| 962 | private void dtStart_ValueChanged(object sender, EventArgs e)
|
---|
| 963 | {
|
---|
| 964 | if (dtEnd.Value < dtStart.Value) dtEnd.Value = dtStart.Value;
|
---|
| 965 | }
|
---|
| 966 |
|
---|
| 967 | /// <summary>
|
---|
| 968 | /// Adjust end date based on start date.
|
---|
| 969 | /// </summary>
|
---|
| 970 | /// <param name="sender"></param>
|
---|
| 971 | /// <param name="e"></param>
|
---|
| 972 | private void dtEnd_ValueChanged(object sender, EventArgs e)
|
---|
| 973 | {
|
---|
| 974 | if (dtStart.Value > dtEnd.Value) dtStart.Value = dtEnd.Value;
|
---|
| 975 | }
|
---|
| 976 |
|
---|
[614] | 977 | #endregion Event Handlers
|
---|
| 978 |
|
---|
| 979 | #region Properties
|
---|
[1097] | 980 |
|
---|
[614] | 981 | /// <summary>
|
---|
[1097] | 982 | /// Gets the Availability Selected by the User in which to put an appointment
|
---|
| 983 | /// </summary>
|
---|
| 984 | public CGAvailability SelectedAvailability
|
---|
| 985 | {
|
---|
| 986 | get { return this._selectedAvailability; }
|
---|
| 987 | }
|
---|
[614] | 988 |
|
---|
| 989 | #endregion Properties
|
---|
[1106] | 990 |
|
---|
| 991 |
|
---|
[1097] | 992 | }
|
---|
[614] | 993 | }
|
---|