Results printing and saving improced, correct order of tests, etc.

This commit is contained in:
Milan Hanajik
2015-02-01 13:43:04 +01:00
parent 8009774c20
commit ae5abde1e6
9 changed files with 262 additions and 139 deletions
@@ -12,6 +12,7 @@ namespace TBF.BenchControl.GenericDevices
/// <returns>Reference to the operation</returns> /// <returns>Reference to the operation</returns>
IOperation PrintResultsOp(BenchControl.BenchId.Component benchId, IOperation PrintResultsOp(BenchControl.BenchId.Component benchId,
IList<IWaterMeter> waterMeters, IList<IWaterMeter> waterMeters,
Entities.Procedure procedure,
IList<Entities.TestResult> results, IList<Entities.TestResult> results,
string title); string title);
} }
@@ -10,6 +10,6 @@ namespace TBF.BenchControl.GenericDevices
/// </summary> /// </summary>
/// <param name="results">Results to write into a file</param> /// <param name="results">Results to write into a file</param>
/// <returns>Reference to the operation</returns> /// <returns>Reference to the operation</returns>
IOperation WriteResultsOp(IList<Entities.TestResult> results); IOperation WriteResultsOp(Entities.Procedure procedure, IList<Entities.TestResult> results);
} }
} }
@@ -29,7 +29,8 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
/// Data to print /// Data to print
/// ///
readonly BenchControl.BenchId.Component benchId; readonly BenchControl.BenchId.Component benchId;
readonly IList<Entities.TestResult> results; readonly Entities.Procedure procedure;
readonly IList<Entities.TestResult> unsortedResults;
readonly bool combined; readonly bool combined;
readonly DateTime dateTime; readonly DateTime dateTime;
@@ -38,18 +39,22 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
/// ///
readonly IList<TBF.Forms.ResultItemSpec> resultItems; readonly IList<TBF.Forms.ResultItemSpec> resultItems;
/// <summary> /// <summary>
/// Constructor /// Constructor
/// </summary> /// </summary>
/// <param name="textToPrint">Text to be printed</param> /// <param name="textToPrint">Text to be printed</param>
public BasicPrintDocument(BenchControl.BenchId.Component benchId, public BasicPrintDocument(BenchControl.BenchId.Component benchId,
IList<Entities.TestResult> results) Entities.Procedure procedure,
IList<Entities.TestResult> unsortedResults)
{ {
this.benchId = benchId; this.benchId = benchId;
this.results = results; this.procedure = procedure;
this.unsortedResults = unsortedResults;
dateTime = DateTime.Now; dateTime = DateTime.Now;
if ((results != null) && (results.Count != 0) && (results[0].MetersKind == Entities.MetersKind.Single)) if ((unsortedResults != null) && (unsortedResults.Count != 0) && (unsortedResults[0].MetersKind == Entities.MetersKind.Single))
{ {
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_SingleWM); resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_SingleWM);
combined = false; combined = false;
@@ -116,7 +121,7 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
/// Header /// Header
///---------- ///----------
RectangleF printArea = new RectangleF(TitleX, TitleY, 667, 40); RectangleF printArea = new RectangleF(TitleX, TitleY, 667, 40);
e.Graphics.DrawString(results[0].ProtocolTitle, titleFont, Brushes.Black, printArea); e.Graphics.DrawString(unsortedResults[0].ProtocolTitle, titleFont, Brushes.Black, printArea);
string[] leftColumn = new string[] string[] leftColumn = new string[]
{ {
@@ -131,18 +136,18 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
string[] rightColumn = new string[] string[] rightColumn = new string[]
{ {
results[0].CycleNr.ToString(), unsortedResults[0].CycleNr.ToString(),
//dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(), //dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(),
string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"), string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"),
dateTime.Month.ToString("D2"), dateTime.Month.ToString("D2"),
dateTime.Day.ToString("D2"), dateTime.Day.ToString("D2"),
dateTime.Hour.ToString("D2"), dateTime.Hour.ToString("D2"),
dateTime.Minute.ToString("D2")), dateTime.Minute.ToString("D2")),
results[0].ProcedureName, procedure.Name,
Entities.User.CurrentUser.Name, Entities.User.CurrentUser.Name,
results[0].AmbientTempAve.ToString("F1") + " °C", unsortedResults[0].AmbientTempAve.ToString("F1") + " °C",
results[0].AmbientPressAve.ToString("F0") + " mbar", unsortedResults[0].AmbientPressAve.ToString("F0") + " mbar",
results[0].AmbientHumiAve.ToString("F0") + " %", unsortedResults[0].AmbientHumiAve.ToString("F0") + " %",
}; };
/// Determine max. left column width in characters /// Determine max. left column width in characters
@@ -160,26 +165,36 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
/// Body /// Body
///-------- ///--------
int nrWMs = (combined ? Program.WMsCount / 2 : Program.WMsCount); int nrWMs = (combined ? Program.WMsCount / 2 : Program.WMsCount);
int OneWmHeight = (results.Count + 4) * SpacingOne; int nextWmTop = BodyTop;
if (combined) if (combined)
{ {
for (int wmNr = 0; wmNr < Program.WMsCount / 2; wmNr++) PrintCombinedWM(e, wmNr, BodyTop + OneWmHeight * wmNr); for (int wmNr = 0; wmNr < Program.WMsCount / 2; wmNr++)
{
nextWmTop += PrintCombinedWM(e, wmNr, nextWmTop);
}
} }
else else
{ {
for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++) PrintSingleWM(e, wmNr, BodyTop + OneWmHeight * wmNr); for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++)
{
nextWmTop += PrintSingleWM(e, wmNr, nextWmTop);
}
} }
e.HasMorePages = false; e.HasMorePages = false;
} }
/// <summary> /// <summary>
/// Print one water meter results /// Print one water meter results
/// </summary> /// </summary>
/// <param name="wmNr">Water meter number</param> /// <param name="wmNr">Water meter number</param>
/// <param name="top">Top coordinate of watermeter data</param> /// <param name="top">Top coordinate of watermeter data</param>
void PrintSingleWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top) /// <returns>The height of the printed section</returns>
int PrintSingleWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top)
{ {
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr);
/// Determin column widths /// Determin column widths
float[] columnPos = new float[resultItems.Count + 1]; float[] columnPos = new float[resultItems.Count + 1];
columnPos[0] = 100.0f; columnPos[0] = 100.0f;
@@ -189,8 +204,11 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
float columnWidth = e.Graphics.MeasureString(resultItems[i].ClmnHeaderText, font).Width; float columnWidth = e.Graphics.MeasureString(resultItems[i].ClmnHeaderText, font).Width;
foreach (var tr in results) foreach (var tr in results)
{ {
float width = e.Graphics.MeasureString(resultItems[i].Print(tr.Meters[wmNr]), font).Width; if (tr != null)
if (width > columnWidth) columnWidth = width; {
float width = e.Graphics.MeasureString(resultItems[i].Print(tr.Meters[wmNr]), font).Width;
if (width > columnWidth) columnWidth = width;
}
} }
columnPos[i + 1] = columnPos[i] + columnWidth + 20.0f; columnPos[i + 1] = columnPos[i] + columnWidth + 20.0f;
} }
@@ -199,10 +217,10 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
string wmText = string.Format("Water meter {0}", wmNr + 1); string wmText = string.Format("Water meter {0}", wmNr + 1);
PrintAt(e, 100, top, wmText); PrintAt(e, 100, top, wmText);
if (!string.IsNullOrEmpty(results[0].Meters[wmNr].SerialNr)) if (!string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr))
{ {
PrintAt(e, 100 + (int)e.Graphics.MeasureString(wmText, font).Width, top, PrintAt(e, 100 + (int)e.Graphics.MeasureString(wmText, font).Width, top,
string.Format(", s/n = {0}", results[0].Meters[wmNr].SerialNr)); string.Format(", s/n = {0}", unsortedResults[0].Meters[wmNr].SerialNr));
} }
/// Horizontal line /// Horizontal line
@@ -220,25 +238,44 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
for (int r = 0; r < results.Count; r++) for (int r = 0; r < results.Count; r++)
{ {
for (int i = 0; i < resultItems.Count; i++) if (results[r] != null)
{ {
string text = resultItems[i].Print(results[r].Meters[wmNr]); for (int i = 0; i < resultItems.Count; i++)
PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text); {
string text = resultItems[i].Print(results[r].Meters[wmNr]);
string[] texts = text.Split(new char[] { '|' });
if (texts.Length == 2)
{
Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White);
text = texts[0];
/// TODO: How to print colors?
}
PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text);
}
} }
} }
/// Horizontal line /// Horizontal line
horY = top + 30 + SpacingOne * (results.Count + 1); horY = top + 30 + SpacingOne * (results.Count + 1);
e.Graphics.DrawLine(new Pen(Color.Black, 2), new Point(tableLeftX, horY), new Point(tableRightX, horY)); e.Graphics.DrawLine(new Pen(Color.Black, 2), new Point(tableLeftX, horY), new Point(tableRightX, horY));
return (results.Count + 4) * SpacingOne;
} }
/// <summary> /// <summary>
/// Print one combined water meter results /// Print one combined water meter results
/// </summary> /// </summary>
/// <param name="wmNr">Water meter number</param> /// <param name="wmNr">Water meter number</param>
/// <param name="top">Top coordinate of watermeter data</param> /// <param name="top">Top coordinate of watermeter data</param>
void PrintCombinedWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top) /// <returns>The height of the printed section</returns>
int PrintCombinedWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top)
{ {
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr);
/// Determin column widths /// Determin column widths
float[] columnPos = new float[resultItems.Count + 1]; float[] columnPos = new float[resultItems.Count + 1];
columnPos[0] = 100.0f; columnPos[0] = 100.0f;
@@ -248,10 +285,13 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
float columnWidth = e.Graphics.MeasureString(resultItems[i].ClmnHeaderText, font).Width; float columnWidth = e.Graphics.MeasureString(resultItems[i].ClmnHeaderText, font).Width;
foreach (var tr in results) foreach (var tr in results)
{ {
float width = e.Graphics.MeasureString(resultItems[i].PrintCombined(tr.Meters[2 * wmNr], if (tr != null)
tr.Meters[2 * wmNr + 1], {
tr.CombinedMeters[wmNr]), font).Width; float width = e.Graphics.MeasureString(resultItems[i].PrintCombined(tr.Meters[2 * wmNr],
if (width > columnWidth) columnWidth = width; tr.Meters[2 * wmNr + 1],
tr.CombinedMeters[wmNr]), font).Width;
if (width > columnWidth) columnWidth = width;
}
} }
columnPos[i + 1] = columnPos[i] + columnWidth + 20.0f; columnPos[i + 1] = columnPos[i] + columnWidth + 20.0f;
} }
@@ -260,10 +300,12 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
string wmText = string.Format("Water meter {0}", wmNr + 1); string wmText = string.Format("Water meter {0}", wmNr + 1);
PrintAt(e, 100, top, wmText); PrintAt(e, 100, top, wmText);
if (!string.IsNullOrEmpty(results[0].Meters[2 * wmNr].SerialNr)) if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr].SerialNr))
{ {
PrintAt(e, 100 + (int)e.Graphics.MeasureString(wmText, font).Width, top, PrintAt(e, 100 + (int)e.Graphics.MeasureString(wmText, font).Width, top,
string.Format(", Main s/n: {0}, Aux. s/n:{1}", results[0].Meters[2 * wmNr].SerialNr, results[0].Meters[2 * wmNr + 1].SerialNr)); string.Format(", Main s/n: {0}, Aux. s/n:{1}",
unsortedResults[0].Meters[2 * wmNr].SerialNr,
unsortedResults[0].Meters[2 * wmNr + 1].SerialNr));
} }
/// Horizontal line /// Horizontal line
@@ -281,18 +323,32 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
for (int r = 0; r < results.Count; r++) for (int r = 0; r < results.Count; r++)
{ {
for (int i = 0; i < resultItems.Count; i++) if (results[r] != null)
{ {
string text = resultItems[i].PrintCombined(results[r].Meters[2 * wmNr], for (int i = 0; i < resultItems.Count; i++)
results[r].Meters[2 * wmNr + 1], {
results[r].CombinedMeters[wmNr]); string text = resultItems[i].PrintCombined(results[r].Meters[2 * wmNr],
PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text); results[r].Meters[2 * wmNr + 1],
results[r].CombinedMeters[wmNr]);
string[] texts = text.Split(new char[] { '|' });
if (texts.Length == 2)
{
Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White);
text = texts[0];
/// TODO: How to print colors?
}
PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text);
}
} }
} }
/// Horizontal line /// Horizontal line
horY = top + 30 + SpacingOne * (results.Count + 1); horY = top + 30 + SpacingOne * (results.Count + 1);
e.Graphics.DrawLine(new Pen(Color.Black, 2), new Point(tableLeftX, horY), new Point(tableRightX, horY)); e.Graphics.DrawLine(new Pen(Color.Black, 2), new Point(tableLeftX, horY), new Point(tableRightX, horY));
return (results.Count + 4) * SpacingOne;
} }
@@ -18,7 +18,8 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
/// Data to print /// Data to print
/// </summary> /// </summary>
BenchControl.BenchId.Component benchId; BenchControl.BenchId.Component benchId;
IList<Entities.TestResult> results; Entities.Procedure procedure;
IList<Entities.TestResult> unsortedResults;
public Printer(PrinterCfg cfg) public Printer(PrinterCfg cfg)
: base(cfg) : base(cfg)
@@ -30,22 +31,34 @@ namespace TBF.BenchControl.ResultsPrinters.Basic
/// <summary> /// <summary>
/// Prints the test cycle results, Events: Event.ResultsPrinted /// Prints the test cycle results, Events: Event.ResultsPrinted
/// </summary> /// </summary>
/// <param name="results">Results to print</param> /// <param name="benchId">Bench ID</param>
/// <param name="waterMeters">This parameter is unused</param>
/// <param name="procedure">Procedure to print the results of</param>
/// <param name="unsortedResults">Results to print</param>
/// <param name="title">This parameter is unused</param>
/// <returns>Reference to the operation</returns> /// <returns>Reference to the operation</returns>
public IOperation PrintResultsOp(BenchControl.BenchId.Component benchId, public IOperation PrintResultsOp(BenchControl.BenchId.Component benchId,
IList<GenericDevices.IWaterMeter> waterMeters, IList<GenericDevices.IWaterMeter> waterMeters,
IList<Entities.TestResult> results, Entities.Procedure procedure,
IList<Entities.TestResult> unsortedResults,
string title) string title)
{ {
if ((procedure == null) || (unsortedResults == null) || (unsortedResults.Count < 1))
{
return null;
}
this.benchId = benchId; this.benchId = benchId;
this.results = results; this.procedure = procedure;
this.unsortedResults = unsortedResults;
return this; return this;
} }
/// <summary>Start this operation</summary> /// <summary>Start this operation</summary>
public void Start() public void Start()
{ {
new BasicPrintDocument(benchId, results).Print(); new BasicPrintDocument(benchId, procedure, unsortedResults).Print();
} }
/// <summary>Run this operation</summary> /// <summary>Run this operation</summary>
@@ -35,10 +35,12 @@ namespace TBF.BenchControl.ResultsPrinters.Munich
} }
/// <summary>Events: ResultsPrinted</summary> /// <summary>Events: ResultsPrinted</summary>
/// <param name="benchId">Procedure to print the results of</param>
/// <param name="results">Results to print</param> /// <param name="results">Results to print</param>
/// <returns>Reference to the operation</returns> /// <returns>Reference to the operation</returns>
public IOperation PrintResultsOp(BenchControl.BenchId.Component benchId, public IOperation PrintResultsOp(BenchControl.BenchId.Component benchId,
IList<GenericDevices.IWaterMeter> waterMeters, IList<GenericDevices.IWaterMeter> waterMeters,
Entities.Procedure procedure,
IList<Entities.TestResult> results, IList<Entities.TestResult> results,
string title) string title)
{ {
@@ -23,7 +23,8 @@ namespace TBF.BenchControl.ResultsWriters.Basic
/// <summary> /// <summary>
/// Results to print /// Results to print
/// </summary> /// </summary>
IList<Entities.TestResult> results; Entities.Procedure procedure;
IList<Entities.TestResult> unsortedResults;
DateTime dateTime; DateTime dateTime;
StreamWriter writer; StreamWriter writer;
@@ -81,30 +82,29 @@ namespace TBF.BenchControl.ResultsWriters.Basic
/// <summary> /// <summary>
/// Writes the test cycle results into a file, Events: Event.ResultsWritten /// Writes the test cycle results into a file, Events: Event.ResultsWritten
/// </summary> /// </summary>
/// <param name="results">Results to write into the file</param> /// <param name="procedure">Procedure to print the results of</param>
/// <param name="unsortedResults">Results to write into the file</param>
/// <returns>Reference to the operation</returns> /// <returns>Reference to the operation</returns>
public IOperation WriteResultsOp(IList<Entities.TestResult> results) public IOperation WriteResultsOp(Entities.Procedure procedure, IList<Entities.TestResult> unsortedResults)
{ {
if ((results == null) || (results.Count == 0) || if ((procedure == null) || (unsortedResults == null) || (unsortedResults.Count < 1))
((results[0].MetersKind != Entities.MetersKind.Single) &&
(results[0].MetersKind != Entities.MetersKind.Combined)))
{
writer = null;
return this;
}
if (results[0].MetersKind == Entities.MetersKind.Single)
{ {
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM); return null;
combined = false; }
this.procedure = procedure;
this.unsortedResults = unsortedResults;
combined = (procedure.MetersKind == Entities.MetersKind.Combined);
if (combined)
{
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM);
} }
else else
{ {
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM); resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM);
combined = true;
} }
this.results = results;
try try
{ {
dateTime = DateTime.Now; dateTime = DateTime.Now;
@@ -126,7 +126,7 @@ namespace TBF.BenchControl.ResultsWriters.Basic
///---------- ///----------
/// Header /// Header
///---------- ///----------
writer.WriteLine(results[0].ProtocolTitle); writer.WriteLine(unsortedResults[0].ProtocolTitle);
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
string[] leftColumn = new string[] string[] leftColumn = new string[]
@@ -142,18 +142,18 @@ namespace TBF.BenchControl.ResultsWriters.Basic
string[] rightColumn = new string[] string[] rightColumn = new string[]
{ {
results[0].CycleNr.ToString(), unsortedResults[0].CycleNr.ToString(),
//dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(), //dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(),
string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"), string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"),
dateTime.Month.ToString("D2"), dateTime.Month.ToString("D2"),
dateTime.Day.ToString("D2"), dateTime.Day.ToString("D2"),
dateTime.Hour.ToString("D2"), dateTime.Hour.ToString("D2"),
dateTime.Minute.ToString("D2")), dateTime.Minute.ToString("D2")),
results[0].ProcedureName, procedure.Name,
Entities.User.CurrentUser.Name, Entities.User.CurrentUser.Name,
results[0].AmbientTempAve.ToString("F1") + " °C", unsortedResults[0].AmbientTempAve.ToString("F1") + " °C",
results[0].AmbientPressAve.ToString("F0") + " mbar", unsortedResults[0].AmbientPressAve.ToString("F0") + " mbar",
results[0].AmbientHumiAve.ToString("F0") + " %", unsortedResults[0].AmbientHumiAve.ToString("F0") + " %",
}; };
/// Determine max. left column width in characters /// Determine max. left column width in characters
@@ -190,6 +190,8 @@ namespace TBF.BenchControl.ResultsWriters.Basic
/// <param name="wmNr">Water meter number</param> /// <param name="wmNr">Water meter number</param>
void WriteSingleWM(int wmNr) void WriteSingleWM(int wmNr)
{ {
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr);
/// Determine column widths /// Determine column widths
int[] columnWidths = new int[resultItems.Count]; int[] columnWidths = new int[resultItems.Count];
int totalWidth = 0; int totalWidth = 0;
@@ -198,23 +200,28 @@ namespace TBF.BenchControl.ResultsWriters.Basic
columnWidths[i] = resultItems[i].ClmnHeaderText.Length; columnWidths[i] = resultItems[i].ClmnHeaderText.Length;
foreach (var tr in results) foreach (var tr in results)
{ {
int len = resultItems[i].Print(tr.Meters[wmNr]).Length; if (tr != null)
if (len > columnWidths[i]) columnWidths[i] = len; {
int len = resultItems[i].Print(tr.Meters[wmNr]).Length;
if (len > columnWidths[i]) columnWidths[i] = len;
}
} }
totalWidth += columnWidths[i]; totalWidth += columnWidths[i];
} }
totalWidth += 3 * (resultItems.Count - 1); totalWidth += 3 * (resultItems.Count - 1);
/// Write water meter number and s/n /// Write water meter number and s/n
writer.Write(string.Format("Water meter {0}", wmNr + 1)); writer.Write(string.Format("Water meter {0}", wmNr + 1));
if (!string.IsNullOrEmpty(results[0].Meters[wmNr].SerialNr)) if (!string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr))
{ {
writer.Write(string.Format(", s/n: {0}", results[0].Meters[wmNr].SerialNr)); writer.Write(string.Format(", s/n: {0}", unsortedResults[0].Meters[wmNr].SerialNr));
} }
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
/// Horizontal line writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header
writer.WriteLine(new String('-', totalWidth));
/// Write column headers /// Write column headers
for (int i = 0; i < resultItems.Count; i++) for (int i = 0; i < resultItems.Count; i++)
@@ -227,26 +234,35 @@ namespace TBF.BenchControl.ResultsWriters.Basic
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
} }
/// Horizontal line
writer.WriteLine(new String('-', totalWidth)); writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body
/// Write table data /// Write table data
foreach (var tr in results) foreach (var tr in results)
{ {
for (int i = 0; i < resultItems.Count; i++) if (tr != null)
{ {
string text = resultItems[i].Print(tr.Meters[wmNr]); for (int i = 0; i < resultItems.Count; i++)
writer.Write(text); {
string text = resultItems[i].Print(tr.Meters[wmNr]);
if (i < resultItems.Count - 1) /// Get rid of the color information
writer.Write(new string(' ', columnWidths[i] - text.Length + 3)); string[] texts = text.Split(new char[] { '|' });
else if (texts.Length == 2) { text = texts[0]; }
writer.WriteLine(string.Empty);
writer.Write(text);
if (i < resultItems.Count - 1)
writer.Write(new string(' ', columnWidths[i] - text.Length + 3));
else
writer.WriteLine(string.Empty);
}
} }
} }
/// Horizontal line
writer.WriteLine(new String('-', totalWidth)); writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
@@ -258,6 +274,8 @@ namespace TBF.BenchControl.ResultsWriters.Basic
/// <param name="wmNr">Water meter number</param> /// <param name="wmNr">Water meter number</param>
void WriteCombinedWM(int wmNr) void WriteCombinedWM(int wmNr)
{ {
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr);
/// Determin column widths /// Determin column widths
int[] columnWidths = new int[resultItems.Count]; int[] columnWidths = new int[resultItems.Count];
int totalWidth = 0; int totalWidth = 0;
@@ -266,16 +284,32 @@ namespace TBF.BenchControl.ResultsWriters.Basic
columnWidths[i] = resultItems[i].ClmnHeaderText.Length; columnWidths[i] = resultItems[i].ClmnHeaderText.Length;
foreach (var tr in results) foreach (var tr in results)
{ {
int len = resultItems[i].PrintCombined(tr.Meters[2*wmNr], tr.Meters[2*wmNr+1], tr.CombinedMeters[wmNr]).Length; if (tr != null)
if (len > columnWidths[i]) columnWidths[i] = len; {
int len = resultItems[i].PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]).Length;
if (len > columnWidths[i]) columnWidths[i] = len;
}
} }
totalWidth += columnWidths[i]; totalWidth += columnWidths[i];
} }
totalWidth += 3 * (resultItems.Count - 1); totalWidth += 3 * (resultItems.Count - 1);
writer.WriteLine(string.Format("Water meter {0}, Main s/n: {1}, Aux. s/n:{2}", wmNr + 1, results[0].Meters[2 * wmNr].SerialNr, results[0].Meters[2 * wmNr + 1].SerialNr));
writer.WriteLine(new String('-', totalWidth)); /// Write water meter number and two s/n-s
writer.Write(string.Format("Water meter {0}", wmNr + 1));
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr].SerialNr))
{
writer.Write(string.Format(", Main s/n: {0}", unsortedResults[0].Meters[2 * wmNr].SerialNr));
}
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr + 1].SerialNr))
{
writer.Write(string.Format(", Aux. s/n:{0}", unsortedResults[0].Meters[2 * wmNr + 1].SerialNr));
}
writer.WriteLine(string.Empty);
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header
for (int i = 0; i < resultItems.Count; i++) for (int i = 0; i < resultItems.Count; i++)
{ {
@@ -287,28 +321,34 @@ namespace TBF.BenchControl.ResultsWriters.Basic
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
} }
writer.WriteLine(new String('-', totalWidth));
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body
foreach (var tr in results) foreach (var tr in results)
{ {
foreach (var item in resultItems) writer.Write(item.PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]) + " "); if (tr != null)
writer.WriteLine(string.Empty);
}
foreach (var tr in results)
{
for (int i = 0; i < resultItems.Count; i++)
{ {
string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]); for (int i = 0; i < resultItems.Count; i++)
writer.Write(text); {
string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]);
if (i < resultItems.Count - 1) /// Get rid of the color information
writer.Write(new string(' ', columnWidths[i] - text.Length + 3)); string[] texts = text.Split(new char[] { '|' });
else if (texts.Length == 2) { text = texts[0]; }
writer.WriteLine(string.Empty);
writer.Write(text);
if (i < resultItems.Count - 1)
writer.Write(new string(' ', columnWidths[i] - text.Length + 3));
else
writer.WriteLine(string.Empty);
}
} }
} }
writer.WriteLine(new String('-', totalWidth)); writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
writer.WriteLine(string.Empty); writer.WriteLine(string.Empty);
} }
@@ -382,8 +382,8 @@ namespace TBF.BenchControl.Sequences
IResultsWriter writer = TbfComponents.FindComponent(StateMachine.Procedure.ResultsWriter) as IResultsWriter; IResultsWriter writer = TbfComponents.FindComponent(StateMachine.Procedure.ResultsWriter) as IResultsWriter;
IResultsPrinter printer = TbfComponents.FindComponent(StateMachine.Procedure.ResultsPrinter) as IResultsPrinter; IResultsPrinter printer = TbfComponents.FindComponent(StateMachine.Procedure.ResultsPrinter) as IResultsPrinter;
State savingAndPrintingRslts = State.Create("MainSeq : Saving and printing results"); State savingAndPrintingRslts = State.Create("MainSeq : Saving and printing results");
if (writer != null) savingAndPrintingRslts.AddOperation(writer.WriteResultsOp(results)); if (writer != null) savingAndPrintingRslts.AddOperation(writer.WriteResultsOp(StateMachine.Procedure, results));
if (printer != null) savingAndPrintingRslts.AddOperation(printer.PrintResultsOp(BenchId, WaterMeters, results, protocolTitle)); if (printer != null) savingAndPrintingRslts.AddOperation(printer.PrintResultsOp(BenchId, WaterMeters, StateMachine.Procedure, results, protocolTitle));
savingAndPrintingRslts.AddOperation(checkUiOp).EnterState(); savingAndPrintingRslts.AddOperation(checkUiOp).EnterState();
do do
{ {
@@ -24,7 +24,7 @@ namespace TBF.Screens
public IList<TBF.Forms.ResultItemSpec> RsltItems_Disk_SingleWM; public IList<TBF.Forms.ResultItemSpec> RsltItems_Disk_SingleWM;
public IList<TBF.Forms.ResultItemSpec> RsltItems_Disk_CombinedWM; public IList<TBF.Forms.ResultItemSpec> RsltItems_Disk_CombinedWM;
IList<Entities.Test> tests; Entities.Procedure procedure;
IList<Entities.TestResult> testResults; IList<Entities.TestResult> testResults;
bool combined; bool combined;
ListView firstListView; ListView firstListView;
@@ -190,44 +190,11 @@ namespace TBF.Screens
return lview; return lview;
} }
/// <summary>
/// Pre-fetch the test results corresponding to the columns or rows in the ListView
/// </summary>
/// <returns>Ordered list of test results containing null-s for missing results</returns>
IList<Entities.TestResult> GetCurrentTestResults(int meterNr)
{
IList<Entities.TestResult> rslts = new List<Entities.TestResult>();
foreach (var test in tests)
{
if ((test.Part == 0) || (test.Part == meterNr + 1))
{
for (int rpt = 1; rpt <= test.Repeats; rpt++)
{
bool added = false;
if (testResults != null)
{
foreach (var testRslt in testResults)
{
if ((testRslt.TestId == test.Id) && (testRslt.RepetitionNr == rpt) && !testRslt.DoNotPublish)
{
rslts.Add(testRslt);
added = true;
break;
}
}
}
if (!added) rslts.Add(null);
}
}
}
return rslts;
}
IList<string> GetAllDecoratedTestNames(int meterNr) IList<string> GetAllDecoratedTestNames(int meterNr)
{ {
IList<string> rslt = new List<string>(); IList<string> rslt = new List<string>();
foreach (var test in tests) foreach (var test in procedure.Tests)
{ {
if ((test.Part == 0) || (test.Part == meterNr + 1)) if ((test.Part == 0) || (test.Part == meterNr + 1))
{ {
@@ -253,7 +220,7 @@ namespace TBF.Screens
ListView GetResultsTestsAreRows(int mtr) ListView GetResultsTestsAreRows(int mtr)
{ {
IList<Forms.ResultItemSpec> items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); IList<Forms.ResultItemSpec> items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM);
if (tests == null || items == null) return null; if (procedure == null || procedure.Tests == null || items == null) return null;
ListView lview = GetListView(); ListView lview = GetListView();
@@ -282,7 +249,7 @@ namespace TBF.Screens
IList<string> testNames = GetAllDecoratedTestNames(mtr); IList<string> testNames = GetAllDecoratedTestNames(mtr);
int ix = 0; int ix = 0;
foreach (var testRslt in GetCurrentTestResults(mtr)) foreach (var testRslt in Utils.GetSortedTestResults(procedure, testResults, mtr))
{ {
ListViewItem lvi = new ListViewItem(testNames[ix++]); ListViewItem lvi = new ListViewItem(testNames[ix++]);
if (testRslt != null) if (testRslt != null)
@@ -333,7 +300,7 @@ namespace TBF.Screens
ListView GetResultsTestsAreColumns(int mtr) ListView GetResultsTestsAreColumns(int mtr)
{ {
IList<Forms.ResultItemSpec> items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); IList<Forms.ResultItemSpec> items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM);
if (tests == null || items == null) return null; if (procedure == null || procedure.Tests == null || items == null) return null;
ListView lview = GetListView(); ListView lview = GetListView();
@@ -360,7 +327,7 @@ namespace TBF.Screens
} }
} }
IList<Entities.TestResult> trs = GetCurrentTestResults(mtr); IList<Entities.TestResult> trs = Utils.GetSortedTestResults(procedure, testResults, mtr);
foreach (var item in items) foreach (var item in items)
{ {
@@ -424,7 +391,7 @@ namespace TBF.Screens
void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args)
{ {
tests = args.Procedure.Tests; procedure = args.Procedure;
testResults = new List<Entities.TestResult>(); testResults = new List<Entities.TestResult>();
RedrawAll(); RedrawAll();
} }
+44
View File
@@ -103,6 +103,7 @@ namespace TBF
return valvesClose; return valvesClose;
} }
/// <summary> /// <summary>
/// Get an array of RegulValve positions from a TransitionStep entity /// Get an array of RegulValve positions from a TransitionStep entity
/// </summary> /// </summary>
@@ -131,6 +132,7 @@ namespace TBF
return result; return result;
} }
/// <summary> /// <summary>
/// Get an array of Pump-With-FM power percentages from a TransitionStep entity /// Get an array of Pump-With-FM power percentages from a TransitionStep entity
/// </summary> /// </summary>
@@ -163,6 +165,48 @@ namespace TBF
return result; return result;
} }
/// <summary>
/// Pre-fetch the test results from the currently available results.
/// The order or the returned results is the same as the order of tests in the procedure specification.
/// </summary>
/// <param name="procedure">Current procedure, it is used to determine the order of resulting test results</param>
/// <param name="testResults">Currently available unsorted test results (can also be null)</param>
/// <param name="meterNr">Water meter number (only used when tests have nonzero 'Part' number)</param>
/// <returns>Ordered list of test results containing null-s for missing results</returns>
public static IList<Entities.TestResult> GetSortedTestResults(Entities.Procedure procedure, IList<Entities.TestResult> testResults, int meterNr)
{
IList<Entities.TestResult> rslts = new List<Entities.TestResult>();
if (procedure == null) return rslts; /// Return an empty list if no procedure specified
foreach (var test in procedure.Tests)
{
if ((test.Part == 0) || (test.Part == meterNr + 1))
{
for (int rpt = 1; rpt <= test.Repeats; rpt++)
{
bool added = false;
if (testResults != null)
{
foreach (var testRslt in testResults)
{
if ((testRslt.TestId == test.Id) && (testRslt.RepetitionNr == rpt) && !testRslt.DoNotPublish)
{
rslts.Add(testRslt);
added = true;
break;
}
}
}
if (!added) rslts.Add(null);
}
}
}
return rslts;
}
/// <summary> /// <summary>
/// Converts float number to a string with the specified number of valid digits /// Converts float number to a string with the specified number of valid digits
/// </summary> /// </summary>