Files
DP44/Common/DTS.CommonCore/.svn/pristine/99/99b46bac7547be53779ec90db606f950ba8b343a.svn-base
2026-04-17 14:55:32 -04:00

178 lines
7.0 KiB
Plaintext

using DTS.Common.Base;
using DTS.Common.Enums.Sensors;
using DTS.Common.Interface.Sensors;
using DTS.Common.Utilities.Logging;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data;
using System.Globalization;
using System.Linq;
namespace DTS.Common.Classes.Sensors
{
public class SensorCalDbRecord : BasePropertyChanged, ISensorCalDbRecord
{
public bool LinearAdded
{
get => NonLinear && Records.Records[0].Poly.NonLinearStyle == NonLinearStyles.Polynomial &&
Records.Records.Length > 1 && ZeroMethods.Methods.Length > 1;
}
private int? _calibrationId = null;
/// <summary>
/// database id, if known, for calibration, null indicates not known
/// 13065 Sensor "First Use" Date
/// </summary>
[Key]
public int? CalibrationId
{
get => _calibrationId;
set => SetProperty(ref _calibrationId, value, "CalibrationId");
}
protected string _serialNumber;
public string SerialNumber
{
get => _serialNumber;
set => SetProperty(ref _serialNumber, value, "SerialNumber");
}
protected DateTime _calibrationDate;
[Column(TypeName = "datetime")]
public DateTime CalibrationDate
{
get => _calibrationDate;
set => SetProperty(ref _calibrationDate, value, "CalibrationDate");
}
protected string _userName = "";
[Required]
[StringLength(50)]
public string Username
{
get => _userName;
set => SetProperty(ref _userName, value, "Username");
}
private bool _localOnly;
public bool LocalOnly
{
get => _localOnly;
set => SetProperty(ref _localOnly, value, "LocalOnly");
}
private bool _nonLinear;
public bool NonLinear
{
get => _nonLinear;
set
{
SetProperty(ref _nonLinear, value, "NonLinear");
if (!value) return;
Records.Records.First().Sensitivity = 1D;
//FB 29728 don't make IsProportinal false
//IsProportional = false;
RemoveOffset = false;
}
}
private ICalibrationRecords _records = new CalibrationRecords();
[Required]
[StringLength(255)]
public ICalibrationRecords Records
{
get => _records;
set => SetProperty(ref _records, value, "Records");
}
private DateTime _modifyDate;
[Column(TypeName = "datetime")]
public DateTime ModifyDate
{
get => _modifyDate;
set => SetProperty(ref _modifyDate, value, "ModifyDate");
}
private bool _isProportional;
public bool IsProportional
{
get => _isProportional;
set => SetProperty(ref _isProportional, value, "IsProportional");
}
private bool _removeOffset;
public bool RemoveOffset
{
get => _removeOffset;
set => SetProperty(ref _removeOffset, value, "RemoveOffset");
}
private ZeroMethods _zeroMethods = new ZeroMethods();
[Required]
[StringLength(255)]
public ZeroMethods ZeroMethods
{
get => _zeroMethods;
set => SetProperty(ref _zeroMethods, value, "ZeroMethods");
}
private string[] _certificationDocuments = new string[0];
[Required]
[StringLength(2048)]
public string[] CertificationDocuments
{
get => _certificationDocuments;
set => SetProperty(ref _certificationDocuments, value, "CertificationDocuments");
}
//FB18158 It's None the default now not EU
private InitialOffsets _initialOffsets = new InitialOffsets(new InitialOffset());
public InitialOffsets InitialOffsets
{
get => _initialOffsets;
set => SetProperty(ref _initialOffsets, value, "InitialOffsets");
}
public SensorCalDbRecord() { }
public SensorCalDbRecord(ISensorCalDbRecord copy)
{
CalibrationDate = copy.CalibrationDate;
LocalOnly = copy.LocalOnly;
SerialNumber = copy.SerialNumber;
Username = copy.Username;
Records = new CalibrationRecords(copy.Records);
NonLinear = copy.NonLinear;
IsProportional = copy.IsProportional;
ModifyDate = copy.ModifyDate;
var list = new List<string>(copy.CertificationDocuments);
CertificationDocuments = list.ToArray();
RemoveOffset = copy.RemoveOffset;
ZeroMethods = new ZeroMethods(copy.ZeroMethods);
InitialOffsets = new InitialOffsets(copy.InitialOffsets);
CalibrationId = copy.CalibrationId;
//this is downright silly, but because the linearization formula marks itself valid when it deserializes with data in it, we go and correct it here.
Records.Records[0].Poly.MarkValid(NonLinear);
}
public SensorCalDbRecord(IDataReader reader)
{
try
{
CalibrationDate = Utility.GetDateTime(reader, "CalibrationDate", DateTime.MinValue);
LocalOnly = Utility.GetBool(reader, "LocalOnly", false);
SerialNumber = Utility.GetString(reader, "SerialNumber");
Username = Utility.GetString(reader, "Username");
Records = new CalibrationRecords(Utility.GetString(reader, "CalibrationRecords"));
NonLinear = Utility.GetBool(reader, "NonLinear");
IsProportional = Utility.GetBool(reader, "IsProportional");
ModifyDate = Utility.GetDateTime(reader, "ModifyDate", DateTime.MinValue);
CertificationDocuments = Utility.GetString(reader, "CertificationDocuments").Split(new[] { CultureInfo.InvariantCulture.TextInfo.ListSeparator }, StringSplitOptions.None).ToArray();
RemoveOffset = Utility.GetBool(reader, "RemoveOffset");
ZeroMethods = new ZeroMethods(Utility.GetString(reader, "ZeroMethod"));
InitialOffsets = new InitialOffsets(Utility.GetString(reader, "InitialOffset"));
CalibrationId = Utility.GetNullableInt(reader, "SensorCalibrationId");
//this is downright silly, but because the linearization formula marks itself valid when it deserializes with data in it, we go and correct it here.
Records.Records[0].Poly.MarkValid(NonLinear);
}
catch (Exception ex)
{
APILogger.Log("Failed to process Sensor Calibration record", ex);
}
}
}
}