477 lines
18 KiB
C#
477 lines
18 KiB
C#
///
|
|
/// 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<ResultItemSpec> ReportItems_Single;
|
|
public IList<ResultItemSpec> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load Purchase order combo box items from the LocalSettings PurchaseOrderHistory array
|
|
/// </summary>
|
|
/// <param name="comboBox">Puchase order ComboBox</param>
|
|
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(DBKind.Config);
|
|
|
|
IList<TestResult> testResults;
|
|
IList<TestResult> 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<TestResult>();
|
|
for (int batch = from; batch <= to; batch++)
|
|
{
|
|
IQueryOver<TestResult> qo = session.QueryOver<TestResult>().Where(x => (x.BatchNr == batch));
|
|
//if (procedureCheckBox.Checked) qo = qo.Where(x => (x.ProcedureName == "IPRT02AB - MI120 - Q2s"));
|
|
partialTestResults = qo.List<TestResult>();
|
|
|
|
foreach (var tr in partialTestResults) testResults.Add(tr);
|
|
}
|
|
}
|
|
}
|
|
else if (procedureCheckBox.Checked)
|
|
{
|
|
if (filterDateCheckBox.Checked)
|
|
{
|
|
if (purchaseOrderCheckBox.Checked)
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.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<TestResult>();
|
|
}
|
|
else
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.WhereRestrictionOn(x => x.TimeStart)
|
|
.IsBetween(fromDateTimePicker.Value)
|
|
.And(toDateTimePicker.Value)
|
|
.Where(x => (x.ProcedureName == procedureComboBox.Text))
|
|
.OrderBy(x => x.BatchNr).Desc
|
|
.List<TestResult>();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (purchaseOrderCheckBox.Checked)
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text))
|
|
.Where(x => (x.ProcedureName == procedureComboBox.Text))
|
|
.OrderBy(x => x.BatchNr).Desc
|
|
.List<TestResult>();
|
|
}
|
|
else
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.Where(x => (x.ProcedureName == procedureComboBox.Text))
|
|
.OrderBy(x => x.BatchNr).Desc
|
|
.List<TestResult>();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!purchaseOrderCheckBox.Checked)
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.WhereRestrictionOn(x => x.TimeStart)
|
|
.IsBetween(fromDateTimePicker.Value)
|
|
.And(toDateTimePicker.Value)
|
|
.OrderBy(x => x.BatchNr).Desc
|
|
.List<TestResult>();
|
|
}
|
|
else if (!filterDateCheckBox.Checked)
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text))
|
|
.OrderBy(x => x.BatchNr).Desc
|
|
.List<TestResult>();
|
|
}
|
|
else
|
|
{
|
|
testResults = session.QueryOver<TestResult>()
|
|
.WhereRestrictionOn(x => x.TimeStart)
|
|
.IsBetween(fromDateTimePicker.Value)
|
|
.And(toDateTimePicker.Value)
|
|
.Where(x => (x.PurchaseOrder == purchaseOrderComboBox.Text))
|
|
.OrderBy(x => x.BatchNr).Desc
|
|
.List<TestResult>();
|
|
}
|
|
}
|
|
|
|
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<int> serialNrExes = new List<int>();
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|