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,509 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Text;
namespace DatabaseExport
{
public class TestTemplateList //: BindableBase
{
/// <summary>
/// this property is to hold a template in memory temporarily
/// without committing it to the db, but to still act as if it is in the db
/// </summary>
public TestTemplate TemporaryTemplate { get; set; }
protected TestTemplateList() { }
public TestTemplate GetTemplate(string name)
{
if (name == "Quick checkout") // StringResources.QuickSensorCheck_DefaultTestName)
{
return TemporaryTemplate;
}
if (string.IsNullOrWhiteSpace(name)) { return null; }
try
{
using (var cmd = DbOperations.GetCommand())
{
cmd.CommandText = string.Format("SELECT * FROM [{0}] WHERE [{1}]=@1",
DbOperations.TestSetups.TestSetupsTable, DbOperations.TestSetups.Fields.SetupName);
DbOperations.CreateParam(cmd, "@1", SqlDbType.NVarChar, name);
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
if (ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) return null;
var dr = ds.Tables[0].Rows[0];
var tt = new TestTemplate();
tt.SetTimeStampMemory(dr);
//make sure this template is marked as unloaded, because we
//are only going to load the essentials here...
tt._bIsLoaded = false;
var fields =
Enum.GetValues(typeof(DbOperations.TestSetups.Fields))
.Cast<DbOperations.TestSetups.Fields>()
.ToArray();
foreach (var field in fields)
{
try
{
if (DBNull.Value.Equals(dr[field.ToString()]))
{
continue;
}
var o = dr[field.ToString()];
#region DbOperations.TestSetups.Fields
switch (field)
{
case DbOperations.TestSetups.Fields.AllowMissingSensors:
tt.AllowMissingSensors = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.AllowSensorIdToBlankChannel:
tt.AllowSensorIdToBlankChannel = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.AutomaticProgressionDelayMS:
tt.AutomaticProgressionDelayMS = Convert.ToInt32(o);
break;
case DbOperations.TestSetups.Fields.AutomaticTestProgression:
tt.AutomaticProgression = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.AutoVerifyChannels:
tt.AutoVerifyChannels = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.CommonStatusLine:
tt.CommonLine = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.UploadData:
tt.UploadData = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.UploadDataFolder:
tt.UploadFolder = Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.CustomerDetails:
tt.CustomerDetails =
CustomerDetailsList.CustomerList.GetCustomerDetail(Convert.ToString(o));
break;
case DbOperations.TestSetups.Fields.TestEngineerDetails:
tt.TestEngineerDetails =
TestEngineerDetailsList.TestEngineerList.GetTestEngineerDetail(
Convert.ToString(o));
break;
case DbOperations.TestSetups.Fields.DownloadAll:
tt.DownloadAll = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.DownloadFolder:
tt.DownloadFolder = Properties.Settings.Default.DownloadFolder;
// Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.Export:
tt.ViewExport = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.ExportFolder:
tt.ExportFolder = Properties.Settings.Default.DownloadFolder;
//Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.ExportFormat:
tt.ExportFormats = (SupportedExportFormatBitFlags)Convert.ToUInt64(o);
break;
case DbOperations.TestSetups.Fields.InvertStart:
tt.InvertStartRecordCompletion = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.TriggerCheckRealtime:
tt.TriggerCheckRealtime = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.TriggerCheckStep:
tt.TriggerCheckStep = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.PostTestDiagnostics:
tt.PostTestDiagnosticsLevel = (0 != Convert.ToInt32(o));
break;
case DbOperations.TestSetups.Fields.InvertTrigger:
tt.InvertTriggerCompletion = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.LabDetails:
tt.LabDetails = LabratoryDetailsList.LabratoryList.GetLab(Convert.ToString(o));
break;
case DbOperations.TestSetups.Fields.LastModified:
tt.LastModified = Convert.ToDateTime(o);
break;
case DbOperations.TestSetups.Fields.LastModifiedBy:
tt.LastModifiedBy = Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.LocalOnly:
tt.LocalOnly = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.PostTriggerSeconds:
tt.PostTriggerSeconds = Convert.ToDouble(o);
break;
case DbOperations.TestSetups.Fields.PreTriggerSeconds:
tt.PreTriggerSeconds = Convert.ToDouble(o);
break;
case DbOperations.TestSetups.Fields.RealtimePlotCount:
tt.DefaultNumberRealtimeGraphs = Convert.ToInt32(o);
break;
case DbOperations.TestSetups.Fields.RecordingMode:
tt.RecordingMode = (RecordingModes)Convert.ToInt32(o);
break;
case DbOperations.TestSetups.Fields.RequireConfirmationOnErrors:
tt.RequireUserConfirmationOnErrors = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.ROIDownload:
tt.DoROIDownload = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.ROIEnd:
tt.ROIEnd = Convert.ToDouble(o);
break;
case DbOperations.TestSetups.Fields.ROIStart:
tt.ROIStart = Convert.ToDouble(o);
break;
case DbOperations.TestSetups.Fields.SameAsDownloadFolder:
tt.SameAsDownloadFolder = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.SamplesPerSecond:
tt.SamplesPerSecond = Convert.ToDouble(o);
break;
case DbOperations.TestSetups.Fields.Settings:
tt.LoadSettings(Convert.ToString(o));
break;
case DbOperations.TestSetups.Fields.WarnOnBatteryFail:
tt.WarnOnFailedBattery = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.SetupDescription:
tt.Description = Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.SetupName:
tt.Name = Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.StrictDiagnostics:
tt.StrictDiagnostics = (Convert.ToInt32(o)) != 0;
break;
case DbOperations.TestSetups.Fields.UseCustomerDetails:
tt.UseCustomerDetails = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.UseTestEngineerDetails:
tt.UseTestEngineerDetails = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.TurnOffExcitation:
tt.TurnOffExcitation = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.UseLabDetails:
tt.UseLabratoryDetails = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.VerifyChannels:
tt.VerifyChannels = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.VerifyChannelsDelayMS:
tt.AutoVerifyDelaySeconds = Convert.ToDouble(o) / 1000D;
break;
case DbOperations.TestSetups.Fields.ViewDiagnostics:
tt.ViewDiagnostics = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.ViewDownloadAll:
tt.ViewDownloadAll = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.ViewRealtime:
tt.ViewRealtime = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.ViewROIDownload:
tt.ViewROIDownload = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.Dirty:
tt.SetIsDirty(Convert.ToBoolean(o));
break;
case DbOperations.TestSetups.Fields.Complete:
tt.SetIsComplete(Convert.ToBoolean(o));
break;
case DbOperations.TestSetups.Fields.ISFFile:
tt.ISFFile = Convert.ToString(o);
break;
case DbOperations.TestSetups.Fields.ErrorMessage:
tt.SetCompletionErrorMessage(Convert.ToString(o));
break;
case DbOperations.TestSetups.Fields.CheckoutMode:
tt.CheckoutMode = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.QuitTestWithoutWarning:
tt.QuitTestWithoutWarning = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.SuppressMissingSensorsWarning:
tt.SuppressMissingSensorsWarning = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.NotAllChannelsRealTime:
tt.NotAllChannelsRealTime = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.NotAllChannelsViewer:
tt.NotAllChannelsViewer = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.UserTags:
tt.TagsBlobBytes = (byte[])o;
break;
case DbOperations.TestSetups.Fields.DoAutoArm:
tt.DoAutoArm = Convert.ToBoolean(o);
break;
case DbOperations.TestSetups.Fields.DoStreaming:
tt.DoStreaming = Convert.ToBoolean(o);
break;
}
#endregion DbOperations.TestSetups.Fields
}
catch (Exception)
{
//APILogger.Log("Failed to process: ", field.ToString(), ex);
}
}
return tt;
}
}
}
catch (Exception)
{
//APILogger.Log(ex);
}
return null;
}
public static SensorData GetSensorFromSettings(string settings, string serial, Dictionary<string, SensorData> lookup)
{
SensorData sd = null;
if (null != lookup && lookup.ContainsKey(serial)) { sd = lookup[serial]; }
if (null == sd) { sd = SensorsCollection.SensorsList.GetSensorBySerialNumber(serial); }
if (string.IsNullOrWhiteSpace(serial))
{
sd = new SensorData { SerialNumber = "" };
}
if (null == sd) { return null; }
sd = new SensorData(sd);
var tokens = settings.Split(',');
foreach (var token in tokens)
{
var subtokens = token.Split('=');
var setting = (ISO.TestObject.SensorSettings)int.Parse(subtokens[0]);
switch (setting)
{
case ISO.TestObject.SensorSettings.CFC:
sd.FilterClassIso = subtokens[1];
break;
case ISO.TestObject.SensorSettings.Position:
sd.Position = subtokens[1];
break;
case ISO.TestObject.SensorSettings.Polarity:
sd.Invert = subtokens[1] == "-";
break;
case ISO.TestObject.SensorSettings.Range:
sd.Capacity = double.Parse(subtokens[1], CultureInfo.InvariantCulture);
break;
case ISO.TestObject.SensorSettings.Delay:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.DelayMS = double.Parse(subtokens[1], CultureInfo.InvariantCulture); sd.DigitalOutputDelayMS = sd.DelayMS; }
break;
case ISO.TestObject.SensorSettings.Duration:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.DurationMS = double.Parse(subtokens[1], CultureInfo.InvariantCulture); sd.DigitalOutputDurationMS = sd.DurationMS; }
break;
case ISO.TestObject.SensorSettings.OutputMode:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.DigitalOutputMode = (OutputTOMDigitalChannel.DigitalOutputMode)Convert.ToInt32(subtokens[1]); }
break;
case ISO.TestObject.SensorSettings.SQMode:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.SquibFireMode = (OutputSquibChannel.SquibFireMode)Convert.ToInt32(subtokens[1]); }
break;
case ISO.TestObject.SensorSettings.DIMode:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.InputMode = (DigitalInputScaleMultiplier.InputModes)Convert.ToInt32(subtokens[1]); }
break;
case ISO.TestObject.SensorSettings.LimitDuration:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.LimitDuration = bool.Parse(subtokens[1]); }
break;
case ISO.TestObject.SensorSettings.ActiveValue:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.ScaleMultiplier.ActiveValue = Convert.ToDouble(subtokens[1]); }
break;
case ISO.TestObject.SensorSettings.DefaultValue:
if (!string.IsNullOrWhiteSpace(subtokens[1])) { sd.ScaleMultiplier.DefaultValue = Convert.ToDouble(subtokens[1]); }
break;
}
}
return sd;
}
public static SensorData GetSensorFromSettings(string settings, string serial)
{
return GetSensorFromSettings(settings, serial, null);
}
public static string GetSensorSettings(SensorData sd)
{
var sb = new StringBuilder();
var settings = Enum.GetValues(typeof(ISO.TestObject.SensorSettings)).Cast<ISO.TestObject.SensorSettings>().ToArray();
var bNeedComma = false;
foreach (var setting in settings)
{
if (bNeedComma) { sb.Append(","); }
bNeedComma = true;
sb.AppendFormat("{0}=", (int)setting);
switch (setting)
{
case ISO.TestObject.SensorSettings.CFC:
sb.Append(sd.FilterClassIso);
break;
case ISO.TestObject.SensorSettings.Position:
sb.Append(sd.Position);
break;
case ISO.TestObject.SensorSettings.Polarity:
sb.Append(sd.Invert ? "-" : "+");
break;
case ISO.TestObject.SensorSettings.Range:
sb.Append(sd.Capacity.ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.SQMode:
sb.Append(((int)sd.SquibFireMode).ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.LimitDuration:
sb.Append(sd.LimitDuration.ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.Duration:
sb.Append(sd.DurationMS.ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.OutputMode:
sb.Append(((int)sd.DigitalOutputMode).ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.Delay:
sb.Append(sd.DelayMS.ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.DIMode:
sb.Append(((int)sd.InputMode).ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.DefaultValue:
sb.Append(sd.ScaleMultiplier.DefaultValue.ToString(CultureInfo.InvariantCulture));
break;
case ISO.TestObject.SensorSettings.ActiveValue:
sb.Append(
sd.ScaleMultiplier.ActiveValue.ToString(CultureInfo.InvariantCulture));
break;
}
}
return sb.ToString();
}
private static TestTemplateList _list;
private static readonly object ObjectLock = new object();
public static TestTemplateList TestTemplatesList
{
get
{
lock (ObjectLock)
{
if (null == _list) { _list = new TestTemplateList(); }
}
return _list;
}
}
public static bool SysBuiltObject(string serialNumber)
{
var temp = false;
using (var cmd = DbOperations.GetCommand())
{
cmd.CommandText = string.Format("SELECT * FROM [tblTestObjects] where [SerialNumber]=@{0}", "SerialNumber");
DbOperations.CreateParam(cmd, string.Format("@{0}", "SerialNumber"), SqlDbType.NVarChar, serialNumber);
using (var ds2 = DbOperations.Connection.QueryDataSet(cmd))
{
if (ds2.Tables.Count <= 0 || ds2.Tables[0].Rows.Count <= 0) return false;
foreach (DataRow row in ds2.Tables[0].Rows)
{
//really only 1 row
temp = Convert.ToBoolean(row["SysBuilt"]);
}
}
}
return temp;
}
public static void ConvertToDictionary(DataTable dt, ref Dictionary<string, List<Dictionary<string, object>>> lookup, string key)
{
var count = dt.Columns.Count;
foreach (DataRow dr in dt.Rows)
{
var thiskey = Convert.ToString(dr[key]);
if (!lookup.ContainsKey(thiskey)) { lookup.Add(thiskey, new List<Dictionary<string, object>>()); }
var properties = new Dictionary<string, object>(count);
foreach (DataColumn c in dt.Columns)
{
properties[c.ColumnName] = dr[c.ColumnName];
}
lookup[thiskey].Add(properties);
}
}
public TestTemplateTableObject[] GetAllTemplates()
{
var objects = new List<TestTemplateTableObject>();
using (var cmd = DbOperations.GetCommand())
{
cmd.CommandText =
"SELECT SetupName, SetupDescription, RecordingMode, Dirty, Complete, LastModified, LastModifiedBy, ErrorMessage, CustomerDetails, UseCustomerDetails, UserTags FROM tblTestSetups";
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
try
{
var setupName = (string)dr["SetupName"];
var setupDescription = (string)dr["SetupDescription"];
var recordingMode = Convert.ToInt32(dr["RecordingMode"]);
var dirty = Convert.ToBoolean(dr["Dirty"]);
var complete = Convert.ToBoolean(dr["Complete"]);
var lastModified = Convert.ToDateTime(dr["LastModified"]);
var lastModifiedBy = (string)dr["LastModifiedBy"];
var errorMessage = Convert.ToString(dr["ErrorMessage"]);
var customerDetails = (string)dr["CustomerDetails"];
var useCustomerDetails = Convert.ToBoolean(dr["UseCustomerDetails"]);
var tagBlobObj = dr["UserTags"];
byte[] tagBlob = null;
int[] tagIds = null;
if (DBNull.Value.Equals(tagBlobObj))
{
tagBlob = new byte[0];
tagIds = new int[0];
}
else
{
tagBlob = (byte[])dr["UserTags"];
tagIds = GetTagIds(tagBlob);
}
if (dirty)
{
var tt = TestTemplatesList.GetTemplate(setupName);
complete = tt.IsComplete;
}
objects.Add(new TestTemplateTableObject(setupName, setupDescription,
(RecordingModes)recordingMode, lastModified, lastModifiedBy, complete,
errorMessage, useCustomerDetails, customerDetails, tagIds));
}
catch (Exception)
{
//APILogger.Log(ex);
}
}
}
}
return objects.ToArray();
}
private int[] GetTagIds(byte[] bytes)
{
var tagsBlob = new int[bytes.Length / sizeof(int)];
try
{
Buffer.BlockCopy(bytes, 0, tagsBlob, 0, bytes.Length);
return tagsBlob;
}
catch (Exception)
{
//APILogger.Log(ex);
}
return new int[0];
}
}
}