/// /// 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 Results.Entities; namespace ResultsBrowser { public partial class MainWnd : Form { static readonly ILog log = LogManager.GetLogger(typeof(MainWnd)); bool batchesQueried; public static IList QueryBatches; public static IList QueryWaterMeters; public static IList ReportBatches; public static IList ReportWaterMeters; public IList ReportItems_Single; public IList ReportItems_Compound; public MainWnd() { InitializeComponent(); QueryBatches = new List(); QueryWaterMeters = new List(); ReportBatches = new List(); ReportWaterMeters = new List(); } private void MainWnd_Load(object sender, EventArgs e) { PrepareComboBoxHistory(Program.LocalSettings.PurchaseOrderHistory, purchaseOrderComboBox); PrepareComboBoxHistory(Program.LocalSettings.ProcedureHistory, procedureComboBox); PrepareComboBoxHistory(Program.LocalSettings.ReportFileNameHistory, reportFileComboBox); purchaseOrderComboBox.Text = Program.LocalSettings.LastPurchaseOrder; procedureComboBox.Text = Program.LocalSettings.LastProcedure; reportFileComboBox.Text = Program.LocalSettings.LastReportFileName; ReportItems_Single = Results.ItemSpec.FromStrArray(Program.LocalSettings.ReportItems_Single); ReportItems_Compound = Results.ItemSpec.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; Results.DB.ConnectionString = Program.LocalSettings.ConnectionString_WR10; } 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.LastPurchaseOrder = purchaseOrderComboBox.Text; Program.LocalSettings.LastProcedure = procedureComboBox.Text; Program.LocalSettings.LastReportFileName = reportFileComboBox.Text; Program.LocalSettings.ReportItems_Single = Results.ItemSpec.ToStrArray(ReportItems_Single); Program.LocalSettings.ReportItems_Compound = Results.ItemSpec.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() { RedrawQueryList(); RedrawReportList(); } void RedrawQueryList() { queryResultsListBox.Items.Clear(); if (batchesQueried) { foreach (var b in QueryBatches) queryResultsListBox.Items.Add(b.ToString()); } else { foreach (var wmr in QueryWaterMeters) queryResultsListBox.Items.Add(wmr); } int nrItems = queryResultsListBox.Items.Count; if (nrItems == 0) queryResultsListBox.Items.Add(""); queryResultsItemsLabel.Text = string.Format("{0} items", nrItems); } void RedrawReportList() { reportListBox.Items.Clear(); foreach (var wmr in ReportWaterMeters) reportListBox.Items.Add(wmr); int nrItems = reportListBox.Items.Count; if (nrItems == 0) reportListBox.Items.Add(""); reportItemsLabel.Text = string.Format("{0} items", nrItems); } /// /// 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 clearButton_Click(object sender, EventArgs e) { QueryWaterMeters.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 = Results.ItemSpec.ToStrArray(ReportItems_Single); Program.LocalSettings.ReportItems_Compound = Results.ItemSpec.ToStrArray(ReportItems_Compound); } } private void removeFromQueryButton_Click(object sender, EventArgs e) { try { /// 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--) { if (batchesQueried) { QueryBatches.RemoveAt(queryResultsListBox.SelectedIndices[i]); } else { QueryWaterMeters.RemoveAt(queryResultsListBox.SelectedIndices[i]); } } RedrawLists(); } catch { MessageBox.Show("Something strange happened", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } 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--) { ReportWaterMeters.RemoveAt(reportListBox.SelectedIndices[i]); } RedrawLists(); } private void addToReportButton_Click(object sender, EventArgs e) { if (batchesQueried) { foreach (var b in QueryBatches) { foreach (var wm in b.WaterMeters) ReportWaterMeters.Add(wm); } } else { foreach (var wm in QueryWaterMeters) { if (!ReportWaterMeters.Contains(wm)) ReportWaterMeters.Add(wm); } } 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 (ReportWaterMeters.Count == 0) return; /// Oracle database connection OracleConnection conn = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;"); try { conn.Open(); for (int i = 0; i < ReportWaterMeters.Count; i++) { Results.Entities.WaterMeter wm = ReportWaterMeters[i]; IList serialNrExes = new List(); { OracleParameter parm = new OracleParameter(); parm.OracleDbType = OracleDbType.Varchar2; parm.Value = wm.SerialNr; /// PCB Nr. OracleCommand cmd1 = new OracleCommand("SELECT Zaehlernummer, Auftragsnummer 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); wm.PurchaseOrder = dr.GetString(1); } dr.Close(); } } 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 } /// /// Create ASC file in R.Uhlik format /// /// /// 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; } using (TextWriter report = new StreamWriter(reportFileComboBox.Text, true)) { foreach (var wm in ReportWaterMeters) { 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.GetTestRslt("Q1") != null ? wm.GetTestRslt("Q1").Qfrom() : 0)).ToString("F0")); /// Q1 nominal sb.Append(';'); sb.Append((1000 * (wm.GetTestRslt("Q2") != null ? wm.GetTestRslt("Q2").Qfrom() : 0)).ToString("F0")); /// Q2 nominal sb.Append(';'); sb.Append((1000 * (wm.GetTestRslt("Q3") != null ? wm.GetTestRslt("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.GetMeterTestRslt("Q1") != null ? wm.GetMeterTestRslt("Q1").Error : 99).ToString("F1")); /// Q1 Error [%] sb.Append(';'); sb.Append((wm.GetMeterTestRslt("Q2") != null ? wm.GetMeterTestRslt("Q2").Error : 99).ToString("F1")); /// Q2 Error [%] sb.Append(';'); sb.Append((wm.GetMeterTestRslt("Q3") != null ? wm.GetMeterTestRslt("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 ReportWaterMeters) { 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.GetTestRslt("q3") != null ? wm.GetTestRslt("q3").Qto() : 0)).ToString("F0")); /// Q3 nominal sb.Append(';'); sb.Append((wm.GetMeterTestRslt("adjustment") != null ? wm.GetMeterTestRslt("adjustment").Error : 99).ToString("F2"));/// Adjustment Error [%] sb.Append(';'); sb.Append((wm.GetMeterTestRslt("q3") != null ? wm.GetMeterTestRslt("q1").Error : 99).ToString("F2")); /// Q1 Error [%] sb.Append(';'); sb.Append((wm.GetMeterTestRslt("q2") != null ? wm.GetMeterTestRslt("q2").Error : 99).ToString("F2")); /// Q2 Error [%] sb.Append(';'); sb.Append((wm.GetMeterTestRslt("q1") != null ? wm.GetMeterTestRslt("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); } private void configButton_Click(object sender, EventArgs e) { if ((new Forms.DatabaseSettings()).ShowDialog() == DialogResult.OK) { Results.DB.ConnectionString = Program.LocalSettings.ConnectionString_WR10; } } private void queryBatchesButton_Click(object sender, EventArgs e) { if (!purchaseOrderCheckBox.Checked && !procedureCheckBox.Checked && !filterDateCheckBox.Checked && !batchNrCheckBox.Checked) { return; } queryResultsListBox.Items.Clear(); try { ISession session = Results.DB.CreateSession(); IList batches; if (filterDateCheckBox.Checked) { batches = session.QueryOver() .WhereRestrictionOn(x => x.EndTime) .IsBetween(fromDateTimePicker.Value.Date) .And(toDateTimePicker.Value.Date.AddDays(1).AddTicks(-1)) //.OrderBy(x => x.BatchNr).Asc .List(); } else { batches = session.QueryOver() .List(); } if (procedureCheckBox.Checked) { IList batches2 = new List(); foreach (var b in batches) { if (b.ProcedureName.Equals(procedureComboBox.Text)) batches2.Add(b); } batches = batches2; } if (purchaseOrderCheckBox.Checked) { IList batches3 = new List(); foreach (var b in batches) { if (b.WaterMeters[0].PurchaseOrder.Equals(purchaseOrderComboBox.Text)) batches3.Add(b); } batches = batches3; } QueryBatches = batches; batchesQueried = true; RedrawQueryList(); /// } catch (Exception exc) { MessageBox.Show(exc.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void queryWatermetersButton_Click(object sender, EventArgs e) { if (!purchaseOrderCheckBox.Checked && !procedureCheckBox.Checked && !filterDateCheckBox.Checked && !batchNrCheckBox.Checked) { return; } queryResultsListBox.Items.Clear(); try { bool purchaseOrderFiltered = false; bool procedureFiltered = false; ISession session = Results.DB.CreateSession(); IList waterMeters; if (filterDateCheckBox.Checked) { IList batches = session.QueryOver() .WhereRestrictionOn(x => x.EndTime) .IsBetween(fromDateTimePicker.Value.Date) .And(toDateTimePicker.Value.Date.AddDays(1).AddTicks(-1)) //.OrderBy(x => x.BatchNr).Asc .List(); waterMeters = new List(); foreach (var b in batches) { foreach (var wm in b.WaterMeters) waterMeters.Add(wm); } } else if (purchaseOrderCheckBox.Checked) { waterMeters = session.QueryOver() .Where(x => (x.PurchaseOrder == purchaseOrderCheckBox.Text)) .List(); purchaseOrderFiltered = true; } else if (procedureCheckBox.Checked && !procedureFiltered) { waterMeters = session.QueryOver() .Where(x => (x.Batch.ProcedureName == procedureComboBox.Text)) .List(); procedureFiltered = true; } else { waterMeters = session.QueryOver().List(); } if (purchaseOrderCheckBox.Checked && !purchaseOrderFiltered) { IList waterMeters3 = new List(); foreach (var wm in waterMeters) { if (wm.PurchaseOrder.Equals(purchaseOrderComboBox.Text)) waterMeters3.Add(wm); } waterMeters = waterMeters3; purchaseOrderFiltered = true; } if (procedureCheckBox.Checked && !procedureFiltered) { IList waterMeters2 = new List(); foreach (var wm in waterMeters) { if (wm.Batch.ProcedureName.Equals(procedureComboBox.Text)) waterMeters2.Add(wm); } waterMeters = waterMeters2; procedureFiltered = true; } QueryWaterMeters = waterMeters; batchesQueried = false; RedrawQueryList(); } catch (Exception exc) { MessageBox.Show(exc.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void queryResultsListBox_DoubleClick(object sender, EventArgs e) { } private void reportListBox_DoubleClick(object sender, EventArgs e) { } } }