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