/// /// Copyright (c) 2016-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; using NHibernate; using Results.Entities; using TBF.BenchControl; using TBF.BenchControl.Generic; using TBF.BenchControl.GenericDevices; using ResultsBrowser.Filters; using ResultsBrowser.Resources; using Oracle; using Oracle.DataAccess.Client; namespace ResultsBrowser { public partial class ResultsBrowserWnd : Form { const string OpenFileDlg_SaveFileDlg_Filter = "{0} (*.qry)|*.qry|{1} (*.*)|*.*"; string[] args; /// Comand line argument IList filters; /// Filters and the UI of filters FiltersConfig filtersConfig; /// Serializable configuration of filters and displayed results IList waterMeters; DateTime timePeriodStart; DateTime timePeriodEnd; static IList tbfComponents; static IList tbfDevices; OracleConnection oracleConnection; /// Oracle database connection public ResultsBrowserWnd(string[] args) { InitializeComponent(); filters = new List(); filtersConfig = new FiltersConfig(); this.args = args; tbfComponents = new List(); tbfDevices = new List(); timePeriodStart = new DateTime(0); timePeriodEnd = new DateTime(0); } private void ResultsBrowserWnd_Load(object sender, EventArgs e) { ResultsBrowser.LocalSettings ls = Program.LocalSettings; Width = (ls.MainWndWidth > 0) ? ls.MainWndWidth : 1000; Height = (ls.MainWndHeight > 0) ? ls.MainWndHeight : 750; Left = (ls.MainWndLeft != 0) ? ls.MainWndLeft : 50; Top = (ls.MainWndTop != 0) ? ls.MainWndTop : 50; hSplitContainer.SplitterDistance = (ls.SplitterDistance != 0) ? ls.SplitterDistance : 280; Localize(); RedrawTestBenches(); radioButton1.Checked = Program.LocalSettings.Bench1Selected; radioButton2.Checked = Program.LocalSettings.Bench2Selected; radioButton3.Checked = Program.LocalSettings.Bench3Selected; radioButton4.Checked = Program.LocalSettings.Bench4Selected; radioButton5.Checked = Program.LocalSettings.Bench5Selected; radioButton6.Checked = Program.LocalSettings.Bench6Selected; radioButton7.Checked = Program.LocalSettings.Bench7Selected; radioButton8.Checked = Program.LocalSettings.Bench8Selected; radioButton9.Checked = Program.LocalSettings.Bench9Selected; if (args.Length == 1 && args[0].IndexOf(".qry") == args[0].Length - 4) { LoadConfigFromFile(args[0]); } else if (!string.IsNullOrEmpty(Program.LocalSettings.LastConfigFileName)) { LoadConfigFromFile(Program.LocalSettings.LastConfigFileName); } else { Text = string.Format("{0} ver.{1}", Strings.Results_Browser, Program.Version); } } void RedrawTestBenches() { radioButton1.Text = Program.LocalSettings.Bench1; radioButton2.Text = Program.LocalSettings.Bench2; radioButton3.Text = Program.LocalSettings.Bench3; radioButton4.Text = Program.LocalSettings.Bench4; radioButton5.Text = Program.LocalSettings.Bench5; radioButton6.Text = Program.LocalSettings.Bench6; radioButton7.Text = Program.LocalSettings.Bench7; radioButton8.Text = Program.LocalSettings.Bench8; radioButton9.Text = Program.LocalSettings.Bench9; radioButton1.Visible = !string.IsNullOrEmpty(radioButton1.Text); radioButton2.Visible = !string.IsNullOrEmpty(radioButton2.Text); radioButton3.Visible = !string.IsNullOrEmpty(radioButton3.Text); radioButton4.Visible = !string.IsNullOrEmpty(radioButton4.Text); radioButton5.Visible = !string.IsNullOrEmpty(radioButton5.Text); radioButton6.Visible = !string.IsNullOrEmpty(radioButton6.Text); radioButton7.Visible = !string.IsNullOrEmpty(radioButton7.Text); radioButton8.Visible = !string.IsNullOrEmpty(radioButton8.Text); radioButton9.Visible = !string.IsNullOrEmpty(radioButton9.Text); } string BenchName() { return radioButton1.Checked ? Program.LocalSettings.Bench1 : radioButton2.Checked ? Program.LocalSettings.Bench2 : radioButton3.Checked ? Program.LocalSettings.Bench3 : radioButton4.Checked ? Program.LocalSettings.Bench4 : radioButton5.Checked ? Program.LocalSettings.Bench5 : radioButton6.Checked ? Program.LocalSettings.Bench6 : radioButton7.Checked ? Program.LocalSettings.Bench7 : radioButton8.Checked ? Program.LocalSettings.Bench8 : Program.LocalSettings.Bench9; } void Localize() { filtersGroupBox.Text = Strings.Filters; resultsGroupBox.Text = Strings.Query_results; settingsBtn.Text = Strings.Settings; testBenchesGroupBox.Text = Strings.Test_benches; clearFiltersBtn.Text = Strings.Clear_filters; addFilterBtn.Text = Strings.Add_filter; formatOfResultsBtn.Text = Strings.Format_of_results; printerConfigBtn.Text = Strings.Configure_printer; loadConfigBtn.Text = Strings.Load_filters; saveConfigBtn.Text = Strings.Save_filters; executeQueryBtn.Text = Strings.Execute_query; exportQueryResultsBtn.Text = Strings.Export_query_results; printQueryResultsBtn.Text = Strings.Print_query_results; statisticsBtn.Text = Strings.Statistics; } private void settingsBtn_Click(object sender, EventArgs e) { if (new Forms.DatabaseSettingsDlg().ShowDialog() == DialogResult.OK) { RedrawTestBenches(); } } private void radioButton1_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton2_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton3_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton4_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton5_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton6_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton7_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton8_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } private void radioButton9_CheckedChanged(object sender, EventArgs e) { SaveCheckBoxes(); } void SaveCheckBoxes() { Program.LocalSettings.Bench1Selected = radioButton1.Checked; Program.LocalSettings.Bench2Selected = radioButton2.Checked; Program.LocalSettings.Bench3Selected = radioButton3.Checked; Program.LocalSettings.Bench4Selected = radioButton4.Checked; Program.LocalSettings.Bench5Selected = radioButton5.Checked; Program.LocalSettings.Bench6Selected = radioButton6.Checked; Program.LocalSettings.Bench7Selected = radioButton7.Checked; Program.LocalSettings.Bench8Selected = radioButton8.Checked; Program.LocalSettings.Bench9Selected = radioButton9.Checked; Program.LocalSettings.Save(); } private void clearFiltersBtn_Click(object sender, EventArgs e) { filters.Clear(); filtersFlowLayoutPanel.Controls.Clear(); } private void addFilterBtn_Click(object sender, EventArgs e) { Forms.AddFilterDlg dlg = new Forms.AddFilterDlg(); if (dlg.ShowDialog() == DialogResult.OK && dlg.SelectedFilterID != null) { Filters.IFilter filter = Factory.GetFilter(dlg.SelectedFilterID); filters.Add(filter); filtersFlowLayoutPanel.Controls.Add(filter.GetFilterUI()); } } private void formatOfResultsBtn_Click(object sender, EventArgs e) { Results.Forms.ResultsConfigDlg dlg = new Results.Forms.ResultsConfigDlg(); dlg.MetersKind = Config.Entities.MetersKind.Single; dlg.SelectedItems = Results.WMeterRsltItemSpec.FromStrArray(filtersConfig.ResultItems); if (dlg.ShowDialog() == DialogResult.OK) { filtersConfig.ResultItems = Results.WMeterRsltItemSpec.ToStrArray(dlg.SelectedItems); RedrawResults(); } } private void printerConfigBtn_Click(object sender, EventArgs e) { Forms.PrinterConfigDlg dlg = new Forms.PrinterConfigDlg { PrinterClass = filtersConfig.PrinterClass, PrinterCfg = filtersConfig.PrinterCfg }; if (dlg.ShowDialog() == DialogResult.OK) { filtersConfig.PrinterClass = dlg.PrinterClass; filtersConfig.PrinterCfg = dlg.PrinterCfg; } } private void loadConfigBtn_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = string.Format("{0} (*.qry)|*.qry|{1} (*.*)|*.*", Strings.Query_files, Strings.All_files); if (dlg.ShowDialog() == DialogResult.OK) { LoadConfigFromFile(dlg.FileName); } } void LoadConfigFromFile(string fileName) { FiltersConfig localFiltersConfig = FiltersConfig.Load(fileName); if (localFiltersConfig != null) { filtersConfig = localFiltersConfig; filters.Clear(); filtersFlowLayoutPanel.Controls.Clear(); /// for (int i = 0; i < filtersConfig.FiltersCount; i++) { Filters.IFilter filter = Factory.LoadFilter(filtersConfig.FilterID[i], filtersConfig.FilterData[i]); filters.Add(filter); filtersFlowLayoutPanel.Controls.Add(filter.GetFilterUI()); } } Program.LocalSettings.LastConfigFileName = fileName; Program.LocalSettings.Save(); Text = string.Format("{0} ver.{1} ({2})", Strings.Results_Browser, Program.Version, Program.LocalSettings.LastConfigFileName); } private void saveConfigBtn_Click(object sender, EventArgs e) { if (filtersConfig.UpdateFromFilters(filters)) /// filtersConfig members related to filters { /// Save column widths of the ListView into filtersConfig members if (resultsListView.Columns.Count > 0) { filtersConfig.ResultsClmnWidths = new int[resultsListView.Columns.Count]; for (int i = 0; i < resultsListView.Columns.Count; i++) { filtersConfig.ResultsClmnWidths[i] = resultsListView.Columns[i].Width; } } /// Save the file SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = string.Format(OpenFileDlg_SaveFileDlg_Filter, Strings.Query_files, Strings.All_files); if (dlg.ShowDialog() == DialogResult.OK) { filtersConfig.Save(dlg.FileName); Program.LocalSettings.LastConfigFileName = dlg.FileName; Program.LocalSettings.Save(); Text = string.Format("{0} ver.{1} ({2})", Strings.Results_Browser, Program.Version, Program.LocalSettings.LastConfigFileName); } } } private void executeQueryBtn_Click(object sender, EventArgs e) { timePeriodStart = new DateTime(0); timePeriodEnd = new DateTime(0); try { foreach (var filter in filters) filter.UI2Data(); /// Update filter data waterMeters = null; IList waterMeters2; Results.DB.ConnectionString = radioButton1.Checked ? Program.LocalSettings.ConnectionString1 : (radioButton2.Checked ? Program.LocalSettings.ConnectionString2 : (radioButton3.Checked ? Program.LocalSettings.ConnectionString3 : (radioButton4.Checked ? Program.LocalSettings.ConnectionString4 : (radioButton5.Checked ? Program.LocalSettings.ConnectionString5 : (radioButton6.Checked ? Program.LocalSettings.ConnectionString6 : (radioButton7.Checked ? Program.LocalSettings.ConnectionString7 : (radioButton8.Checked ? Program.LocalSettings.ConnectionString8 : Program.LocalSettings.ConnectionString9))))))); ISession[] sessions = new ISession[] { Results.DB.CreateSession() }; foreach (var filter in filters) { if (filter is DateFilter) { timePeriodStart = (filter as DateFilter).From; timePeriodEnd = (filter as DateFilter).To; } waterMeters2 = filter.ExecuteQuery(sessions, waterMeters); waterMeters = waterMeters2; } } catch (Exception exc) { string message = exc.Message; if (exc.InnerException != null) message += string.Format("{0}Inner exception:{0}{1}", Environment.NewLine, exc.InnerException.Message); MessageBox.Show(message, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } RedrawResults(); } /// /// Displays obtained results as configured by result items in the ListView /// void RedrawResults() { IList items = Results.WMeterRsltItemSpec.FromStrArray(filtersConfig.ResultItems); resultsListView.Clear(); if (waterMeters == null || waterMeters.Count == 0 || items.Count == 0) return; try { for (int i = 0; i < items.Count; i++) { resultsListView.Columns.Add(items[i].Caption, (filtersConfig.ResultsClmnCount > i) ? filtersConfig.ResultsClmnWidths[i] : 70); } foreach (var wm in waterMeters) { ListViewItem lvi = null; foreach (var item in items) { /// Get text and strip color information string itemText = item.Print(wm); string[] texts = itemText.Split(new char[] { '|' }); if (texts.Length == 2) { itemText = texts[0]; } if (lvi == null) lvi = new ListViewItem(itemText); else lvi.SubItems.Add(itemText); } if (lvi != null) resultsListView.Items.Add(lvi); } } catch (Exception exc) { MessageBox.Show(exc.Message, Strings.Error_displaying_results, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } private void exportQueryResultsBtn_Click(object sender, EventArgs e) { IList items = Results.WMeterRsltItemSpec.FromStrArray(filtersConfig.ResultItems); if (waterMeters == null || waterMeters.Count == 0 || items.Count == 0) return; SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*"; if (dlg.ShowDialog() == DialogResult.OK) { try { using (TextWriter writer = new StreamWriter(dlg.FileName, false, System.Text.Encoding.UTF8)) { for (int i = 0; i < items.Count; i++) { writer.Write(items[i].Caption); if (i == items.Count - 1) writer.WriteLine(); /// New line after the last item else writer.Write(";"); /// Semicolon between two items } foreach (var wm in waterMeters) { for (int i = 0; i < items.Count; i++) { /// Get text and strip color information string itemText = items[i].Print(wm); string[] texts = itemText.Split(new char[] { '|' }); if (texts.Length == 2) { itemText = texts[0]; } writer.Write(itemText); if (i == items.Count - 1) writer.WriteLine(); /// New line after the last item else writer.Write(";"); /// Semicolon between two items } } } } catch (Exception exc) { MessageBox.Show(exc.Message, Strings.Error_exporting_results, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } private void printQueryResultsBtn_Click(object sender, EventArgs e) { if (waterMeters == null || waterMeters.Count == 0) return; #if MUNICH foreach (var wm in waterMeters) { new Results.Output.Printers.Munich.MunichPrintDocument(string.Format("4/13 - {0}", BenchName()), wm, Config.Entities.PageOrientation.Portrait).Print(); } #elif CEVAK_40 IList batches = new List(); foreach (var wm in waterMeters) { if (!batches.Contains(wm.Batch)) batches.Add(wm.Batch); } //foreach (var batch in batches) //{ // new Results.Output.Printers.Cevak.PrintDocumentCevak(batch, // Config.Entities.PageOrientation.Portrait, // 60, 60, 60, // "PT40 Z/E-35-A", // "0111-OOP-C035-13").Print(); //} #else if (string.IsNullOrEmpty(filtersConfig.PrinterClass)) { MessageBox.Show(Strings.No_printer_defined); return; } try { Config.Entities.Component cmpnt = new Config.Entities.Component(); cmpnt.Name = "printer"; cmpnt.ClassName = filtersConfig.PrinterClass; cmpnt.Parameters = filtersConfig.PrinterCfg; IComponentFactory printerFactory = GetFactory(filtersConfig.PrinterClass); IComponentCfg printerCfg = printerFactory.CmpntCfgFromCmpntEntity(cmpnt); IComponent component = printerFactory.GetComponent(printerCfg, tbfComponents); IResultsPrinter printer = component as IResultsPrinter; if (printer == null) { MessageBox.Show(Strings.No_printer_defined); return; } tbfComponents.Clear(); tbfDevices.Clear(); tbfComponents.Add(component); IDevice dev = component as IDevice; if (dev != null) { dev.Initialize(); tbfDevices.Add(dev); } /// Find batches IList batches = new List(); foreach (var wm in waterMeters) { if (!batches.Contains(wm.Batch)) batches.Add(wm.Batch); } foreach (var batch in batches) { IOperation printOp = printer.ProcessResultsOp(batch); printOp.Start(); while (printOp.Run() != Event.ResultsPrinted) { } printOp.Stop(); } MessageBox.Show(Strings.Printing_completed); } catch (Exception) { MessageBox.Show(Strings.Printing_failed); } #endif } private void statisticsBtn_Click(object sender, EventArgs e) { if (waterMeters == null || waterMeters.Count == 0) return; IList items = Results.WMeterRsltItemSpec.FromStrArray(filtersConfig.ResultItems); /// /// Statistics options /// Forms.StatisticsOptionsDlg optionsDlg = new Forms.StatisticsOptionsDlg(items); if (optionsDlg.ShowDialog() != DialogResult.OK) return; /// /// Calculate statistics /// Forms.StatisticsDlg statisticsDlg = new Forms.StatisticsDlg(waterMeters, optionsDlg, timePeriodStart, timePeriodEnd); statisticsDlg.ShowDialog(); } private void histogramBtn_Click(object sender, EventArgs e) { if (waterMeters == null || waterMeters.Count == 0) return; IList items = Results.WMeterRsltItemSpec.FromStrArray(filtersConfig.ResultItems); /// /// Histogram options /// Forms.HistogramOptionsDlg optionsDlg = new Forms.HistogramOptionsDlg(items); if (optionsDlg.ShowDialog() != DialogResult.OK) return; /// /// Calculate and display histograms /// Forms.HistogramDlg histogramDlg = new Forms.HistogramDlg(waterMeters, optionsDlg, "Histogramy"); histogramDlg.ShowDialog(); } /// /// Updates component factory /// /// Component class name /// Reference to a factory /// true when factory changed IComponentFactory GetFactory(string className) { if (!string.IsNullOrEmpty(className)) { foreach (var fac in TbfComponents.Factories) { if (fac.ClassName == className) return fac; } } return null; } private void customQueryButton_Click(object sender, EventArgs e) { #if IPERL Forms.CustomQuerySpecificationForm dlg = new Forms.CustomQuerySpecificationForm(); if (dlg.ShowDialog() != DialogResult.OK) return; /// dlg contains custom query specification now resultsListView.Visible = false; consoleTextBox.Visible = true; try { int counter; IList oraDatas = new List(); /// List of water meters IList testBenches = new List(); /// List of test benches used to produce water meters if (dlg.CQCriteria == CQCriteria.ListOfOrders || dlg.CQCriteria == CQCriteria.ListOfPcbNumbers || dlg.CQCriteria == CQCriteria.ProducedWithinTimePeriod) { string[] queryStrings = dlg.InputList.Split(new char[] { ',' }); //string[] queryStrings = new string[] { "3137300", "3137301", "3137302", "3137303" }; /// 14.2.2020 queryOrders=true 2500 meters //string[] queryStrings = new string[] { "505494150362", "505494151325", "505494150008", "505494150955", "505494152128" }; /// 18.2.2020 queryOrders=false //string[] queryStrings = new string[] { "3129109", "3129111", "3129113", "3129108", "3129110", "3129112", "3129114", "3129115", "3129107" }; /// 24.2.2020 queryOrders=true //string[] queryStrings = new string[] { "332491531667", "332491751060", "332491640866" }; /// /// Get list of water meters satisfying (custom) criteria /// consoleTextBox.Text += "Collecting water meters\r\n"; foreach (var queryParam in queryStrings) { oracleConnection = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;"); oracleConnection.Open(); OracleCommand cmd; if (dlg.CQCriteria == CQCriteria.ListOfOrders) { cmd = new OracleCommand("select VT_FERNUM, MAX_PRUEFINDEX, PREFIX, ZAEHLERNUMMER from VT_ZAEHLER_PD where AUFTRAGSNUMMER = :1 AND ANBID = 4 order by ZAEHLERNUMMER", oracleConnection); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = queryParam }); } else if (dlg.CQCriteria == CQCriteria.ListOfPcbNumbers) { cmd = new OracleCommand("select AUFTRAGSNUMMER, MAX_PRUEFINDEX, PREFIX, ZAEHLERNUMMER from VT_ZAEHLER_PD where VT_FERNUM = :1 AND ANBID = 4 order by ZAEHLERNUMMER", oracleConnection); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = queryParam }); } else if (dlg.CQCriteria == CQCriteria.ProducedWithinTimePeriod) { cmd = new OracleCommand("select VT_FERNUM, MAX_PRUEFINDEX, PREFIX, ZAEHLERNUMMER, AUFTRAGSNUMMER from VT_ZAEHLER_PD where ANBID = 4 and MARK_DATE >= :1 and MARK_DATE <= :2", oracleConnection); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.TimeStamp, Value = dlg.From }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.TimeStamp, Value = dlg.To }); } else { return; } OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { int i = 0; string queryResult; try { queryResult = dr.GetString(i++); } catch { queryResult = string.Empty; } int maxPruefIx = dr.GetInt32(i++); int testBenchId = maxPruefIx / 100; maxPruefIx = maxPruefIx % 100; string prefix; try { prefix = dr.GetString(i++); } catch { prefix = string.Empty; } int sn; try { sn = dr.GetInt32(i++); } catch { sn = -1; } if (sn == -1) continue; /// Create 'OraData' object and add it to 'oraDatas' list if (dlg.CQCriteria == CQCriteria.ListOfOrders) { /// query param. query result oraDatas.Add(new OraData() { PO = queryParam, PcbNr = queryResult, TestBenchId = testBenchId, MaxPruefIx = maxPruefIx, Prefix = prefix, SN = sn }); } else if (dlg.CQCriteria == CQCriteria.ListOfPcbNumbers) { /// query result query param. oraDatas.Add(new OraData() { PO = queryResult, PcbNr = queryParam, TestBenchId = testBenchId, MaxPruefIx = maxPruefIx, Prefix = prefix, SN = sn }); } else if (dlg.CQCriteria == CQCriteria.ProducedWithinTimePeriod) { string purchaseOrder2 = dr.GetString(i++); oraDatas.Add(new OraData() { PO = purchaseOrder2, PcbNr = queryResult, TestBenchId = testBenchId, MaxPruefIx = maxPruefIx, Prefix = prefix, SN = sn }); } else { /// This should never happen MessageBox.Show("Uppps"); return; } /// Add this test bench to the list of test benches if it was still missing if (!testBenches.Contains(testBenchId)) testBenches.Add(testBenchId); } dr.Close(); } consoleTextBox.Text += "End collecting water meters\r\n"; /// /// Get required information about each water meter /// consoleTextBox.Text += "Reading additional data from Oracle\r\n"; counter = 0; foreach (var oraD in oraDatas) { consoleTextBox.Text += string.Format("{0} ", ++counter); if (counter % 25 == 0) consoleTextBox.Text += Environment.NewLine; /// /// Read from VT_ZAEHLER_PINDEX_PD: TestId(ID_WZPRUEFREIHE)) /// OracleCommand cmd = new OracleCommand("select ID_WZPRUEFREIHE, WT_PLATZ_NR, HYDR_PRUEFUNG from VT_ZAEHLER_PINDEX_PD where VT_FERNUM = :1 AND PRUEFINDEX = :2 AND ANBID = 4 AND WZGUT = 1", oracleConnection); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = oraD.PcbNr }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = oraD.MaxPruefIx + 100 * oraD.TestBenchId }); OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { int i = 0; oraD.BatchNr = dr.GetInt32(i++); oraD.WMPosition = dr.GetInt32(i++); oraD.HydrPruefung = dr.GetInt32(i++); } dr.Close(); /// /// Read from VT_IP_ZAEHLER_PINDEX_PD: Q2CorrectionRl, Q2CorrectionLr /// cmd = new OracleCommand("select PRUEFINDEX, WITHQ2CORRECTION, ERRQ2, Q2CORRECTIONLEFT, Q2CORRECTIONRIGHT from VT_IP_ZAEHLER_PINDEX_PD where VT_FERNUM = :1 AND ANBID = 4", oracleConnection); /// pruefindex, Q2_correction_RL, Q2_correction_LR, Q2_error_before_correction cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = oraD.PcbNr }); dr = cmd.ExecuteReader(); while (dr.Read()) { int i = 0; int pruefindex = (dr.GetInt32(i++) % 100); if (pruefindex == oraD.MaxPruefIx) { oraD.Q2CorrectionDone = (dr.GetInt32(i++) != 0); oraD.Q2ErrBeforeCorrection = dr.GetDouble(i++); oraD.Q2CorrectionRl = dr.GetInt32(i++); oraD.Q2CorrectionLr = dr.GetInt32(i++); } } dr.Close(); /// /// Read data from VT_PRUEFREIHE_PD /// cmd = new OracleCommand("select ID_WZTYP, REV_WZTYP, STARTDATUMZEIT, ENDDATUMZEIT, PROGRAMMVERSION from VT_PRUEFREIHE_PD where ID_PRUEFSTAND = :1 AND ID_WzPruefreihe = :2 AND ANBID = 4", oracleConnection); cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 18000 + oraD.TestBenchId }); cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = oraD.BatchNr }); dr = cmd.ExecuteReader(); while (dr.Read()) { int i = 0; oraD.WMTypeId = dr.GetInt32(i++); oraD.WMTypeRev = dr.GetInt32(i++); oraD.Start = dr.GetDateTime(i++); oraD.End = dr.GetDateTime(i++); oraD.ProgramVer = dr.GetString(i++); } dr.Close(); /// /// Read data from VT_PRUEFREIHE_IST_PD /// /// testID, flow, rel.err., passed cmd = new OracleCommand("select PRUEFUNGSNR, Q_WZ, Q_FEHLER, Q_BEST from VT_PRUEFREIHE_IST_PD where VT_FERNUM = :1 AND PRUEFINDEX = :2 AND ANBID = 4", oracleConnection); cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = oraD.PcbNr }); cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 100 * oraD.TestBenchId + oraD.MaxPruefIx }); dr = cmd.ExecuteReader(); while (dr.Read()) { int i = 0; int testId = dr.GetInt32(i++); /// PRUEFUNGSNR double flow = dr.GetDouble(i++); /// Q_WZ double error = dr.GetDouble(i++); /// Q_FEHLER bool testPassed = (dr.GetInt32(i++) != 0); #if false /// SUEZ specific switch (testId) { case -2: oraD.AdjErrA4 = error; break; case -1: oraD.AdjErr = error; break; case 1: oraD.Q1LrErr = error; break; case 2: oraD.Q2acLrErr = error; break; case 3: oraD.Q2LrErr = error; break; case 5: oraD.Q3LrErr = error; break; case 6: oraD.Q1RlErr = error; break; case 7: oraD.Q2acRlErr = error; break; case 8: oraD.Q2RlErr = error; break; case 10: oraD.Q3RlErr = error; break; default: break; } #else /// DEWA specific switch (testId) { case -1: oraD.AdjErr = error; break; case 1: oraD.Q1Err = error; break; case 2: oraD.Q2Err = error; break; case 3: oraD.Q2AdjErr = error; break; case 4: oraD.Q3Err = error; break; case 5: oraD.Q4Err = error; break; default: break; } #endif } dr.Close(); } /// end of foreach (var oraD in OraDatas) consoleTextBox.Text += "End reading additional data from Oracle\r\n"; oracleConnection.Close(); } else if (dlg.CQCriteria == CQCriteria.BenchAndBatchNr) { switch (dlg.IntParameter) { #if LOCAL case 5: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr10-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 6: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr11-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 8: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr13-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 9: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr15-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 10: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr14-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 11: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr18-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 12: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr19-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 13: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr20-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 14: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr21-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; #else case 5: Results.DB.ConnectionString = "SERVER=10.42.129.253; DATABASE=st-wr10-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 6: Results.DB.ConnectionString = "SERVER=10.42.129.27; DATABASE=st-wr11-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 8: Results.DB.ConnectionString = "SERVER=10.42.128.138; DATABASE=st-wr13-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 9: Results.DB.ConnectionString = "SERVER=10.42.130.97; DATABASE=st-wr15-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 10: Results.DB.ConnectionString = "SERVER=10.42.128.146; DATABASE=st-wr14-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 11: Results.DB.ConnectionString = "SERVER=10.42.130.165; DATABASE=st-wr18-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 12: Results.DB.ConnectionString = "SERVER=10.42.128.159; DATABASE=st-wr19-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 13: Results.DB.ConnectionString = "SERVER=10.42.130.76; DATABASE=st-wr20-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 14: Results.DB.ConnectionString = "SERVER=10.42.128.150; DATABASE=st-wr21-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; #endif default: Results.DB.ConnectionString = string.Empty; break; } Results.DB.DbType = Users.Entities.DBType.MySql; string[] fields = dlg.InputList.Split(new char[] { ',' }); int[] batchNrs = new int[fields.Length]; int batchNr; for (int i = 0; i < batchNrs.Length; i++) if (int.TryParse(fields[i], out batchNr)) batchNrs[i] = batchNr; IList waterMeters = new List(); if (!string.IsNullOrEmpty(Results.DB.ConnectionString)) { ISession session = Results.DB.CreateSession(); for (int i = 0; i < batchNrs.Length; i++) { var batches = session.QueryOver() .Where(x => (x.BatchNr == batchNrs[i])) .List(); if (batches.Count == 1) { var wms = session.QueryOver() .Where(x => (x.Batch == batches[0])) .List(); foreach (var wm in wms) waterMeters.Add(wm); } } } consoleTextBox.Text += "Collecting water meters\r\n"; foreach (var waterMeter in waterMeters) { oracleConnection = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;"); oracleConnection.Open(); OracleCommand cmd = new OracleCommand("select AUFTRAGSNUMMER, MAX_PRUEFINDEX, PREFIX, ZAEHLERNUMMER from VT_ZAEHLER_PD where VT_FERNUM = :1 AND ANBID = 4 order by ZAEHLERNUMMER", oracleConnection); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = waterMeter.SerialNr }); OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { int i = 0; string queryResult = dr.GetString(i++); int maxPruefIx = dr.GetInt32(i++); int testBenchId = maxPruefIx / 100; maxPruefIx = maxPruefIx % 100; string prefix = dr.GetString(i++); int sn = dr.GetInt32(i++); if (sn == -1) continue; /// Create 'OraData' object and add it to 'oraDatas' list oraDatas.Add(new OraData() { PO = queryResult, PcbNr = waterMeter.SerialNr, TestBenchId = testBenchId, MaxPruefIx = maxPruefIx, Prefix = prefix, SN = sn }); /// Add this test bench to the list of test benches if it was still missing if (!testBenches.Contains(testBenchId)) testBenches.Add(testBenchId); } } } else if (dlg.CQCriteria == CQCriteria.WZTypeIdAndTimePeriod) { } else if (dlg.CQCriteria == CQCriteria.GetListOfUsedProcedures) { testBenches.Add(5); testBenches.Add(6); testBenches.Add(8); testBenches.Add(9); testBenches.Add(10); testBenches.Add(11); testBenches.Add(12); testBenches.Add(13); testBenches.Add(14); } else { MessageBox.Show("Query is not supported yet"); return; } consoleTextBox.Text += "Reading additional data from MySQL\r\n"; counter = 0; IList usedProcedures = new List(); foreach (var testBenchId in testBenches) { if (testBenchId == 4 || (dlg.CQCriteria == CQCriteria.BenchAndBatchNr && testBenchId != dlg.IntParameter)) { /// Skip WR9 or other test benches continue; } consoleTextBox.Text += string.Format("{0}\r\n", GetBenchName(testBenchId)); #if LOCAL /// Local database copies switch (testBenchId) { case 5: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr10-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 6: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr11-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 8: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr13-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 9: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr15-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 10: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr14-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 11: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr18-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 12: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr19-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 13: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr20-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; case 14: Results.DB.ConnectionString = "SERVER=localhost; DATABASE=st-wr21-r; UID=root; PASSWORD=kraken; CharSet=utf8;"; break; default: Results.DB.ConnectionString = string.Empty; break; } #else /// Test bench databases switch (testBenchId) { case 5: Results.DB.ConnectionString = "SERVER=10.42.129.253; DATABASE=st-wr10-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 6: Results.DB.ConnectionString = "SERVER=10.42.129.27; DATABASE=st-wr11-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 8: Results.DB.ConnectionString = "SERVER=10.42.128.138; DATABASE=st-wr13-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 9: Results.DB.ConnectionString = "SERVER=10.42.130.97; DATABASE=st-wr15-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 10: Results.DB.ConnectionString = "SERVER=10.42.128.146; DATABASE=st-wr14-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 11: Results.DB.ConnectionString = "SERVER=10.42.130.165; DATABASE=st-wr18-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 12: Results.DB.ConnectionString = "SERVER=10.42.128.159; DATABASE=st-wr19-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 13: Results.DB.ConnectionString = "SERVER=10.42.130.76; DATABASE=st-wr20-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; case 14: Results.DB.ConnectionString = "SERVER=10.42.128.150; DATABASE=st-wr21-r; UID=vysledky; PASSWORD=GAqx76QUB6NbnpZP; CharSet=utf8;"; break; default: Results.DB.ConnectionString = string.Empty; break; } #endif Results.DB.DbType = Users.Entities.DBType.MySql; if (!string.IsNullOrEmpty(Results.DB.ConnectionString)) { ISession session = null; if (dlg.CQCriteria == CQCriteria.GetListOfUsedProcedures) { session = Results.DB.CreateSession(); IList batches = session.QueryOver() .Where(x => x.StartTime >= dlg.From) .And(x => x.StartTime <= dlg.To) .List(); foreach (var b in batches) { if (!usedProcedures.Contains(b.ProcedureName)) { usedProcedures.Add(b.ProcedureName); consoleTextBox.Text += string.Format(" {0}{1}", b.ProcedureName, Environment.NewLine); } } } else { foreach (var oraD in oraDatas) { if (oraD.TestBenchId == testBenchId) { if (session == null) { /// The first water meter produced on this test bench => create a database session session = Results.DB.CreateSession(); } consoleTextBox.Text += string.Format("{0} ", ++counter); if (counter % 25 == 0) consoleTextBox.Text += "\r\n"; IList wms = session.QueryOver() .Where(x => x.SerialNr == oraD.PcbNr) .And(x => x.Passed) .List(); if (wms.Count == 1) { oraD.CalibFactor = (int)Math.Round(wms[0].CalibFactor); oraD.CalibFactorLNA = (int)Math.Round(wms[0].CalibFactorLNA); } else { foreach (var wm in wms) { if (wm.Batch.BatchNr == oraD.BatchNr) { oraD.CalibFactor = (int)Math.Round(wm.CalibFactor); oraD.CalibFactorLNA = (int)Math.Round(wm.CalibFactorLNA); break; } } } } } } consoleTextBox.Text += Environment.NewLine; if (session != null) session.Close(); } } consoleTextBox.Text += "End reading additional data from MySQL\r\n"; consoleTextBox.Text += "CSV data begin\r\n"; using (TextWriter writer = new StreamWriter(dlg.DestinationFile)) { #if false /// SUEZ writer.WriteLine(string.Format("PO; prefix; S/N; PcbNr; Bench; Batch; Start; Start; End; End; Pos; AdjA0; AdjA4; Q3RL; Q3LR; Q2RL; Q2LR; Q2acRL; Q2acLR; Q1RL; Q1LR; CalF; CAlF_LNA; HP; Q2cRL; Q2cLR")); //Console.WriteLine(string.Format("s/n;PCB nr.;bench;batch;position;Err. at 640 l/h;Err. LNA at 640 l/h;Err. Q3 RL;Err. Q3 LR;Cal.f.;Cal.f.LNA;Q2 corr.f. RL;Q2 corr.f. LR")); foreach (var oraD in oraDatas) { writer.WriteLine(string.Format("{0}; {1}; {2}; =(\"{3}\"); {4}; {5}; {7}; {8}; {9}; {10};{11};{12};{13};{14};{15};{16};{17};{18};{19};{20};{21};{22};{23};{24};{25};{26};{27};{28}", //Console.WriteLine(string.Format("{2};=(\"{3}\"); {4};{5};{11};{12};{13};{14};{15};{16};{17};{19};{20}", /* 0 */ oraD.PO, /* 1 */ oraD.Prefix, /* 2 */ oraD.SN, /* 3 */ oraD.PcbNr, /* 4 */ GetBenchName(oraD.TestBenchId), /* 5 */ oraD.BatchNr, /* 6 */ oraD.ProgramVer, /* 7 */ oraD.Start.ToShortDateString(), /* 8 */ oraD.Start.ToShortTimeString(), /* 9 */ oraD.End.ToShortDateString(), /* 10 */ oraD.End.ToShortTimeString(), /* 11 */ oraD.WMPosition, /* 12 */ oraD.AdjErr.ToString("F3"), /* 13 */ oraD.AdjErrA4.ToString("F3"), /* 14 */ oraD.Q3RlErr.ToString("F3"), /* 15 */ oraD.Q3LrErr.ToString("F3"), /* 16 */ oraD.Q2RlErr.ToString("F3"), /* 17 */ oraD.Q2LrErr.ToString("F3"), /* 18 */ oraD.Q2acRlErr.ToString("F3"), /* 19 */ oraD.Q2acLrErr.ToString("F3"), /* 20 */ oraD.Q1RlErr.ToString("F3"), /* 21 */ oraD.Q1LrErr.ToString("F3"), /* 22 */ oraD.CalibFactor, /* 23 */ oraD.CalibFactorLNA, /* 24 */ oraD.HydrPruefung, /* 25 */ oraD.Q2CorrectionRl, /* 26 */ oraD.Q2CorrectionLr, /* 27 */ oraD.WMTypeId, /* 28 */ oraD.WMTypeRev)); } #else /// DEWA writer.WriteLine(string.Format("PO; prefix; S/N; PcbNr; Bench; Batch; Start; Start; End; End; Pos; AdjA0; Q4; Q3; Q2Adj; Q2; Q1; CalF; HP; Q2cRL; Q2cLR")); //Console.WriteLine(string.Format("s/n;PCB nr.;bench;batch;position;Err. at 640 l/h;Err. LNA at 640 l/h;Err. Q3 RL;Err. Q3 LR;Cal.f.;Cal.f.LNA;Q2 corr.f. RL;Q2 corr.f. LR")); foreach (var oraD in oraDatas) { writer.WriteLine(string.Format("{0}; {1}; {2}; =(\"{3}\"); {4}; {5}; {7}; {8}; {9}; {10};{11};{12};{13};{14};{15};{16};{17};{18};{19};{20};{21}", //Console.WriteLine(string.Format("{2};=(\"{3}\"); {4};{5};{11};{12};{13};{14};{15};{16};{17};{19};{20}", /* 0 */ oraD.PO, /* 1 */ oraD.Prefix, /* 2 */ oraD.SN, /* 3 */ oraD.PcbNr, /* 4 */ GetBenchName(oraD.TestBenchId), /* 5 */ oraD.BatchNr, /* 6 */ oraD.ProgramVer, /* 7 */ oraD.Start.ToShortDateString(), /* 8 */ oraD.Start.ToShortTimeString(), /* 9 */ oraD.End.ToShortDateString(), /* 10 */ oraD.End.ToShortTimeString(), /* 11 */ oraD.WMPosition, /* 12 */ oraD.AdjErr.ToString("F3"), /* 13 */ oraD.Q4Err.ToString("F3"), /* 14 */ oraD.Q3Err.ToString("F3"), /* 15 */ oraD.Q2AdjErr.ToString("F3"), /* 16 */ oraD.Q2Err.ToString("F3"), /* 17 */ oraD.Q1Err.ToString("F3"), /* 18 */ oraD.CalibFactor, /* 19 */ oraD.HydrPruefung, /* 20 */ oraD.Q2CorrectionRl, /* 21 */ oraD.Q2CorrectionLr, /* 22 */ oraD.WMTypeId, /* 23 */ oraD.WMTypeRev)); } #endif } consoleTextBox.Text += "CSV data end\r\n"; MessageBox.Show(string.Format("Výsledky boli zapísané do súboru\r\n{0}", dlg.DestinationFile)); } catch (Exception exc) { MessageBox.Show(exc.Message); } #else MessageBox.Show("Not implemented"); #endif } string GetBenchName(int testBenchId) { switch (testBenchId) { case 4: return "WR9"; case 5: return "WR10"; case 6: return "WR11"; case 8: return "WR13"; case 9: return "WR15"; case 10: return "WR14"; case 11: return "WR18"; case 12: return "WR19"; case 13: return "WR20"; case 14: return "WR21"; default: return string.Empty; } } } }