tbf/ResultsBrowser/MainWnd.cs

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(Database.Procedures);
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);
}
}
}