//Add New Item button clicked. Checks all the fields for valid values, //and if no errors, creates the record and adds it to the db. private void btn_Add_AddItem_Click(object sender, EventArgs e) { if (GuiPrefs.OpenDBPath == "") { MessageBox.Show("You must load a database before you can add items.", "No Database Loaded", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //Add the item if all the fields have valid values if (Add_Controls_Valid()) { SpecsRecord nr = new SpecsRecord(); int skunew = 1; int skumin, skumax; //Step 1 - Find the first unused SKU in the database try { tb_Add_MinSKU.Text = (skumin = Math.Abs(Convert.ToInt16(tb_Add_MinSKU.Text))).ToString(); } catch { //If not a valid integer, set min to 1 skumin = 1; tb_Add_MinSKU.Text = ""; } try { tb_Add_MaxSKU.Text = (skumax = Math.Abs(Convert.ToInt16(tb_Add_MaxSKU.Text))).ToString(); } catch { //If not a valid integer, set max to -1 (function will read as no limit) skumax = -1; } if (skumax < skumin) { //Blanks max if it's less than min tb_Add_MaxSKU.Text = ""; } try { skunew = Mydb.GetNextFreeSKU(skumin, skumax); } catch (IndexOutOfRangeException) { MessageBox.Show("There is no available SKU number in the specified range.", "No available SKU", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // } // else { //No valid range specified, search entire inventory // skunew = Mydb.GetNextFreeSKU(); // } //Step 2 - Set all the values of the SpecsRecord nr.SKU = (uint)skunew; nr.SphereOD = Convert.ToSingle(tb_Add_SphereOD.Text); nr.SphereOS = Convert.ToSingle(tb_Add_SphereOS.Text); nr.CylOD = Convert.ToSingle(tb_Add_CylOD.Text); nr.CylOS = Convert.ToSingle(tb_Add_CylOS.Text); nr.AxisOD = Convert.ToInt16(tb_Add_AxisOD.Text); nr.AxisOS = Convert.ToInt16(tb_Add_AxisOS.Text); nr.AddOD = Convert.ToSingle(tb_Add_AddOD.Text); nr.AddOS = Convert.ToSingle(tb_Add_AddOS.Text); if (rb_Add_Male.Checked) { nr.Gender = SpecGender.Male; } else if (rb_Add_Female.Checked) { nr.Gender = SpecGender.Female; } else { nr.Gender = SpecGender.Uni; } if (rb_Add_Single.Checked) { nr.Type = SpecType.Single; } else { nr.Type = SpecType.Multi; } if (rb_Add_NoTint.Checked) { nr.Tint = SpecTint.None; } else if (rb_Add_LightTint.Checked) { nr.Tint = SpecTint.Light; } else { nr.Tint = SpecTint.Dark; } if (rb_Add_Small.Checked) { nr.Size = SpecSize.Small; } else if (rb_Add_Medium.Checked) { nr.Size = SpecSize.Medium; } else if (rb_Add_Large.Checked) { nr.Size = SpecSize.Large; } else { nr.Size = SpecSize.Child; } nr.Comment = tb_Add_Comment.Text; nr.DateAdded = String.Format("{0:yyyy-MM-dd}", DateTime.Now); // Step 2.5 - Convert to negative CYL representation if (nr.CylOD > 0) { nr.SphereOD += nr.CylOD; nr.CylOD *= -1; nr.AxisOD = (nr.AxisOD + 90) % 180; } if (nr.CylOS > 0) { nr.SphereOS += nr.CylOS; nr.CylOS *= -1; nr.AxisOS = (nr.AxisOS + 90) % 180; } //Step 3 - Add the new SpecsRecord to the database Mydb.Insert(nr, SSTable.Current); Mydb.GetCurrentInventory(); //Refresh the displayed inventory IncrementOps(); //Increment the number of ops by 1 if the appropriate prefs are set //If the database is not normal (that is, if it is a merge database), also add the record to the //merge table and refresh it for display if (!GuiPrefs.NormalDatabase) { Mydb.Insert(nr, SSTable.MergeItems); dt_Add_MergeTable.Clear(); Mydb.GetTable(dt_Add_MergeTable, SSTable.MergeItems); } //Step 4 - Clear the entry fields and refresh the inventory Add_Clear_Controls(); //Step 5 - Highlight the new item in the DataGridView for (int j = 0; j < dgv_Add_InventoryView.Rows.Count; j++) { try { if (Convert.ToInt16(dgv_Add_InventoryView[0, j].Value) == skunew) { dgv_Add_InventoryView.Rows[j].Selected = true; if (j < 3) { dgv_Add_InventoryView.FirstDisplayedScrollingRowIndex = 0; } else { dgv_Add_InventoryView.FirstDisplayedScrollingRowIndex = j - 2; } } } catch { } } } }
//Add New Item button clicked. Checks all the fields for valid values, //and if no errors, creates the record and adds it to the db. private void btn_Add_AddItem_Click(object sender, EventArgs e) { if(GuiPrefs.OpenDBPath == "") { MessageBox.Show("You must load a database before you can add items.", "No Database Loaded", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //Add the item if all the fields have valid values if (Add_Controls_Valid()) { SpecsRecord nr = new SpecsRecord(); int skunew = 1; int skumin, skumax; //Step 1 - Find the first unused SKU in the database try { tb_Add_MinSKU.Text = (skumin = Math.Abs(Convert.ToInt16(tb_Add_MinSKU.Text))).ToString(); } catch { //If not a valid integer, set min to 1 skumin = 1; tb_Add_MinSKU.Text = ""; } try { tb_Add_MaxSKU.Text = (skumax = Math.Abs(Convert.ToInt16(tb_Add_MaxSKU.Text))).ToString(); } catch { //If not a valid integer, set max to -1 (function will read as no limit) skumax = -1; } if(skumax < skumin) { //Blanks max if it's less than min tb_Add_MaxSKU.Text = ""; } try { skunew = Mydb.GetNextFreeSKU(skumin, skumax); } catch(IndexOutOfRangeException) { MessageBox.Show("There is no available SKU number in the specified range.", "No available SKU", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // } // else { //No valid range specified, search entire inventory // skunew = Mydb.GetNextFreeSKU(); // } //Step 2 - Set all the values of the SpecsRecord nr.SKU = (uint)skunew; nr.SphereOD = Convert.ToSingle(tb_Add_SphereOD.Text); nr.SphereOS = Convert.ToSingle(tb_Add_SphereOS.Text); nr.CylOD = Convert.ToSingle(tb_Add_CylOD.Text); nr.CylOS = Convert.ToSingle(tb_Add_CylOS.Text); nr.AxisOD = Convert.ToInt16(tb_Add_AxisOD.Text); nr.AxisOS = Convert.ToInt16(tb_Add_AxisOS.Text); nr.AddOD = Convert.ToSingle(tb_Add_AddOD.Text); nr.AddOS = Convert.ToSingle(tb_Add_AddOS.Text); if (rb_Add_Male.Checked) nr.Gender = SpecGender.Male; else if (rb_Add_Female.Checked) nr.Gender = SpecGender.Female; else nr.Gender = SpecGender.Uni; if (rb_Add_Single.Checked) nr.Type = SpecType.Single; else nr.Type = SpecType.Multi; if (rb_Add_NoTint.Checked) nr.Tint = SpecTint.None; else if (rb_Add_LightTint.Checked) nr.Tint = SpecTint.Light; else nr.Tint = SpecTint.Dark; if(rb_Add_Small.Checked) nr.Size = SpecSize.Small; else if (rb_Add_Medium.Checked) nr.Size = SpecSize.Medium; else if (rb_Add_Large.Checked) nr.Size = SpecSize.Large; else nr.Size = SpecSize.Child; nr.Comment = tb_Add_Comment.Text; nr.DateAdded = String.Format("{0:yyyy-MM-dd}", DateTime.Now); //Step 3 - Add the new SpecsRecord to the database Mydb.Insert(nr, SSTable.Current); Mydb.GetCurrentInventory(); //Refresh the displayed inventory IncrementOps(); //Increment the number of ops by 1 if the appropriate prefs are set //If the database is not normal (that is, if it is a merge database), also add the record to the //merge table and refresh it for display if (!GuiPrefs.NormalDatabase) { Mydb.Insert(nr, SSTable.MergeItems); dt_Add_MergeTable.Clear(); Mydb.GetTable(dt_Add_MergeTable, SSTable.MergeItems); } //Step 4 - Clear the entry fields and refresh the inventory Add_Clear_Controls(); //Step 5 - Highlight the new item in the DataGridView for (int j = 0; j < dgv_Add_InventoryView.Rows.Count; j++) { try { if(Convert.ToInt16(dgv_Add_InventoryView[0, j].Value) == skunew) { dgv_Add_InventoryView.Rows[j].Selected = true; if(j < 3) dgv_Add_InventoryView.FirstDisplayedScrollingRowIndex = 0; else dgv_Add_InventoryView.FirstDisplayedScrollingRowIndex = j - 2; } } catch {} } } }
//Search button clicked. private void btn_S_Search_Click(object sender, EventArgs e) { if (GuiPrefs.OpenDBPath == "") { return; } //If the controls have valid fields, process the search if (SD_Controls_Valid()) { SpecsRecord nr = new SpecsRecord(); int deye; //Displays/hides the auxiliary data grid view and resizes them both if (chb_S_SplitMultifocals.Checked) { dgv_S_Distance.Visible = true; dgv_S_Closeup.Visible = true; dgv_S_SearchResults.Visible = false; lb_S_Distance.Visible = true; lb_S_Closeup.Visible = true; } else { dgv_S_Distance.Visible = false; dgv_S_Closeup.Visible = false; dgv_S_SearchResults.Visible = true; lb_S_Distance.Visible = false; lb_S_Closeup.Visible = false; } MainForm_ResizeEnd(sender, e); //Step 1 - Create the search record nr.SphereOD = Convert.ToSingle(tb_S_SphereOD.Text); nr.CylOD = Convert.ToSingle(tb_S_CylOD.Text); nr.AxisOD = Convert.ToInt16(tb_S_AxisOD.Text); nr.AddOD = Convert.ToSingle(tb_S_AddOD.Text); nr.SphereOS = Convert.ToSingle(tb_S_SphereOS.Text); nr.CylOS = Convert.ToSingle(tb_S_CylOS.Text); nr.AxisOS = Convert.ToInt16(tb_S_AxisOS.Text); nr.AddOS = Convert.ToSingle(tb_S_AddOS.Text); //Multi/single type check if (rb_S_Single.Checked) { nr.Type = SpecType.Single; } else { nr.Type = SpecType.Multi; } //Gender check if (rb_S_AnyGender.Checked) { nr.Gender = null; } else if (rb_S_Male.Checked) { nr.Gender = SpecGender.Male; } else if (rb_S_Female.Checked) { nr.Gender = SpecGender.Female; } else { nr.Gender = SpecGender.Uni; } //Size check if (rb_S_AnySize.Checked) { nr.Size = null; } else if (rb_S_Small.Checked) { nr.Size = SpecSize.Small; } else if (rb_S_Medium.Checked) { nr.Size = SpecSize.Medium; } else if (rb_S_Large.Checked) { nr.Size = SpecSize.Large; } else { nr.Size = SpecSize.Child; } //Dominant eye check if (rb_S_OD.Checked) { deye = (int)DomEye.OD; } else if (rb_S_OS.Checked) { deye = (int)DomEye.OS; } else { deye = (int)DomEye.OU; } //Step 2 - Call the Rx Search function to search and score matching specs // - Sort by score Mydb.RxSearch(nr, (DomEye)deye, chb_S_SplitMultifocals.Checked); if (dgv_S_SearchResults.Visible) { dgv_S_SearchResults.Sort(dgv_S_SearchResults.Columns[1], ListSortDirection.Ascending); } else { dgv_S_Distance.Sort(dgv_S_Distance.Columns[1], ListSortDirection.Ascending); dgv_S_Closeup.Sort(dgv_S_Closeup.Columns[1], ListSortDirection.Ascending); } //dgv_S_AuxResults.Sort(dgv_S_AuxResults.Columns[1], ListSortDirection.Ascending); //Step 3 - If empty, display a message box indicating no results, otherwise scroll to the top of the results if (Mydb.DBResults.Rows.Count > 0) { dgv_S_SearchResults.FirstDisplayedScrollingRowIndex = 0; dgv_S_Distance.FirstDisplayedScrollingRowIndex = 0; } else { MessageBox.Show("No matches found within acceptable tolerance of specified prescription.", "No matches.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } //Do the same for the Closeup table if (Mydb.DBResultsAux.Rows.Count > 0) { dgv_S_Closeup.FirstDisplayedScrollingRowIndex = 0; } //Step 4 -Clear selections for both data grid views // dgv_S_AuxResults.FirstDisplayedScrollingRowIndex = 0; dgv_S_SearchResults.ClearSelection(); dgv_S_Distance.ClearSelection(); dgv_S_Closeup.ClearSelection(); // dgv_S_AuxResults.ClearSelection(); } }
//Search button clicked. private void btn_S_Search_Click(object sender, EventArgs e) { if (GuiPrefs.OpenDBPath == "") { return; } //If the controls have valid fields, process the search if (SD_Controls_Valid()) { SpecsRecord nr = new SpecsRecord(); int deye; //Displays/hides the auxiliary data grid view and resizes them both if(chb_S_SplitMultifocals.Checked) { dgv_S_Distance.Visible = true; dgv_S_Closeup.Visible = true; dgv_S_SearchResults.Visible = false; lb_S_Distance.Visible = true; lb_S_Closeup.Visible = true; } else { dgv_S_Distance.Visible = false; dgv_S_Closeup.Visible = false; dgv_S_SearchResults.Visible = true; lb_S_Distance.Visible = false; lb_S_Closeup.Visible = false; } MainForm_ResizeEnd(sender, e); //Step 1 - Create the search record nr.SphereOD = Convert.ToSingle(tb_S_SphereOD.Text); nr.CylOD = Convert.ToSingle(tb_S_CylOD.Text); nr.AxisOD = Convert.ToInt16(tb_S_AxisOD.Text); nr.AddOD = Convert.ToSingle(tb_S_AddOD.Text); nr.SphereOS = Convert.ToSingle(tb_S_SphereOS.Text); nr.CylOS = Convert.ToSingle(tb_S_CylOS.Text); nr.AxisOS = Convert.ToInt16(tb_S_AxisOS.Text); nr.AddOS = Convert.ToSingle(tb_S_AddOS.Text); //Multi/single type check if (rb_S_Single.Checked) nr.Type = SpecType.Single; else nr.Type = SpecType.Multi; //Gender check if(rb_S_AnyGender.Checked) nr.Gender = null; else if(rb_S_Male.Checked) nr.Gender = SpecGender.Male; else if(rb_S_Female.Checked) nr.Gender = SpecGender.Female; else nr.Gender = SpecGender.Uni; //Size check if(rb_S_AnySize.Checked) nr.Size = null; else if(rb_S_Small.Checked) nr.Size = SpecSize.Small; else if(rb_S_Medium.Checked) nr.Size = SpecSize.Medium; else if(rb_S_Large.Checked) nr.Size = SpecSize.Large; else nr.Size = SpecSize.Child; //Dominant eye check if (rb_S_OD.Checked) deye = (int)DomEye.OD; else if (rb_S_OS.Checked) deye = (int)DomEye.OS; else deye = (int)DomEye.OU; //Step 2 - Call the Rx Search function to search and score matching specs // - Sort by score Mydb.RxSearch(nr, (DomEye)deye, chb_S_SplitMultifocals.Checked); if(dgv_S_SearchResults.Visible) { dgv_S_SearchResults.Sort(dgv_S_SearchResults.Columns[1], ListSortDirection.Ascending); } else { dgv_S_Distance.Sort(dgv_S_Distance.Columns[1], ListSortDirection.Ascending); dgv_S_Closeup.Sort(dgv_S_Closeup.Columns[1], ListSortDirection.Ascending); } //dgv_S_AuxResults.Sort(dgv_S_AuxResults.Columns[1], ListSortDirection.Ascending); //Step 3 - If empty, display a message box indicating no results, otherwise scroll to the top of the results if(Mydb.DBResults.Rows.Count > 0) { dgv_S_SearchResults.FirstDisplayedScrollingRowIndex = 0; dgv_S_Distance.FirstDisplayedScrollingRowIndex = 0; } else { MessageBox.Show("No matches found within acceptable tolerance of specified prescription.", "No matches.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } //Do the same for the Closeup table if(Mydb.DBResultsAux.Rows.Count > 0) { dgv_S_Closeup.FirstDisplayedScrollingRowIndex = 0; } //Step 4 -Clear selections for both data grid views // dgv_S_AuxResults.FirstDisplayedScrollingRowIndex = 0; dgv_S_SearchResults.ClearSelection(); dgv_S_Distance.ClearSelection(); dgv_S_Closeup.ClearSelection(); // dgv_S_AuxResults.ClearSelection(); } }
protected internal override string OnWizardNext() { //For each duplicate, figure out which one is more recent and replace if necessary if(rb_MostRecent.Checked) { DateTime cidate, didate; //Current inventory date and Duped inventory date DataTable mydt = new DataTable(); int dupecount = dupedt.Rows.Count; for(int i = 0; i < dupecount; i++) { mydt.Clear(); //Clear the table for new results try { mydb.SKUSearch(Convert.ToInt16(dupedt.Rows[i][0]), mydt); } catch {} cidate = Convert.ToDateTime(mydt.Rows[0][13].ToString()); didate = Convert.ToDateTime(dupedt.Rows[i][13].ToString()); //Compare the dates, if the duplicate is more recent, replace the record //in CurrentInventory with the one from DupedInventory, otherwise do nothing if(DateTime.Compare(didate, cidate) > 0) //Duplicate is newer, replace { //Create the record SpecsRecord sr = new SpecsRecord(); sr.SKU = Convert.ToUInt16(dupedt.Rows[i][0]); sr.SphereOD = Convert.ToSingle(dupedt.Rows[i][1]); sr.CylOD = Convert.ToSingle(dupedt.Rows[i][2]); sr.AxisOD = Convert.ToInt16(dupedt.Rows[i][3]); sr.AddOD = Convert.ToSingle(dupedt.Rows[i][4]); sr.SphereOS = Convert.ToSingle(dupedt.Rows[i][5]); sr.CylOS = Convert.ToSingle(dupedt.Rows[i][6]); sr.AxisOS = Convert.ToInt16(dupedt.Rows[i][7]); sr.AddOS = Convert.ToSingle(dupedt.Rows[i][8]); sr.Type = dupedt.Rows[i][9].ToString(); sr.Gender = dupedt.Rows[i][10].ToString(); sr.Size = dupedt.Rows[i][11].ToString(); sr.Tint = dupedt.Rows[i][12].ToString(); sr.DateAdded = dupedt.Rows[i][13].ToString(); //Delete the old record from the table and insert the new one mydb.Delete(sr.SKU, SSTable.Current); mydb.Insert(sr, SSTable.Current); } } } return "NewDBPage7"; }
/// <summary> /// Click event for the Dispense button in the Dispense tab. /// Dispenses the items corresponding to each SKU in the listbox. /// </summary> private void btn_D_Dispense_Click(object sender, EventArgs e) { SpecsRecord sr = new SpecsRecord(); int tdskus = 0; foreach (DataRow dr in dispenseTable.Rows) { //Assemble the record sr.SKU = Convert.ToUInt16(dr[0]); sr.SphereOD = Convert.ToSingle(dr[1]); sr.CylOD = Convert.ToSingle(dr[2]); sr.AxisOD = Convert.ToInt16(dr[3]); sr.AddOD = Convert.ToSingle(dr[4]); sr.SphereOS = Convert.ToSingle(dr[5]); sr.CylOS = Convert.ToSingle(dr[6]); sr.AxisOS = Convert.ToInt16(dr[7]); sr.AddOS = Convert.ToSingle(dr[8]); sr.Type = dr[9].ToString(); sr.Gender = dr[10].ToString(); sr.Size = dr[11].ToString(); sr.Tint = dr[12].ToString(); sr.DateAdded = dr[13].ToString(); sr.DateDispensed = (DateTime.Today).ToString(); sr.Comment = dr[14].ToString(); tdskus++; Mydb.Dispense(sr, true); //Dispense the record } if (tdskus > 0) { //Clean up the controls and the form. dispenseTable.Clear(); lbox_D_ToDispense.Items.Clear(); tb_D_SphereOD.Clear(); tb_D_CylOD.Clear(); tb_D_AxisOD.Clear(); tb_D_AddOD.Clear(); tb_D_SphereOS.Clear(); tb_D_CylOS.Clear(); tb_D_AxisOS.Clear(); tb_D_AddOS.Clear(); tb_D_Comment.Clear(); rb_D_NoTint.Checked = true; rb_D_LightTint.Checked = false; rb_D_DarkTint.Checked = false; rb_D_Small.Checked = true; rb_D_Medium.Checked = false; rb_D_Large.Checked = false; rb_D_Unisex.Checked = true; rb_D_Male.Checked = false; rb_D_Female.Checked = false; rb_D_Single.Checked = true; rb_D_Multi.Checked = false; tb_D_EnterSKU.Clear(); tb_D_EnterSKU.Focus(); //Reload the inventory display Mydb.GetCurrentInventory(); dt_V_DispensedTable.Clear(); Mydb.GetTable(dt_V_DispensedTable, SSTable.Dispensed); if (tdskus > 1) { MessageBox.Show(String.Format("Successfully dispensed {0} pairs of glasses.", tdskus), "Dispense Successful", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } else { MessageBox.Show("Successfully dispensed 1 pair of glasses.", "Dispense Successful", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } IncrementOps(tdskus); //Increment ops by the number of records dispensed, if the appropriate prefs are set } else { MessageBox.Show("No glasses were dispensed; no SKUs were specified.", "Dispense Unsuccessful", MessageBoxButtons.OK, MessageBoxIcon.Information); } }