init
This commit is contained in:
@@ -0,0 +1,459 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
|
||||
namespace DTS.Reports
|
||||
{
|
||||
public class DiagnosticsReport : ReportBase
|
||||
{
|
||||
private enum DASFields
|
||||
{
|
||||
DAS,
|
||||
FW,
|
||||
CalDate,
|
||||
DueDate,
|
||||
Connection,
|
||||
Input,
|
||||
Battery
|
||||
}
|
||||
private enum AnalogFields
|
||||
{
|
||||
ExportNum,
|
||||
DAS,
|
||||
Module,
|
||||
Channel,
|
||||
Object,
|
||||
Sens,
|
||||
Desc,
|
||||
Exc,
|
||||
Offset,
|
||||
Shunt,
|
||||
Range,
|
||||
Noise
|
||||
}
|
||||
private enum SquibFields
|
||||
{
|
||||
DAS,
|
||||
Module,
|
||||
Channel,
|
||||
Desc,
|
||||
ISO,
|
||||
FireMode,
|
||||
Delay,
|
||||
Duration
|
||||
}
|
||||
public class AnalogHelper
|
||||
{
|
||||
public enum ResultStatus
|
||||
{
|
||||
Passed,
|
||||
Failed,
|
||||
NotTested
|
||||
}
|
||||
public int ExportNum { get; set; }
|
||||
public string DAS { get; set; }
|
||||
public string Module { get; set; }
|
||||
public string Channel { get; set; }
|
||||
public string Object { get; set; }
|
||||
public string SensorSerialNumber { get; set; }
|
||||
public string SerialNumberWithAxis { get; set; }
|
||||
public string Desc { get; set; }
|
||||
public double ScalefactorMilliVoltsPerADC { get; set; }
|
||||
public double ActualRangeMv { get; set; }
|
||||
public double Exc { get; set; }
|
||||
public ResultStatus ExcStatus { get; set; }
|
||||
public double Offset { get; set; }
|
||||
public ResultStatus OffStatus { get; set; }
|
||||
public double Shunt { get; set; }
|
||||
public ResultStatus ShuntStatus { get; set; }
|
||||
public double Range { get; set; }
|
||||
public ResultStatus RangeStatus { get; set; }
|
||||
public double Noise { get; set; }
|
||||
public ResultStatus NoiseStatus { get; set; }
|
||||
}
|
||||
public class DASHelper
|
||||
{
|
||||
public string DAS { get; set; }
|
||||
public string Firmware { get; set; }
|
||||
public DateTime CalDate { get; set; }
|
||||
public DateTime DueDate { get; set; }
|
||||
public string Connection { get; set; }
|
||||
public string Input { get; set; }
|
||||
public string Battery { get; set; }
|
||||
}
|
||||
public class SquibHelper
|
||||
{
|
||||
public enum ResultStatus
|
||||
{
|
||||
Passed,
|
||||
Failed,
|
||||
NotTested
|
||||
}
|
||||
public string DAS { get; set; }
|
||||
public string Module { get; set; }
|
||||
public string Channel { get; set; }
|
||||
public string Desc { get; set; }
|
||||
public string ISO { get; set; }
|
||||
public string FireMode { get; set; }
|
||||
public double Delay { get; set; }
|
||||
public ResultStatus DelayStatus { get; set; }
|
||||
public double Duration { get; set; }
|
||||
public ResultStatus DurationStatus { get; set; }
|
||||
public double Resistance { get; set; }
|
||||
}
|
||||
public DiagnosticsReport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static string GetReportFilename(bool isPreTest, string testId)
|
||||
{
|
||||
if (false == string.IsNullOrEmpty(testId))
|
||||
{
|
||||
return isPreTest
|
||||
? $"{testId} Pretest Diagnostics {GetFilenameTimeStamp()}.xlsx"
|
||||
: $"{testId} Post-Test Diagnostics {GetFilenameTimeStamp()}.xlsx";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Return the template filename
|
||||
return "Diagnostic Results.xlsx";
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetReportFilenamePath(bool isPreTest, string reportPath, string testId)
|
||||
{
|
||||
var filename = GetReportFilename(isPreTest, testId);
|
||||
return Path.Combine(reportPath, filename);
|
||||
}
|
||||
|
||||
public void DoReport(DASHelper[] das, AnalogHelper[] analog, SquibHelper[] squib, string outputFileName, string folderNameId, string sensitivityDisplayFormat,
|
||||
bool generateExcelReports, bool generatePDFReports)
|
||||
{
|
||||
var dtDAS = new DataTable();
|
||||
var dtAnalog = new DataTable();
|
||||
var dtSquib = new DataTable();
|
||||
var dtAnalogStyles = new DataTable();
|
||||
var dtSquibStyles = new DataTable();
|
||||
var minDate = new DateTime(1970, 1, 1);
|
||||
|
||||
try
|
||||
{
|
||||
dtAnalog.TableName = "Analog";
|
||||
dtDAS.TableName = "DAS";
|
||||
dtSquib.TableName = "Squibs";
|
||||
|
||||
var analogFields = Enum.GetValues(typeof(AnalogFields)).Cast<AnalogFields>().ToArray();
|
||||
foreach (var field in analogFields)
|
||||
{
|
||||
var c = dtAnalog.Columns.Add(field.ToString());
|
||||
var c2 = dtAnalogStyles.Columns.Add(field.ToString(), typeof(int));
|
||||
switch (field)
|
||||
{
|
||||
case AnalogFields.Channel: c.DataType = typeof(string); break;
|
||||
case AnalogFields.DAS: c.DataType = typeof(string); break;
|
||||
case AnalogFields.Desc: c.DataType = typeof(string); break;
|
||||
case AnalogFields.Exc: c.DataType = typeof(double); break;
|
||||
case AnalogFields.ExportNum: c.DataType = typeof(int); break;
|
||||
case AnalogFields.Module: c.DataType = typeof(string); break;
|
||||
case AnalogFields.Noise: c.DataType = typeof(double); break;
|
||||
case AnalogFields.Object: c.DataType = typeof(string); break;
|
||||
case AnalogFields.Offset: c.DataType = typeof(double); break;
|
||||
case AnalogFields.Range: c.DataType = typeof(string); break;
|
||||
case AnalogFields.Sens: c.DataType = typeof(string); break;
|
||||
case AnalogFields.Shunt: c.DataType = typeof(double); break;
|
||||
}
|
||||
}
|
||||
var dasFields = Enum.GetValues(typeof(DASFields)).Cast<DASFields>().ToArray();
|
||||
foreach (var field in dasFields)
|
||||
{
|
||||
var c = dtDAS.Columns.Add(field.ToString());
|
||||
switch (field)
|
||||
{
|
||||
case DASFields.Battery: c.DataType = typeof(string); break;
|
||||
case DASFields.CalDate: c.DataType = typeof(string); break;
|
||||
case DASFields.Connection: c.DataType = typeof(string); break;
|
||||
case DASFields.DAS: c.DataType = typeof(string); break;
|
||||
case DASFields.DueDate: c.DataType = typeof(string); break;
|
||||
case DASFields.FW: c.DataType = typeof(string); break;
|
||||
case DASFields.Input: c.DataType = typeof(string); break;
|
||||
}
|
||||
}
|
||||
var squibFields = Enum.GetValues(typeof(SquibFields)).Cast<SquibFields>().ToArray();
|
||||
foreach (var field in squibFields)
|
||||
{
|
||||
var c = dtSquib.Columns.Add(field.ToString());
|
||||
var c2 = dtSquibStyles.Columns.Add(field.ToString(), typeof(int));
|
||||
switch (field)
|
||||
{
|
||||
case SquibFields.Channel: c.DataType = typeof(string); break;
|
||||
case SquibFields.DAS: c.DataType = typeof(string); break;
|
||||
case SquibFields.Delay: c.DataType = typeof(double); break;
|
||||
case SquibFields.Desc: c.DataType = typeof(string); break;
|
||||
case SquibFields.Duration: c.DataType = typeof(double); break;
|
||||
case SquibFields.FireMode: c.DataType = typeof(string); break;
|
||||
case SquibFields.ISO: c.DataType = typeof(string); break;
|
||||
case SquibFields.Module: c.DataType = typeof(string); break;
|
||||
}
|
||||
}
|
||||
foreach (var ch in squib)
|
||||
{
|
||||
var row = dtSquib.NewRow();
|
||||
var row2 = dtSquibStyles.NewRow();
|
||||
|
||||
foreach (var field in squibFields)
|
||||
{
|
||||
object o = null;
|
||||
row2[field.ToString()] = -1;
|
||||
switch (field)
|
||||
{
|
||||
case SquibFields.Channel: o = ch.Channel; break;
|
||||
case SquibFields.DAS: o = ch.DAS; break;
|
||||
case SquibFields.Delay:
|
||||
o = ch.Delay;
|
||||
switch (ch.DelayStatus)
|
||||
{
|
||||
case SquibHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
case SquibHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case SquibHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SquibFields.Desc: o = ch.Desc; break;
|
||||
case SquibFields.Duration:
|
||||
o = ch.Duration;
|
||||
switch (ch.DurationStatus)
|
||||
{
|
||||
case SquibHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
case SquibHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case SquibHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SquibFields.FireMode: o = ch.FireMode; break;
|
||||
case SquibFields.ISO: o = ch.ISO; break;
|
||||
case SquibFields.Module: o = ch.Module; break;
|
||||
}
|
||||
row[field.ToString()] = o;
|
||||
}
|
||||
dtSquib.Rows.Add(row);
|
||||
dtSquibStyles.Rows.Add(row2);
|
||||
}
|
||||
foreach (var ch in analog)
|
||||
{
|
||||
var row = dtAnalog.NewRow();
|
||||
var row2 = dtAnalogStyles.NewRow();
|
||||
|
||||
foreach (var field in analogFields)
|
||||
{
|
||||
object o = null;
|
||||
row2[field.ToString()] = -1;
|
||||
switch (field)
|
||||
{
|
||||
case AnalogFields.Channel:
|
||||
o = ch.Channel;
|
||||
break;
|
||||
case AnalogFields.DAS: o = ch.DAS; break;
|
||||
case AnalogFields.Desc: o = ch.Desc; break;
|
||||
case AnalogFields.Exc:
|
||||
o = ch.Exc / 1000D;
|
||||
switch (ch.ExcStatus)
|
||||
{
|
||||
case AnalogHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case AnalogFields.ExportNum: o = ch.ExportNum; break;
|
||||
case AnalogFields.Module: o = ch.Module; break;
|
||||
case AnalogFields.Noise:
|
||||
o = ch.Noise;
|
||||
switch (ch.NoiseStatus)
|
||||
{
|
||||
case AnalogHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case AnalogFields.Object: o = ch.Object; break;
|
||||
case AnalogFields.Offset:
|
||||
o = ch.Offset;
|
||||
switch (ch.OffStatus)
|
||||
{
|
||||
case AnalogHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case AnalogFields.Range:
|
||||
if (double.IsInfinity(ch.Range))
|
||||
{
|
||||
o = "Infinity";
|
||||
}
|
||||
else if (double.IsNaN(ch.Range))
|
||||
{
|
||||
o = "---";
|
||||
}
|
||||
else
|
||||
{
|
||||
o = string.Format("{0:0.00}", ch.Range);
|
||||
}
|
||||
switch (ch.RangeStatus)
|
||||
{
|
||||
case AnalogHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case AnalogFields.Sens: o = ch.SensorSerialNumber; break;
|
||||
case AnalogFields.Shunt:
|
||||
o = ch.Shunt;
|
||||
switch (ch.ShuntStatus)
|
||||
{
|
||||
case AnalogHelper.ResultStatus.Failed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Fail;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.NotTested:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.NotTested;
|
||||
break;
|
||||
case AnalogHelper.ResultStatus.Passed:
|
||||
row2[field.ToString()] = (int)ReportBase.FillStyles.Pass;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
row[field.ToString()] = o;
|
||||
}
|
||||
dtAnalog.Rows.Add(row);
|
||||
dtAnalogStyles.Rows.Add(row2);
|
||||
}
|
||||
foreach (var d in das)
|
||||
{
|
||||
var row = dtDAS.NewRow();
|
||||
foreach (var field in dasFields)
|
||||
{
|
||||
object o = null;
|
||||
switch (field)
|
||||
{
|
||||
case DASFields.Battery: o = d.Battery; break;
|
||||
case DASFields.CalDate:
|
||||
if (d.CalDate.Year < 1970)
|
||||
{
|
||||
o = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (d.CalDate == minDate)
|
||||
{
|
||||
o = "--";
|
||||
}
|
||||
else
|
||||
{
|
||||
o = d.CalDate.ToShortDateString();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DASFields.Connection: o = d.Connection; break;
|
||||
case DASFields.DAS: o = d.DAS; break;
|
||||
case DASFields.DueDate:
|
||||
if (d.DueDate.Year < 1970)
|
||||
{
|
||||
o = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (d.CalDate == minDate)
|
||||
{
|
||||
o = "--";
|
||||
}
|
||||
else
|
||||
{
|
||||
o = d.DueDate.ToShortDateString();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DASFields.FW: o = d.Firmware; break;
|
||||
case DASFields.Input: o = d.Input; break;
|
||||
}
|
||||
row[field.ToString()] = o;
|
||||
}
|
||||
dtDAS.Rows.Add(row);
|
||||
}
|
||||
TemplateFilename = GetReportFilenamePath(false, GetTemplateReportPath(), string.Empty);
|
||||
OutputFilename = outputFileName;
|
||||
|
||||
if (File.Exists(outputFileName))
|
||||
{
|
||||
ReportFileWillBeOverwritten(outputFileName);
|
||||
try
|
||||
{
|
||||
File.Delete(outputFileName);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
ReportFileInUse(outputFileName);
|
||||
}
|
||||
}
|
||||
|
||||
if (generateExcelReports)
|
||||
{
|
||||
OutputReport(new DataTable[] { dtDAS, dtAnalog, dtSquib }, new DataTable[] { null, dtAnalogStyles, dtSquibStyles });
|
||||
CopyReportIfNeeded(folderNameId, outputFileName);
|
||||
}
|
||||
|
||||
if (generatePDFReports)
|
||||
{
|
||||
//Make a PDF with the same name
|
||||
outputFileName = outputFileName.Replace(".xlsx", ".pdf");
|
||||
//Don't overwrite the Excel file that may be the filled-in template.
|
||||
DestinationTemplateFilename = OutputFilename.Replace(".xlsx", Common.Constants.TEMP_FILE_EXTENSION);
|
||||
OutputFilename = outputFileName;
|
||||
OutputReportPDF(new DataTable[] { dtDAS, dtAnalog, dtSquib }, new DataTable[] { null, dtAnalogStyles, dtSquibStyles }, sensitivityDisplayFormat);
|
||||
CopyReportIfNeeded(folderNameId, outputFileName);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
dtDAS.Dispose();
|
||||
dtAnalog.Dispose();
|
||||
dtSquib.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user