using System; using System.Collections.Generic; namespace MMDAL.DTO.Inspection { public class InspectionParameterDTO { #region Private Members private int inspectionparameterid; private int inspectiondetailid; private short inspectionparameterslno; private byte inspectionparametersamplenumber; private short inspectionparameterparameterslno; // Parameter private int parameterid; private string parametercode; private string parametername; // UOM private int uomid; private string uomcode; private string uomname; private string parametersection; private double? inspectionparameteraverage; private byte inspectionparameterresult; // 0=Pending, 1=Pass, 2=Fail private string inspectionparameterinputvalue; private string inspectionparameterinputtext; // FIX: Was DateOnly? — Dapper cannot map DateOnly → SQL datetime. // DateOnly? + null JSON → DateTime.MinValue (0001-01-01) // → SqlDateTime overflow crash (SQL Server range starts 1753-01-01). // DateTime? + null JSON → null → safely stored as NULL in DB. private DateOnly? inspectionparameterinputdate; private double? inspectionparameterfinalvalue; private double? inspectionparameterminval; private double? inspectionparametermaxval; #endregion #region Public Members public int InspectionParameterId { get { return inspectionparameterid; } set { inspectionparameterid = value; } } public int InspectionDetailId { get { return inspectiondetailid; } set { inspectiondetailid = value; } } public short InspectionParameterSlNo { get { return inspectionparameterslno; } set { inspectionparameterslno = value; } } public byte InspectionParameterSampleNumber { get { return inspectionparametersamplenumber; } set { inspectionparametersamplenumber = value; } } public short InspectionParameterParameterSlNo { get { return inspectionparameterparameterslno; } set { inspectionparameterparameterslno = value; } } #region Parameter public int ParameterId { get { return parameterid; } set { parameterid = value; } } public string ParameterCode { get { return parametercode; } set { parametercode = value; } } public string ParameterName { get { return parametername; } set { parametername = value; } } #endregion #region UOM public int UomId { get { return uomid; } set { uomid = value; } } public string UomCode { get { return uomcode; } set { uomcode = value; } } public string UomName { get { return uomname; } set { uomname = value; } } #endregion public string ParameterSection { get { return parametersection; } set { parametersection = value; } } public double? InspectionParameterAverage { get { return inspectionparameteraverage; } set { inspectionparameteraverage = value; } } public byte InspectionParameterResult { get { return inspectionparameterresult; } set { inspectionparameterresult = value; } } public string InspectionParameterInputValue { get { return inspectionparameterinputvalue; } set { inspectionparameterinputvalue = value; } } public string InspectionParameterInputText { get { return inspectionparameterinputtext; } set { inspectionparameterinputtext = value; } } /// /// FIX: Changed from DateOnly? to DateTime? /// /// Root cause of "SqlDateTime overflow" crash: /// DateOnly? has no direct Dapper → SQL datetime mapping. /// When JSON sends null → DateOnly? deserialises to null → Dapper /// internally converts to DateTime.MinValue (0001-01-01 00:00:00) /// → SQL Server rejects it (valid range: 1753-01-01 to 9999-12-31). /// /// DateTime? fix: /// null JSON → null C# → NULL in DB (safe, column is now nullable) /// "2026-06-15" → 2026-06-15 00:00:00 → stored correctly in DB /// /// DB change also required: /// ALTER TABLE TINSPECTIONPARAMETER ALTER COLUMN INPUTDATE DATETIME NULL; /// (INPUTDATE was NOT NULL — already handled via previous migration) /// public DateOnly? InspectionParameterInputDate { get { return inspectionparameterinputdate; } set { inspectionparameterinputdate = value; } } public double? InspectionParameterFinalValue { get { return inspectionparameterfinalvalue; } set { inspectionparameterfinalvalue = value; } } public double? MinVal { get { return inspectionparameterminval; } set { inspectionparameterminval = value; } } public double? MaxVal { get { return inspectionparametermaxval; } set { inspectionparametermaxval = value; } } #endregion } }