/// /// Copyright (c) 2015 Sensus Metering Systems /// using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Windows.Forms; using log4net; using NHibernate; using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider using Oracle.DataAccess.Types; using Config; using Config.Entities; namespace ResultsBrowser { public partial class MainWnd : Form { static readonly ILog log = LogManager.GetLogger(typeof(MainWnd)); public IList ReportItems_Single; public IList ReportItems_Compound; public MainWnd() { InitializeComponent(); } private void MainWnd_Load(object sender, EventArgs e) { PrepareComboBoxHistory(Program.LocalSettings.PurchaseOrderHistory, purchaseOrderComboBox); PrepareComboBoxHistory(Program.LocalSettings.ProcedureHistory, procedureComboBox); PrepareComboBoxHistory(Program.LocalSettings.ReportFileNameHistory, reportFileComboBox); ReportItems_Single = ResultItemSpec.FromStrArray(Program.LocalSettings.ReportItems_Single); ReportItems_Compound = ResultItemSpec.FromStrArray(Program.LocalSettings.ReportItems_Compound); purchaseOrderCheckBox.Checked = Program.LocalSettings.FilterPurchaseOrder; procedureCheckBox.Checked = Program.LocalSettings.FilterProcedure; batchNrCheckBox.Checked = Program.LocalSettings.FilterBatchNr; filterDateCheckBox.Checked = Program.LocalSettings.FilterDate; resolveManuallyCheckBox.Checked = Program.LocalSettings.ResolveManually; batchNrFromTextBox.Text = Program.LocalSettings.BatchFrom; batchNrToTextBox.Text = Program.LocalSettings.BatchTo; } private void MainWnd_FormClosing(object sender, FormClosingEventArgs e) { Program.LocalSettings.UpdateHistory(purchaseOrderComboBox.Text, ref Program.LocalSettings.PurchaseOrderHistory); Program.LocalSettings.UpdateHistory(procedureComboBox.Text, ref Program.LocalSettings.PurchaseOrderHistory); Program.LocalSettings.UpdateHistory(reportFileComboBox.Text, ref Program.LocalSettings.ReportFileNameHistory); Program.LocalSettings.ReportItems_Single = ResultItemSpec.ToStrArray(ReportItems_Single); Program.LocalSettings.ReportItems_Compound = ResultItemSpec.ToStrArray(ReportItems_Compound); Program.LocalSettings.FilterPurchaseOrder = purchaseOrderCheckBox.Checked; Program.LocalSettings.FilterProcedure = procedureCheckBox.Checked; Program.LocalSettings.FilterBatchNr = batchNrCheckBox.Checked; Program.LocalSettings.FilterDate = filterDateCheckBox.Checked; Program.LocalSettings.BatchFrom = batchNrFromTextBox.Text; Program.LocalSettings.BatchTo = batchNrToTextBox.Text; Program.LocalSettings.ResolveManually = resolveManuallyCheckBox.Checked; Program.LocalSettings.Save(); } void RedrawLists() { queryResultsListBox.Items.Clear(); foreach (var wmr in DataDeposit.QueryWaterMeterResults) queryResultsListBox.Items.Add(wmr); reportListBox.Items.Clear(); foreach (var wmr in DataDeposit.ReportWaterMeterResults) reportListBox.Items.Add(wmr); } /// /// Load Purchase order combo box items from the LocalSettings PurchaseOrderHistory array /// /// Puchase order ComboBox void PrepareComboBoxHistory(string[] history, ComboBox comboBox) { if (history == null || history.Length == 0) return; for (int i = 0; i < history.Length; i++) comboBox.Items.Add(history[i]); if (comboBox.Items.Count > 0) comboBox.Text = comboBox.Items[0].ToString(); } private void filterDateCheckBox_CheckedChanged(object sender, EventArgs e) { fromDateTimePicker.Enabled = toDateTimePicker.Enabled = filterDateCheckBox.Checked; } private void purchaseOrderCheckBox_CheckedChanged(object sender, EventArgs e) { purchaseOrderComboBox.Enabled = purchaseOrderCheckBox.Checked; } private void procedureCheckBox_CheckedChanged(object sender, EventArgs e) { procedureComboBox.Enabled = procedureCheckBox.Checked; } private void queryButton_Click(object sender, EventArgs e) { if (!purchaseOrderCheckBox.Checked && !procedureCheckBox.Checked && !filterDateCheckBox.Checked && !batchNrCheckBox.Checked) { return; } try { ISession session = FluentCommon.CreateSession(Database.Procedures); IList testResults; IList partialTestResults; if (batchNrCheckBox.Checked) { int from, to; if (!int.TryParse(batchNrFromTextBox.Text, out from) || !int.TryParse(batchNrToTextBox.Text, out to) || from > to) { MessageBox.Show("Please check 'From' and 'To' values", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { testResults = new List(); for (int batch = from; batch <= to; batch++) { IQueryOver qo = session.QueryOver().Where(x => (x.BatchNr == batch)); //if (procedureCheckBox.Checked) qo = qo.Where(x => (x.ProcedureName == "IPRT02AB - MI120 - Q2s")); partialTestResults = qo.List(); foreach (var tr in partialTestResults) testResults.Add(tr); } } } else if (procedureCheckBox.Checked) { if (filterDateCheckBox.Checked) { if (purchaseOrderCheckBox.Checked) { testResults = session.QueryOver() .WhereRestrictionOn(x => x.TimeStart) .IsBetween(fromDateTimePicker.Value) .And(toDateTimePicker.Value) .Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text)) .Where(x => (x.ProcedureName == procedureComboBox.Text)) .OrderBy(x => x.BatchNr).Desc .List(); } else { testResults = session.QueryOver() .WhereRestrictionOn(x => x.TimeStart) .IsBetween(fromDateTimePicker.Value) .And(toDateTimePicker.Value) .Where(x => (x.ProcedureName == procedureComboBox.Text)) .OrderBy(x => x.BatchNr).Desc .List(); } } else { if (purchaseOrderCheckBox.Checked) { testResults = session.QueryOver() .Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text)) .Where(x => (x.ProcedureName == procedureComboBox.Text)) .OrderBy(x => x.BatchNr).Desc .List(); } else { testResults = session.QueryOver() .Where(x => (x.ProcedureName == procedureComboBox.Text)) .OrderBy(x => x.BatchNr).Desc .List(); } } } else { if (!purchaseOrderCheckBox.Checked) { testResults = session.QueryOver() .WhereRestrictionOn(x => x.TimeStart) .IsBetween(fromDateTimePicker.Value) .And(toDateTimePicker.Value) .OrderBy(x => x.BatchNr).Desc .List(); } else if (!filterDateCheckBox.Checked) { testResults = session.QueryOver() .Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text)) .OrderBy(x => x.BatchNr).Desc .List(); } else { testResults = session.QueryOver() .WhereRestrictionOn(x => x.TimeStart) .IsBetween(fromDateTimePicker.Value) .And(toDateTimePicker.Value) .Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text)) .OrderBy(x => x.BatchNr).Desc .List(); } } DataDeposit.ProcessQueryTestResults(testResults, resolveManuallyCheckBox.Checked); int cnt = 1; foreach (var wm in DataDeposit.QueryWaterMeterResults) { queryResultsListBox.Items.Add(cnt.ToString() + " " + wm.ToString()); cnt++; } } catch (Exception exc) { MessageBox.Show(exc.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void clearButton_Click(object sender, EventArgs e) { DataDeposit.QueryWaterMeterResults.Clear(); queryResultsListBox.Items.Clear(); } private void configReportButton_Click(object sender, EventArgs e) { Forms.ResultsConfig dlg = new Forms.ResultsConfig(false); dlg.ReportItems_Single = ReportItems_Single; dlg.ReportItems_Compound = ReportItems_Compound; if (DialogResult.OK == dlg.ShowDialog()) { ReportItems_Single = dlg.ReportItems_Single; ReportItems_Compound = dlg.ReportItems_Compound; Program.LocalSettings.ReportItems_Single = ResultItemSpec.ToStrArray(ReportItems_Single); Program.LocalSettings.ReportItems_Compound = ResultItemSpec.ToStrArray(ReportItems_Compound); } } private void removeFromQueryButton_Click(object sender, EventArgs e) { /// Remove from the list (the last selected item first so that the indexes are not affected) for (int i = queryResultsListBox.SelectedIndices.Count - 1; i >= 0; i--) { DataDeposit.QueryWaterMeterResults.RemoveAt(queryResultsListBox.SelectedIndices[i]); } RedrawLists(); } private void removeFromReportButton_Click(object sender, EventArgs e) { /// Remove from the list (the last selected item first so that the indexes are not affected) for (int i = reportListBox.SelectedIndices.Count - 1; i >= 0; i--) { DataDeposit.ReportWaterMeterResults.RemoveAt(reportListBox.SelectedIndices[i]); } RedrawLists(); } private void addToReportButton_Click(object sender, EventArgs e) { DataDeposit.AddQueryToReport(); RedrawLists(); } private void browseFileButton_Click(object sender, EventArgs e) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Title = "Target file"; if (dlg.ShowDialog() == DialogResult.OK) { reportFileComboBox.Text = dlg.FileName; } } private void addOracleDataButton_Click(object sender, EventArgs e) { #if IPERLST if (DataDeposit.ReportWaterMeterResults.Count == 0) return; const int Step = 100; for (int i = 0; i < DataDeposit.ReportWaterMeterResults.Count; i += Step) { try { /// Oracle database connection OracleConnection conn = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;"); conn.Open(); for (int j = i; j < Math.Min(j + Step, DataDeposit.ReportWaterMeterResults.Count); j++) { Results.Entities.WaterMeter wm = DataDeposit.ReportWaterMeterResults[j]; IList serialNrExes = new List(); { OracleParameter parm = new OracleParameter(); parm.OracleDbType = OracleDbType.Varchar2; parm.Value = wm.SerialNr; /// PCB Nr. OracleCommand cmd1 = new OracleCommand("SELECT Zaehlernummer FROM VT_ZAEHLER_PD WHERE VT_Fernum = :1 AND ANBID = 4", conn); cmd1.Parameters.Add(parm); OracleDataReader dr = cmd1.ExecuteReader(); if (dr.Read()) { wm.SerialNrEx = dr.GetInt32(0); } } } conn.Close(); } catch (Exception exc) { MessageBox.Show(string.Format("Error when querying Oracle database:\r\n{0}", exc.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); RedrawLists(); return; } } RedrawLists(); #endif } private void makeAscFileButton_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(reportFileComboBox.Text)) { MessageBox.Show("No report file selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (ReportItems_Single == null || ReportItems_Single.Count == 0) { MessageBox.Show("Please, configure the report first", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } Forms.AdditionalDataDlg dlg = new Forms.AdditionalDataDlg(); if (dlg.ShowDialog() == DialogResult.OK) { foreach (var wm in DataDeposit.ReportWaterMeterResults) { /// TODO: Rewrite //wm.Type = dlg.Type; //wm.ApprovalInfo() = dlg.TypeApproval; //wm.MetrologicalClass = dlg.MetrologicalClass; } } using (TextWriter report = new StreamWriter(reportFileComboBox.Text, true)) { foreach (var wm in DataDeposit.ReportWaterMeterResults) { try { StringBuilder sb = new StringBuilder(); #if IPERLST sb.Append(wm.SerialNrEx); #else sb.Append(wm.SerialNr); #endif sb.Append(';'); sb.Append(wm.ProductName()); sb.Append(';'); sb.Append(wm.ApprovalInfo()); sb.Append(';'); sb.Append(wm.MetrologicalClass()); sb.Append(';'); sb.Append("0"); sb.Append(';'); sb.Append((1000 * (wm.TestRslt("q1") != null ? wm.TestRslt("q1").Qfrom() : 0)).ToString("F0")); /// Q1 nominal sb.Append(';'); sb.Append((1000 * (wm.TestRslt("q2") != null ? wm.TestRslt("q2").Qfrom() : 0)).ToString("F0")); /// Q2 nominal sb.Append(';'); sb.Append((1000 * (wm.TestRslt("q3") != null ? wm.TestRslt("q3").Qto() : 0)).ToString("F0")); /// Q3 nominal sb.Append(';'); sb.Append("0"); /// Q4 nominal sb.Append(';'); sb.Append("6"); /// Worker code sb.Append(';'); sb.Append(ToShortStr(wm.EndTime())); sb.Append(';'); sb.Append((wm.MeterTestRslt("q1") != null ? wm.MeterTestRslt("q1").Error : 99).ToString("F1")); /// Q1 Error [%] sb.Append(';'); sb.Append((wm.MeterTestRslt("q2") != null ? wm.MeterTestRslt("q2").Error : 99).ToString("F1")); /// Q2 Error [%] sb.Append(';'); sb.Append((wm.MeterTestRslt("q3") != null ? wm.MeterTestRslt("q3").Error : 99).ToString("F1")); /// Q3 Error [%] sb.Append(';'); sb.Append("0"); /// Q4 Error [%] sb.Append(';'); sb.Append(wm.BenchId().ToString()); /// sb.Append(';'); sb.Append(wm.PurchaseOrder); sb.Append(';'); sb.Append(""); sb.Append(';'); sb.Append("10000"); sb.Append(';'); sb.Append(wm.ProcedureName().Substring(0, 8)); sb.Append(";\""); sb.Append(wm.SerialNr); sb.Append('"'); report.WriteLine(sb); } catch (Exception exc) { string msg = exc.Message; } } } MessageBox.Show("Report saved", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); } static string ToShortStr(DateTime date) { return (((date.Year % 100) * 100 + date.Month) * 100 + date.Day).ToString(); } private void makeReportButton_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(reportFileComboBox.Text)) { MessageBox.Show("No report file selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (ReportItems_Single == null || ReportItems_Single.Count == 0) { MessageBox.Show("Please, configure the report first", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } using (TextWriter report = new StreamWriter(reportFileComboBox.Text, true)) { foreach (var wm in DataDeposit.ReportWaterMeterResults) { try { StringBuilder sb = new StringBuilder(); #if IPERLST sb.Append(wm.SerialNrEx); #else sb.Append(wm.SerialNr); #endif sb.Append(";\""); sb.Append(wm.SerialNr); sb.Append('"'); /// PCB number sb.Append(";\""); sb.Append(wm.ProcedureName()); sb.Append('"'); /// Procedure name sb.Append(';'); sb.Append((1000 * (wm.TestRslt("q3") != null ? wm.TestRslt("q3").Qto() : 0)).ToString("F0")); /// Q3 nominal sb.Append(';'); sb.Append((wm.MeterTestRslt("adjustment") != null ? wm.MeterTestRslt("adjustment").Error : 99).ToString("F2"));/// Adjustment Error [%] sb.Append(';'); sb.Append((wm.MeterTestRslt("q3") != null ? wm.MeterTestRslt("q1").Error : 99).ToString("F2")); /// Q1 Error [%] sb.Append(';'); sb.Append((wm.MeterTestRslt("q2") != null ? wm.MeterTestRslt("q2").Error : 99).ToString("F2")); /// Q2 Error [%] sb.Append(';'); sb.Append((wm.MeterTestRslt("q1") != null ? wm.MeterTestRslt("q3").Error : 99).ToString("F2")); /// Q3 Error [%] sb.Append(';'); sb.Append(wm.StartTime().ToShortTimeString()); sb.Append(';'); sb.Append(wm.EndTime().ToShortTimeString()); report.WriteLine(sb); } catch (Exception exc) { string msg = exc.Message; } } } MessageBox.Show("Report saved", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }