tbf/TBF/BenchControl/Output/SensusTestInfo.cs

148 lines
6.1 KiB
C#

///
/// Copyright (c) 2018 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
namespace TBF.BenchControl.Output
{
public enum LogType
{
Just_Q1Q2Q3,
Just_Q1Q2Q2adjQ3, /// Greece
Just_Q1Q2__Q3,
DEWA, /// Q1, Q2adj, Q2, Q3, Q4
Suez, /// two directions
Count
}
public enum Range
{
R90_100,
R100_110,
}
///
/// Information extracted from VT_PRUEFPUNKT_SOLL_SD for a given watermeter by query:
/// SELECT * FROM VT_PRUEFPUNKT_SOLL_SD WHERE ANBID=4 AND ID_WZTyp=x AND Rev_WZTyp=y
///
public class SensusTestInfo
{
public int PruefungsNr; /// Identification of a flow
public string PruefungsNrStr; /// Identification of a flow - string form for log files
public string QBezeichnung; /// Flow name in Oracle database
public Range Range; /// Range.R90_100 or Range.R100_110 (flow range in % of a target flow)
public string TestName; /// Test name in TBF procedures
public SensusTestInfo(int prNr, string prNrStr, string qBz, Range range, string testName)
{
PruefungsNr = prNr;
PruefungsNrStr = prNrStr;
QBezeichnung = qBz;
Range = range;
TestName = testName;
}
/// <summary>
/// Determines whether two test infos are compatible (equal except of 'Just'=='Just1' alternatives).
/// Assumes 'oraDbTInfo' is sorted as follows:
/// oraDbTInfo = oraDbTInfo.OrderBy(x => x.PruefungsNr).ToList<SensusTestInfo>();
/// Complete test infos are typically returned by TBF.BenchControl.Output.SensusCommon.GetTestInfos().
/// </summary>
/// <param name="oraDbTInfo">SensusTestInfo-s form the Oracle DB</param>
/// <param name="myCompleteTInfo">Complete SensusTestInfo-s (incl. TBF test names)</param>
/// <returns>true when two test info-s are compatible</returns>
public static bool AreCompatible(IList<SensusTestInfo> oraDbTInfo, SensusTestInfo[] myCompleteTInfo)
{
if (oraDbTInfo.Count != myCompleteTInfo.Length) return false;
for (int i = 0; i < myCompleteTInfo.Length; i++)
{
if (oraDbTInfo[i].PruefungsNr != myCompleteTInfo[i].PruefungsNr)
{
return false;
}
if ((myCompleteTInfo[i].QBezeichnung == "Just") && !oraDbTInfo[i].QBezeichnung.Contains("Just"))
{
return false;
}
if ((myCompleteTInfo[i].QBezeichnung != "Just") && (oraDbTInfo[i].QBezeichnung != myCompleteTInfo[i].QBezeichnung))
{
return false;
}
}
return true;
}
public static SensusTestInfo[] GetTestInfos(LogType logType)
{
switch (logType)
{
default:
case LogType.Just_Q1Q2Q3:
return new SensusTestInfo[]
{
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q3", Range.R90_100, "Q3"),
};
case LogType.Just_Q1Q2Q2adjQ3:
return new SensusTestInfo[]
{
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q2adj", Range.R100_110, "Q2adj"),
new SensusTestInfo( 4, "04", "Q3", Range.R90_100, "Q3"),
};
case LogType.Just_Q1Q2__Q3:
return new SensusTestInfo[]
{
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 5, "05", "Q3", Range.R90_100, "Q3"),
};
case LogType.DEWA:
return new SensusTestInfo[]
{
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q2", Range.R100_110, "Q2adj"),
new SensusTestInfo( 4, "04", "Q3", Range.R100_110, "Q3"),
new SensusTestInfo( 5, "05", "Q4", Range.R90_100, "Q4"),
};
case LogType.Suez:
return new SensusTestInfo[]
{
new SensusTestInfo(-2, "-2", "Just", Range.R90_100, "Qjust_A4"),
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Qjust_A0"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1_lr"),
new SensusTestInfo( 2, "02", "Q2ac", Range.R100_110, "Q2ac_lr"),
new SensusTestInfo( 3, "03", "Q2", Range.R100_110, "Q2_lr"),
new SensusTestInfo( 5, "05", "Q3", Range.R90_100, "Q3_lr"),
new SensusTestInfo( 6, "06", "Q1", Range.R100_110, "Q1_rl"),
new SensusTestInfo( 7, "07", "Q2ac", Range.R100_110, "Q2ac_rl"),
new SensusTestInfo( 8, "08", "Q2", Range.R100_110, "Q2_rl"),
new SensusTestInfo(10, "10", "Q3", Range.R90_100, "Q3_rl"),
};
}
}
}
}