392 lines
18 KiB
C#
392 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using NHibernate;
|
|
#if MANAGED
|
|
using Oracle.ManagedDataAccess.Client;
|
|
#else
|
|
using Oracle.DataAccess.Client;
|
|
#endif
|
|
using Common;
|
|
using TBF.Resources;
|
|
using TBF.Rig.Output.DB.SensusOracle;
|
|
using TBF.Rig.Sequences;
|
|
|
|
namespace TBF.UI.ResultsMI
|
|
{
|
|
enum WMType
|
|
{
|
|
Iperl,
|
|
S620,
|
|
S640,
|
|
}
|
|
|
|
public partial class DeleteFromOracleForm : Form
|
|
{
|
|
string testBenchName;
|
|
int testBenchId;
|
|
WMType wmType;
|
|
bool deleteBatch;
|
|
int batchNumber;
|
|
IList<string> pcbNumbers;
|
|
|
|
public DeleteFromOracleForm()
|
|
{
|
|
InitializeComponent();
|
|
|
|
testBenchName = ProcessData.BenchInfo.TestBenchName;
|
|
testBenchId = ProcessData.BenchInfo.TestBenchId;
|
|
|
|
batchNumber = 0;
|
|
pcbNumbers = new List<string>();
|
|
}
|
|
|
|
bool GetSelection()
|
|
{
|
|
wmType = iPerlRadioButton.Checked ? WMType.Iperl : s620RadioButton.Checked ? WMType.S620 : WMType.S640;
|
|
|
|
deleteBatch = batchRadioButton.Checked;
|
|
|
|
if (!int.TryParse(batchNrTextBox.Text, out batchNumber) || batchNumber <= 0)
|
|
{
|
|
batchNumber = 0;
|
|
}
|
|
|
|
pcbNumbers.Clear();
|
|
string[] items = waterMetersTextBox.Text.Split(new char[] { ',', ';', '\r', '\n' });
|
|
foreach (var item in items)
|
|
{
|
|
string itm = item.Trim();
|
|
if (itm.Length == 12) pcbNumbers.Add(itm);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private void startButton_Click(object sender, EventArgs e)
|
|
{
|
|
activityTextBox.Text = string.Empty;
|
|
|
|
if (!GetSelection())
|
|
{
|
|
MessageBox.Show("Invalid selection of data to be deleted");
|
|
return;
|
|
}
|
|
|
|
OracleConnection conn;
|
|
///
|
|
if (ProcessData.OracleDB == null ||
|
|
ProcessData.OracleDB.DebugLevel != DebugMode.Normal)
|
|
{
|
|
MessageBox.Show("No Oracle database or it is in simulation mode");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
switch (DBUsed.Production)
|
|
{
|
|
default:
|
|
case DBUsed.Production: conn = ProcessData.OracleDB.ProductionDB; break;
|
|
case DBUsed.Quality: conn = ProcessData.OracleDB.QualityDB; break;
|
|
case DBUsed.Test: conn = ProcessData.OracleDB.TestDB; break;
|
|
}
|
|
|
|
if (conn == null)
|
|
{
|
|
MessageBox.Show("No connection to Oracle database");
|
|
return;
|
|
}
|
|
}
|
|
|
|
/// TODO: Implement database selection
|
|
MessageBox.Show(string.Format("Výsledky budú zapísané do produkčnej databázy"),
|
|
Strings.Information,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
|
|
if (deleteBatch)
|
|
{
|
|
activityTextBox.Text = string.Format("Going to delete batch {0}{1}", batchNumber, Environment.NewLine);
|
|
|
|
if (!DeleteBatch(conn, batchNumber))
|
|
{
|
|
MessageBox.Show(string.Format("Deleting batch {0} failed", batchNumber));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
activityTextBox.Text = string.Format("Going to delete water meters:{0}", Environment.NewLine);
|
|
foreach (var pcb in pcbNumbers)
|
|
{
|
|
activityTextBox.Text += string.Format("{0}{1}", pcb, Environment.NewLine);
|
|
}
|
|
|
|
if (!DeleteWaterMeters(conn, pcbNumbers))
|
|
{
|
|
MessageBox.Show("Deleting iPERL-s failed");
|
|
}
|
|
}
|
|
}
|
|
|
|
bool DeleteBatch(OracleConnection conn, int batchNr)
|
|
{
|
|
OracleCommand cmd;
|
|
OracleDataReader dr;
|
|
int deletedRows;
|
|
|
|
try
|
|
{
|
|
conn.Open(); /// Open the Oracle database
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
activityTextBox.Text += string.Format("Cannot open Oracle database: {0}", exc.Message);
|
|
conn.Close();
|
|
return false;
|
|
}
|
|
|
|
/// Get a list of water meters
|
|
IList<int> pruefindexes;
|
|
IList<string> waterMeters = GetListOfWaterMeters(conn, batchNr, out pruefindexes);
|
|
|
|
/// Read this batch tests data from VT_PRUEFDURCHFLUSS_PD
|
|
IList<int> testNumbers = new List<int>(); ;
|
|
cmd = new OracleCommand("SELECT pruefungsnr " +
|
|
"FROM vt_pruefdurchfluss_pd " +
|
|
"WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr });
|
|
///
|
|
dr = cmd.ExecuteReader();
|
|
bool found = false;
|
|
while (dr.Read())
|
|
{
|
|
int i = 0;
|
|
int pruefungsnr = dr.GetInt32(i++);
|
|
testNumbers.Add(pruefungsnr);
|
|
activityTextBox.Text += string.Format("pruefungsnr = {0} found in table vt_pruefdurchfluss_p, batch = {1}{2}", pruefungsnr, batchNr, Environment.NewLine);
|
|
found = true;
|
|
}
|
|
dr.Close();
|
|
if (!found) activityTextBox.Text += string.Format("Nothing found in table vt_pruefdurchfluss_pd, batch = {0}{1}", batchNr, Environment.NewLine);
|
|
|
|
/// Transaction start
|
|
OracleTransaction transaction = conn.BeginTransaction();
|
|
|
|
///
|
|
/// Delete water meters
|
|
///
|
|
try
|
|
{
|
|
for (int i = 0; i < waterMeters.Count; i++)
|
|
{
|
|
string pcbNr = waterMeters[i];
|
|
int pruefindex = pruefindexes[i] % 100;
|
|
///
|
|
foreach (var pruefungsnr in testNumbers)
|
|
{
|
|
cmd = new OracleCommand("DELETE FROM vt_pruefreihe_ist_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2 AND pruefungsnr = :3 AND pruefindex = :4", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = pruefungsnr });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "4", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchId + pruefindex });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefreihe_ist_pd, pcb# = {1}, test# = {2}{3}", deletedRows, pcbNr, pruefungsnr, Environment.NewLine);
|
|
}
|
|
|
|
if (wmType == WMType.Iperl)
|
|
{
|
|
cmd = new OracleCommand("DELETE FROM vt_ip_zaehler_pindex_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2 AND pruefindex = :3", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchId + pruefindex });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_ip_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
}
|
|
|
|
|
|
cmd = new OracleCommand("DELETE FROM vt_zaehler_pindex_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2 AND pruefindex = :3", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchId + pruefindex });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
|
|
|
|
cmd = new OracleCommand("DELETE FROM vt_zaehler_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
}
|
|
|
|
///
|
|
/// Delete (common) batch data
|
|
///
|
|
cmd = new OracleCommand("DELETE FROM vt_pruefdurchfluss_pd " +
|
|
"WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefdurchfluss_pd, batchNr# = {1}{2}", deletedRows, batchNr, Environment.NewLine);
|
|
|
|
|
|
cmd = new OracleCommand("DELETE FROM vt_pruefreihe_pd " +
|
|
"WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefreihe_pd, batchNr# = {1}{2}", deletedRows, batchNr, Environment.NewLine);
|
|
|
|
|
|
/// Transaction end
|
|
transaction.Commit();
|
|
conn.Close();
|
|
activityTextBox.Text += string.Format("Successfully completed");
|
|
return true;
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
transaction.Rollback();
|
|
conn.Close();
|
|
activityTextBox.Text += string.Format("Transaction failed: {0}{1}", exc.Message, Environment.NewLine);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
IList<string> GetListOfWaterMeters(OracleConnection conn, int batchNr, out IList<int> pruefindexes)
|
|
{
|
|
IList<string> pcbNrs = new List<string>();
|
|
pruefindexes = new List<int>();
|
|
OracleCommand cmd;
|
|
OracleDataReader dr;
|
|
|
|
cmd = new OracleCommand("SELECT vt_fernum, pruefindex " +
|
|
"FROM vt_zaehler_pindex_pd " +
|
|
"WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr });
|
|
|
|
dr = cmd.ExecuteReader();
|
|
activityTextBox.Text += string.Format("Water meters:{0}", Environment.NewLine);
|
|
while (dr.Read())
|
|
{
|
|
int i = 0;
|
|
string pcbNr = dr.GetString(i++);
|
|
pcbNrs.Add(pcbNr);
|
|
pruefindexes.Add(dr.GetInt32(i++));
|
|
activityTextBox.Text += string.Format("{0}, ", pcbNr);
|
|
}
|
|
dr.Close();
|
|
activityTextBox.Text += Environment.NewLine;
|
|
activityTextBox.Text += Environment.NewLine;
|
|
|
|
return pcbNrs;
|
|
}
|
|
|
|
bool DeleteWaterMeters(OracleConnection conn, IList<string> waterMeters)
|
|
{
|
|
OracleCommand cmd;
|
|
OracleDataReader dr;
|
|
int deletedRows;
|
|
|
|
try
|
|
{
|
|
conn.Open(); /// Open the Oracle database
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
activityTextBox.Text += string.Format("Cannot open Oracle database: {0}", exc.Message);
|
|
conn.Close();
|
|
return false;
|
|
}
|
|
|
|
|
|
/// Transaction start
|
|
OracleTransaction transaction = conn.BeginTransaction();
|
|
|
|
///
|
|
/// Delete water meters
|
|
///
|
|
try
|
|
{
|
|
for (int i = 0; i < waterMeters.Count; i++)
|
|
{
|
|
string pcbNr = waterMeters[i];
|
|
///
|
|
cmd = new OracleCommand("DELETE FROM vt_pruefreihe_ist_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefreihe_ist_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
|
|
|
|
if (wmType == WMType.Iperl)
|
|
{
|
|
cmd = new OracleCommand("DELETE FROM vt_ip_zaehler_pindex_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_ip_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
}
|
|
|
|
|
|
cmd = new OracleCommand("DELETE FROM vt_zaehler_pindex_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
|
|
|
|
cmd = new OracleCommand("DELETE FROM vt_zaehler_pd " +
|
|
"WHERE anbid = :1 AND vt_fernum = :2", conn);
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer });
|
|
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr });
|
|
///
|
|
deletedRows = cmd.ExecuteNonQuery();
|
|
activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine);
|
|
}
|
|
|
|
/// Transaction end
|
|
transaction.Commit();
|
|
conn.Close();
|
|
activityTextBox.Text += string.Format("Successfully completed");
|
|
return true;
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
transaction.Rollback();
|
|
conn.Close();
|
|
activityTextBox.Text += string.Format("Transaction failed: {0}{1}", exc.Message, Environment.NewLine);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private void DeleteFromOracleForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
if (Users.CurrentUser.Restore(this)) Program.MainWnd.UpdateUser();
|
|
}
|
|
}
|
|
}
|