tbf/ResultsBrowser/RBrowserWnd.cs
2016-06-02 23:10:13 +02:00

628 lines
21 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 Results.Entities;
namespace ResultsBrowser
{
public partial class RBrowserWnd : Form
{
static readonly ILog log = LogManager.GetLogger(typeof(RBrowserWnd));
bool batchesQueried;
public static IList<Batch> QueryBatches;
public static IList<WaterMeter> QueryWaterMeters;
public static IList<Batch> ReportBatches;
public static IList<WaterMeter> ReportWaterMeters;
public IList<Results.ItemSpec> ReportItems_Single;
public IList<Results.ItemSpec> ReportItems_Compound;
int batchFrom;
int batchTo;
public RBrowserWnd()
{
InitializeComponent();
QueryBatches = new List<Batch>();
QueryWaterMeters = new List<WaterMeter>();
ReportBatches = new List<Batch>();
ReportWaterMeters = new List<WaterMeter>();
}
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;
batchNrFromTextBox.Text = Program.LocalSettings.BatchFrom;
batchNrToTextBox.Text = Program.LocalSettings.BatchTo;
Results.DB.ConnectionString = Program.LocalSettings.ConnectionString1;
UpdateRadioButtons();
radioButton1.Checked = true;
radioButton2.Checked = false;
radioButton3.Checked = false;
}
void UpdateRadioButtons()
{
if (string.IsNullOrEmpty(Program.LocalSettings.Bench1))
{
radioButton1.Visible = false;
}
else
{
radioButton1.Visible = true;
radioButton1.Text = Program.LocalSettings.Bench1;
}
if (string.IsNullOrEmpty(Program.LocalSettings.Bench2))
{
radioButton2.Visible = false;
}
else
{
radioButton2.Visible = true;
radioButton2.Text = Program.LocalSettings.Bench1;
}
if (string.IsNullOrEmpty(Program.LocalSettings.Bench3))
{
radioButton3.Visible = false;
}
else
{
radioButton3.Visible = true;
radioButton3.Text = Program.LocalSettings.Bench1;
}
}
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.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("<empty>");
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("<empty>");
reportItemsLabel.Text = string.Format("{0} items", nrItems);
}
/// <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 bool ParseAllFields()
{
try
{
if (batchNrCheckBox.Checked)
{
batchFrom = int.Parse(batchNrFromTextBox.Text);
batchTo = int.Parse(batchNrToTextBox.Text);
if (batchFrom < 0) throw new Exception("Batch numbers: from < 0 !");
if (batchTo < batchFrom) throw new Exception("Batch numbers: from > to !");
}
return true;
}
catch (Exception e)
{
MessageBox.Show(string.Format("{0}", e.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
}
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;
}
}
/// <summary>
/// Create ASC file in R.Uhlik format
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
sb.Append(wm.SerialNr);
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();
sb.Append(wm.SerialNr);
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.DatabaseSettingsDlg()).ShowDialog() == DialogResult.OK)
{
Results.DB.ConnectionString = Program.LocalSettings.ConnectionString1;
radioButton1.Text = Program.LocalSettings.Bench1;
radioButton2.Text = Program.LocalSettings.Bench2;
radioButton3.Text = Program.LocalSettings.Bench3;
}
}
private void queryBatchesButton_Click(object sender, EventArgs e)
{
if (!ParseAllFields())
{
MessageBox.Show("Something's wrong", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
if (!purchaseOrderCheckBox.Checked && !procedureCheckBox.Checked &&
!filterDateCheckBox.Checked && !batchNrCheckBox.Checked)
{
MessageBox.Show("At least one filter must be on", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
queryResultsListBox.Items.Clear();
try
{
ISession session = Results.DB.CreateSession();
IList<Batch> batches;
if (filterDateCheckBox.Checked)
{
batches = session.QueryOver<Batch>()
.WhereRestrictionOn(x => x.EndTime)
.IsBetween(fromDateTimePicker.Value.Date)
.And(toDateTimePicker.Value.Date.AddDays(1).AddTicks(-1))
//.OrderBy(x => x.BatchNr).Asc
.List<Batch>();
}
else if (batchNrCheckBox.Checked)
{
batches = session.QueryOver<Batch>()
.WhereRestrictionOn(x => x.BatchNr)
.IsBetween(batchFrom).And(batchTo)
.List<Batch>();
}
else
{
batches = new List<Batch>();
}
//if (procedureCheckBox.Checked)
//{
// IList<Batch> batches2 = new List<Batch>();
// foreach (var b in batches)
// {
// if (b.ProcedureName.Equals(procedureComboBox.Text)) batches2.Add(b);
// }
// batches = batches2;
//}
//if (purchaseOrderCheckBox.Checked)
//{
// IList<Batch> batches3 = new List<Batch>();
// 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<WaterMeter> waterMeters;
if (filterDateCheckBox.Checked)
{
IList<Batch> batches = session.QueryOver<Batch>()
.WhereRestrictionOn(x => x.EndTime)
.IsBetween(fromDateTimePicker.Value.Date)
.And(toDateTimePicker.Value.Date.AddDays(1).AddTicks(-1))
//.OrderBy(x => x.BatchNr).Asc
.List<Batch>();
waterMeters = new List<WaterMeter>();
foreach (var b in batches)
{
foreach (var wm in b.WaterMeters) waterMeters.Add(wm);
}
}
else if (purchaseOrderCheckBox.Checked)
{
waterMeters = session.QueryOver<WaterMeter>()
.Where(x => (x.PurchaseOrder == purchaseOrderCheckBox.Text))
.List<WaterMeter>();
purchaseOrderFiltered = true;
}
else if (procedureCheckBox.Checked && !procedureFiltered)
{
waterMeters = session.QueryOver<WaterMeter>()
.Where(x => (x.Batch.ProcedureName == procedureComboBox.Text))
.List<WaterMeter>();
procedureFiltered = true;
}
else
{
waterMeters = session.QueryOver<WaterMeter>().List<WaterMeter>();
}
if (purchaseOrderCheckBox.Checked && !purchaseOrderFiltered)
{
IList<WaterMeter> waterMeters3 = new List<WaterMeter>();
foreach (var wm in waterMeters)
{
if (wm.PurchaseOrder.Equals(purchaseOrderComboBox.Text)) waterMeters3.Add(wm);
}
waterMeters = waterMeters3;
purchaseOrderFiltered = true;
}
if (procedureCheckBox.Checked && !procedureFiltered)
{
IList<WaterMeter> waterMeters2 = new List<WaterMeter>();
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)
{
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
Results.DB.ConnectionString = Program.LocalSettings.ConnectionString1;
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked)
{
Results.DB.ConnectionString = Program.LocalSettings.ConnectionString2;
}
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
if (radioButton3.Checked)
{
Results.DB.ConnectionString = Program.LocalSettings.ConnectionString3;
}
}
}
}