This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1 @@
12

View File

@@ -0,0 +1 @@
12

View File

@@ -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();
}
}
}
}

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1">
<Class Name="DTS.Reports.ChannelCalibrationList">
<Position X="0.5" Y="2" Width="1.5" />
<Compartments>
<Compartment Name="Nested Types" Collapsed="false" />
</Compartments>
<NestedTypes>
<Enum Name="DTS.Reports.ChannelCalibrationList.Fields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>ChannelCalibrationList.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.ChannelCalibrationList.ChannelHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>ChannelCalibrationList.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
</NestedTypes>
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ChannelCalibrationList.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.DASLayout">
<Position X="2.75" Y="2" Width="1.5" />
<Compartments>
<Compartment Name="Nested Types" Collapsed="false" />
</Compartments>
<NestedTypes>
<Class Name="DTS.Reports.DASLayout.ChannelHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>DASLayout.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Enum Name="DTS.Reports.DASLayout.Fields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>DASLayout.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
</NestedTypes>
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>DASLayout.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.DiagnosticsReport" Collapsed="true">
<Position X="7.25" Y="2" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAABAAAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>DiagnosticsReport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.ReportBase" Collapsed="true">
<Position X="3.75" Y="0.75" Width="1.5" />
<TypeIdentifier>
<HashCode>Rh0KPcBCmPktCqzaJjmcIPAJkSc4YAUBbKoghQAaggo=</HashCode>
<FileName>ReportBase.cs</FileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
</Class>
<Class Name="DTS.Reports.TestPreviewReport">
<Position X="5" Y="2" Width="1.75" />
<NestedTypes>
<Enum Name="DTS.Reports.TestPreviewReport.Tables" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.SensorHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.SquibFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Enum Name="DTS.Reports.TestPreviewReport.StyleTables" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Enum Name="DTS.Reports.TestPreviewReport.TestObjectFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Enum Name="DTS.Reports.TestPreviewReport.TestObjectPageFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.SquibHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.DASFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.DASHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.ISOSummaryFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.TestObjectHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.TestPreviewReport.ISOSummaryHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.SensorFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
</NestedTypes>
<TypeIdentifier>
<HashCode>AoACABgQAAAiAAAAAggAAAAgAARABAkIICAAAAAIIAA=</HashCode>
<FileName>TestPreviewReport.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@@ -0,0 +1,161 @@
using System;
using System.Linq;
using System.Data;
using DTS.Common.Interface.Channels;
using DTS.Common.Interface.Sensors;
namespace DTS.Reports
{
public class DASLayout : ReportBase
{
public class ChannelHelper
{
public int DCH { get; set; }
public string Module { get; set; }
public string Channel { get; set; }
public string Description { get; set; }
public string SensorSerial { get; set; }
public string Sensitivity { get; set; }
public string ISOCode { get; set; }
public string Range { get; set; }
public string SquibFireMode { get; set; }
public string Filter { get; set; }
public string Voltage { get; set; }
public string LevelTrigger { get; set; }
public double DelayMS { get; set; }
public double DurationMS { get; set; }
public int ChannelType { get; set; }
// holds a reference to the group channel, done as part of
// 13100 Generate Test Setup report during check channels function, needed to verify polarity settings prior to running test
public IGroupChannel GroupChannel { get; set; }
// holds a reference to the sensor calibration, done as part of
// 13100 Generate Test Setup report during check channels function, needed to verify polarity settings prior to running test
public ISensorCalibration Calibration { get; set; }
}
public enum Fields
{
DCH,
Module,
Channel,
Description,
Sensor,
ISOCode,
Range,
SquibFireMode,
Sens,
Filter,
Delay,
Volt,
Duration,
Trigger,
ChannelType
}
public DASLayout()
{
}
public static string GetReportFilenamePath(string reportPath, string serialNumberDAS, string testId)
{
var filename = "DAS Layout.xlsx";
if (false == string.IsNullOrEmpty(testId))
filename = string.Format("{1} {0} - {2}Layout.xlsx", serialNumberDAS, testId, GetFilenameTimeStamp());
return System.IO.Path.Combine(reportPath, filename);
}
public void DoReport(ChannelHelper[] channels, string outputFileName, string folderNameId, string sensitivityDisplayFormat,
bool generateExcelReports, bool generatePDFReports)
{
using (var dt = new DataTable())
{
dt.TableName = "Layout";
var fields = Enum.GetValues(typeof(Fields)).Cast<Fields>().ToArray();
foreach (var field in fields)
{
var c = dt.Columns.Add(field.ToString());
switch (field)
{
case Fields.Channel: c.DataType = typeof(string); break;
case Fields.DCH: c.DataType = typeof(int); break;
case Fields.Delay: c.DataType = typeof(double); break;
case Fields.Description: c.DataType = typeof(string); break;
case Fields.Duration: c.DataType = typeof(double); break;
case Fields.Filter: c.DataType = typeof(string); break;
case Fields.ISOCode: c.DataType = typeof(string); break;
case Fields.Module: c.DataType = typeof(string); break;
case Fields.Range: c.DataType = typeof(string); break;
case Fields.Sens: c.DataType = typeof(string); break;
case Fields.Sensor: c.DataType = typeof(string); break;
case Fields.SquibFireMode: c.DataType = typeof(string); break;
case Fields.Trigger: c.DataType = typeof(string); break;
case Fields.Volt: c.DataType = typeof(string); break;
case Fields.ChannelType: c.DataType = typeof(int); break;
}
}
foreach (var ch in channels)
{
var row = dt.NewRow();
foreach (var field in fields)
{
object o = null;
switch (field)
{
case Fields.ChannelType: o = ch.ChannelType; break;
case Fields.Channel: o = ch.Channel; break;
case Fields.DCH: o = ch.DCH; break;
case Fields.Delay: o = ch.DelayMS; break;
case Fields.Description: o = ch.Description; break;
case Fields.Duration: o = ch.DurationMS; break;
case Fields.Filter: o = ch.Filter; break;
case Fields.ISOCode: o = ch.ISOCode; break;
case Fields.Module: o = ch.Module; break;
case Fields.Range: o = ch.Range; break;
case Fields.Sens: o = ch.Sensitivity; break;
case Fields.Sensor: o = ch.SensorSerial; break;
case Fields.SquibFireMode: o = ch.SquibFireMode; break;
case Fields.Trigger: o = ch.LevelTrigger; break;
case Fields.Volt: o = ch.Voltage; break;
}
row[field.ToString()] = o;
}
dt.Rows.Add(row);
}
TemplateFilename = GetReportFilenamePath(GetTemplateReportPath(), string.Empty, string.Empty);
OutputFilename = outputFileName;
if (System.IO.File.Exists(outputFileName))
{
ReportFileWillBeOverwritten(outputFileName);
try
{
System.IO.File.Delete(outputFileName);
}
catch (Exception)
{
ReportFileInUse(outputFileName);
}
}
if (generateExcelReports)
{
OutputReport(new DataTable[] { dt }, null);
CopyReportIfNeeded(folderNameId, outputFileName);
}
if (generatePDFReports)
{
//PDF
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[] { dt }, null, sensitivityDisplayFormat);
CopyReportIfNeeded(folderNameId, outputFileName);
}
}
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DiagnosticsReport")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DiagnosticsReport")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4d40eb18-3010-4337-b4ac-4b53328526dd")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,148 @@
using System;
using System.Linq;
using System.Data;
using System.IO;
namespace DTS.Reports
{
public class ChannelCalibrationList : ReportBase
{
public enum Fields
{
Location,
SensorAxis,
SerialNo,
Cal,
NextCal
}
public class ChannelHelper
{
public enum ResultStatus
{
OK,
Overdue,
Warn
}
public string Location { get; set; }
public string SensorAxis { get; set; }
public string SerialNo { get; set; }
public string SerialNumberWithAxis { get; set; }
public string Cal { get; set; }
public string NextCal { get; set; }
public ResultStatus CalStatus { get; set; }
public ChannelHelper() { Location = ""; SensorAxis = ""; SerialNo = ""; Cal = ""; NextCal = ""; }
public ChannelHelper(string location, string sensorAxis, string serialNo, string cal, string nextCal)
{
Location = location;
SensorAxis = sensorAxis;
SerialNo = serialNo;
Cal = cal;
NextCal = nextCal;
}
}
public ChannelCalibrationList()
{
}
public static string GetReportFilenamePath(string reportPath, string testId)
{
var filename = "ChannelCalibrationList.xlsx";
if (false == string.IsNullOrEmpty(testId))
filename = $"{testId} " + filename;
return Path.Combine(reportPath, filename);
}
public void DoReport(ChannelHelper[] channels, string outputFileName, string folderNameId, string sensitivityDisplayFormat,
bool generateExcelReports, bool generatePDFReports)
{
var dtStyles = new DataTable();
using (var dt = new DataTable())
{
dt.TableName = "List";
var fields = Enum.GetValues(typeof(Fields)).Cast<Fields>().ToArray();
foreach (var field in fields)
{
var c = dt.Columns.Add(field.ToString());
var c2 = dtStyles.Columns.Add(field.ToString(), typeof(int));
switch (field)
{
default: c.DataType = typeof(string); break;
}
}
foreach (var ch in channels)
{
var row = dt.NewRow();
var row2 = dtStyles.NewRow();
foreach (var field in fields)
{
object o = null;
row2[field.ToString()] = -1;
switch (field)
{
case Fields.Cal: o = ch.Cal; break;
case Fields.Location: o = ch.Location; break;
case Fields.NextCal:
o = ch.NextCal;
if ((!string.IsNullOrWhiteSpace(ch.NextCal)) && (ch.NextCal != "--"))
{
switch (ch.CalStatus)
{
case ChannelHelper.ResultStatus.OK:
row2[field.ToString()] = (int)FillStyles.Pass;
break;
case ChannelHelper.ResultStatus.Warn:
row2[field.ToString()] = (int)FillStyles.Warn;
break;
case ChannelHelper.ResultStatus.Overdue:
row2[field.ToString()] = (int)FillStyles.Fail;
break;
}
}
break;
case Fields.SensorAxis: o = ch.SensorAxis; break;
case Fields.SerialNo: o = ch.SerialNo; break;
}
row[field.ToString()] = o;
}
dt.Rows.Add(row);
dtStyles.Rows.Add(row2);
}
if (File.Exists(outputFileName))
{
ReportFileWillBeOverwritten(outputFileName);
try
{
File.Delete(outputFileName);
}
catch (Exception)
{
ReportFileInUse(outputFileName);
}
}
TemplateFilename = GetReportFilenamePath(GetTemplateReportPath(), string.Empty);
OutputFilename = outputFileName;
if (generateExcelReports)
{
OutputReport(new DataTable[] { dt }, new DataTable[] { dtStyles });
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[] { dt }, new DataTable[] { dtStyles }, sensitivityDisplayFormat);
CopyReportIfNeeded(folderNameId, outputFileName);
}
}
}
}
}

View File

@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{69B8B28D-E065-498C-8826-FFB6F7A60106}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DiagnosticsReport</RootNamespace>
<AssemblyName>DiagnosticsReport</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="C1.WPF.Excel.4, Version=4.0.20142.409, Culture=neutral, PublicKeyToken=2aa4ec5576d6c3ce, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Program Files (x86)\ComponentOne\WPF Edition\bin\v4\C1.WPF.Excel.4.dll</HintPath>
</Reference>
<Reference Include="C1.WPF.FlexGrid.4, Version=4.0.20142.409, Culture=neutral, PublicKeyToken=2aa4ec5576d6c3ce, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Program Files (x86)\ComponentOne\WPF Edition\bin\v4\C1.WPF.FlexGrid.4.dll</HintPath>
</Reference>
<Reference Include="C1.WPF.Pdf.4, Version=4.0.20142.409, Culture=neutral, PublicKeyToken=2aa4ec5576d6c3ce, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Program Files (x86)\ComponentOne\WPF Edition\bin\v4\C1.WPF.Pdf.4.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xaml" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="ChannelCalibrationList.cs" />
<Compile Include="TestPreviewReport.cs" />
<Compile Include="DASLayout.cs" />
<Compile Include="DiagnosticsReport.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ReportBase.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Design\ReportsClassDiagram.cd" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{f7a0804f-61a4-40ae-83d0-f1137622b592}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

BIN
DataPRO/Reports/.svn/wc.db Normal file

Binary file not shown.

View File

View File

@@ -0,0 +1,148 @@
using System;
using System.Linq;
using System.Data;
using System.IO;
namespace DTS.Reports
{
public class ChannelCalibrationList : ReportBase
{
public enum Fields
{
Location,
SensorAxis,
SerialNo,
Cal,
NextCal
}
public class ChannelHelper
{
public enum ResultStatus
{
OK,
Overdue,
Warn
}
public string Location { get; set; }
public string SensorAxis { get; set; }
public string SerialNo { get; set; }
public string SerialNumberWithAxis { get; set; }
public string Cal { get; set; }
public string NextCal { get; set; }
public ResultStatus CalStatus { get; set; }
public ChannelHelper() { Location = ""; SensorAxis = ""; SerialNo = ""; Cal = ""; NextCal = ""; }
public ChannelHelper(string location, string sensorAxis, string serialNo, string cal, string nextCal)
{
Location = location;
SensorAxis = sensorAxis;
SerialNo = serialNo;
Cal = cal;
NextCal = nextCal;
}
}
public ChannelCalibrationList()
{
}
public static string GetReportFilenamePath(string reportPath, string testId)
{
var filename = "ChannelCalibrationList.xlsx";
if (false == string.IsNullOrEmpty(testId))
filename = $"{testId} " + filename;
return Path.Combine(reportPath, filename);
}
public void DoReport(ChannelHelper[] channels, string outputFileName, string folderNameId, string sensitivityDisplayFormat,
bool generateExcelReports, bool generatePDFReports)
{
var dtStyles = new DataTable();
using (var dt = new DataTable())
{
dt.TableName = "List";
var fields = Enum.GetValues(typeof(Fields)).Cast<Fields>().ToArray();
foreach (var field in fields)
{
var c = dt.Columns.Add(field.ToString());
var c2 = dtStyles.Columns.Add(field.ToString(), typeof(int));
switch (field)
{
default: c.DataType = typeof(string); break;
}
}
foreach (var ch in channels)
{
var row = dt.NewRow();
var row2 = dtStyles.NewRow();
foreach (var field in fields)
{
object o = null;
row2[field.ToString()] = -1;
switch (field)
{
case Fields.Cal: o = ch.Cal; break;
case Fields.Location: o = ch.Location; break;
case Fields.NextCal:
o = ch.NextCal;
if ((!string.IsNullOrWhiteSpace(ch.NextCal)) && (ch.NextCal != "--"))
{
switch (ch.CalStatus)
{
case ChannelHelper.ResultStatus.OK:
row2[field.ToString()] = (int)FillStyles.Pass;
break;
case ChannelHelper.ResultStatus.Warn:
row2[field.ToString()] = (int)FillStyles.Warn;
break;
case ChannelHelper.ResultStatus.Overdue:
row2[field.ToString()] = (int)FillStyles.Fail;
break;
}
}
break;
case Fields.SensorAxis: o = ch.SensorAxis; break;
case Fields.SerialNo: o = ch.SerialNo; break;
}
row[field.ToString()] = o;
}
dt.Rows.Add(row);
dtStyles.Rows.Add(row2);
}
if (File.Exists(outputFileName))
{
ReportFileWillBeOverwritten(outputFileName);
try
{
File.Delete(outputFileName);
}
catch (Exception)
{
ReportFileInUse(outputFileName);
}
}
TemplateFilename = GetReportFilenamePath(GetTemplateReportPath(), string.Empty);
OutputFilename = outputFileName;
if (generateExcelReports)
{
OutputReport(new DataTable[] { dt }, new DataTable[] { dtStyles });
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[] { dt }, new DataTable[] { dtStyles }, sensitivityDisplayFormat);
CopyReportIfNeeded(folderNameId, outputFileName);
}
}
}
}
}

View File

@@ -0,0 +1,161 @@
using System;
using System.Linq;
using System.Data;
using DTS.Common.Interface.Channels;
using DTS.Common.Interface.Sensors;
namespace DTS.Reports
{
public class DASLayout : ReportBase
{
public class ChannelHelper
{
public int DCH { get; set; }
public string Module { get; set; }
public string Channel { get; set; }
public string Description { get; set; }
public string SensorSerial { get; set; }
public string Sensitivity { get; set; }
public string ISOCode { get; set; }
public string Range { get; set; }
public string SquibFireMode { get; set; }
public string Filter { get; set; }
public string Voltage { get; set; }
public string LevelTrigger { get; set; }
public double DelayMS { get; set; }
public double DurationMS { get; set; }
public int ChannelType { get; set; }
// holds a reference to the group channel, done as part of
// 13100 Generate Test Setup report during check channels function, needed to verify polarity settings prior to running test
public IGroupChannel GroupChannel { get; set; }
// holds a reference to the sensor calibration, done as part of
// 13100 Generate Test Setup report during check channels function, needed to verify polarity settings prior to running test
public ISensorCalibration Calibration { get; set; }
}
public enum Fields
{
DCH,
Module,
Channel,
Description,
Sensor,
ISOCode,
Range,
SquibFireMode,
Sens,
Filter,
Delay,
Volt,
Duration,
Trigger,
ChannelType
}
public DASLayout()
{
}
public static string GetReportFilenamePath(string reportPath, string serialNumberDAS, string testId)
{
var filename = "DAS Layout.xlsx";
if (false == string.IsNullOrEmpty(testId))
filename = string.Format("{1} {0} - {2}Layout.xlsx", serialNumberDAS, testId, GetFilenameTimeStamp());
return System.IO.Path.Combine(reportPath, filename);
}
public void DoReport(ChannelHelper[] channels, string outputFileName, string folderNameId, string sensitivityDisplayFormat,
bool generateExcelReports, bool generatePDFReports)
{
using (var dt = new DataTable())
{
dt.TableName = "Layout";
var fields = Enum.GetValues(typeof(Fields)).Cast<Fields>().ToArray();
foreach (var field in fields)
{
var c = dt.Columns.Add(field.ToString());
switch (field)
{
case Fields.Channel: c.DataType = typeof(string); break;
case Fields.DCH: c.DataType = typeof(int); break;
case Fields.Delay: c.DataType = typeof(double); break;
case Fields.Description: c.DataType = typeof(string); break;
case Fields.Duration: c.DataType = typeof(double); break;
case Fields.Filter: c.DataType = typeof(string); break;
case Fields.ISOCode: c.DataType = typeof(string); break;
case Fields.Module: c.DataType = typeof(string); break;
case Fields.Range: c.DataType = typeof(string); break;
case Fields.Sens: c.DataType = typeof(string); break;
case Fields.Sensor: c.DataType = typeof(string); break;
case Fields.SquibFireMode: c.DataType = typeof(string); break;
case Fields.Trigger: c.DataType = typeof(string); break;
case Fields.Volt: c.DataType = typeof(string); break;
case Fields.ChannelType: c.DataType = typeof(int); break;
}
}
foreach (var ch in channels)
{
var row = dt.NewRow();
foreach (var field in fields)
{
object o = null;
switch (field)
{
case Fields.ChannelType: o = ch.ChannelType; break;
case Fields.Channel: o = ch.Channel; break;
case Fields.DCH: o = ch.DCH; break;
case Fields.Delay: o = ch.DelayMS; break;
case Fields.Description: o = ch.Description; break;
case Fields.Duration: o = ch.DurationMS; break;
case Fields.Filter: o = ch.Filter; break;
case Fields.ISOCode: o = ch.ISOCode; break;
case Fields.Module: o = ch.Module; break;
case Fields.Range: o = ch.Range; break;
case Fields.Sens: o = ch.Sensitivity; break;
case Fields.Sensor: o = ch.SensorSerial; break;
case Fields.SquibFireMode: o = ch.SquibFireMode; break;
case Fields.Trigger: o = ch.LevelTrigger; break;
case Fields.Volt: o = ch.Voltage; break;
}
row[field.ToString()] = o;
}
dt.Rows.Add(row);
}
TemplateFilename = GetReportFilenamePath(GetTemplateReportPath(), string.Empty, string.Empty);
OutputFilename = outputFileName;
if (System.IO.File.Exists(outputFileName))
{
ReportFileWillBeOverwritten(outputFileName);
try
{
System.IO.File.Delete(outputFileName);
}
catch (Exception)
{
ReportFileInUse(outputFileName);
}
}
if (generateExcelReports)
{
OutputReport(new DataTable[] { dt }, null);
CopyReportIfNeeded(folderNameId, outputFileName);
}
if (generatePDFReports)
{
//PDF
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[] { dt }, null, sensitivityDisplayFormat);
CopyReportIfNeeded(folderNameId, outputFileName);
}
}
}
}
}

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1">
<Class Name="DTS.Reports.ChannelCalibrationList">
<Position X="0.5" Y="2" Width="1.5" />
<Compartments>
<Compartment Name="Nested Types" Collapsed="false" />
</Compartments>
<NestedTypes>
<Enum Name="DTS.Reports.ChannelCalibrationList.Fields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>ChannelCalibrationList.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.ChannelCalibrationList.ChannelHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>ChannelCalibrationList.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
</NestedTypes>
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ChannelCalibrationList.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.DASLayout">
<Position X="2.75" Y="2" Width="1.5" />
<Compartments>
<Compartment Name="Nested Types" Collapsed="false" />
</Compartments>
<NestedTypes>
<Class Name="DTS.Reports.DASLayout.ChannelHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>DASLayout.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Enum Name="DTS.Reports.DASLayout.Fields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>DASLayout.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
</NestedTypes>
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>DASLayout.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.DiagnosticsReport" Collapsed="true">
<Position X="7.25" Y="2" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAABAAAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>DiagnosticsReport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.ReportBase" Collapsed="true">
<Position X="3.75" Y="0.75" Width="1.5" />
<TypeIdentifier>
<HashCode>Rh0KPcBCmPktCqzaJjmcIPAJkSc4YAUBbKoghQAaggo=</HashCode>
<FileName>ReportBase.cs</FileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
</Class>
<Class Name="DTS.Reports.TestPreviewReport">
<Position X="5" Y="2" Width="1.75" />
<NestedTypes>
<Enum Name="DTS.Reports.TestPreviewReport.Tables" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.SensorHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.SquibFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Enum Name="DTS.Reports.TestPreviewReport.StyleTables" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Enum Name="DTS.Reports.TestPreviewReport.TestObjectFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Enum Name="DTS.Reports.TestPreviewReport.TestObjectPageFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.SquibHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.DASFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.DASHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.ISOSummaryFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
<Class Name="DTS.Reports.TestPreviewReport.TestObjectHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Class Name="DTS.Reports.TestPreviewReport.ISOSummaryHelper" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Class>
<Enum Name="DTS.Reports.TestPreviewReport.SensorFields" Collapsed="true">
<TypeIdentifier>
<NewMemberFileName>TestPreviewReport.cs</NewMemberFileName>
</TypeIdentifier>
</Enum>
</NestedTypes>
<TypeIdentifier>
<HashCode>AoACABgQAAAiAAAAAggAAAAgAARABAkIICAAAAAIIAA=</HashCode>
<FileName>TestPreviewReport.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@@ -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();
}
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DiagnosticsReport")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DiagnosticsReport")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4d40eb18-3010-4337-b4ac-4b53328526dd")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{69B8B28D-E065-498C-8826-FFB6F7A60106}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DiagnosticsReport</RootNamespace>
<AssemblyName>DiagnosticsReport</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="C1.WPF.Excel.4, Version=4.0.20142.409, Culture=neutral, PublicKeyToken=2aa4ec5576d6c3ce, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Program Files (x86)\ComponentOne\WPF Edition\bin\v4\C1.WPF.Excel.4.dll</HintPath>
</Reference>
<Reference Include="C1.WPF.FlexGrid.4, Version=4.0.20142.409, Culture=neutral, PublicKeyToken=2aa4ec5576d6c3ce, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Program Files (x86)\ComponentOne\WPF Edition\bin\v4\C1.WPF.FlexGrid.4.dll</HintPath>
</Reference>
<Reference Include="C1.WPF.Pdf.4, Version=4.0.20142.409, Culture=neutral, PublicKeyToken=2aa4ec5576d6c3ce, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Program Files (x86)\ComponentOne\WPF Edition\bin\v4\C1.WPF.Pdf.4.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xaml" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="ChannelCalibrationList.cs" />
<Compile Include="TestPreviewReport.cs" />
<Compile Include="DASLayout.cs" />
<Compile Include="DiagnosticsReport.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ReportBase.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Design\ReportsClassDiagram.cd" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{f7a0804f-61a4-40ae-83d0-f1137622b592}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = "")]

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]