678 lines
19 KiB
C#
678 lines
19 KiB
C#
///
|
|
/// Copyright (c) 2015 Sensus Metering Systems
|
|
/// Author: Milan Hanajík
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using log4net;
|
|
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
|
|
using Oracle.DataAccess.Types;
|
|
using TBF.BenchControl;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.BenchControl.DB.SensusOracle
|
|
{
|
|
public class Database : ComponentBase, IOperation, GenericDevices.IResultsWriter, Generic.IDevice
|
|
{
|
|
private static readonly ILog log = LogManager.GetLogger(typeof(Database));
|
|
public override string ToString() { return string.Format("ResultsWriters.Basic({0})", Cfg.ToString(1)); }
|
|
|
|
readonly DatabaseCfg dbCfg;
|
|
|
|
OracleConnection conn; /// Oracle database connection
|
|
|
|
/// <summary>
|
|
/// Result items to print
|
|
/// </summary>
|
|
IList<TBF.Forms.ResultItemSpec> resultItems;
|
|
bool combined;
|
|
|
|
/// <summary>
|
|
/// Results to print
|
|
/// </summary>
|
|
Entities.Procedure procedure;
|
|
IList<Entities.TestResult> unsortedResults;
|
|
DateTime dateTime;
|
|
StreamWriter writer;
|
|
|
|
string separatorStr;
|
|
|
|
public Database()
|
|
{
|
|
}
|
|
|
|
public Database(DatabaseCfg cfg)
|
|
: base(cfg)
|
|
{
|
|
dbCfg = cfg;
|
|
|
|
switch (cfg.Separator)
|
|
{
|
|
default:
|
|
case Separator.None:
|
|
separatorStr = string.Empty;
|
|
break;
|
|
case Separator.Space:
|
|
separatorStr = " ";
|
|
break;
|
|
case Separator.Tabulator:
|
|
separatorStr = "\t";
|
|
break;
|
|
case Separator.Comma:
|
|
separatorStr = ",";
|
|
break;
|
|
case Separator.Semicolon:
|
|
separatorStr = ";";
|
|
break;
|
|
}
|
|
|
|
log.Debug(this.ToString());
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
if (dbCfg.DBUsed == DBUsed.Test)
|
|
{
|
|
conn = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;");
|
|
}
|
|
else if (dbCfg.DBUsed == DBUsed.Production)
|
|
{
|
|
conn = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;");
|
|
}
|
|
else if (dbCfg.DBUsed == DBUsed.Quality)
|
|
{
|
|
/// Temporarily use test database
|
|
conn = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;");
|
|
}
|
|
|
|
///
|
|
/// Do something with the database to see if the connection works well
|
|
///
|
|
conn.Open();
|
|
|
|
string rslt = "none";
|
|
OracleCommand cmd = new OracleCommand("select Standort from ANBIETER_SD where ANBID = 4", conn);
|
|
OracleDataReader dr = cmd.ExecuteReader();
|
|
if (dr.Read()) rslt = dr.GetString(0);
|
|
|
|
conn.Close();
|
|
}
|
|
|
|
public void RunDeviceBefore() {}
|
|
public void RunDeviceAfter() {}
|
|
|
|
public void StopDevice()
|
|
{
|
|
if (conn != null) conn.Dispose();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Eliminate spaces conditionally, depesing on bool WriterCfg.EliminateSpaces
|
|
/// </summary>
|
|
/// <param name="item">Input string</param>
|
|
/// <returns>Output string</returns>
|
|
string ElSpaces(string item)
|
|
{
|
|
if (dbCfg.EliminateSpaces)
|
|
return item.Replace(" ", string.Empty);
|
|
else
|
|
return item;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Returns a file name derived from a DateTime structure.
|
|
/// Creates directories on this path as a side effect.
|
|
/// </summary>
|
|
/// <param name="time">Date and time</param>
|
|
/// <returns>File name</returns>
|
|
string GetFilename(DateTime time)
|
|
{
|
|
string directory = dbCfg.DestinationPath; /// Ends with "\\";
|
|
Directory.CreateDirectory(directory);
|
|
|
|
if (dbCfg.YearFolders)
|
|
{
|
|
directory = string.Format("{0}{1}\\", directory, time.Year.ToString());
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
if (dbCfg.MonthFolders)
|
|
{
|
|
string monthStr /* = now.Month.ToString("D2")*/;
|
|
switch (time.Month)
|
|
{
|
|
default:
|
|
case 1: monthStr = "January"; break;
|
|
case 2: monthStr = "February"; break;
|
|
case 3: monthStr = "March"; break;
|
|
case 4: monthStr = "April"; break;
|
|
case 5: monthStr = "May"; break;
|
|
case 6: monthStr = "June"; break;
|
|
case 7: monthStr = "July"; break;
|
|
case 8: monthStr = "August"; break;
|
|
case 9: monthStr = "September"; break;
|
|
case 10: monthStr = "October"; break;
|
|
case 11: monthStr = "November"; break;
|
|
case 12: monthStr = "December"; break;
|
|
}
|
|
directory = string.Format("{0}{1}\\", directory, monthStr);
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
if (dbCfg.DayFolders)
|
|
{
|
|
directory = string.Format("{0}{1}\\", directory, time.Day.ToString("D2"));
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
return string.Format("{0}{1}{2}{3}-{4}{5}.txt", directory, (time.Year % 100).ToString("D2"),
|
|
time.Month.ToString("D2"), time.Day.ToString("D2"), time.Hour.ToString("D2"), time.Minute.ToString("D2"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Writes the test cycle results into a file, Events: Event.ResultsWritten
|
|
/// </summary>
|
|
/// <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>
|
|
public IOperation WriteResultsOp(Entities.Procedure procedure, IList<Entities.TestResult> unsortedResults)
|
|
{
|
|
if ((procedure == null) || (unsortedResults == null) || (unsortedResults.Count < 1))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
this.procedure = procedure;
|
|
this.unsortedResults = unsortedResults;
|
|
|
|
combined = (procedure.MetersKind == Entities.MetersKind.Combined);
|
|
if (combined)
|
|
{
|
|
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM);
|
|
}
|
|
else
|
|
{
|
|
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM);
|
|
}
|
|
|
|
try
|
|
{
|
|
dateTime = DateTime.Now;
|
|
writer = new StreamWriter(System.IO.File.Create(GetFilename(dateTime)));
|
|
}
|
|
catch
|
|
{
|
|
writer = null;
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
/// <summary>Start this operation</summary>
|
|
public void Start()
|
|
{
|
|
if (writer == null) return;
|
|
|
|
///----------
|
|
/// Header
|
|
///----------
|
|
writer.WriteLine(unsortedResults[0].ProtocolTitle);
|
|
writer.WriteLine(string.Empty);
|
|
|
|
string[] leftColumn = new string[]
|
|
{
|
|
"Batch number: ",
|
|
"Date and time: ",
|
|
"Procedure:",
|
|
Strings.User_,
|
|
"Ambient temperature: ",
|
|
"Ambient pressure: ",
|
|
"Ambient humidity: ",
|
|
};
|
|
|
|
string[] rightColumn = new string[]
|
|
{
|
|
unsortedResults[0].BatchNr.ToString(),
|
|
//dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(),
|
|
string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"),
|
|
dateTime.Month.ToString("D2"),
|
|
dateTime.Day.ToString("D2"),
|
|
dateTime.Hour.ToString("D2"),
|
|
dateTime.Minute.ToString("D2")),
|
|
procedure.Name,
|
|
Entities.User.CurrentUser.Name,
|
|
unsortedResults[0].AmbientTempAve.ToString("F1") + " °C",
|
|
unsortedResults[0].AmbientPressAve.ToString("F0") + " mbar",
|
|
unsortedResults[0].AmbientHumiAve.ToString("F0") + " %",
|
|
};
|
|
|
|
/// Determine max. left column width in characters
|
|
int maxLen = 0;
|
|
foreach (var s in leftColumn) if (s.Length > maxLen) maxLen = s.Length;
|
|
|
|
/// Write aligned columns
|
|
for (int i = 0; i < Math.Min(leftColumn.Length, rightColumn.Length); i++)
|
|
{
|
|
writer.Write(leftColumn[i]);
|
|
writer.Write(new string(' ', maxLen - leftColumn[i].Length + 3));
|
|
writer.WriteLine(rightColumn[i]);
|
|
}
|
|
writer.WriteLine(string.Empty);
|
|
|
|
///--------
|
|
/// Body
|
|
///--------
|
|
if (combined)
|
|
{
|
|
for (int wmNr = 0; wmNr < Program.CompoundWMsCount; wmNr++) WriteCombinedWM(wmNr + 1); /// wmNr is 0-based
|
|
}
|
|
else
|
|
{
|
|
/// Open the Oracle database
|
|
conn.Open();
|
|
|
|
for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++) /// wmNr is 0-based
|
|
{
|
|
if (!unsortedResults[0].Meters[wmNr].Disabled)
|
|
{
|
|
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, Utils.PartNr(wmNr + 1, combined));
|
|
WriteSingleWM(wmNr, wmNr + 1, results);
|
|
SaveSingleWM2DB(wmNr, results);
|
|
}
|
|
}
|
|
|
|
/// Close the Oracle database
|
|
conn.Close();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Write one meter results into the database
|
|
/// </summary>
|
|
/// <param name="wmNr"></param>
|
|
/// <param name="results"></param>
|
|
void SaveSingleWM2DB(int wmNr, IList<Entities.TestResult> results)
|
|
{
|
|
if (string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr)) return; /// No database activity possible w/o PCB number
|
|
|
|
string pcbNr = unsortedResults[0].Meters[wmNr].SerialNr;
|
|
|
|
///
|
|
/// Read a list of all prufindexes for a given PCB Number
|
|
///
|
|
IList<int> pruefindexes = new List<int>();
|
|
{
|
|
OracleParameter parm = new OracleParameter();
|
|
parm.OracleDbType = OracleDbType.Varchar2;
|
|
parm.Value = pcbNr;
|
|
|
|
OracleCommand cmd1 = new OracleCommand("select MAX_Pruefindex from VT_ZAEHLER_PD where VT_Fernum = :1 AND ANBID = 4", conn);
|
|
cmd1.Parameters.Add(parm);
|
|
|
|
OracleDataReader dr = cmd1.ExecuteReader();
|
|
|
|
while (dr.Read())
|
|
{
|
|
pruefindexes.Add(dr.GetInt32(0));
|
|
}
|
|
}
|
|
|
|
///
|
|
/// Determine MAX_Pruefindex
|
|
///
|
|
int maxpruefindexLowPart = 0;
|
|
foreach (var v in pruefindexes)
|
|
{
|
|
if ((v % 100) > maxpruefindexLowPart) maxpruefindexLowPart = (v % 100);
|
|
}
|
|
int MAX_Pruefindex = 100 * dbCfg.TestBenchId + maxpruefindexLowPart + 1;
|
|
|
|
|
|
bool passed = true;
|
|
int Sekundaere_Adr;
|
|
int Hydr_Pruefung;
|
|
|
|
foreach (var r in results)
|
|
{
|
|
if (!r.DoNotEvaluate && !r.Meters[wmNr].Passed) passed = false;
|
|
}
|
|
|
|
if (!passed)
|
|
{
|
|
/// Failed
|
|
Sekundaere_Adr = 0;
|
|
Hydr_Pruefung = 97; /// Hydr. tets failed, Pressure test passed
|
|
}
|
|
else
|
|
{
|
|
/// Passed
|
|
Sekundaere_Adr = 1;
|
|
if (maxpruefindexLowPart == 0)
|
|
Hydr_Pruefung = 96;
|
|
else
|
|
Hydr_Pruefung = 224;
|
|
}
|
|
|
|
if (passed)
|
|
{
|
|
string pOrder = string.IsNullOrEmpty(unsortedResults[0].PurchaseOrder) ? string.Empty : unsortedResults[0].PurchaseOrder;
|
|
OracleParameter parm1 = new OracleParameter();
|
|
parm1.OracleDbType = OracleDbType.Varchar2;
|
|
parm1.Value = pOrder;
|
|
|
|
OracleParameter parm2 = new OracleParameter();
|
|
parm2.OracleDbType = OracleDbType.Varchar2;
|
|
parm2.Value = "IPBATMXX";
|
|
|
|
OracleParameter parm3 = new OracleParameter();
|
|
parm3.OracleDbType = OracleDbType.Varchar2;
|
|
parm3.Value = pcbNr;
|
|
|
|
OracleParameter parm4 = new OracleParameter();
|
|
parm4.OracleDbType = OracleDbType.Int32;
|
|
parm4.Value = MAX_Pruefindex;
|
|
|
|
OracleParameter parm5 = new OracleParameter();
|
|
parm5.OracleDbType = OracleDbType.Int32;
|
|
parm5.Value = -1;
|
|
|
|
OracleParameter parm6 = new OracleParameter();
|
|
parm6.OracleDbType = OracleDbType.Int32;
|
|
parm6.Value = Sekundaere_Adr;
|
|
|
|
OracleParameter parm7 = new OracleParameter();
|
|
parm7.OracleDbType = OracleDbType.Int32;
|
|
parm7.Value = Hydr_Pruefung;
|
|
|
|
OracleParameter parm8 = new OracleParameter();
|
|
parm8.OracleDbType = OracleDbType.Int32;
|
|
parm8.Value = 6;
|
|
|
|
OracleParameter parm9 = new OracleParameter();
|
|
parm9.OracleDbType = OracleDbType.Int32;
|
|
parm9.Value = 4; /// = ANBID Stara Tura
|
|
|
|
if (MAX_Pruefindex % 100 == 1)
|
|
{
|
|
OracleCommand cmd = new OracleCommand();
|
|
cmd.Connection = conn;
|
|
cmd.CommandText = "INSERT INTO VT_ZAEHLER_PD(Auftragsnummer, VT_Identnummer, VT_Fernum, Max_Pruefindex, Zaehlernummer, Sekundaere_Adr, Hydr_Pruefung, ID_Benutzer, ANBID) VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9)";
|
|
cmd.Parameters.Add(parm1);
|
|
cmd.Parameters.Add(parm2);
|
|
cmd.Parameters.Add(parm3);
|
|
cmd.Parameters.Add(parm4);
|
|
cmd.Parameters.Add(parm5);
|
|
cmd.Parameters.Add(parm6);
|
|
cmd.Parameters.Add(parm7);
|
|
cmd.Parameters.Add(parm8);
|
|
cmd.Parameters.Add(parm9);
|
|
int rowsUpdated = cmd.ExecuteNonQuery();
|
|
}
|
|
else
|
|
{
|
|
//OracleCommand cmd = new OracleCommand();
|
|
//cmd.Connection = conn;
|
|
//cmd.CommandText = "UPDATE VT_ZAEHLER_PD SET Auftragsnummer = :1, VT_Identnummer = :2, Max_Pruefindex = :4, Zaehlernummer = :5, Sekundaere_Adr= :6, Hydr_Pruefung= :7, ID_Benutzer= :8 WHERE VT_Fernum = :3 and ANBID = :9";
|
|
//cmd.Parameters.Add(parm1);
|
|
//cmd.Parameters.Add(parm2);
|
|
//cmd.Parameters.Add(parm3);
|
|
//cmd.Parameters.Add(parm4);
|
|
//cmd.Parameters.Add(parm5);
|
|
//cmd.Parameters.Add(parm6);
|
|
//cmd.Parameters.Add(parm7);
|
|
//cmd.Parameters.Add(parm8);
|
|
//cmd.Parameters.Add(parm9);
|
|
//int rowsUpdated = cmd.ExecuteNonQuery();
|
|
|
|
OracleTransaction transaction = conn.BeginTransaction();
|
|
try
|
|
{
|
|
OracleCommand cmd = new OracleCommand();
|
|
cmd.Connection = conn;
|
|
cmd.CommandText = "UPDATE VT_ZAEHLER_PD SET Auftragsnummer = :1, VT_Identnummer = :2, Max_Pruefindex = :4, Zaehlernummer = :5, Sekundaere_Adr= :6, Hydr_Pruefung= :7, ID_Benutzer= :8 WHERE VT_Fernum = :3 and ANBID = :9";
|
|
cmd.Parameters.Add(parm1);
|
|
cmd.Parameters.Add(parm2);
|
|
cmd.Parameters.Add(parm3);
|
|
cmd.Parameters.Add(parm4);
|
|
cmd.Parameters.Add(parm5);
|
|
cmd.Parameters.Add(parm6);
|
|
cmd.Parameters.Add(parm7);
|
|
cmd.Parameters.Add(parm8);
|
|
cmd.Parameters.Add(parm9);
|
|
|
|
int rowsUpdated = cmd.ExecuteNonQuery();
|
|
|
|
transaction.Commit();
|
|
}
|
|
catch
|
|
{
|
|
transaction.Rollback();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Write one water meter results into a file
|
|
/// </summary>
|
|
/// <param name="wmNr">Water meter number (0-based)</param>
|
|
void WriteSingleWM(int wmNr, int printedWMNr, IList<Entities.TestResult> results)
|
|
{
|
|
/// Determine column widths
|
|
int[] columnWidths = new int[resultItems.Count];
|
|
int totalWidth = 0;
|
|
for (int i = 0; i < resultItems.Count; i++)
|
|
{
|
|
columnWidths[i] = ElSpaces(resultItems[i].ClmnHeaderText).Length;
|
|
foreach (var tr in results)
|
|
{
|
|
if (tr != null)
|
|
{
|
|
string text = resultItems[i].Print(tr.Meters[wmNr]);
|
|
|
|
/// Get rid of the color information
|
|
string[] texts = text.Split(new char[] { '|' });
|
|
if (texts.Length == 2) { text = texts[0]; }
|
|
|
|
int len = ElSpaces(text).Length;
|
|
if (len > columnWidths[i]) columnWidths[i] = len;
|
|
}
|
|
}
|
|
totalWidth += columnWidths[i];
|
|
}
|
|
totalWidth += 3 * (resultItems.Count - 1);
|
|
|
|
|
|
/// Write water meter number and s/n
|
|
writer.Write(string.Format("Water meter {0}", printedWMNr));
|
|
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr))
|
|
{
|
|
writer.Write(string.Format(" s/n: {0}", unsortedResults[0].Meters[wmNr].SerialNr));
|
|
}
|
|
writer.WriteLine(string.Empty);
|
|
|
|
|
|
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header
|
|
|
|
|
|
/// Write column headers
|
|
for (int i = 0; i < resultItems.Count; i++)
|
|
{
|
|
writer.Write(ElSpaces(resultItems[i].ClmnHeaderText));
|
|
|
|
if (i < resultItems.Count - 1)
|
|
{
|
|
if (!dbCfg.EliminateSpaces)
|
|
{
|
|
writer.Write(new string(' ', columnWidths[i] - resultItems[i].ClmnHeaderText.Length + 3));
|
|
}
|
|
writer.Write(separatorStr);
|
|
}
|
|
else
|
|
{
|
|
writer.WriteLine(string.Empty);
|
|
}
|
|
}
|
|
|
|
|
|
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body
|
|
|
|
|
|
/// Write table data
|
|
foreach (var tr in results)
|
|
{
|
|
if (tr != null)
|
|
{
|
|
for (int i = 0; i < resultItems.Count; i++)
|
|
{
|
|
string text = resultItems[i].Print(tr.Meters[wmNr]);
|
|
|
|
/// Get rid of the color information
|
|
string[] texts = text.Split(new char[] { '|' });
|
|
if (texts.Length == 2) { text = texts[0]; }
|
|
|
|
writer.Write(ElSpaces(text));
|
|
|
|
if (i < resultItems.Count - 1)
|
|
{
|
|
if (!dbCfg.EliminateSpaces)
|
|
{
|
|
writer.Write(new string(' ', columnWidths[i] - text.Length + 3));
|
|
}
|
|
writer.Write(separatorStr);
|
|
}
|
|
else
|
|
{
|
|
writer.WriteLine(string.Empty);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body
|
|
|
|
writer.WriteLine(string.Empty);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write one combined water meter results
|
|
/// </summary>
|
|
/// <param name="wmNr1">Combined water meter number (1-based)</param>
|
|
void WriteCombinedWM(int wmNr1)
|
|
{
|
|
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, Utils.PartNr(wmNr1, combined));
|
|
|
|
/// Determin column widths
|
|
int[] columnWidths = new int[resultItems.Count];
|
|
int totalWidth = 0;
|
|
for (int i = 0; i < resultItems.Count; i++)
|
|
{
|
|
columnWidths[i] = ElSpaces(resultItems[i].ClmnHeaderText).Length;
|
|
foreach (var tr in results)
|
|
{
|
|
if (tr != null)
|
|
{
|
|
string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr1 - 2], tr.Meters[2 * wmNr1 - 1], tr.CombinedMeters[wmNr1 - 1]);
|
|
int len = ElSpaces(text).Length;
|
|
if (len > columnWidths[i]) columnWidths[i] = len;
|
|
}
|
|
}
|
|
totalWidth += columnWidths[i];
|
|
}
|
|
totalWidth += 3 * (resultItems.Count - 1);
|
|
|
|
|
|
/// Write water meter number and two s/n-s
|
|
writer.Write(string.Format("Water meter {0}", wmNr1));
|
|
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr1 - 2].SerialNr))
|
|
{
|
|
writer.Write(string.Format(", Main s/n: {0}", unsortedResults[0].Meters[2 * wmNr1 - 2].SerialNr));
|
|
}
|
|
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr1 - 1].SerialNr))
|
|
{
|
|
writer.Write(string.Format(", Aux. s/n:{0}", unsortedResults[0].Meters[2 * wmNr1 - 1].SerialNr));
|
|
}
|
|
writer.WriteLine(string.Empty);
|
|
|
|
|
|
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header
|
|
|
|
|
|
for (int i = 0; i < resultItems.Count; i++)
|
|
{
|
|
writer.Write(ElSpaces(resultItems[i].ClmnHeaderText));
|
|
|
|
if (i < resultItems.Count - 1)
|
|
{
|
|
if (!dbCfg.EliminateSpaces)
|
|
{
|
|
writer.Write(new string(' ', columnWidths[i] - resultItems[i].ClmnHeaderText.Length + 3));
|
|
}
|
|
writer.Write(separatorStr);
|
|
}
|
|
else
|
|
{
|
|
writer.WriteLine(string.Empty);
|
|
}
|
|
}
|
|
|
|
|
|
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body
|
|
|
|
|
|
foreach (var tr in results)
|
|
{
|
|
if (tr != null)
|
|
{
|
|
for (int i = 0; i < resultItems.Count; i++)
|
|
{
|
|
string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr1 - 2], tr.Meters[2 * wmNr1 - 1], tr.CombinedMeters[wmNr1 - 1]);
|
|
|
|
/// Get rid of the color information
|
|
string[] texts = text.Split(new char[] { '|' });
|
|
if (texts.Length == 2) { text = texts[0]; }
|
|
|
|
writer.Write(ElSpaces(text));
|
|
|
|
if (i < resultItems.Count - 1)
|
|
{
|
|
if (!dbCfg.EliminateSpaces)
|
|
{
|
|
writer.Write(new string(' ', columnWidths[i] - text.Length + 3));
|
|
}
|
|
writer.Write(separatorStr);
|
|
}
|
|
else
|
|
{
|
|
writer.WriteLine(string.Empty);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body
|
|
|
|
writer.WriteLine(string.Empty);
|
|
}
|
|
|
|
/// <summary>Run this operation</summary>
|
|
/// <returns>Event.ResultsWritten</returns>
|
|
public Event Run()
|
|
{
|
|
return Event.ResultsWritten;
|
|
}
|
|
|
|
/// <summary>Stop this operation</summary>
|
|
public void Stop()
|
|
{
|
|
if (writer != null) writer.Close();
|
|
writer = null;
|
|
}
|
|
}
|
|
}
|