/// /// Copyright (c) 2015-2016 Sensus Metering Systems /// using System; using System.Collections.Generic; namespace Results.Entities { public class Batch { public virtual int Id { get; protected set; } public virtual int BatchNr { get; set; } public virtual int TestBenchId { get; set; } public virtual string ProgramVersion { get; set; } public virtual string UserName { get; set; } public virtual int UserNumber { get; set; } public virtual string ProcedureName { get; set; } public virtual string ProcedureDescription { get; set; } /// CEVAK, not mapped to DB public virtual int ProcedureRevision { get; set; } public virtual string WatermetersStr { get; set; } /// CEVAK, not mapped to DB public virtual string ProtocolTitle { get; set; } public virtual string Remark { get; set; } public virtual float DensityCorr { get; set; } /// Density correction in [kg/m3] public virtual float Custom2 { get; set; } public virtual float Custom3 { get; set; } public virtual DateTime StartTime { get; set; } public virtual DateTime EndTime { get; set; } public virtual bool Dirty { get; set; } public virtual bool RsltsSent { get; set; } public virtual bool RsltsPrinted { get; set; } public virtual IList Tests { get; set; } public virtual IList WaterMeters { get; set; } public virtual IList TestRslts { get; set; } public virtual bool Compound { get; set; } /// Not mapped to DB now public virtual bool HeatMeter { get; set; } /// Not mapped to DB now public Batch() { Tests = new List(); WaterMeters = new List(); TestRslts = new List(); } public virtual int PassedMetersCount() { int count = 0; foreach (var mtr in WaterMeters) if (mtr.PassedFromTests()) count++; return count; } public virtual int FailedMetersCount() { return WaterMeters.Count - PassedMetersCount(); } public virtual double AmbTempMean() { double timeSum = 0; double sum = 0; foreach (var tr in TestRslts) { if (tr.TestDone) { double duration = (tr.EndTime - tr.StartTime).TotalSeconds; timeSum += duration; sum += (tr.AmbTempMean * duration); } } return (timeSum == 0) ? 0 : (sum / timeSum); } public virtual double AmbPressMean() { double timeSum = 0; double sum = 0; foreach (var tr in TestRslts) { if (tr.TestDone) { double duration = (tr.EndTime - tr.StartTime).TotalSeconds; timeSum += duration; sum += (tr.AmbPressMean * duration); } } return (timeSum == 0) ? 0 : (sum / timeSum); } public virtual double AmbHumiMean() { double timeSum = 0; double sum = 0; foreach (var tr in TestRslts) { if (tr.TestDone) { double duration = (tr.EndTime - tr.StartTime).TotalSeconds; timeSum += duration; sum += (tr.AmbHumiMean * duration); } } return (timeSum == 0) ? 0 : (sum / timeSum); } public virtual double AmbTempStart() { for (int i = 0; i < TestRslts.Count; i++) { if (TestRslts[i].Publish() == Config.Entities.Publish.Always) return TestRslts[i].AmbTempStart; } return 0; } public virtual double AmbPressStart() { for (int i = 0; i < TestRslts.Count; i++) { if (TestRslts[i].Publish() == Config.Entities.Publish.Always) return TestRslts[i].AmbPressStart; } return 0; } public virtual double AmbHumiStart() { for (int i = 0; i < TestRslts.Count; i++) { if (TestRslts[i].Publish() == Config.Entities.Publish.Always) return TestRslts[i].AmbHumiStart; } return 0; } public virtual double AmbTempEnd() { for (int i = TestRslts.Count - 1; i >= 0; i++) { if (TestRslts[i].Publish() == Config.Entities.Publish.Always) return TestRslts[i].AmbTempEnd; } return 0; } public virtual double AmbPressEnd() { for (int i = TestRslts.Count - 1; i >= 0; i++) { if (TestRslts[i].Publish() == Config.Entities.Publish.Always) return TestRslts[i].AmbPressEnd; } return 0; } public virtual double AmbHumiEnd() { for (int i = TestRslts.Count - 1; i >= 0; i++) { if (TestRslts[i].Publish() == Config.Entities.Publish.Always) return TestRslts[i].AmbHumiEnd; } return 0; } public virtual double Buoyancy() { double timeSum = 0; double sum = 0; foreach (var tr in TestRslts) { if (tr.TestData.Evaluate && tr.TestDone) { double duration = (tr.EndTime - tr.StartTime).TotalSeconds; timeSum += duration; sum += (tr.Buoyancy * duration); } } return (timeSum == 0) ? 0 : (sum / timeSum); } public virtual TestRslt GetTestRslt(string name, int part) { foreach (var tr in TestRslts) { if (part == tr.Part && name.Equals(tr.Name())) return tr; } return null; } public override string ToString() { return string.Format("Batch #{0}, Start:{1}, End:{2}, Procedure:{3}", BatchNr, StartTime, EndTime, ProcedureName); } public virtual string ToString(int i) { return string.Format("Batch: BatchNr={0} TestBenchId={1} ProgramVersion={2} UserName={3} UserNumber={4} ProcedureName={5} ProcedureRevision={6} ProtocolTitle={7} Remark={8} DensityCorr={9} Custom2={10} Custom3={11} StartTime={12} EndTime={13} Dirty={14} RsltsSent={15} RsltsPrinted={16}", BatchNr, TestBenchId, ProgramVersion, UserName, UserNumber, ProcedureName, ProcedureRevision, ProtocolTitle, Remark, DensityCorr, Custom2, Custom3, StartTime, EndTime, Dirty, RsltsSent, RsltsPrinted); } } }