BatchResults.WaterMeters eliminated, Batch.WaterMeters are used instead ... many changes

This commit is contained in:
Milan Hanajik
2020-02-05 10:33:32 +01:00
parent 51523ea577
commit dc31e833ee
58 changed files with 574 additions and 490 deletions
+70 -92
View File
@@ -18,7 +18,6 @@ namespace Results
public Batch Batch;
public int WMPositionsCount;
public WaterMeter[] WaterMeters; /// Array length is WMPositionsCount
[XmlIgnore]
@@ -91,18 +90,24 @@ namespace Results
/// Add watermeter to an array, array index is WM position.
/// AddWaterMetersToBatch() has to be used before saving results.
///
d.WaterMeters = new WaterMeter[d.WMPositionsCount];
for (int i = 0; i < d.WMPositionsCount; i++)
for (int wmPos0 = 0; wmPos0 < d.WMPositionsCount; wmPos0++)
{
if (waterMeterDatas[i] == null) continue;
WaterMeterData wmd = WaterMeterData.UpdateList(d.WaterMeterDataList, waterMeterDatas[i]);
d.WaterMeters[i] = new WaterMeter()
{
Batch = d.Batch,
WaterMeterData = wmd,
WMPosition = i + 1,
YearOfProduction = year,
};
if (waterMeterDatas[wmPos0] == null)
{
d.Batch.WaterMeters.Add(new WaterMeter() { Batch = d.Batch,
WaterMeterData = null,
WMPosition = wmPos0 + 1,
YearOfProduction = year,
Disabled = true, });
}
else
{
WaterMeterData wmd = WaterMeterData.UpdateList(d.WaterMeterDataList, waterMeterDatas[wmPos0]);
d.Batch.WaterMeters.Add(new WaterMeter() { Batch = d.Batch,
WaterMeterData = wmd,
WMPosition = wmPos0 + 1,
YearOfProduction = year, });
}
}
@@ -120,32 +125,31 @@ namespace Results
for (int i = 0; i < d.WMPositionsCount; i++)
{
if (d.WaterMeters[i] == null) continue;
if (!t.IsPartCompatible(waterMeterParts[i])) continue;
///
/// Create empty watermeter test results and add them to the list and to dictionaries
///
IList<MeterTestRslt> wmtrs = d.WaterMeters[i].MeterTestRslts;
if (d.Batch.Compound)
{
/// Compound water meter
wmtrs.Add(new MeterTestRslt(d.WaterMeters[i], tr, Config.Entities.CompoundMeterId.CompoundMain));
wmtrs.Add(new MeterTestRslt(d.WaterMeters[i], tr, Config.Entities.CompoundMeterId.CompoundAux));
wmtrs.Add(new MeterTestRslt(d.WaterMeters[i], tr, Config.Entities.CompoundMeterId.Compound));
}
else if (d.Batch.HeatMeter)
{
/// Heat meter
wmtrs.Add(new MeterTestRslt(d.WaterMeters[i], tr, Config.Entities.CompoundMeterId.HeatMeterVolume));
wmtrs.Add(new MeterTestRslt(d.WaterMeters[i], tr, Config.Entities.CompoundMeterId.HeatMeterEnergy));
}
else
{
/// Water meter
wmtrs.Add(new MeterTestRslt(d.WaterMeters[i], tr, Config.Entities.CompoundMeterId.Single));
}
if (!d.Batch.WaterMeters[i].Disabled && t.IsPartCompatible(waterMeterParts[i]))
{
///
/// Create empty watermeter test results and add them to the list and to dictionaries
///
IList<MeterTestRslt> wmtrs = d.Batch.WaterMeters[i].MeterTestRslts;
if (d.Batch.Compound)
{
/// Compound water meter
wmtrs.Add(new MeterTestRslt(d.Batch.WaterMeters[i], tr, Config.Entities.CompoundMeterId.CompoundMain));
wmtrs.Add(new MeterTestRslt(d.Batch.WaterMeters[i], tr, Config.Entities.CompoundMeterId.CompoundAux));
wmtrs.Add(new MeterTestRslt(d.Batch.WaterMeters[i], tr, Config.Entities.CompoundMeterId.Compound));
}
else if (d.Batch.HeatMeter)
{
/// Heat meter
wmtrs.Add(new MeterTestRslt(d.Batch.WaterMeters[i], tr, Config.Entities.CompoundMeterId.HeatMeterVolume));
wmtrs.Add(new MeterTestRslt(d.Batch.WaterMeters[i], tr, Config.Entities.CompoundMeterId.HeatMeterEnergy));
}
else
{
/// Water meter
wmtrs.Add(new MeterTestRslt(d.Batch.WaterMeters[i], tr, Config.Entities.CompoundMeterId.Single));
}
}
}
}
}
@@ -163,11 +167,17 @@ namespace Results
BatchResults batchResults = new BatchResults(wmPosMax);
batchResults.Batch = batch;
batchResults.WaterMeters = new WaterMeter[wmPosMax];
for (int i = 0; i < batch.WaterMeters.Count; i++)
/// Insert missing disabled water meters
for (int wmNr0 = 0; wmNr0 < wmPosMax; wmNr0++)
{
WaterMeter wm = batch.WaterMeters[i];
batchResults.WaterMeters[wm.WMPosition - 1] = wm;
if (batch.WaterMeters[wmNr0].WMPosition > wmNr0 + 1)
{
batch.WaterMeters.Insert(wmNr0, new WaterMeter() { Batch = batch,
WaterMeterData = null,
WMPosition = wmNr0 + 1,
YearOfProduction = 0,
Disabled = true, });
}
}
return batchResults;
@@ -178,11 +188,11 @@ namespace Results
return Batch.GetTestRslt(name, part);
}
public MeterTestRslt GetMeterTestRslt(string name, int wmnr0, Config.Entities.CompoundMeterId meterId)
public MeterTestRslt GetMeterTestRslt(string name, int wmNr0, Config.Entities.CompoundMeterId meterId)
{
if (WaterMeters[wmnr0] != null)
if (Batch.WaterMeters != null && Batch.WaterMeters.Count > wmNr0 && !Batch.WaterMeters[wmNr0].Disabled)
{
return WaterMeters[wmnr0].GetMeterTestRslt(name, meterId);
return Batch.WaterMeters[wmNr0].GetMeterTestRslt(name, meterId);
}
return null;
}
@@ -194,11 +204,11 @@ namespace Results
/// <returns>true = all tests done</returns>
public bool AllTestsDone()
{
for (int i = 0; i < WMPositionsCount; i++)
for (int wmNr0 = 0; wmNr0 < WMPositionsCount; wmNr0++)
{
if ((WaterMeters[i] != null) && !WaterMeters[i].Disabled)
if (Batch.WaterMeters != null && Batch.WaterMeters.Count > wmNr0 && !Batch.WaterMeters[wmNr0].Disabled)
{
foreach (var mtr in WaterMeters[i].MeterTestRslts)
foreach (var mtr in Batch.WaterMeters[wmNr0].MeterTestRslts)
{
if (!mtr.TestDone) return false;
}
@@ -208,44 +218,15 @@ namespace Results
}
/// <summary>
/// Adds non-null water meters from an array to a Batch water meters list.
/// This method should be used when results are prepared and
/// all disabled water meters are deleted.
/// </summary>
public void AddWaterMetersToBatch()
{
for (int i = 0; i < WMPositionsCount; i++)
{
if (WaterMeters[i] != null)
{
WaterMeters[i].Passed = WaterMeters[i].PassedFromTests();
if (!WaterMeters[i].Disabled)
{
Batch.WaterMeters.Add(WaterMeters[i]);
}
}
}
}
/// <summary>
/// Save public fields of this class to the XML file.
/// </summary>
public void Save(string fileName)
{
try
using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(fileName)))
{
/// Write settings to an unencrypted file
using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(fileName)))
{
WriteBinary(writer);
log.Warn("LocalSettings succesfully saved");
}
}
catch (Exception e)
{
log.ErrorFormat("Failed to save to '{0}': {1}", fileName, e.Message);
WriteBinary(writer);
log.Warn("LocalSettings succesfully saved");
}
}
@@ -253,14 +234,17 @@ namespace Results
{
Batch.WriteBinary(writer);
writer.Write(WMPositionsCount);
writer.Write((WaterMeters != null) ? WaterMeters.Length : (int)0);
if (WaterMeters != null)
}
public static BatchResults Load(string fileName)
{
BatchResults br = new BatchResults();
using (BinaryReader reader = new BinaryReader(File.OpenRead(fileName)))
{
for (int i = 0; i < WaterMeters.Length; i++)
{
WaterMeters[i].WriteBinary(writer);
}
br.ReadBinary(reader);
log.Warn("LocalSettings succesfully saved");
}
return br;
}
public virtual void ReadBinary(BinaryReader reader)
@@ -269,12 +253,6 @@ namespace Results
Batch.ReadBinary(reader);
WMPositionsCount = reader.ReadInt32();
int waterMetersLength = reader.ReadInt32();
WaterMeters = new WaterMeter[waterMetersLength];
for (int i = 0; i < waterMetersLength; i++)
{
WaterMeters[i] = new WaterMeter();
WaterMeters[i].ReadBinary(reader);
}
}
}
}