using System; using System.Collections.Generic; using System.Linq; using System.Text; using Config.Entities; namespace Results.Entities { public class WaterMeter { public virtual int Id { get; protected set; } public virtual string SerialNr { get; set; } /// Main s/n for compound meters, PCB Number for iPerl water meter public virtual string SerialNrAux { get; set; } /// Aux s/n for compound meters, Serial number for iPerl water meter public virtual string PurchaseOrder { get; set; } public virtual int YearOfProduction { get; set; } public virtual int WMPosition { get; set; } public virtual string EndState { get; set; } /// End state (of the main water meter) public virtual string EndStateAux { get; set; } /// End state of the auxiliary water meter public virtual double QRise { get; set; } ///![m3/h] detected Q_rise of a composed meter public virtual double QFall { get; set; } ///![m3/h] detected Q_fall of a composed meter public virtual bool Passed { get; set; } #if IPERLST public virtual int SerialNrEx { get; set; } /// Aux s/n for compound meters, Serial number for iPerl water meter public virtual double OrigCalibFactor { get; set; } /// iPerl calibration factor used during the test public virtual double CalibFactor { get; set; } /// iPerl calibration factor used during the test public virtual double Q2ErrWOCorrection { get; set; } public virtual bool Q2CorrectionDone { get; set; } /// true = iPerl Q2 correction was done public virtual double Q2Correction { get; set; } /// iPerl Q2 correction used during the test public virtual int Q2CorrFlowRight { get; set; } /// 1 = right to left public virtual double Diff2Hz8Hz { get; set; } public virtual bool Hz2CorrectionDone { get; set; } /// true = iPerl Q2 correction was done public virtual int Hz2Correction { get; set; } /// iPerl Q2 correction used during the test public virtual int Pruefindex { get; set; } /// Not mapped to DB !!! public virtual int HydrPruefung { get; set; } /// Not mapped to DB !!! #endif public virtual WaterMeterData WaterMeterData { get; set; } public virtual Batch Batch { get; set; } public virtual IList MeterTestRslts { get; set; } /// /// Wrappers /// public virtual string ProductName() { return WaterMeterData.ProductName; } public virtual string Producer() { return WaterMeterData.Producer; } public virtual string MetrologicalClass() { return WaterMeterData.MetrologicalClass; } public virtual string ApprovalInfo() { return WaterMeterData.ApprovalInfo; } public virtual double Q4_Qmax() { return WaterMeterData.Q4_Qmax; } public virtual double Qn() { return WaterMeterData.Qn; } public virtual double Q3() { return WaterMeterData.Q3; } public virtual double Q2_Qt() { return WaterMeterData.Q2_Qt; } public virtual double Q1_Qmin() { return WaterMeterData.Q1_Qmin; } public virtual bool Compound() { return WaterMeterData.Compound; } public virtual int BatchNr() { return Batch.BatchNr; } public virtual int BenchId() { return Batch.TestBenchId; } public virtual string ProcedureName() { return Batch.ProcedureName; } public virtual int ProcedureRevision() { return Batch.ProcedureRevision; } public virtual DateTime StartTime() { return Batch.StartTime; } public virtual DateTime EndTime() { return Batch.EndTime; } public virtual bool PassedFromTests() { bool passed = true; foreach (var mtr in MeterTestRslts) { if (mtr.Evaluate() && (!mtr.Passed || !mtr.TestDone)) { passed = false; break; } } return passed; } /// /// Not mapped to the database /// public virtual bool Disabled { get; set; } /// true = Disabled water meters (not saved into DB) public virtual MeterTestRslt GetMeterTestRslt(string testName) { return GetMeterTestRslt(testName, CompoundMeterId.Single); } public virtual MeterTestRslt GetMeterTestRslt(string testName, Config.Entities.CompoundMeterId meterId) { if (Disabled) return null; string testNameL = testName.ToLower(); foreach (var mtr in MeterTestRslts) { if ((mtr.CompoundMeterId == (byte)meterId) && mtr.Name().ToLower().Equals(testNameL)) { return mtr; } } return null; } public virtual TestRslt GetTestRslt(string testName) { MeterTestRslt mtr = GetMeterTestRslt(testName); if (mtr != null) return mtr.TestRslt; return null; } /// /// Constructor, initializes a list, used as a base for other constructors /// public WaterMeter() { MeterTestRslts = new List(); } public override string ToString() { StringBuilder sb = new StringBuilder(80); #if IPERLST sb.AppendFormat("PCB:{0} S/N:{1} ", SerialNr, SerialNrEx); #else sb.AppendFormat("S/N:{0} ", SerialNr); #endif foreach (var tr in MeterTestRslts) sb.AppendFormat(" {0}:{1}%", tr.Name(), tr.Error.ToString("F2")); sb.AppendFormat(" test start: {0} {1} batch={2}", StartTime().ToShortDateString(), StartTime().ToShortTimeString(), BatchNr()); return sb.ToString(); } } }