diff --git a/Results/BatchResults.cs b/Results/BatchResults.cs index a0a4be558..4e16dc68b 100644 --- a/Results/BatchResults.cs +++ b/Results/BatchResults.cs @@ -2,18 +2,47 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Xml.Serialization; +using log4net; using Results.Entities; +using System.IO; +using System.Xml; namespace Results { - public class BatchResults + public class BatchResults { - public readonly int WMPositionsCount; + private static readonly ILog log = LogManager.GetLogger(typeof(BatchResults)); + public virtual System.Xml.Schema.XmlSchema GetSchema() { return null; } - public IList TestDataList; - public IList ComponentsList; - public IList WaterMeterDataList; + public Batch Batch; + public int WMPositionsCount; + public WaterMeter[] WaterMeters; /// Array length is WMPositionsCount + + + [XmlIgnore] + public IList TestDataList; + + [XmlIgnore] + public IList ComponentsList; + + [XmlIgnore] + public IList WaterMeterDataList; + + + /// + /// Parameterless constructor required for serialization + /// + private BatchResults() + : this(Config.Data.WMsCount) + { + } + + /// + /// Constructor invoked by static BatchResults NewFromProcedure(...) + /// + /// Watermeters count private BatchResults(int wmPositionsCount) { WMPositionsCount = wmPositionsCount; @@ -24,9 +53,6 @@ namespace Results } - public Batch Batch; - public WaterMeter[] WaterMeters; - public static BatchResults NewFromProcedure(int batchNr, int benchId, string benchName, string a1, string a2, string a3, string a4, string a5, string user, int userNr, string programVer, Config.Entities.Procedure procedure, WaterMeterData[] waterMeterDatas, int[] waterMeterParts, double densityCorr) @@ -201,5 +227,54 @@ namespace Results } } } - } + + + /// + /// Save public fields of this class to the XML file. + /// + public void Save(string fileName) + { + try + { + /// 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); + } + } + + public virtual void WriteBinary(BinaryWriter writer) + { + Batch.WriteBinary(writer); + writer.Write(WMPositionsCount); + writer.Write((WaterMeters != null) ? WaterMeters.Length : (int)0); + if (WaterMeters != null) + { + for (int i = 0; i < WaterMeters.Length; i++) + { + WaterMeters[i].WriteBinary(writer); + } + } + } + + public virtual void ReadBinary(BinaryReader reader) + { + Batch = new Batch(); + 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); + } + } + } } diff --git a/Results/Entities/Batch.cs b/Results/Entities/Batch.cs index 9a6e3031f..391b7ad2e 100644 --- a/Results/Entities/Batch.cs +++ b/Results/Entities/Batch.cs @@ -1,14 +1,15 @@ /// -/// Copyright (c) 2015-2016 Sensus Metering Systems +/// Copyright (c) 2015-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; +using System.IO; namespace Results.Entities { public class Batch { - public virtual int Id { get; protected set; } + public virtual int Id { get; protected set; } public virtual int BatchNr { get; set; } public virtual int TestBenchId { get; set; } public virtual string TestBenchName { get; set; } /// CEVAK, not mapped to DB @@ -50,6 +51,21 @@ namespace Results.Entities Tests = new List(); WaterMeters = new List(); TestRslts = new List(); + + TestBenchName = string.Empty; + Address1 = string.Empty; + Address2 = string.Empty; + Address3 = string.Empty; + Address4 = string.Empty; + Address5 = string.Empty; + ProgramVersion = string.Empty; + UserName = string.Empty; + ProcedureName = string.Empty; + ProcedureDescription = string.Empty; + WatermetersStr = string.Empty; + ProtocolTitle = string.Empty; + ProtocolTitle = string.Empty; + Remark = string.Empty; } public virtual int PassedMetersCount() @@ -214,5 +230,83 @@ namespace Results.Entities Custom2, Custom3, StartTime, EndTime, Dirty, RsltsSent, RsltsPrinted); } - } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(BatchNr); + writer.Write(TestBenchId); + writer.Write(TestBenchName); + writer.Write(Address1); + writer.Write(Address2); + writer.Write(Address3); + writer.Write(Address4); + writer.Write(Address5); + writer.Write(ProgramVersion); + writer.Write(UserName); + writer.Write(UserNumber); + writer.Write(ProcedureName); + writer.Write(ProcedureDescription); + writer.Write(ProcedureRevision); + writer.Write(WatermetersStr); + writer.Write(ProtocolTitle); + writer.Write(Remark); + writer.Write(DensityCorr); + writer.Write(Custom2); + writer.Write(Custom3); + writer.Write(Counter6); + writer.Write(Counter7); + writer.Write(Counter8); + writer.Write(Counter9); + writer.Write(Counter10); + writer.Write(StartTime.ToString()); + writer.Write(EndTime.ToString()); + writer.Write(Dirty); + writer.Write(RsltsSent); + writer.Write(RsltsPrinted); + writer.Write(Compound); + writer.Write(HeatMeter); + + /// TODO: Write lists + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + BatchNr = reader.ReadInt32(); + TestBenchId = reader.ReadInt32(); + TestBenchName = reader.ReadString(); + Address1 = reader.ReadString(); + Address2 = reader.ReadString(); + Address3 = reader.ReadString(); + Address4 = reader.ReadString(); + Address5 = reader.ReadString(); + ProgramVersion = reader.ReadString(); + UserName = reader.ReadString(); + UserNumber = reader.ReadInt32(); + ProcedureName = reader.ReadString(); + ProcedureDescription = reader.ReadString(); + ProcedureRevision = reader.ReadInt32(); + WatermetersStr = reader.ReadString(); + ProtocolTitle = reader.ReadString(); + Remark = reader.ReadString(); + DensityCorr = reader.ReadInt32(); + Custom2 = reader.ReadInt32(); + Custom3 = reader.ReadInt32(); + Counter6 = reader.ReadInt32(); + Counter7 = reader.ReadInt32(); + Counter8 = reader.ReadInt32(); + Counter9 = reader.ReadInt32(); + Counter10 = reader.ReadInt32(); + StartTime = DateTime.Parse(reader.ReadString()); + EndTime = DateTime.Parse(reader.ReadString()); + Dirty = reader.ReadBoolean(); + RsltsSent = reader.ReadBoolean(); + RsltsPrinted = reader.ReadBoolean(); + Compound = reader.ReadBoolean(); + HeatMeter = reader.ReadBoolean(); + + /// TODO: Read lists + } + } } diff --git a/Results/Entities/Components.cs b/Results/Entities/Components.cs index 2a8017b28..7c49d2203 100644 --- a/Results/Entities/Components.cs +++ b/Results/Entities/Components.cs @@ -1,16 +1,17 @@ /// -/// Copyright (c) 2016 Sensus Metering Systems +/// Copyright (c) 2016-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Linq; +using System.IO; namespace Results.Entities { - public class Components + public class Components { - public virtual int Id { get; protected set; } - public virtual int TestBenchId { get; set; } + public virtual int Id { get; protected set; } + public virtual int TestBenchId { get; set; } public virtual string TestBenchName { get; set; } public virtual string Pump { get; set; } public virtual string RegValve { get; set; } @@ -90,5 +91,35 @@ namespace Results.Entities list.Add(item); /// Item not fund in the list, it is added to the list return item; } - } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(TestBenchId); + writer.Write(TestBenchName); + writer.Write(Pump); + writer.Write(RegValve); + writer.Write(Flowmeter); + writer.Write(Diverter); + writer.Write(Scale); + writer.Write(Custom1); + writer.Write(Custom2); + writer.Write(Custom3); + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + TestBenchId = reader.ReadInt32(); + TestBenchName = reader.ReadString(); + Pump = reader.ReadString(); + RegValve = reader.ReadString(); + Flowmeter = reader.ReadString(); + Diverter = reader.ReadString(); + Scale = reader.ReadString(); + Custom1 = reader.ReadString(); + Custom2 = reader.ReadString(); + Custom3 = reader.ReadString(); + } + } } diff --git a/Results/Entities/MeterTestRslt.cs b/Results/Entities/MeterTestRslt.cs index 4131ca797..041b20257 100644 --- a/Results/Entities/MeterTestRslt.cs +++ b/Results/Entities/MeterTestRslt.cs @@ -1,14 +1,14 @@ /// -/// Copyright (c) 2013-2018 Sensus Slovensko a.s. +/// Copyright (c) 2013-2020 Sensus Slovensko a.s. /// using System; +using System.IO; namespace Results.Entities { public class MeterTestRslt { - public virtual int Id { get; protected set; } - + public virtual int Id { get; protected set; } public virtual byte CompoundMeterId { get; set; } /// 0=single, 1=compound/main, 2=compound/aux., 3=compound/overal, 4=heat meter volume, 5=heat meter energy public virtual int RegReaderType { get; set; } /// Not mapped to the DB, does not depend on localization and customer @@ -143,5 +143,59 @@ namespace Results.Entities { return (TestRslt != null) ? Name() : base.ToString(); } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(CompoundMeterId); + writer.Write(RegReaderType); + writer.Write(PulsesMeter); + writer.Write(PulsesMaster); + writer.Write(PulsesPerLiter); + writer.Write(VolumeStart); + writer.Write(VolumeEnd); + writer.Write(VolumeMeter); + writer.Write(VolumeRef); + writer.Write(TimestampStart); + writer.Write(TimestampEnd); + writer.Write(TestTime); + writer.Write(Error); + writer.Write(ErrorIndicators); + writer.Write(InfoIndicators); + writer.Write(KorrErrQ); + writer.Write(TestDone); + writer.Write(Passed); +#if ORACLE_DB + writer.Write(LastError); +#endif + /// TODO: Write lists + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + CompoundMeterId = reader.ReadByte(); + RegReaderType = reader.ReadInt32(); + PulsesMeter = reader.ReadDouble(); + PulsesMaster = reader.ReadDouble(); + PulsesPerLiter = reader.ReadDouble(); + VolumeStart = reader.ReadDouble(); + VolumeEnd = reader.ReadDouble(); + VolumeMeter = reader.ReadDouble(); + VolumeRef = reader.ReadDouble(); + TimestampStart = reader.ReadDouble(); + TimestampEnd = reader.ReadDouble(); + TestTime = reader.ReadDouble(); + Error = reader.ReadDouble(); + ErrorIndicators = reader.ReadInt64(); + InfoIndicators = reader.ReadInt64(); + KorrErrQ = reader.ReadDouble(); + TestDone = reader.ReadBoolean(); + Passed = reader.ReadBoolean(); +#if ORACLE_DB + LastError = reader.ReadDouble(); +#endif + /// TODO: Read lists + } } } diff --git a/Results/Entities/TestData.cs b/Results/Entities/TestData.cs index 48a6ef650..031f17ea4 100644 --- a/Results/Entities/TestData.cs +++ b/Results/Entities/TestData.cs @@ -1,18 +1,19 @@ /// -/// Copyright (c) 2016 Sensus Metering Systems +/// Copyright (c) 2016-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Linq; +using System.IO; namespace Results.Entities { /// /// Test, consisting of one or more repetitions of the test 'SingleTest'. /// - public class TestData + public class TestData { - public virtual int Id { get; protected set; } + public virtual int Id { get; protected set; } public virtual string Name { get; set; } public virtual int Repeats { get; set; } public virtual double Qtg { get; set; } /// [m3/h] flow range low limit @@ -107,5 +108,47 @@ namespace Results.Entities list.Add(item); /// Item not fund in the list, it is added to the list return item; } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(Name); + writer.Write(Repeats); + writer.Write(Qtg); + writer.Write(Qfrom); + writer.Write(Qto); + writer.Write(TargetVolume); + writer.Write(TargetTime); + writer.Write(Method); + writer.Write(ErrLimLo); + writer.Write(ErrLimHi); + writer.Write(ErrLimMargin); + writer.Write(DoControlWaterTemp); + writer.Write(TempLimLo); + writer.Write(TempLimHi); + writer.Write(Publish); + writer.Write(Evaluate); + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + Name = reader.ReadString(); + Repeats = reader.ReadInt32(); + Qtg = reader.ReadDouble(); + Qfrom = reader.ReadDouble(); + Qto = reader.ReadDouble(); + TargetVolume = reader.ReadDouble(); + TargetTime = reader.ReadDouble(); + Method = reader.ReadString(); + ErrLimLo = reader.ReadDouble(); + ErrLimHi = reader.ReadDouble(); + ErrLimMargin = reader.ReadDouble(); + DoControlWaterTemp = reader.ReadBoolean(); + TempLimLo = reader.ReadSingle(); + TempLimHi = reader.ReadSingle(); + Publish = reader.ReadSByte(); + Evaluate = reader.ReadBoolean(); + } } } diff --git a/Results/Entities/TestRslt.cs b/Results/Entities/TestRslt.cs index fc93d8004..d93206426 100644 --- a/Results/Entities/TestRslt.cs +++ b/Results/Entities/TestRslt.cs @@ -1,15 +1,16 @@ /// -/// Copyright (c) 2015-2018 Sensus Slovensko a.s. +/// Copyright (c) 2015-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Text; +using System.IO; namespace Results.Entities { public class TestRslt { - /// Identity + /// Identity public virtual int Id { get; protected set; } public virtual Batch Batch { get; set; } public virtual TestData TestData { get; set; } @@ -395,5 +396,239 @@ namespace Results.Entities Custom1, Custom2, Custom3, Custom4, Custom5, Custom6, Custom7, Custom8, Custom9, Custom10, DiverterStart, DiverterEnd); } - } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + TestData.WriteBinary(writer); /// Writes TestData, does not write batch + Components.WriteBinary(writer); /// Writes Components + writer.Write(Part); + writer.Write(RepetitionNr); + writer.Write(MethodClass); + writer.Write(TestDone); + writer.Write(Remark); + writer.Write(StartTime.ToString()); + writer.Write(EndTime.ToString()); + writer.Write(FlowSetTime); + writer.Write(TimeBtwnMassMsrmnts); + writer.Write(TestTime); + writer.Write(TestTimeCorrection); + writer.Write(PulsesMaster); + writer.Write(TotalPulsesMstr); + writer.Write(ConstMasterRaw); + writer.Write(ConstMasterCorr); + writer.Write(ConstMaster); + writer.Write(MassStartRaw); + writer.Write(MassStart); + writer.Write(MassEndRaw); + writer.Write(MassEnd); + writer.Write(DensityIn); + writer.Write(DensityLine); + writer.Write(DensityDiv); + writer.Write(Buoyancy); + writer.Write(FlowMass); + writer.Write(FlowVolume); + writer.Write(VolumeCTV); + writer.Write(VolumeMaster); + writer.Write(ErrorMaster); + writer.Write(DiverterStart); + writer.Write(DivStart10); + writer.Write(DivStart50); + writer.Write(DivStart90); + writer.Write(DiverterEnd); + writer.Write(DivEnd90); + writer.Write(DivEnd50); + writer.Write(DivEnd10); + writer.Write(ErrorFlags); + writer.Write(InfoFlags); + writer.Write(RefEnergy); + writer.Write(AmbTempMean); + writer.Write(AmbTempStart); + writer.Write(AmbTempEnd); + writer.Write(AmbTempMin); + writer.Write(AmbTempMax); + writer.Write(AmbPressMean); + writer.Write(AmbPressStart); + writer.Write(AmbPressEnd); + writer.Write(AmbPressMin); + writer.Write(AmbPressMax); + writer.Write(AmbHumiMean); + writer.Write(AmbHumiStart); + writer.Write(AmbHumiEnd); + writer.Write(AmbHumiMin); + writer.Write(AmbHumiMax); + writer.Write(PressUpMean); + writer.Write(PressUpStart); + writer.Write(PressUpEnd); + writer.Write(PressUpMin); + writer.Write(PressUpMax); + writer.Write(PressDownMean); + writer.Write(PressDownStart); + writer.Write(PressDownEnd); + writer.Write(PressDownMin); + writer.Write(PressDownMax); + writer.Write(PressDeltaMean); + writer.Write(PressDeltaStart); + writer.Write(PressDeltaEnd); + writer.Write(PressDeltaMin); + writer.Write(PressDeltaMax); + writer.Write(TempUpMean); + writer.Write(TempUpStart); + writer.Write(TempUpEnd); + writer.Write(TempUpMin); + writer.Write(TempUpMax); + writer.Write(TempDownMean); + writer.Write(TempDownStart); + writer.Write(TempDownEnd); + writer.Write(TempDownMin); + writer.Write(TempDownMax); + writer.Write(TempDivMean); + writer.Write(TempDivStart); + writer.Write(TempDivEnd); + writer.Write(TempDivMin); + writer.Write(TempDivMax); + writer.Write(FlowMean); + writer.Write(FlowStart); + writer.Write(FlowEnd); + writer.Write(FlowMin); + writer.Write(FlowMax); + writer.Write(Uncertnt); + writer.Write(UncertntScale); + writer.Write(UncertntDensity); + writer.Write(UncertntTemp); + writer.Write(UncertntPressure); + writer.Write(Custom1); + writer.Write(Custom2); + writer.Write(Custom3); + writer.Write(Custom4); + writer.Write(Custom5); + writer.Write(Custom6); + writer.Write(Custom7); + writer.Write(Custom8); + writer.Write(Custom9); + writer.Write(Custom10); + writer.Write(Counter1); + writer.Write(Counter2); + writer.Write(Counter3); + writer.Write(Counter4); + writer.Write(Counter5); + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + TestData.ReadBinary(reader); /// Reads TestData, does not read batch + Components.ReadBinary(reader); /// Reads Components + Part = reader.ReadInt32(); + RepetitionNr = reader.ReadInt32(); + MethodClass = reader.ReadString(); + TestDone = reader.ReadBoolean(); + Remark = reader.ReadString(); + StartTime = DateTime.Parse(reader.ReadString()); + EndTime = DateTime.Parse(reader.ReadString()); + FlowSetTime = reader.ReadInt32(); + TimeBtwnMassMsrmnts = reader.ReadInt32(); + TestTime = reader.ReadDouble(); + TestTimeCorrection = reader.ReadDouble(); + PulsesMaster = reader.ReadDouble(); + TotalPulsesMstr = reader.ReadDouble(); + ConstMasterRaw = reader.ReadDouble(); + ConstMasterCorr = reader.ReadDouble(); + ConstMaster = reader.ReadDouble(); + MassStartRaw = reader.ReadDouble(); + MassStart = reader.ReadDouble(); + MassEndRaw = reader.ReadDouble(); + MassEnd = reader.ReadDouble(); + DensityIn = reader.ReadDouble(); + DensityLine = reader.ReadDouble(); + DensityDiv = reader.ReadDouble(); + Buoyancy = reader.ReadDouble(); + FlowMass = reader.ReadDouble(); + FlowVolume = reader.ReadDouble(); + VolumeCTV = reader.ReadDouble(); + VolumeMaster = reader.ReadDouble(); + ErrorMaster = reader.ReadDouble(); + DiverterStart = reader.ReadSingle(); + DivStart10 = reader.ReadSingle(); + DivStart50 = reader.ReadSingle(); + DivStart90 = reader.ReadSingle(); + DiverterEnd = reader.ReadSingle(); + DivEnd90 = reader.ReadSingle(); + DivEnd50 = reader.ReadSingle(); + DivEnd10 = reader.ReadSingle(); + ErrorFlags = reader.ReadInt64(); + InfoFlags = reader.ReadInt64(); + RefEnergy = reader.ReadDouble(); + AmbTempMean = reader.ReadSingle(); + AmbTempStart = reader.ReadSingle(); + AmbTempEnd = reader.ReadSingle(); + AmbTempMin = reader.ReadSingle(); + AmbTempMax = reader.ReadSingle(); + AmbPressMean = reader.ReadSingle(); + AmbPressStart = reader.ReadSingle(); + AmbPressEnd = reader.ReadSingle(); + AmbPressMin = reader.ReadSingle(); + AmbPressMax = reader.ReadSingle(); + AmbHumiMean = reader.ReadSingle(); + AmbHumiStart = reader.ReadSingle(); + AmbHumiEnd = reader.ReadSingle(); + AmbHumiMin = reader.ReadSingle(); + AmbHumiMax = reader.ReadSingle(); + PressUpMean = reader.ReadSingle(); + PressUpStart = reader.ReadSingle(); + PressUpEnd = reader.ReadSingle(); + PressUpMin = reader.ReadSingle(); + PressUpMax = reader.ReadSingle(); + PressDownMean = reader.ReadSingle(); + PressDownStart = reader.ReadSingle(); + PressDownEnd = reader.ReadSingle(); + PressDownMin = reader.ReadSingle(); + PressDownMax = reader.ReadSingle(); + PressDeltaMean = reader.ReadSingle(); + PressDeltaStart = reader.ReadSingle(); + PressDeltaEnd = reader.ReadSingle(); + PressDeltaMin = reader.ReadSingle(); + PressDeltaMax = reader.ReadSingle(); + TempUpMean = reader.ReadSingle(); + TempUpStart = reader.ReadSingle(); + TempUpEnd = reader.ReadSingle(); + TempUpMin = reader.ReadSingle(); + TempUpMax = reader.ReadSingle(); + TempDownMean = reader.ReadSingle(); + TempDownStart = reader.ReadSingle(); + TempDownEnd = reader.ReadSingle(); + TempDownMin = reader.ReadSingle(); + TempDownMax = reader.ReadSingle(); + TempDivMean = reader.ReadSingle(); + TempDivStart = reader.ReadSingle(); + TempDivEnd = reader.ReadSingle(); + TempDivMin = reader.ReadSingle(); + TempDivMax = reader.ReadSingle(); + FlowMean = reader.ReadSingle(); + FlowStart = reader.ReadSingle(); + FlowEnd = reader.ReadSingle(); + FlowMin = reader.ReadSingle(); + FlowMax = reader.ReadSingle(); + Uncertnt = reader.ReadSingle(); + UncertntScale = reader.ReadSingle(); + UncertntDensity = reader.ReadSingle(); + UncertntTemp = reader.ReadSingle(); + UncertntPressure = reader.ReadSingle(); + Custom1 = reader.ReadSingle(); + Custom2 = reader.ReadSingle(); + Custom3 = reader.ReadSingle(); + Custom4 = reader.ReadSingle(); + Custom5 = reader.ReadSingle(); + Custom6 = reader.ReadSingle(); + Custom7 = reader.ReadSingle(); + Custom8 = reader.ReadSingle(); + Custom9 = reader.ReadSingle(); + Custom10 = reader.ReadSingle(); + Counter1 = reader.ReadInt32(); + Counter2 = reader.ReadInt32(); + Counter3 = reader.ReadInt32(); + Counter4 = reader.ReadInt32(); + Counter5 = reader.ReadInt32(); + } + } } diff --git a/Results/Entities/WaterMeter.cs b/Results/Entities/WaterMeter.cs index 98c259b0b..6a6f68035 100644 --- a/Results/Entities/WaterMeter.cs +++ b/Results/Entities/WaterMeter.cs @@ -1,15 +1,15 @@ /// -/// Copyright (c) 2015-2017 Sensus Metering Systems +/// Copyright (c) 2015-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Text; +using System.IO; using Config.Entities; using Results.Resources; namespace Results.Entities { - public enum ResultCode { None = 0, @@ -41,7 +41,7 @@ namespace Results.Entities public class WaterMeter { - public virtual int Id { get; protected set; } + public virtual int Id { get; protected set; } public virtual string SerialNr { get; set; } /// S/N _or_ S/N of the main meter of a compound meter _or_ PCB Number of an iPerl water meter public virtual string SerialNrAux { get; set; } /// S/N of the aux. meter of a compound meter _or_ a complete assigned S/N of an iPerl water meter public virtual string PurchaseOrder { get; set; } @@ -534,5 +534,129 @@ namespace Results.Entities return NotCompletedColor; } } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(SerialNr); + writer.Write(SerialNrAux); + writer.Write(PurchaseOrder); + writer.Write(YearOfProduction); + writer.Write(WMPosition); + writer.Write(EndState); + writer.Write(EndStateAux); + writer.Write(QRise); + writer.Write(QFall); + writer.Write(ErrorFlags); + writer.Write(InfoFlags); + writer.Write(Passed); + writer.Write(ResultCode); + writer.Write(ArchivePath); + writer.Write(Remark); +#if IPERL + writer.Write(OrigCalibFactor); + writer.Write(CalibFactor); + writer.Write(OrigCalibFactorLNA); + writer.Write(CalibFactorLNA); + writer.Write(Q2ErrWOCorrection); + writer.Write(Q2CorrRL); + writer.Write(Q2CorrLR); + writer.Write(Q2CorrFlowRight); + writer.Write(Diff2Hz8Hz); + writer.Write(Hz2CorrectionDone); + writer.Write(Hz2Correction); + writer.Write(FWVersion); +#endif +#if TURA_SPECIAL + writer.Write(AssignedSerialNr); + writer.Write(CompleteSerialNr); + writer.Write(RadioAddress); + writer.Write(PaletteNr); + writer.Write(UmkartonNr); + writer.Write(ProdTestBench); + writer.Write(ProdWMPosition); + writer.Write(ProdUserName); + writer.Write(ProdPurchaseOrder); + writer.Write(ProdPassed); + writer.Write(ProdResultCode); + writer.Write(ProdQ2CorrRL); + writer.Write(ProdQ2CorrLR); +#endif +#if ORACLE_DB + writer.Write(Pruefindex); + writer.Write(HydrPruefung); + writer.Write(WMTypeRevision); + + /// TODO: Write RawTestInfos, CompleteTestInfos +#endif + writer.Write(ProcessId); + writer.Write(SessionId); + writer.Write(LastRecordIsNok); + + /// TODO: Write lists + /// TODO: lastMeterTestRslts ??? + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + SerialNr = reader.ReadString(); + SerialNrAux = reader.ReadString(); + PurchaseOrder = reader.ReadString(); + YearOfProduction = reader.ReadInt32(); + WMPosition = reader.ReadInt32(); + EndState = reader.ReadString(); + EndStateAux = reader.ReadString(); + QRise = reader.ReadDouble(); + QFall = reader.ReadDouble(); + ErrorFlags = reader.ReadInt64(); + InfoFlags = reader.ReadInt64(); + Passed = reader.ReadBoolean(); + ResultCode = reader.ReadInt32(); + ArchivePath = reader.ReadString(); + Remark = reader.ReadString(); +#if IPERL + OrigCalibFactor = reader.ReadDouble(); + CalibFactor = reader.ReadDouble(); + OrigCalibFactorLNA = reader.ReadDouble(); + CalibFactorLNA = reader.ReadDouble(); + Q2ErrWOCorrection = reader.ReadDouble(); + Q2CorrRL = reader.ReadInt32(); + Q2CorrLR = reader.ReadInt32(); + Q2CorrFlowRight = reader.ReadInt32(); + Diff2Hz8Hz = reader.ReadDouble(); + Hz2CorrectionDone = reader.ReadBoolean(); + Hz2Correction = reader.ReadInt32(); + FWVersion = reader.ReadString(); +#endif +#if TURA_SPECIAL + AssignedSerialNr = reader.ReadInt32(); + CompleteSerialNr = reader.ReadString(); + RadioAddress = reader.ReadString(); + PaletteNr = reader.ReadInt32(); + UmkartonNr = reader.ReadInt32(); + ProdTestBench = reader.ReadString(); + ProdWMPosition = reader.ReadInt32(); + ProdUserName = reader.ReadString(); + ProdPurchaseOrder = reader.ReadString(); + ProdPassed = reader.ReadBoolean(); + ProdResultCode = reader.ReadInt32(); + ProdQ2CorrRL = reader.ReadInt32(); + ProdQ2CorrLR = reader.ReadInt32(); +#endif +#if ORACLE_DB + Pruefindex = reader.ReadInt32(); + HydrPruefung = reader.ReadInt32(); + WMTypeRevision = reader.ReadInt32(); + RawTestInfos = null; /// TODO + CompleteTestInfos = null; /// TODO +#endif + ProcessId = reader.ReadInt32(); + SessionId = reader.ReadInt32(); + LastRecordIsNok = reader.ReadBoolean(); + + /// TODO: Read lists + /// TODO: lastMeterTestRslts ??? + } } } diff --git a/Results/Entities/WaterMeterData.cs b/Results/Entities/WaterMeterData.cs index dd06aa7b9..68b4a903c 100644 --- a/Results/Entities/WaterMeterData.cs +++ b/Results/Entities/WaterMeterData.cs @@ -1,16 +1,16 @@ /// -/// Copyright (c) 2015-2017 Sensus Slovensko a.s. +/// Copyright (c) 2015-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Linq; +using System.IO; namespace Results.Entities { - public class WaterMeterData + public class WaterMeterData { - public virtual int Id { get; protected set; } - + public virtual int Id { get; protected set; } public virtual string ProductName { get; set; } public virtual string Producer { get; set; } @@ -132,5 +132,81 @@ namespace Results.Entities list.Add(item); /// Item not fund in the list, it is added to the list return item; } - } + + public virtual void WriteBinary(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(ProductName); + writer.Write(Producer); + writer.Write(DN); + writer.Write(L); + writer.Write((int)Mounting); + writer.Write(NewQnames); + writer.Write(Q4_Qmax); + writer.Write(Q3_Qn); + writer.Write(Q2_Qt); + writer.Write(Q1_Qmin); + writer.Write(MetrologicalClass); + writer.Write((int)TemperatureClass); + writer.Write((int)PressureLossClass); + writer.Write((int)MaxAdmissiblePressure); + writer.Write((int)FlowProfileSensitivityClass); + writer.Write(ApprovalInfo); + writer.Write(Certificate); + writer.Write(PulsesPerLtr); + writer.Write(ProducerAux); + writer.Write(Q3_Qn_Aux); + writer.Write(MetrologicalClassAux); + writer.Write(ApprovalInfoAux); + writer.Write((int)Medium); + writer.Write(Text1); + writer.Write(Text2); + writer.Write(Text3); + writer.Write(Text4); + writer.Write(Text5); + writer.Write(Compound); + writer.Write(HeatMeter); +#if ORACLE_DB + writer.Write(WMTypeId); +#endif + } + + public virtual void ReadBinary(BinaryReader reader) + { + Id = reader.ReadInt32(); + ProductName = reader.ReadString(); + Producer = reader.ReadString(); + DN = reader.ReadDouble(); + L = reader.ReadDouble(); + Mounting = (Config.Entities.Mounting)reader.ReadInt32(); + NewQnames = reader.ReadBoolean(); + Q4_Qmax = reader.ReadDouble(); + Q3_Qn = reader.ReadDouble(); + Q2_Qt = reader.ReadDouble(); + Q1_Qmin = reader.ReadDouble(); + MetrologicalClass = reader.ReadString(); + TemperatureClass = (Config.Entities.TemperatureClass)reader.ReadInt32(); + PressureLossClass = (Config.Entities.PressureLossClass)reader.ReadInt32(); + MaxAdmissiblePressure = (Config.Entities.MaxAdmissiblePressure)reader.ReadInt32(); + FlowProfileSensitivityClass = (Config.Entities.FlowProfileSensitivityClass)reader.ReadInt32(); + ApprovalInfo = reader.ReadString(); + Certificate = reader.ReadString(); + PulsesPerLtr = reader.ReadDouble(); + ProducerAux = reader.ReadString(); + Q3_Qn_Aux = reader.ReadDouble(); + MetrologicalClassAux = reader.ReadString(); + ApprovalInfoAux = reader.ReadString(); + Medium = (Config.Entities.Medium)reader.ReadInt32(); + Text1 = reader.ReadString(); + Text2 = reader.ReadString(); + Text3 = reader.ReadString(); + Text4 = reader.ReadString(); + Text5 = reader.ReadString(); + Compound = reader.ReadBoolean(); + HeatMeter = reader.ReadBoolean(); +#if ORACLE_DB + WMTypeId = reader.ReadInt32(); +#endif + } + } }