DB.SensusOracle : Automatic WMTypeId assignment in progress.

This commit is contained in:
Milan Hanajik
2021-11-29 14:01:57 +01:00
parent 19c9e3a2da
commit 9bc9db1792
7 changed files with 845 additions and 261 deletions
+387 -175
View File
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
#if MANAGED
using Oracle.ManagedDataAccess.Client;
@@ -13,7 +14,6 @@ using Oracle.DataAccess.Client;
using Common;
using Config.Entities;
using Results.Output;
using System.Text;
using SharedDatabase.Entities;
namespace TBF.Rig.Output.DB.SensusOracle
@@ -41,7 +41,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
}
/// <summary>
/// Test/Q designation mode for IperlLogger and IperlHead opto data files
/// Test/Q designation mode for IperlLogger and IperlHead opto data files
/// </summary>
public enum DesigMode
{
@@ -62,7 +62,9 @@ namespace TBF.Rig.Output.DB.SensusOracle
public DBUsed DBUsed { get { return (dbCfg == null || dbCfg.ProcParams == null) ? DBUsed.None : dbCfg.ProcParams.DBUsed; } }
public WMKind WMKind { get { return (dbCfg == null || dbCfg.ProcParams == null) ? WMKind.iPERL : dbCfg.ProcParams.WMKind; } }
public int WMTypeId { get { return (dbCfg == null || dbCfg.ProcParams == null) ? 0 : dbCfg.ProcParams.WMTypeId; } }
public int WMTypeId { get { return (dbCfg == null || dbCfg.ProcParams == null) ? 0 : Math.Max(0, dbCfg.ProcParams.WMTypeId); } } /// >= 0
public bool IsAutoWMType { get { return (dbCfg == null || dbCfg.ProcParams == null) ? false : (dbCfg.ProcParams.WMTypeId == -1); } }
public bool CreateWztypEntryIfMissing { get { return (dbCfg == null || dbCfg.ProcParams == null) ? false : dbCfg.ProcParams.CreateWztypEntryIfMissing; } }
public int YearOfManufacture { get { return (dbCfg == null || dbCfg.ProcParams == null) ? DateTime.Now.Year : dbCfg.ProcParams.YearOfManufacture; } }
public bool SaveResults { get { return (dbCfg == null || dbCfg.ProcParams == null) ? false : dbCfg.ProcParams.SaveResults; } }
public bool ReadStartInfo { get { return (dbCfg == null || dbCfg.ProcParams == null) ? true : dbCfg.ProcParams.ReadStartInfo; } }
@@ -115,6 +117,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
}
}
IList<VtWztypSd> vtWztypSdList;
///
/// The following 3 variables are always updated together
@@ -145,23 +148,38 @@ namespace TBF.Rig.Output.DB.SensusOracle
QualityDB = new OracleConnection(string.Format("Data Source={0};User Id={1};Password={2};", dbCfg.QualityDataSource, dbCfg.QualityUserId, dbCfg.QualityPassword));
TestDB = new OracleConnection(string.Format("Data Source={0};User Id={1};Password={2};", dbCfg.TestDataSource, dbCfg.TestUserId, dbCfg.TestPassword));
vtWztypSdList = new List<VtWztypSd>();
///
/// Do something with the database to see if the connection works well
///
if (dbCfg.DebugLevel == DebugMode.Normal)
{
var start = DateTime.Now;
SelectedDB.Open();
string rslt = "none";
OracleCommand cmd = new OracleCommand("SELECT standort FROM anbieter_sd WHERE anbid = :1", ProductionDB);
/// Get plant name
string producer = "none";
string plant = "nowhere";
OracleCommand cmd = new OracleCommand("SELECT hersteller, standort FROM anbieter_sd WHERE anbid = :1", ProductionDB);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
OracleDataReader dr = cmd.ExecuteReader();
if (dr.Read()) rslt = dr.GetString(0);
if (dr.Read())
{
producer = dr.GetString(0);
plant = dr.GetString(1);
}
dr.Close();
/// Get VT_WZTYP_SD content
vtWztypSdList = ReadVtWztypSd(SelectedDB);
SelectedDB.Close();
log.FatalFormat("{0} initialized: {1}", Name, this);
int seconds = Convert.ToInt32(Math.Round((DateTime.Now - start).TotalSeconds));
log.FatalFormat("{0} initialized in {1}s: {2} {3} {4}", Name, seconds, producer, plant, this);
}
else
{
@@ -172,7 +190,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
///
/// IDevice interface implementation
///
public void RunDeviceBefore() { }
public void RunDeviceBefore() {}
public void RunDeviceAfter() {}
///
public void StopDevice()
@@ -189,84 +207,33 @@ namespace TBF.Rig.Output.DB.SensusOracle
/// </summary>
/// <param name="conn">An open Oracle DB connection</param>
/// <param name="wmTypeId">Water meter type Id</param>
/// <param name="wmTypeRevision">Water meter type revision</param>
/// <param name="found">Fond VT_VZTYP_SD record with wmTypeRevision</param>
/// <returns>SensusTestInfos array</returns>
public IList<SensusTestInfo> GetOracleTestInfo(OracleConnection conn, int wmTypeId, out int wmTypeRevision, out string wzTyp, out string metrolKlasse, out string zulasszeichen, out string materialNr, out double q3, out DateTime timeStamp, out string remark)
public IList<SensusTestInfo> GetOracleTestInfo(OracleConnection conn, int wmTypeId, out VtWztypSd found)
{
///
found = vtWztypSdList.FirstOrDefault<VtWztypSd>(x => x.IdWztyp == wmTypeId);
if (found == null) return null;
if (found.ListOfTests == null)
{
found.ListOfTests = ReadVtPruefpunktSollSd(conn, wmTypeId, found.RevWztyp);
}
if (found.ListOfTests == null || found.ListOfTests.Count == 0) return null;
/// Read 'incomplete' TestInfo from Oracle database containing only flowId-s ad qBezeichnung-s
///
IList<SensusTestInfo> oraDbTinfos = new List<SensusTestInfo>();
///
/// For a given 'wmTypeId' find the most recent active 'wmTypeRevision'
///
wmTypeRevision = -1;
wzTyp = string.Empty;
metrolKlasse = string.Empty;
zulasszeichen = string.Empty;
materialNr = string.Empty;
q3 = 0;
timeStamp = DateTime.MinValue;
remark = string.Empty;
OracleCommand cmd = new OracleCommand("SELECT rev_wztyp, wztyp, metrolklasse, zulasszeichen, materialnr, qmax, aenderungsdatum, bemerkung " +
"FROM vt_wztyp_sd " +
"WHERE anbid=:1 AND id_wztyp=:2 AND aktiv=:3", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wmTypeId }); ///:1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 1 }); ///:2
///
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
foreach (var test in found.ListOfTests)
{
wmTypeRevision = dr.GetInt32(0);
wzTyp = dr.GetString(1);
metrolKlasse = dr.GetString(2);
zulasszeichen = dr.GetString(3);
materialNr = dr.GetString(4);
q3 = dr.GetDouble(5);
timeStamp = dr.GetDateTime(6);
remark = dr.GetString(7);
}
dr.Close();
Range rng = (test.Pruefbereichmin == 90 && test.Pruefbereichmax == 100) ? Range.R90_100 :
((test.Pruefbereichmin == 95 && test.Pruefbereichmax == 105) ? Range.R95_105 :
((test.Pruefbereichmin == 100 && test.Pruefbereichmax == 110) ? Range.R100_110 : Range.Undefined));
if (wmTypeRevision == -1) return null; /// No 'wmTypeRevision' found
var ti = new SensusTestInfo(test.Pruefungsnr, test.Qbezeichnung, Units.ConvertFrom(Unit.lph, test.Q_soll),
Convert.ToInt32(test.Pruefzeit), test.Negfehlerkalt, test.Posfehlerkalt, rng);
oraDbTinfos.Add(ti);
cmd = new OracleCommand("SELECT pruefungsnr, q_soll, pruefzeit, posfehlerkalt, negfehlerkalt, pruefbereichmin, pruefbereichmax, qbezeichnung " +
"FROM vt_pruefpunkt_soll_sd " +
"WHERE anbid=:1 AND id_wztyp=:2 AND rev_wztyp=:3", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); ///:1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wmTypeId }); ///:2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wmTypeRevision }); ///:3
///
dr = cmd.ExecuteReader();
while (dr.Read())
{
int pruefungsNr = dr.GetInt32(0);
double flow = Common.Units.ConvertFrom(Unit.lph, dr.GetDouble(1));
int testTime = dr.GetInt32(2);
double errLimHi = dr.GetDouble(3);
double errLimLo = dr.GetDouble(4);
int flowRangeMin = dr.GetInt32(5);
int flowRangeMax = dr.GetInt32(6);
string qBezeichnung = dr.GetString(7);
Range rng = (flowRangeMin == 90 && flowRangeMax == 100) ? Range.R90_100 :
((flowRangeMin == 95 && flowRangeMax == 105) ? Range.R95_105 :
((flowRangeMin == 100 && flowRangeMax == 110) ? Range.R100_110 : Range.Undefined));
oraDbTinfos.Add(new SensusTestInfo(pruefungsNr, qBezeichnung, flow, testTime, errLimLo, errLimHi, rng));
}
dr.Close();
if (oraDbTinfos.Count == 0) return null; /// No 'incomplete' TestInfo in Oracle DN for this 'wmTypeId' and 'wmTypeRevision'
oraDbTinfos = oraDbTinfos.OrderBy(x => x.PruefungsNrDB).ToList<SensusTestInfo>();
foreach (var ti in oraDbTinfos)
{
log.WarnFormat("VT_PRUEFPUNKT_SOLL_SD info : ID={0} Rev={1} PruefungsNr={2} QBezeichnung={3}", wmTypeId, wmTypeRevision, ti.PruefungsNrDB, ti.QBezeichnungDB);
log.WarnFormat("VT_PRUEFPUNKT_SOLL_SD info : ID={0} Rev={1} PruefungsNr={2} QBezeichnung={3}",
wmTypeId, found.RevWztyp, ti.PruefungsNrDB, ti.QBezeichnungDB);
}
return oraDbTinfos;
@@ -465,21 +432,14 @@ namespace TBF.Rig.Output.DB.SensusOracle
///
/// Currnet test info. is not walid => Get a new one from Oracle and SensusTestInfo table
///
int wmTR;
string wzTypStr;
string metroKlasse;
string zulasszeichen;
string materialNr;
double q3 = 0;
DateTime timeStamp;
string remark;
IList<SensusTestInfo> rti = GetOracleTestInfo(conn, wm.WaterMeterData.WMTypeId, out wmTR, out wzTypStr, out metroKlasse, out zulasszeichen, out materialNr, out q3, out timeStamp, out remark);
VtWztypSd foundRecord;
IList<SensusTestInfo> rti = GetOracleTestInfo(conn, wm.WaterMeterData.WMTypeId, out foundRecord);
if (rti != null)
{
/// All 5 updated together
wmTypeId = wm.WaterMeterData.WMTypeId;
wmTypeRevision = wmTR;
wmTypeRevision = foundRecord.RevWztyp;
procedureSignature = procedureSignatureSB.ToString();
oracleTestInfo = rti;
string tInfoName;
@@ -720,7 +680,14 @@ namespace TBF.Rig.Output.DB.SensusOracle
try
{
SaveBatchData(conn, batch);
VtWztypSd record = GetCompleteTestInfo(conn, batch);
if (oracleTestInfo == null || completeTestInfo == null || wmTypeId == 0 || wmTypeRevision == 0)
{
throw new Exception("No matching test infos found");
}
SaveBatchData(conn, batch, record);
foreach (var wMtr in batch.WaterMeters)
{
if (wmKind == WMKind.iPERL)
@@ -800,60 +767,113 @@ namespace TBF.Rig.Output.DB.SensusOracle
}
VtWztypSd GetCompleteTestInfo(OracleConnection conn, Results.Entities.Batch b)
{
if (IsAutoWMType && CreateWztypEntryIfMissing)
{
int idBenutzer = (Anbid_Producer == 4) ? 6 : 365;
VtWztypSd recordFromBatch = VtWztypSd.FromBatch(b, idBenutzer);
VtWztypSd existingRecord = vtWztypSdList.FirstOrDefault(x => VtWztypSd.AreEqual(x, recordFromBatch, this, conn));
if (existingRecord == null)
{
/// Appropriate record does not exist - create a new record from the batch and write it to the database
VtWztypSd sameNameRecord = vtWztypSdList.FirstOrDefault(x => x.Wztyp == recordFromBatch.Wztyp);
if (sameNameRecord != null)
{
/// Make record with the same name inactive
OracleCommand cmd = new OracleCommand("UPDATE vt_wztyp_pd SET aktiv=:4 " +
"WHERE anbid=:1 AND id_wztyp=:2 AND rev_wztyp=:3", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = sameNameRecord.IdWztyp }); /// :2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = sameNameRecord.RevWztyp }); /// :3
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :4
if (cmd.ExecuteNonQuery() != 1) throw (new Exception(string.Format("Failed to update vt_wztyp_pd record {0}/{1}",
sameNameRecord.IdWztyp, sameNameRecord.RevWztyp)));
/// IdWztyp and RevWztyp of the new record: new revision of the record with the same name
recordFromBatch.IdWztyp = sameNameRecord.IdWztyp;
recordFromBatch.RevWztyp = sameNameRecord.RevWztyp + 1;
}
else
{
/// There is no record with the same name
/// Find max. value of IdWztyp in vtWztypSdList
int maxIdWztyp = 0;
foreach (var rec in vtWztypSdList) if (rec.IdWztyp > maxIdWztyp) maxIdWztyp = rec.IdWztyp;
/// IdWztyp and RevWztyp of the new record: A new IdWztyp
recordFromBatch.IdWztyp = maxIdWztyp + 1;
recordFromBatch.RevWztyp = 1;
}
/// Save the new record
WriteVtWztypSd(conn, recordFromBatch);
vtWztypSdList.Insert(0, recordFromBatch);
}
else
{
/// Appropriate record exists
recordFromBatch.IdWztyp = existingRecord.IdWztyp;
recordFromBatch.RevWztyp = existingRecord.RevWztyp;
}
return recordFromBatch;
}
else
{
IList<string> wmTestNames = new List<string>();
StringBuilder procedureSignatureSB = new StringBuilder();
foreach (var tr in b.RegularTestRslts())
{
wmTestNames.Add(tr.Name());
procedureSignatureSB.Append(tr.Name());
procedureSignatureSB.Append("~");
}
if (oracleTestInfo == null ||
wmTypeId != b.WaterMeters[0].WaterMeterData.WMTypeId ||
wmTypeRevision == 0 ||
procedureSignature != procedureSignatureSB.ToString())
{
VtWztypSd foundRecord;
IList<SensusTestInfo> ti = GetOracleTestInfo(conn, b.WaterMeters[0].WaterMeterData.WMTypeId, out foundRecord);
if (ti != null)
{
/// All 5 updated together
wmTypeId = b.WaterMeters[0].WaterMeterData.WMTypeId;
wmTypeRevision = foundRecord.RevWztyp;
procedureSignature = procedureSignatureSB.ToString();
oracleTestInfo = ti;
completeTestInfo = SensusTestInfo.GetBestMatch(oracleTestInfo, wmTestNames);
foreach (var cti in completeTestInfo)
{
log.WarnFormat("Selected test info : ID={0} Rev={1} Test={2} PrfNrDB={3} QBzDB={4} PrfNrOpto={5} QBzOpto={6} PrfNrLog={7} QBzLog={8} Range={9}", wmTypeId, wmTypeRevision,
cti.TestName, cti.PruefungsNrDB, cti.QBezeichnungDB, cti.PruefungsNrOpto, cti.QBezeichnungOpto, cti.PruefungsNrLog, cti.QBezeichnungLog, cti.Range);
}
}
else
{
throw new Exception("No matching test infos found");
}
}
return null;
}
}
/// <summary>
/// Save common batch data
/// </summary>
/// <param name="b">Batch</param>
void SaveBatchData(OracleConnection conn, Results.Entities.Batch b)
void SaveBatchData(OracleConnection conn, Results.Entities.Batch b, VtWztypSd record = null)
{
IList<string> wmTestNames = new List<string>();
StringBuilder procedureSignatureSB = new StringBuilder();
foreach (var tr in b.RegularTestRslts())
{
wmTestNames.Add(tr.Name());
procedureSignatureSB.Append(tr.Name());
procedureSignatureSB.Append("~");
}
if ((oracleTestInfo == null) || (wmTypeId != b.WaterMeters[0].WaterMeterData.WMTypeId) || (wmTypeRevision == 0) || (procedureSignature != procedureSignatureSB.ToString()))
{
int wmTR = 0;
string wzTypStr;
string metroKlasse;
string zulasszeichen;
string materialNr;
double q3 = 0;
DateTime timeStamp;
string remark;
IList<SensusTestInfo> ti = GetOracleTestInfo(conn, b.WaterMeters[0].WaterMeterData.WMTypeId, out wmTR, out wzTypStr, out metroKlasse, out zulasszeichen, out materialNr, out q3, out timeStamp, out remark);
if (ti != null)
{
/// All 5 updated together
wmTypeId = b.WaterMeters[0].WaterMeterData.WMTypeId;
wmTypeRevision = wmTR;
procedureSignature = procedureSignatureSB.ToString();
oracleTestInfo = ti;
completeTestInfo = SensusTestInfo.GetBestMatch(oracleTestInfo, wmTestNames);
foreach (var cti in completeTestInfo)
{
log.WarnFormat("Selected test info : ID={0} Rev={1} Test={2} PrfNrDB={3} QBzDB={4} PrfNrOpto={5} QBzOpto={6} PrfNrLog={7} QBzLog={8} Range={9}", wmTypeId, wmTypeRevision,
cti.TestName, cti.PruefungsNrDB, cti.QBezeichnungDB, cti.PruefungsNrOpto, cti.QBezeichnungOpto, cti.PruefungsNrLog, cti.QBezeichnungLog, cti.Range);
}
}
else
{
throw new Exception("No matching test infos found");
}
}
if (oracleTestInfo == null || completeTestInfo == null || wmTypeId == 0 || wmTypeRevision == 0)
{
throw new Exception("No matching test infos found");
}
if (dbCfg.DebugLevel == DebugMode.Normal)
{
OracleCommand cmd = new OracleCommand("INSERT INTO vt_pruefreihe_pd(anbid, id_pruefstand, id_wzpruefreihe, id_wztyp," +
@@ -888,13 +908,17 @@ namespace TBF.Rig.Output.DB.SensusOracle
log.WarnFormat("SIM: VT_PRUEFREIHE_PD inserted, BatchNr={0}, TypeId={1}, TypeRev={2}, Start={3}", b.BatchNr, b.WaterMeters[0].WaterMeterData.WMTypeId, wmTypeRevision, b.StartTime);
}
foreach (var testInfo in completeTestInfo)
int testsCount = (record != null) ? record.ListOfTests.Count : completeTestInfo.Length;
for (int i = 0; i < testsCount; i++)
{
if ((testInfo.PruefungsNrDB != 0) && (-20 <= testInfo.PruefungsNrDB) && (testInfo.PruefungsNrDB <= 20)) /// LU PruefungsNr-s are between -20 and 20
{
Results.Entities.TestRslt tr = b.GetTestRslt(testInfo.TestName, 0);
int pruefungsnr = (record != null) ? record.ListOfTests[i].Pruefungsnr : completeTestInfo[i].PruefungsNrDB;
string testName = (record != null) ? record.ListOfTests[i].Qbezeichnung : completeTestInfo[i].TestName;
if (tr == null) tr = b.GetTestRslt(testInfo.TestName, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
if (pruefungsnr >= -20 && pruefungsnr <= 20 && pruefungsnr != 0) /// LU PruefungsNr-s are between -20 and 20
{
Results.Entities.TestRslt tr = b.GetTestRslt(testName, 0);
if (tr == null) tr = b.GetTestRslt(testName, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
if (tr == null) continue;
double Q_ist = (tr.VolumeMaster != 0) ? (tr.FlowVolume * tr.VolumeCTV / tr.VolumeMaster) : (double)tr.FlowVolume;
@@ -910,12 +934,11 @@ namespace TBF.Rig.Output.DB.SensusOracle
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + b.TestBenchId });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = b.BatchNr });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = testInfo.PruefungsNr });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = pruefungsnr });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.l, tr.VolumeCTV) });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd - tr.MassStart) });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMin) });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMax) });
double Q_ist = (tr.VolumeMaster != 0) ? (tr.FlowVolume * tr.VolumeCTV / tr.VolumeMaster) : (double)tr.FlowVolume;
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, Q_ist) });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.ConstMaster });
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowVolume) });
@@ -939,41 +962,37 @@ namespace TBF.Rig.Output.DB.SensusOracle
" tvwz, ivwz, verwendeter_vz, beginngewicht, endgewicht) " +
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23)", conn);
OracleParameter parm;
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_Producer; cmd2.Parameters.Add(parm); ///:1
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = dbCfg.TestBenchGroupId + b.TestBenchId; cmd2.Parameters.Add(parm); ///:2
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = b.BatchNr; cmd2.Parameters.Add(parm); ///:3
parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = testInfo.PruefungsNrDB; cmd2.Parameters.Add(parm); ///:4
///
parm = new OracleParameter("PVOL", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.l, tr.VolumeCTV); cmd2.Parameters.Add(parm); ///:5
parm = new OracleParameter("PMasse", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd - tr.MassStart); cmd2.Parameters.Add(parm); ///:6
parm = new OracleParameter("MinDurchfluss", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowMin); cmd2.Parameters.Add(parm); ///:7
parm = new OracleParameter("MaxDurchfluss", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowMax); cmd2.Parameters.Add(parm); ///:8
parm = new OracleParameter("Q_ist", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, Q_ist); cmd2.Parameters.Add(parm); ///:9
parm = new OracleParameter("KFaktor", OracleDbType.Double); parm.Value = tr.ConstMaster; cmd2.Parameters.Add(parm); ///:10
parm = new OracleParameter("Q_VZ", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowVolume); cmd2.Parameters.Add(parm); ///:11
parm = new OracleParameter("F_VZ", OracleDbType.Double); parm.Value = tr.ErrorMaster; cmd2.Parameters.Add(parm); ///:12
parm = new OracleParameter("RegelEinstellZeit", OracleDbType.Double); parm.Value = (double)tr.FlowSetTime; cmd2.Parameters.Add(parm); ///:13
parm = new OracleParameter("Drehzahl", OracleDbType.Int32); parm.Value = 0; /* TODO */ cmd2.Parameters.Add(parm); ///:14
///
parm = new OracleParameter("BeginnDruck_Vorne", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressUpStart); cmd2.Parameters.Add(parm); ///:15
parm = new OracleParameter("BeginnDruck_Hinten", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressDownStart); cmd2.Parameters.Add(parm); ///:16
parm = new OracleParameter("EndDruck_Vorne", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressUpEnd); cmd2.Parameters.Add(parm); ///:17
parm = new OracleParameter("EndDruck_Hinten", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressDownEnd); cmd2.Parameters.Add(parm); ///:18
///
parm = new OracleParameter("TVWZ", OracleDbType.Double); parm.Value = tr.TestTime; cmd2.Parameters.Add(parm); ///:19
parm = new OracleParameter("IVWZ", OracleDbType.Int32); parm.Value = tr.PulsesMaster; cmd2.Parameters.Add(parm); ///:20
parm = new OracleParameter("Verwendeter_VZ", OracleDbType.Int32); parm.Value = 0; /* TODO */ cmd2.Parameters.Add(parm); ///:21
parm = new OracleParameter("BeginnGewicht", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassStart); cmd2.Parameters.Add(parm); ///:22
parm = new OracleParameter("EndGewicht", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd); cmd2.Parameters.Add(parm); ///:23
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); ///:1
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + b.TestBenchId }); ///:2
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = b.BatchNr }); ///:3
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = pruefungsnr }); ///:4
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.l, tr.VolumeCTV) }); ///:5
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd - tr.MassStart) }); ///:6
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMin) }); ///:7
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMax) }); ///:8
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, Q_ist) }); ///:9
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.ConstMaster }); ///:10
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowVolume) }); ///:11
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.ErrorMaster }); ///:12
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = (double)tr.FlowSetTime }); ///:13
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 /* TODO */ }); ///:14
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressUpStart) }); ///:15
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressDownStart) }); ///:16
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressUpEnd) }); ///:17
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressDownEnd) }); ///:18
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.TestTime }); ///:19
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = tr.PulsesMaster }); ///:20
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 /* TODO */ }); ///:21
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassStart) }); ///:22
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd) }); ///:23
///
cmd2.ExecuteNonQuery(); /// Returns nr. of updated rows
log.InfoFormat("VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, testInfo.PruefungsNrDB, Q_ist);
log.InfoFormat("VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, pruefungsnr, Q_ist);
#endif
}
else
{
log.WarnFormat("SIM: VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, testInfo.PruefungsNrDB, Q_ist);
log.WarnFormat("SIM: VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, pruefungsnr, Q_ist);
}
}
}
@@ -1648,5 +1667,198 @@ namespace TBF.Rig.Output.DB.SensusOracle
return 0;
}
}
/// <summary>
/// Get VT_WZTYP_SD content
/// </summary>
/// <param name="conn">Oracle connection</param>
/// <param name="aktiv">Active flag</param>
/// <returns>List of VtWztypSd records</returns>
public IList<VtWztypSd> ReadVtWztypSd(OracleConnection conn, bool aktiv = true)
{
var cmd = new OracleCommand("SELECT id_wztyp, rev_wztyp, wztyp, art, metrolklasse, zulasszeichen, impulsrate," +
" kontaktwert, warmpruefen, optikaufsetzen, formatausdruck, formatetikett, formatnetzwerk," +
" formatzaehlernr, id_wzgruppe, anzahlpruefungen, materialnr, qmax, pruefart, zaehlerflag," +
" korrekturwert, id_benutzer, aenderungsdatum, bemerkung, verwendet " +
"FROM vt_wztyp_sd " +
"WHERE anbid=:1 AND aktiv=:2 ORDER BY rev_wztyp DESC", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = aktiv ? 1 : 0 }); /// :2
///
var dr = cmd.ExecuteReader();
var list = new List<VtWztypSd>();
while (dr.Read())
{
var proc = new VtWztypSd();
int i = 0;
try { proc.IdWztyp = dr.GetInt32(i++); } catch { proc.IdWztyp = 0; }
try { proc.RevWztyp = dr.GetInt32(i++); } catch { proc.RevWztyp = 0; }
try { proc.Wztyp = dr.GetString(i++); } catch { proc.Wztyp = string.Empty; }
try { proc.Art = dr.GetString(i++); } catch { proc.Art = string.Empty; }
try { proc.Metrolklasse = dr.GetString(i++); } catch { proc.Metrolklasse = string.Empty; }
try { proc.Zulasszeichen = dr.GetString(i++); } catch { proc.Zulasszeichen = string.Empty; }
try { proc.Impulsrate = dr.GetDouble(i++); } catch { proc.Impulsrate = 0; }
try { proc.Kontaktwert = dr.GetDouble(i++); } catch { proc.Kontaktwert = 0; }
try { proc.Warmpruefen = dr.GetBoolean(i++); } catch { proc.Warmpruefen = false; }
try { proc.Optikaufsetzen = dr.GetBoolean(i++); } catch { proc.Optikaufsetzen = false; }
try { proc.Formatausdruck = dr.GetString(i++); } catch { proc.Formatausdruck = string.Empty; }
try { proc.Formatetikett = dr.GetString(i++); } catch { proc.Formatetikett = string.Empty; }
try { proc.Formatnetzwerk = dr.GetString(i++); } catch { proc.Formatnetzwerk = string.Empty; }
try { proc.Formatzaehlernr = dr.GetString(i++); } catch { proc.Formatzaehlernr = string.Empty; }
try { proc.IdWzgruppe = dr.GetInt32(i++); } catch { proc.IdWzgruppe = 0; }
try { proc.Anzahlpruefungen = dr.GetInt32(i++); } catch { proc.Anzahlpruefungen = 0; }
try { proc.Materialnr = dr.GetString(i++); } catch { proc.Materialnr = string.Empty; }
try { proc.Qmax = dr.GetFloat(i++); } catch { proc.Qmax = 0; }
try { proc.Pruefart = dr.GetByte(i++); } catch { proc.Pruefart = 0; }
try { proc.Zaehlerflag = dr.GetByte(i++); } catch { proc.Zaehlerflag = 0; }
try { proc.Korrekturwert = dr.GetDouble(i++); } catch { proc.Korrekturwert = 0; }
try { proc.IdBenutzer = dr.GetInt32(i++); } catch { proc.IdBenutzer = 0; }
try { proc.Aenderungsdatum = dr.GetDateTime(i++); } catch { proc.Aenderungsdatum = DateTime.Now; }
try { proc.Bemerkung = dr.GetString(i++); } catch { proc.Bemerkung = string.Empty; }
try { proc.Verwendet = dr.GetBoolean(i++); } catch { proc.Verwendet = false; }
list.Add(proc);
}
dr.Close();
return list;
}
/// <summary>
/// Insert a record to VT_WZTYP_SD
/// </summary>
/// <param name="conn">Oracle connection</param>
/// <param name="aktiv">Active flag</param>
/// <returns>List of VtWztypSd records</returns>
public void WriteVtWztypSd(OracleConnection conn, VtWztypSd record, bool aktiv = true)
{
var cmd = new OracleCommand("INSERT INTO vt_wztyp_sd(anbid, id_wztyp, rev_wztyp, wztyp, art, metrolklasse, zulasszeichen," +
" impulsrate, kontaktwert, warmpruefen, optikaufsetzen, formatausdruck, formatetikett," +
" formatnetzwerk, formatzaehlernr, id_wzgruppe, anzahlpruefungen, materialnr, qmax, pruefart," +
" zaehlerflag, korrekturwert, id_benutzer, aenderungsdatum, bemerkung, verwendet, aktiv) " +
"FROM vt_wztyp_sd " +
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20," +
" :21, :22, :23, :24, :25, :26, :27)", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.IdWztyp }); /// :2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.RevWztyp }); /// :3
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Wztyp }); /// :4
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Art }); /// :5
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Metrolklasse }); /// :6
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Zulasszeichen }); /// :7
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = record.Impulsrate }); /// :8
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = record.Kontaktwert }); /// :9
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Warmpruefen ? 1 : 0 }); /// :10
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Optikaufsetzen ? 1 : 0 }); /// :11
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatausdruck }); /// :12
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatetikett }); /// :13
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatnetzwerk }); /// :14
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatzaehlernr }); /// :15
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.IdWzgruppe }); /// :16
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Anzahlpruefungen }); /// :17
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Materialnr }); /// :18
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Qmax }); /// :19
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefart }); /// :20
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Zaehlerflag }); /// :21
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = record.Korrekturwert }); /// :22
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.IdBenutzer }); /// :23
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.TimeStamp, Value = record.Aenderungsdatum }); /// :24
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Bemerkung }); /// :25
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Verwendet ? 1 : 0 }); /// :26
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = aktiv ? 1 : 0 }); /// :27
///
var rowsUpdated = cmd.ExecuteNonQuery();
if (rowsUpdated == 1)
{
foreach (var test in record.ListOfTests)
{
WriteVtPruefpunktSollSd(conn, test, record.IdWztyp, record.RevWztyp);
}
}
}
/// <summary>
/// Get VT_PRUEFPUNKT_SOLL_SD content
/// </summary>
/// <param name="conn">Oracle connection</param>
/// <param name="aktiv">WM type Id</param>
/// <param name="aktiv">WM type revision</param>
/// <returns>List of VtWztypSd records</returns>
public IList<VtPruefpunktSollSd> ReadVtPruefpunktSollSd(OracleConnection conn, int id_wztyp, int rev_wztyp)
{
var cmd = new OracleCommand("SELECT pruefungsnr, q_soll, pruefzeit, posfehlerkalt, negfehlerkalt," +
" posfehlerwarm, negfehlerwarm, pruefbereichmin, pruefbereichmax," +
" qbezeichnung, mindruck, fkorrektur, maxdruck " +
"FROM vt_pruefpunkt_soll_sd " +
"WHERE anbid=:1 AND id_wztyp=:2 AND rev_wztyp=:3 ORDER BY pruefungsnr DESC", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = id_wztyp }); /// :2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = rev_wztyp }); /// :3
///
var dr = cmd.ExecuteReader();
var list = new List<VtPruefpunktSollSd>();
while (dr.Read())
{
var tst = new VtPruefpunktSollSd();
int i = 0;
try { tst.Pruefungsnr = dr.GetInt32(i++); } catch { tst.Pruefungsnr = 0; }
try { tst.Q_soll = dr.GetFloat(i++); } catch { tst.Q_soll = 0; }
try { tst.Pruefzeit = dr.GetFloat(i++); } catch { tst.Pruefzeit = 0; }
try { tst.Posfehlerkalt = dr.GetFloat(i++); } catch { tst.Posfehlerkalt = 0; }
try { tst.Negfehlerkalt = dr.GetFloat(i++); } catch { tst.Negfehlerkalt = 0; }
try { tst.Posfehlerwarm = dr.GetFloat(i++); } catch { tst.Posfehlerwarm = 0; }
try { tst.Negfehlerwarm = dr.GetFloat(i++); } catch { tst.Negfehlerwarm = 0; }
try { tst.Pruefbereichmin = dr.GetInt32(i++); } catch { tst.Pruefbereichmin = 0; }
try { tst.Pruefbereichmax = dr.GetInt32(i++); } catch { tst.Pruefbereichmax = 0; }
try { tst.Qbezeichnung = dr.GetString(i++); } catch { tst.Qbezeichnung = string.Empty; }
try { tst.Mindruck = dr.GetFloat(i++); } catch { tst.Mindruck = 0; }
try { tst.Fkorrektur = dr.GetFloat(i++); } catch { tst.Fkorrektur = 0; }
try { tst.Maxdruck = dr.GetFloat(i++); } catch { tst.Maxdruck = 0; }
if (tst.Pruefungsnr >= 0)
list.Add(tst);
else
list.Insert(0, tst);
}
return list;
}
/// <summary>
/// Insert a record to VT_PRUEFPUNKT_SOLL_SD
/// </summary>
/// <param name="conn">Oracle connection</param>
/// <param name="record">Record to be written</param>
/// <param name="aktiv">WM type Id</param>
/// <param name="aktiv">WM type revision</param>
/// <returns>List of VtWztypSd records</returns>
public void WriteVtPruefpunktSollSd(OracleConnection conn, VtPruefpunktSollSd record, int id_wztyp, int rev_wztyp)
{
var cmd = new OracleCommand("INSERT INTO vt_pruefpunkt_soll_sd(anbid, id_wztyp, rev_wztyp, pruefungsnr, q_soll, pruefzeit," +
" posfehlerkalt, negfehlerkalt, posfehlerwarm, negfehlerwarm, pruefbereichmin, pruefbereichmax," +
" qbezeichnung, mindruck, fkorrektur, maxdruck) " +
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16)", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = id_wztyp }); /// :2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = rev_wztyp }); /// :3
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefungsnr }); /// :4
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Q_soll }); /// :5
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Pruefzeit }); /// :6
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Posfehlerkalt }); /// :7
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Negfehlerkalt }); /// :8
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Posfehlerwarm }); /// :9
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Negfehlerwarm }); /// :10
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefbereichmin }); /// :11
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefbereichmax }); /// :12
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Qbezeichnung }); /// :13
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Mindruck }); /// :14
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Fkorrektur }); /// :15
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Maxdruck }); /// :16
///
var rowsUpdated = cmd.ExecuteNonQuery();
}
}
}
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2020 Sensus Slovensko a.s.
/// Copyright (c) 2020-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -24,42 +24,45 @@ namespace TBF.Rig.Output.DB.SensusOracle
public DBUsed DBUsed; /// 0
public WMKind WMKind; /// 1
public int WMTypeId; /// 2
public int YearOfManufacture; /// 3
public bool SaveResults; /// 4
public bool ReadStartInfo; /// 5
public bool StartInfoIsRequired; /// 6
public DesigMode DesigMode; /// 7
public Results.Output.LogType DesigType; /// 8
public int WMTypeId; /// 2 (0 = none, -1 = automatic)
public bool CreateWztypEntryIfMissing; /// 3
public int YearOfManufacture; /// 4
public bool SaveResults; /// 5
public bool ReadStartInfo; /// 6
public bool StartInfoIsRequired; /// 7
public DesigMode DesigMode; /// 8
public Results.Output.LogType DesigType; /// 9
public override void InitializeAll()
{
DBUsed = DBUsed.Production; /// 0
WMKind = WMKind.iPERL; /// 1
WMTypeId = 2; /// 2
YearOfManufacture = DateTime.Now.Year; /// 3
CreateWztypEntryIfMissing = false; /// 3
YearOfManufacture = DateTime.Now.Year; /// 4
#if TURA_SPECIAL
SaveResults = false; /// 4
SaveResults = false; /// 5
#else
SaveResults = true; /// 4
SaveResults = true; /// 5
#endif
ReadStartInfo = true; /// 5
StartInfoIsRequired = false; /// 6
DesigMode = DesigMode.Auto; /// 7
DesigType = Results.Output.LogType.Just_Q3Q2Q1; /// 8
ReadStartInfo = true; /// 6
StartInfoIsRequired = false; /// 7
DesigMode = DesigMode.Auto; /// 8
DesigType = Results.Output.LogType.Just_Q3Q2Q1; /// 9
}
string[] paramNames = new string[]
{
"Database", /// 0
"Kind of WMs", /// 1
"WM type ID", /// 2
"Year of manufacture", /// 3
"Save results", /// 4
"Read start info", /// 5
"Start info is required", /// 6
"Designation Mode", /// 7
"Designation when mode is 'As_specified'", /// 8
"WM type ID (>= 0 or 'auto')", /// 2
"Create VT_WZTYP_SD entry if missing", /// 3
"Year of manufacture", /// 4
"Save results", /// 5
"Read start info", /// 6
"Start info is required", /// 7
"Designation Mode", /// 8
"Designation when mode is 'As_specified'", /// 9
};
public override string ParamName(int i) { return paramNames[i]; }
public override int ParamsCount() { return paramNames.Length; }
@@ -83,17 +86,20 @@ namespace TBF.Rig.Output.DB.SensusOracle
return null;
case 3:
int year = DateTime.Now.Year;
return new string[] { year.ToString(), (year + 1).ToString() };
case 4:
case 5:
case 6:
return new string[] { Strings.yes, Strings.no };
case 7:
return new string[] { Strings.yes, Strings.no };
case 4:
int year = DateTime.Now.Year;
return new string[] { year.ToString(), (year + 1).ToString() };
case 8:
for (DesigMode md = 0; md < DesigMode.Count; md++) retVal.Add(md.ToString());
return retVal;
case 8:
case 9:
for (Results.Output.LogType wm = 0; wm < Results.Output.LogType.Count; wm++) retVal.Add(wm.ToString());
return retVal;
}
@@ -105,26 +111,27 @@ namespace TBF.Rig.Output.DB.SensusOracle
{
case 0: return DBUsed.ToString();
case 1: return WMKind.ToString();
case 2: return WMTypeId.ToString();
case 3: return YearOfManufacture.ToString();
case 4: return SaveResults ? Strings.yes : Strings.no;
case 5: return ReadStartInfo ? Strings.yes : Strings.no;
case 6: return StartInfoIsRequired ? Strings.yes : Strings.no;
case 7: return DesigMode.ToString();
case 8: return DesigType.ToString();
case 2: return (WMTypeId == -1) ? "auto" : WMTypeId.ToString();
case 3: return CreateWztypEntryIfMissing ? Strings.yes : Strings.no;
case 4: return YearOfManufacture.ToString();
case 5: return SaveResults ? Strings.yes : Strings.no;
case 6: return ReadStartInfo ? Strings.yes : Strings.no;
case 7: return StartInfoIsRequired ? Strings.yes : Strings.no;
case 8: return DesigMode.ToString();
case 9: return DesigType.ToString();
default: return string.Empty;
}
}
/// Retrieves parameters from UI controls
public CfgUpdateFlags UpdateParam(int i, string strValue)
public CfgUpdateFlags UpdateParam(int i, string str)
{
switch (i)
{
case 0:
for (DBUsed db = 0; db < DBUsed.Count; db++)
{
if (db.ToString() == strValue)
if (db.ToString() == str)
{
DBUsed = db;
return CfgUpdateFlags.None;
@@ -135,7 +142,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
case 1:
for (WMKind wm = 0; wm < WMKind.Count; wm++)
{
if (wm.ToString() == strValue)
if (wm.ToString() == str)
{
WMKind = wm;
return CfgUpdateFlags.None;
@@ -143,16 +150,17 @@ namespace TBF.Rig.Output.DB.SensusOracle
}
break;
case 2: WMTypeId = int.Parse(strValue); return CfgUpdateFlags.None;
case 3: YearOfManufacture = int.Parse(strValue); return CfgUpdateFlags.None;
case 4: SaveResults = (strValue == Strings.yes); return CfgUpdateFlags.None;
case 5: ReadStartInfo = (strValue == Strings.yes); return CfgUpdateFlags.None;
case 6: StartInfoIsRequired = (strValue == Strings.yes); return CfgUpdateFlags.None;
case 2: WMTypeId = str.ToLower().Contains("auto") ? -1 : int.Parse(str); break;
case 3: CreateWztypEntryIfMissing = (str == Strings.yes); break;
case 4: YearOfManufacture = int.Parse(str); break;
case 5: SaveResults = (str == Strings.yes); break;
case 6: ReadStartInfo = (str == Strings.yes); break;
case 7: StartInfoIsRequired = (str == Strings.yes); break;
case 7:
case 8:
for (DesigMode db = 0; db < DesigMode.Count; db++)
{
if (db.ToString() == strValue)
if (db.ToString() == str)
{
DesigMode = db;
return CfgUpdateFlags.None;
@@ -160,10 +168,10 @@ namespace TBF.Rig.Output.DB.SensusOracle
}
break;
case 8:
case 9:
for (Results.Output.LogType wm = 0; wm < Results.Output.LogType.Count; wm++)
{
if (wm.ToString() == strValue)
if (wm.ToString() == str)
{
DesigType = wm;
return CfgUpdateFlags.None;
@@ -176,7 +184,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
}
/// Verifies whether strings in UI controls represent valid parameters
public bool ValidateParam(int i, string strValue, out string message)
public bool ValidateParam(int i, string str, out string message)
{
message = string.Empty;
@@ -186,45 +194,46 @@ namespace TBF.Rig.Output.DB.SensusOracle
case 0:
for (DBUsed db = 0; db < DBUsed.Count; db++)
{
if (db.ToString() == strValue) return true;
if (db.ToString() == str) return true;
}
break;
case 1:
for (WMKind wm = 0; wm < WMKind.Count; wm++)
{
if (wm.ToString() == strValue) return true;
if (wm.ToString() == str) return true;
}
break;
case 2:
if (int.TryParse(strValue, out idummy) && idummy >= 0)
if (str.ToLower().Contains("auto") || (int.TryParse(str, out idummy) && idummy >= 0))
return true;
break;
case 3:
if (int.TryParse(strValue, out idummy) && idummy >= DateTime.Now.Year && idummy <= DateTime.Now.Year + 1)
case 5:
case 6:
case 7:
if (str == Strings.yes || str == Strings.no)
return true;
break;
case 4:
case 5:
case 6:
if (strValue == Strings.yes || strValue == Strings.no)
if (int.TryParse(str, out idummy) && idummy >= DateTime.Now.Year && idummy <= DateTime.Now.Year + 1)
return true;
break;
case 7:
for (DesigMode db = 0; db < DesigMode.Count; db++)
case 8:
for (DesigMode dm = 0; dm < DesigMode.Count; dm++)
{
if (db.ToString() == strValue) return true;
if (dm.ToString() == str) return true;
}
break;
case 8:
case 9:
for (Results.Output.LogType wm = 0; wm < Results.Output.LogType.Count; wm++)
{
if (wm.ToString() == strValue) return true;
if (wm.ToString() == str) return true;
}
break;
@@ -239,15 +248,16 @@ namespace TBF.Rig.Output.DB.SensusOracle
void CopyContentTo(ProcedureParams prms)
{
prms.DBUsed = this.DBUsed;
prms.WMKind = this.WMKind;
prms.WMTypeId = this.WMTypeId;
prms.YearOfManufacture = this.YearOfManufacture;
prms.SaveResults = this.SaveResults;
prms.ReadStartInfo = this.ReadStartInfo;
prms.StartInfoIsRequired = this.StartInfoIsRequired;
prms.DesigMode = this.DesigMode;
prms.DesigType = this.DesigType;
prms.DBUsed = DBUsed;
prms.WMKind = WMKind;
prms.WMTypeId = WMTypeId;
prms.CreateWztypEntryIfMissing = CreateWztypEntryIfMissing;
prms.YearOfManufacture = YearOfManufacture;
prms.SaveResults = SaveResults;
prms.ReadStartInfo = ReadStartInfo;
prms.StartInfoIsRequired = StartInfoIsRequired;
prms.DesigMode = DesigMode;
prms.DesigType = DesigType;
}
public IParamsProvider Clone()
@@ -0,0 +1,137 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using log4net;
using Common;
namespace TBF.Rig.Output.DB.SensusOracle
{
public class VtPruefpunktSollSd
{
private static readonly ILog log = LogManager.GetLogger(typeof(VtPruefpunktSollSd));
public int Pruefungsnr;
public float Q_soll;
public float Pruefzeit;
public float Posfehlerkalt;
public float Negfehlerkalt;
public float Posfehlerwarm;
public float Negfehlerwarm;
public int Pruefbereichmin;
public int Pruefbereichmax;
public string Qbezeichnung;
public float Mindruck;
public float Maxdruck;
public float Fkorrektur;
/// <summary>
/// Default constructor
/// </summary>
public VtPruefpunktSollSd()
{
}
/// <summary>
/// Create VtPruefpunktSollSd object from a test result.
/// </summary>
/// <param name="tr">Test result</param>
/// <param name="pruefungsnr">Test ix</param>
/// <returns>Created object</returns>
public static VtPruefpunktSollSd FromTestRslt(Results.Entities.TestRslt tr, int pruefungsnr = 0, float Qn = 0)
{
bool isQ3orQ4 = (Qn > 0 && (tr.Qfrom() + tr.Qto()) / 2 >= 0.9 * Qn) ||
tr.Name().ToLower().Contains("q3") ||
tr.Name().ToLower().Contains("q4");
var rslt = new VtPruefpunktSollSd
{
Pruefungsnr = pruefungsnr,
Q_soll = (float)Units.ConvertTo(Unit.lph, isQ3orQ4 ? tr.Qto() : tr.Qfrom()),
Pruefzeit = (float)tr.TargetTime(),
Posfehlerkalt = (float)tr.ErrLimHi(),
Negfehlerkalt = (float)tr.ErrLimLo(),
Posfehlerwarm = 0,
Negfehlerwarm = 0,
Pruefbereichmin = isQ3orQ4 ? 90 : 100,
Pruefbereichmax = isQ3orQ4 ? 100 : 110,
Qbezeichnung = tr.Name(),
Mindruck = 0,
Maxdruck = 0,
Fkorrektur = 0,
};
log.DebugFormat("FromTest: [{0}] created from test {1}", rslt, tr.Name());
return rslt;
}
/// <summary>
/// Create VtPruefpunktSollSd object from a test.
/// </summary>
/// <param name="test">Test</param>
/// <param name="pruefungsnr">Test ix</param>
/// <returns>Created object</returns>
public static VtPruefpunktSollSd FromTest(Config.Entities.Test test, int pruefungsnr = 0)
{
bool isQ3orQ4 = (test.Procedure.Qn > 0 && (test.Qfrom + test.Qto) / 2 >= 0.9 * test.Procedure.Qn) ||
test.Name.ToLower().Contains("q3") ||
test.Name.ToLower().Contains("q4");
var rslt = new VtPruefpunktSollSd
{
Pruefungsnr = pruefungsnr,
Q_soll = Units.ConvertTo(Unit.lph, isQ3orQ4 ? test.Qto : test.Qfrom),
Pruefzeit = test.TestTime,
Posfehlerkalt = test.ErrLimHi,
Negfehlerkalt = test.ErrLimLo,
Posfehlerwarm = 0,
Negfehlerwarm = 0,
Pruefbereichmin = isQ3orQ4 ? 90 : 100,
Pruefbereichmax = isQ3orQ4 ? 100 : 110,
Qbezeichnung = test.Name,
Mindruck = 0,
Maxdruck = 0,
Fkorrektur = 0,
};
log.DebugFormat("FromTest: [{0}] created from test {1}", rslt, test.Name);
return rslt;
}
public override string ToString()
{
return string.Format("{0} {1} {2}l/h time={3}s Elo={4}% Ehi={5}% Rlo={6} Rhi={7}",
Pruefungsnr, Qbezeichnung, Q_soll, Pruefzeit,
Negfehlerkalt, Posfehlerkalt, Pruefbereichmin, Pruefbereichmax);
}
/// <summary>
/// Compares two VtPruefpunktSollSd objects.
/// Tollerance for float values is 1/1000 (0.1%).
/// </summary>
/// <param name="t1">VtPruefpunktSollSd object 1</param>
/// <param name="t2">VtPruefpunktSollSd object 2</param>
/// <returns>true when equal</returns>
public static bool AreEqual(VtPruefpunktSollSd t1, VtPruefpunktSollSd t2)
{
if (t1 == null && t2 == null) return true; /// Both are null --> are equal
if (t1 == null || t2 == null) return false; /// One is null --> not equal
return t1.Pruefungsnr == t2.Pruefungsnr &&
((t1.Q_soll == 0 && t2.Q_soll == 0) || 2 * Math.Abs(t1.Q_soll - t2.Q_soll) / (t1.Q_soll + t2.Q_soll) < 0.001) &&
((t1.Pruefzeit == 0 && t2.Pruefzeit == 0) || 2 * Math.Abs(t1.Pruefzeit - t2.Pruefzeit) / (t1.Pruefzeit + t2.Pruefzeit) < 0.001) &&
((t1.Posfehlerkalt == 0 && t2.Posfehlerkalt == 0) || 2 * Math.Abs(t1.Posfehlerkalt - t2.Posfehlerkalt) / (t1.Posfehlerkalt + t2.Posfehlerkalt) < 0.001) &&
((t1.Negfehlerkalt == 0 && t2.Negfehlerkalt == 0) || 2 * Math.Abs(t1.Negfehlerkalt - t2.Negfehlerkalt) / (t1.Negfehlerkalt + t2.Negfehlerkalt) < 0.001) &&
((t1.Posfehlerwarm == 0 && t2.Posfehlerwarm == 0) || 2 * Math.Abs(t1.Posfehlerwarm - t2.Posfehlerwarm) / (t1.Posfehlerwarm + t2.Posfehlerwarm) < 0.001) &&
((t1.Negfehlerwarm == 0 && t2.Negfehlerwarm == 0) || 2 * Math.Abs(t1.Negfehlerwarm - t2.Negfehlerwarm) / (t1.Negfehlerwarm + t2.Negfehlerwarm) < 0.001) &&
t1.Pruefbereichmin == t2.Pruefbereichmin &&
t1.Pruefbereichmax == t2.Pruefbereichmax &&
t1.Qbezeichnung == t2.Qbezeichnung &&
((t1.Mindruck == 0 && t2.Mindruck == 0) || 2 * Math.Abs(t1.Mindruck - t2.Mindruck) / (t1.Mindruck + t2.Mindruck) < 0.001) &&
((t1.Maxdruck == 0 && t2.Maxdruck == 0) || 2 * Math.Abs(t1.Maxdruck - t2.Maxdruck) / (t1.Maxdruck + t2.Maxdruck) < 0.001) &&
t1.Fkorrektur == t2.Fkorrektur;
}
}
}
+222
View File
@@ -0,0 +1,222 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Linq;
using log4net;
#if MANAGED
using Oracle.ManagedDataAccess.Client;
#else
using Oracle.DataAccess.Client;
#endif
using Common;
namespace TBF.Rig.Output.DB.SensusOracle
{
public class VtWztypSd
{
private static readonly ILog log = LogManager.GetLogger(typeof(VtWztypSd));
public int IdWztyp;
public int RevWztyp;
public string Wztyp;
public string Art;
public string Metrolklasse;
public string Zulasszeichen;
public double Impulsrate;
public double Kontaktwert;
public bool Warmpruefen;
public bool Optikaufsetzen;
public string Formatausdruck;
public string Formatetikett;
public string Formatnetzwerk;
public string Formatzaehlernr;
public int IdWzgruppe;
public int Anzahlpruefungen;
public string Materialnr;
public float Qmax;
public byte Pruefart;
public byte Zaehlerflag;
public double Korrekturwert;
public int IdBenutzer;
public DateTime Aenderungsdatum;
public string Bemerkung;
public bool Verwendet;
public IList<VtPruefpunktSollSd> ListOfTests; /// null = To be loaded
/// <summary>
/// Default constructor
/// </summary>
public VtWztypSd()
{
ListOfTests = null;
}
/// <summary>
/// Create VtWztypSd object from a batch.
/// </summary>
/// <param name="batch"></param>
/// <returns></returns>
public static VtWztypSd FromBatch(Results.Entities.Batch batch, int idBenutzer)
{
var sampleWM = batch.WaterMeters.FirstOrDefault(x => (x != null && !x.Disabled && x.WaterMeterData != null));
if (sampleWM == null) return null;
var wmData = sampleWM.WaterMeterData;
if (wmData == null) return null;
int adjTestsCount = 0; /// Negative number
int finalTestsCount = 0; /// Positive number
foreach (var tr in batch.TestRslts)
{
if (tr.TestData.Publish == (sbyte)Publish.OnScreen)
adjTestsCount--;
if (tr.TestData.Publish == (sbyte)Publish.Always && tr.TestData.Evaluate)
finalTestsCount++;
}
var listOfTests = new List<VtPruefpunktSollSd>();
foreach (var tr in batch.TestRslts)
{
if (tr.TestData.Publish == (sbyte)Publish.OnScreen)
listOfTests.Add(VtPruefpunktSollSd.FromTestRslt(tr, adjTestsCount++, (float)wmData.Q3_Qn));
if (tr.TestData.Publish == (sbyte)Publish.Always && tr.TestData.Evaluate)
listOfTests.Add(VtPruefpunktSollSd.FromTestRslt(tr, finalTestsCount--, (float)wmData.Q3_Qn));
}
var rslt = new VtWztypSd()
{
IdWztyp = 0,
RevWztyp = 0,
Wztyp = batch.ProcedureName,
Art = "VT",
Metrolklasse = wmData.MetrologicalClass,
Zulasszeichen = wmData.ApprovalInfo,
Impulsrate = 0, // TODO
Kontaktwert = 0, // TODO
Warmpruefen = false,
Optikaufsetzen = true,
Formatausdruck = string.Empty, // TODO
Formatetikett = string.Empty, // TODO
Formatnetzwerk = string.Empty, // TODO
Formatzaehlernr = string.Empty, // TODO
IdWzgruppe = 0,
Anzahlpruefungen = listOfTests.Count,
Materialnr = string.Empty, // TODO
Qmax = (float)wmData.Q3_Qn,
Pruefart = 0,
Zaehlerflag = 0,
Korrekturwert = 0,
IdBenutzer = idBenutzer,
Aenderungsdatum = DateTime.Now,
Bemerkung = string.Empty, // TODO
Verwendet = true,
ListOfTests = listOfTests,
};
log.DebugFormat("FromProcedure: [{0}] created from proc. {1}", rslt, batch.ProcedureName);
return rslt;
}
public override string ToString()
{
return string.Format("Id={0} Rev={1} Q3={2} metro={3}", IdWztyp, RevWztyp, Qmax, Metrolklasse);
}
/// <summary>
/// Compares two VtWztypSd objects except of IdWztyp, RevWztyp,
/// IdBenutzer, Aenderungsdatum, Bemerkung and Verwendet members.
/// Tollerance for Impulsrate and Kontaktwert is 1/100000.
/// Tolleranve for Qmax and Korrekturwert is 1/1000 (0.1%).
/// </summary>
/// <param name="p1">VtWztypSd object 1/param>
/// <param name="p2">VtWztypSd object 2</param>
/// <returns>true when equal</returns>
public static bool AreEqual(VtWztypSd p1, VtWztypSd p2, Database db = null, OracleConnection conn = null)
{
if (p1 == null && p2 == null) return true; /// Both are null --> are equal
if (p1 == null || p2 == null) return false; /// One is null --> not equal
bool equal = p1.Wztyp == p2.Wztyp &&
p1.Art == p2.Art &&
p1.Metrolklasse == p2.Metrolklasse &&
p1.Zulasszeichen == p2.Zulasszeichen &&
((p1.Impulsrate == 0 && p2.Impulsrate == 0)
|| 2 * Math.Abs(p1.Impulsrate - p2.Impulsrate) / (p1.Impulsrate + p2.Impulsrate) < 0.00001) &&
((p1.Kontaktwert == 0 && p2.Kontaktwert == 0)
|| 2 * Math.Abs(p1.Kontaktwert - p2.Kontaktwert) / (p1.Kontaktwert + p2.Kontaktwert) < 0.00001) &&
p1.Warmpruefen == p2.Warmpruefen &&
p1.Optikaufsetzen == p2.Optikaufsetzen &&
p1.Formatausdruck == p2.Formatausdruck &&
p1.Formatetikett == p2.Formatetikett &&
p1.Formatnetzwerk == p2.Formatnetzwerk &&
p1.Formatzaehlernr == p2.Formatzaehlernr &&
p1.IdWzgruppe == p2.IdWzgruppe &&
p1.Anzahlpruefungen == p2.Anzahlpruefungen &&
p1.Materialnr == p2.Materialnr &&
((p1.Qmax == 0 && p2.Qmax == 0)
|| 2 * Math.Abs(p1.Qmax - p2.Qmax) / (p1.Qmax + p2.Qmax) < 0.001) &&
p1.Pruefart == p2.Pruefart &&
p1.Zaehlerflag == p2.Zaehlerflag &&
((p1.Korrekturwert == 0 && p2.Korrekturwert == 0)
|| 2 * Math.Abs(p1.Korrekturwert - p2.Korrekturwert) / (p1.Korrekturwert + p2.Korrekturwert) < 0.001);
if (!equal)
{
return false; /// Two procedures are different regardless of their tests
}
/// Load information about test form Oracle if it is missing
if (((p1.ListOfTests == null && p1.IdWztyp > 0 && p1.RevWztyp > 0) ||
(p2.ListOfTests == null && p2.IdWztyp > 0 && p2.RevWztyp > 0)) && db != null && conn != null)
{
try
{
conn.Open();
if (p1.ListOfTests == null && p1.IdWztyp > 0 && p1.RevWztyp > 0)
{
p1.ListOfTests = db.ReadVtPruefpunktSollSd(conn, p1.IdWztyp, p1.RevWztyp);
}
if (p2.ListOfTests == null && p2.IdWztyp > 0 && p2.RevWztyp > 0)
{
p2.ListOfTests = db.ReadVtPruefpunktSollSd(conn, p2.IdWztyp, p2.RevWztyp);
}
conn.Close();
}
catch (Exception exc)
{
log.ErrorFormat("Failed to read from VT_PRUEFPUNKT_SOLL_SD: {0}", exc.Message);
return false;
}
}
if (p1.ListOfTests == null || p2.ListOfTests == null)
{
log.ErrorFormat("Information about tests is missing");
return false;
}
if (p1.ListOfTests.Count != p2.ListOfTests.Count)
{
return false; /// Tests counts of two procedures are different
}
for (int i = 0; i < p1.ListOfTests.Count; i++)
{
if (!VtPruefpunktSollSd.AreEqual(p1.ListOfTests[i], p2.ListOfTests[i]))
{
return false; /// One pair of tests is different, tests are not equal
}
}
log.InfoFormat("Procedures are equal: {0}/{1}({2}) and {3}/{4}({5})",
p1.IdWztyp, p1.RevWztyp, p1.Wztyp, p2.IdWztyp, p2.RevWztyp, p2.Wztyp);
return true; /// Two procedures are equal
}
}
}