/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// using System; using System.Collections.Generic; using TBF.Resources; namespace TBF.Forms { public class ResultItemSpec { /// /// Public fields /// public readonly string Name; /// Name-s of all items must be unique public readonly string ClmnHeaderText; /// Text printed in the column header /// /// Function to pick a MeterTestResult field and convert it into a string /// public delegate string PrintDlgt(Entities.MeterTestResult meterTestResult); private readonly PrintDlgt printDlgt; public bool CanPrintSingle { get { return (printDlgt != null); } } /// Safe wrapper which replaces null-s by empty strings public string Print(Entities.MeterTestResult meterTestResult) { string str = printDlgt(meterTestResult); return (str == null) ? string.Empty : str; } /// /// Function to pick a MeterTestResult field and convert it into a string /// public delegate string PrintCombinedDlgt(Entities.MeterTestResult largeMeterTestResult, Entities.MeterTestResult smallMeterTestResult, Entities.MeterTestResult combinedMeterTestResult); private readonly PrintCombinedDlgt printCombinedDlgt; public bool CanPrintCombined { get { return (printCombinedDlgt != null); } } /// Safe wrapper which replaces null-s by empty strings public string PrintCombined(Entities.MeterTestResult largeMeterTestResult, Entities.MeterTestResult smallMeterTestResult, Entities.MeterTestResult combinedMeterTestResult) { string str = printCombinedDlgt(largeMeterTestResult, smallMeterTestResult, combinedMeterTestResult); return (str == null) ? string.Empty : str; } /// /// Public constructor /// public ResultItemSpec(string name, string clmnHeaderText, PrintDlgt printDlgt, PrintCombinedDlgt printCombinedDlgt) { Name = name; ClmnHeaderText = clmnHeaderText; this.printDlgt = printDlgt; this.printCombinedDlgt = printCombinedDlgt; } /// Static list of all available items public static readonly IList AllItems; /// Static constructor that initializes the list of all items static ResultItemSpec() { AllItems = new List(); /// Common AllItems.Add(new ResultItemSpec("Test name", "Test", x => x.TestResult.TestName, (x, y, z) => x.TestResult.TestName)); AllItems.Add(new ResultItemSpec("Procedure name", Strings.Procedure, x => x.TestResult.ProcedureName, (x, y, z) => x.TestResult.ProcedureName)); AllItems.Add(new ResultItemSpec("Batch number", "Batch nr.", x => x.TestResult.BatchNr.ToString(), (x, y, z) => x.TestResult.BatchNr.ToString())); /// Target values AllItems.Add(new ResultItemSpec("Q from", Strings.Q_from_m3h, x => x.TestResult.Qfrom.ToString("F3"), (x, y, z) => x.TestResult.Qfrom.ToString("F3"))); AllItems.Add(new ResultItemSpec("Q to", Strings.Q_to_m3h, x => x.TestResult.Qto.ToString("F3"), (x, y, z) => x.TestResult.Qto.ToString("F3"))); AllItems.Add(new ResultItemSpec("Test volume", "Test vol. [l]", x => x.TestResult.Volume.ToString("F1"), (x, y, z) => x.TestResult.Volume.ToString("F1"))); AllItems.Add(new ResultItemSpec("Error limit Lo", "Err.Lim.Lo [%]", x => x.TestResult.ErrLimLo.ToString("F1"), (x, y, z) => x.TestResult.ErrLimLo.ToString("F1"))); AllItems.Add(new ResultItemSpec("Error limit Hi", "Err.Lim.Hi [%]", x => x.TestResult.ErrLimHi.ToString("F1"), (x, y, z) => x.TestResult.ErrLimHi.ToString("F1"))); /// Test results AllItems.Add(new ResultItemSpec("Start time", "T start", x => x.TestResult.TimeStart.ToShortTimeString(), (x, y, z) => z.TestResult.TimeStart.ToShortTimeString())); AllItems.Add(new ResultItemSpec("End time", "T end", x => x.TestResult.TimeEnd.ToShortTimeString(), (x, y, z) => z.TestResult.TimeEnd.ToShortTimeString())); AllItems.Add(new ResultItemSpec("Test time", "T [s]", x => x.TestResult.TimeEnd.ToShortTimeString(), (x, y, z) => z.TestResult.TimeEnd.ToShortTimeString())); AllItems.Add(new ResultItemSpec("Flow", Strings.Flow_m3h, x => Utils.FloatToStr(x.TestResult.FlowVolume / 1000.0f, 4), (x, y, z) => Utils.FloatToStr(z.TestResult.FlowVolume / 1000.0f, 4))); AllItems.Add(new ResultItemSpec("T in", Strings.T_in, x => x.TestResult.TempInAvrg.ToString("F2"), (x, y, z) => z.TestResult.TempInAvrg.ToString("F2"))); AllItems.Add(new ResultItemSpec("T out", Strings.T_out, x => x.TestResult.TempOutAvrg.ToString("F2"), (x, y, z) => z.TestResult.TempOutAvrg.ToString("F2"))); AllItems.Add(new ResultItemSpec("T div", Strings.T_div, x => x.TestResult.TempDivAvrg.ToString("F2"), (x, y, z) => z.TestResult.TempDivAvrg.ToString("F2"))); AllItems.Add(new ResultItemSpec("P up", Strings.P_in, x => x.TestResult.PressInAvrg.ToString("F3"), (x, y, z) => z.TestResult.PressInAvrg.ToString("F3"))); AllItems.Add(new ResultItemSpec("P up start", Strings.P_in_start, x => x.TestResult.PressInStart.ToString("F3"), (x, y, z) => z.TestResult.PressInStart.ToString("F3"))); AllItems.Add(new ResultItemSpec("P up end", Strings.P_in_end, x => x.TestResult.PressInEnd.ToString("F3"), (x, y, z) => z.TestResult.PressInEnd.ToString("F3"))); AllItems.Add(new ResultItemSpec("P down", Strings.P_out, x => x.TestResult.PressOutAvrg.ToString("F3"), (x, y, z) => z.TestResult.PressOutAvrg.ToString("F3"))); AllItems.Add(new ResultItemSpec("P down start", Strings.P_out_start, x => x.TestResult.PressOutStart.ToString("F3"), (x, y, z) => z.TestResult.PressOutStart.ToString("F3"))); AllItems.Add(new ResultItemSpec("P down end", Strings.P_out_end, x => x.TestResult.PressOutEnd.ToString("F3"), (x, y, z) => z.TestResult.PressOutEnd.ToString("F3"))); AllItems.Add(new ResultItemSpec("Reference error", "Err.ref. [%]", x => x.TestResult.ErrorMaster.ToString("F3"), (x, y, z) => z.TestResult.ErrorMaster.ToString("F3"))); AllItems.Add(new ResultItemSpec("Ambient temperature", "T amb", x => x.TestResult.AmbientTempAve.ToString("F1"), (x, y, z) => z.TestResult.AmbientTempAve.ToString("F1"))); AllItems.Add(new ResultItemSpec("Ambient pressure", "P amb", x => x.TestResult.AmbientPressAve.ToString("F0"), (x, y, z) => z.TestResult.AmbientPressAve.ToString("F0"))); AllItems.Add(new ResultItemSpec("Ambient humidity", "H amb [%]", x => x.TestResult.AmbientHumiAve.ToString("F1"), (x, y, z) => z.TestResult.AmbientHumiAve.ToString("F1"))); /// Single and combined meter results AllItems.Add(new ResultItemSpec("Volume", "Volume [l]", x => x.VolumeMeter.ToString("F3"), (x, y, z) => z.VolumeMeter.ToString("F3"))); AllItems.Add(new ResultItemSpec("Reference volume", "Vol.ref. [l]", x => x.VolumeRef.ToString("F3"), (x, y, z) => z.VolumeRef.ToString("F3"))); AllItems.Add(new ResultItemSpec("Error", "Error [%]", x => x.VolumeErrorPct.ToString("F2"), (x, y, z) => z.VolumeErrorPct.ToString("F2"))); AllItems.Add(new ResultItemSpec("Passed", "Result", x => (x.Passed ? Strings.Passed + "|Green" : Strings.Failed + "|Red"), (x, y, z) => (z.Passed ? Strings.Passed + "|Green" : Strings.Failed + "|Red"))); /// Single water meters only results AllItems.Add(new ResultItemSpec("Serial Nr", "s/n", x => x.SerialNr, null)); AllItems.Add(new ResultItemSpec("End state", "End state", x => x.EndState, null)); AllItems.Add(new ResultItemSpec("Pulses", "Pulses", x => x.PulsesMeter.ToString(), null)); AllItems.Add(new ResultItemSpec("Reference pulses", "Ref.pulses", x => x.PulsesMaster.ToString(), null)); /// Combined water meters only results AllItems.Add(new ResultItemSpec("Q rise", "Q rise [m3/h]", null, (x, y, z) => (x.TestResult.QRise == 0) ? "-" : Utils.FloatToStr(x.TestResult.QRise, 4))); AllItems.Add(new ResultItemSpec("Q fall", "Q fall [m3/h]", null, (x, y, z) => (x.TestResult.QFall == 0) ? "-" : Utils.FloatToStr(x.TestResult.QFall, 4))); AllItems.Add(new ResultItemSpec("Error large WM", "Error-L [%]", null, (x, y, z) => x.VolumeErrorPct.ToString("F2"))); AllItems.Add(new ResultItemSpec("Error small WM", "Error-S [%]", null, (x, y, z) => y.VolumeErrorPct.ToString("F2"))); AllItems.Add(new ResultItemSpec("Serial Nr large WM", "s/n", null, (x, y, z) => x.SerialNr)); AllItems.Add(new ResultItemSpec("Serial Nr small WM", "s/n", null, (x, y, z) => y.SerialNr)); AllItems.Add(new ResultItemSpec("End state large WM", "End state", null, (x, y, z) => x.EndState)); AllItems.Add(new ResultItemSpec("End state small WM", "End state", null, (x, y, z) => y.EndState)); } public static ResultItemSpec GetItem(string name) { foreach (var item in AllItems) if (item.Name.Equals(name)) return item; return null; } public static string[] ToStrArray(IList items) { int count = (items != null) ? items.Count : 0; string[] result = new string[count]; for (int i = 0; i < count; i++) result[i] = items[i].Name; return result; } public static IList FromStrArray(string[] strArray) { IList result = new List(); if (strArray != null) { for (int i = 0; i < strArray.Length; i++) { ResultItemSpec item = GetItem(strArray[i]); if (item != null) result.Add(item); } } return result; } } }