using Microsoft.Win32; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.AutoComplete.Editors; using Tango.BL; using Tango.BL.ActionLogs; using Tango.BL.Builders; using Tango.BL.DTO; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.Commands; using Tango.Logging; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.ThreadExtensions.Models; using Tango.Settings; using Tango.SharedUI; namespace Tango.MachineStudio.ThreadExtensions.ViewModels { public class TestResultsViewVM : ViewModel { private INotificationProvider _notification; private IActionLogManager _actionLogManager; private ObservablesContext _active_context; public event EventHandler SaveTestResults; #region Properties public List WashingTestMaterials { get; set; } private SynchronizedObservableCollection _selectedTestResults; public SynchronizedObservableCollection SelectedTestResults { get { return _selectedTestResults; } set { _selectedTestResults = value; } } private ObservableCollection _resultTabs; public ObservableCollection ResultTabs { get { return _resultTabs; } set { _resultTabs = value; } } private TestResultViewVM _selectedTab; /// /// Gets or sets the selected tab. /// public TestResultViewVM SelectedTab { get { return _selectedTab; } set { _selectedTab = value; RaisePropertyChangedAuto(); foreach (var tab in ResultTabs.Where(x => x != _selectedTab)) { tab.IsSelected = false; } if (_selectedTab != null) { _selectedTab.IsSelected = true; } //EnableRenderingForSelectedTabGraphs(); } } protected string _selectedMachineGuid; /// /// Gets or sets the selected machine. /// public String SelectedMachineGUID { get { return _selectedMachineGuid; } set { if (value != null && _selectedMachineGuid != value) { _selectedMachineGuid = value; SelectedMachineChanged(); RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } } private string _RMLExtentionGUID; public string RMLExtemtionGUID { get { return _RMLExtentionGUID; } set { _RMLExtentionGUID = value; OnRMLExtemtionGUIDChanged(); } } private string _threadName; public string ThreadName { get { return _threadName; } set { _threadName = value; RaisePropertyChangedAuto(); } } private string _RMLGUID; public string RMLGUID { get { return _RMLGUID; } set { _RMLGUID = value; } } private ObservableCollection _btsrApplicationTypes; public ObservableCollection BtsrApplicationTypes { get { return _btsrApplicationTypes; } set { _btsrApplicationTypes = value; RaisePropertyChangedAuto(); } } private ObservableCollection _btsrYarnTypes; public ObservableCollection BtsrYarnTypes { get { return _btsrYarnTypes; } set { _btsrYarnTypes = value; RaisePropertyChangedAuto(); } } #endregion #region Commands /// /// Gets or sets the add tab command. /// public RelayCommand AddTabCommand { get; set; } /// /// Gets or sets the remove tab command. /// public RelayCommand RemoveTabCommand { get; set; } /// /// Gets or sets the rename tab command. /// public RelayCommand RenameTabCommand { get; set; } public RelayCommand ApplyToProcessParametersCommand { get; set; } public RelayCommand SaveCommand { get; set; } #endregion public TestResultsViewVM(INotificationProvider notification, IActionLogManager actionLogManager) { _notification = notification; _actionLogManager = actionLogManager; ResultTabs = new ObservableCollection(); AddTabCommand = new RelayCommand(() => AddNewTab()); RemoveTabCommand = new RelayCommand(RemoveTab); RenameTabCommand = new RelayCommand(RenameTab); ApplyToProcessParametersCommand = new RelayCommand(ApplyToProcessParameters); SaveCommand = new RelayCommand(Save, () => IsFree); } #region Tabs modification /// /// Removes the specified tab. /// /// The tab. private void RemoveTab(TestResultViewVM tab) { if (ResultTabs.Count == 1) return; if (_notification.ShowQuestion("Are you sure you want to delete the selected tab?")) { _active_context.RubbingResults.RemoveRange(tab.TestResult.RubbingResults); tab.TestResult.RubbingResults = null; _active_context.TensileResults.RemoveRange(tab.TestResult.TensileResults); tab.TestResult.TensileResults = null; _active_context.RmlExtensionTestWashingResults.RemoveRange(tab.TestResult.RmlExtensionTestWashingResults); tab.TestResult.RmlExtensionTestWashingResults = null; _active_context.RmlExtensionTestResults.Remove(tab.TestResult); ResultTabs.Remove(tab); SelectedTab = ResultTabs.LastOrDefault(); _active_context.SaveChanges(); } } /// /// Adds a new tab. /// private bool AddNewTab(String name = null) { if (ResultTabs.Count > 7) { //_notification.ShowError("Cannot exceed the maximum number of 8 tabs. You can remove a tab, or create a new project."); return false; } if (name == null) { name = _notification.ShowTextInput("Enter tab name", "Tab Name", "Test"); } if (!String.IsNullOrWhiteSpace(name)) { try { var tab = CreateNewTestResultVM(name, (ResultTabs.Count + 1)); ResultTabs.Add(tab); SelectedTestResults.Add(tab.TestResult); _active_context.RmlExtensionTestResults.Add(tab.TestResult); _active_context.SaveChanges(); SelectedTab = ResultTabs.FirstOrDefault(x=> x.TestResult.Guid == tab.TestResult.Guid); return true; } catch(Exception ex) { LogManager.Log(ex, $"Error add new Tab TestResults.\n{ex.FlattenMessage()}"); return false; } } else { return false; } } /// /// Renames the tab. /// /// The tab. private void RenameTab() { if (SelectedTab != null) { var name = _notification.ShowTextInput("Enter tab name", "Tab Name", SelectedTab.TestResult.Name); if (!String.IsNullOrWhiteSpace(name)) { SelectedTab.TestResult.Name = name; } } } #endregion #region Loading test results private void OnRMLExtemtionGUIDChanged() { ResultTabs.Clear(); SelectedTab = null; } private void SelectedMachineChanged() { ResultTabs.Clear(); SelectedTab = null; LoadTestResults(); } public async void LoadTestResults() { if (String.IsNullOrEmpty(SelectedMachineGUID)) { return; } try { IsFree = false; LogManager.Log("Loading selected test results..."); if (_active_context != null) { _active_context.Dispose(); } _active_context = ObservablesContext.CreateDefault(); ResultTabs.Clear(); using (_notification.PushTaskItem("Loading Test Results Parameters ...")) { BtsrApplicationTypes = _active_context.BtsrApplicationTypes.ToObservableCollection(); BtsrYarnTypes = _active_context.BtsrYarnTypes.ToObservableCollection(); WashingTestMaterials = _active_context.WashingTestMaterials.OrderBy(x=> x.Name).ToList(); var testResults = await new RMLExtensionTestResultsCollectionBuilder(_active_context).SetAll().ForRMLExtension(RMLExtemtionGUID).ForMachine(SelectedMachineGUID).WithRubbingAndTensileResults().WithTestResultsFiles().WithWashingTestResults().WithBtsrApplicationTypes().WithBtsrYarnTypes().BuildAsync(); SelectedTestResults = testResults.OrderBy(x => x.ResultIndex).ToSynchronizedObservableCollection(); foreach (var result in SelectedTestResults) { var testResultViewVM = new TestResultViewVM(_notification, _actionLogManager) { TestResult = result, ThreadName = ThreadName }; CreateWashingResult(testResultViewVM); ResultTabs.Add(testResultViewVM); } if (ResultTabs.Count == 0) { AddNewTab("Untitled"); } if(ResultTabs.Count > 0) SelectedTab = ResultTabs[ResultTabs.Count - 1]; } IsFree = true; } catch (Exception ex) { LogManager.Log(ex, $"Error loading TestResults.\n{ex.FlattenMessage()}\n Inner Exception: {ex.InnerException.InnerException.ToString()}"); } finally { IsFree = true; } } private TestResultViewVM CreateNewTestResultVM(string name, int index) { TestResultViewVM newtab = new TestResultViewVM(_notification, _actionLogManager) { ThreadName = ThreadName }; newtab.TestResult = new RmlExtensionTestResult() { RmlsExtensionsGuid = RMLExtemtionGUID, MachineGuid = SelectedMachineGUID, ResultIndex = index, Name = name, BtsrMax = 0.0, BtsrMin = 0.0, DryerTemperature = 0, TunnelTemperature = 0, TunnelFlow = 0.0, TunnelAvgTemperature = 0.0, TensionHeadMax = 0.0, TensionHeadMin = 0.0, TensioinAfterDryerMax = 0.0, TensionAfterDryerMin = 0.0, TensionWinderMax = 0.0, TensionWinderMin = 0.0, PullerTensionMax = 0.0, PullerTensionMin = 0.0, ExitTensionMax = 0.0, ExitTensionMin = 0.0, SeverityZone1Max = 0.0, SeverityZone1Min = 0.0, SeverityZone2Max = 0.0, SeverityZone2Min = 0.0, RefLubVersion="", RefCof = 0.0, RefLub = 0.0, ThreadLubVersion = "", ThreadCof = 0.0, ThreadLub = 0.0, Conclusions="", Comment=""}; var rubbingresults = new SynchronizedObservableCollection(); rubbingresults.Add(new RubbingResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.CYAN }); rubbingresults.Add(new RubbingResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.MAGENTA }); rubbingresults.Add(new RubbingResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.YELLOW }); rubbingresults.Add(new RubbingResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.BLACK }); newtab.TestResult.RubbingResults = rubbingresults; var tensileresults = new SynchronizedObservableCollection(); tensileresults.Add(new TensileResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.CYAN, ColorPercent = 100 }); tensileresults.Add(new TensileResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.BLACK, ColorPercent = 100 }); tensileresults.Add(new TensileResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.CYAN, ColorPercent = 200 }); tensileresults.Add(new TensileResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.BLACK, ColorPercent = 200 }); tensileresults.Add(new TensileResult() { RmlExtensionTestResultsGuid = newtab.TestResult.Guid, TestResultColor = TestResultColors.WHITE, ColorPercent = null }); newtab.TestResult.TensileResults = tensileresults; CreateWashingResult(newtab); return newtab; } private void CreateWashingResult(TestResultViewVM testresultViewVM) { if(testresultViewVM.TestResult.RmlExtensionTestWashingResults != null && testresultViewVM.TestResult.RmlExtensionTestWashingResults.Count > 0 ) { var collection = new ObservableCollection(); Dictionary colorDictionary = new Dictionary(); List< RmlExtensionTestWashingResult > washingResultsOrdersByColor = testresultViewVM.TestResult.RmlExtensionTestWashingResults.OrderBy(x=>x.IndexRow).ThenBy(c => c.WashingTestMaterials != null ? c.WashingTestMaterials.Name : c.WashingTestMaterialsGuid).ToList(); foreach (var res in washingResultsOrdersByColor) { WashingMaterialColorModel wmodel = null; if(false == colorDictionary.TryGetValue(res.IndexRow, out wmodel)) { wmodel = new WashingMaterialColorModel() { Color = res.Color }; colorDictionary.Add(res.IndexRow, wmodel); collection.Add(wmodel); } wmodel.AddMaterial(res.Guid, res.GetMaterialName, res.WashingValue); } testresultViewVM.ColorsToMaterialCollection = collection; } else { var whashingresults = new SynchronizedObservableCollection(); var collecction = new ObservableCollection(); for (int index_row = 0; index_row < 6; index_row++) { var model = new WashingMaterialColorModel() { Color = -1 }; foreach (var material in WashingTestMaterials) { var rmlExtensionTestWashingResult = new RmlExtensionTestWashingResult() { RmlExtensionTestResultsGuid = testresultViewVM.TestResult.Guid, WashingTestMaterialsGuid = material.Guid, Color = -1, IndexRow = index_row }; model.AddMaterial(rmlExtensionTestWashingResult.Guid, material.Name, null); rmlExtensionTestWashingResult.WashingTestMaterials = material; whashingresults.Add(rmlExtensionTestWashingResult); } collecction.Add( model); } testresultViewVM.ColorsToMaterialCollection = collecction; testresultViewVM.TestResult.RmlExtensionTestWashingResults = whashingresults; } } #endregion #region Save public async void ApplyToProcessParameters() { try { if (RMLGUID == null) return; using (var context = ObservablesContext.CreateDefault()) { var rml = await new RmlBuilder(context) .Set(RMLGUID) .WithActiveParametersGroup() .BuildAsync(); if (rml == null || rml.ProcessParametersTablesGroups.ToList().Count == 0) { _notification.ShowError("Could not save process parameters an RML with no process group."); return; } var activeProcessParametersGroup = rml.ProcessParametersTablesGroups.ToList().SingleOrDefault(x => x.Active); if(activeProcessParametersGroup != null) { var processParametersTables = activeProcessParametersGroup.ProcessParametersTables.OrderBy(x => x.TableIndex).ToSynchronizedObservableCollection().FirstOrDefault(); processParametersTables.DryerZone1Temp = SelectedTab.TestResult.DryerTemperature == null? 0 : (double)SelectedTab.TestResult.DryerTemperature; processParametersTables.RBlowerFlow = SelectedTab.TestResult.TunnelTemperature == null ? 0 : (double)SelectedTab.TestResult.TunnelTemperature; processParametersTables.RBlowerTemp = SelectedTab.TestResult.TunnelTemperature == null ? 0 : (double)SelectedTab.TestResult.TunnelTemperature; processParametersTables.LBlowerFlow = SelectedTab.TestResult.TunnelFlow == null ? 0 : (double)SelectedTab.TestResult.TunnelFlow; processParametersTables.LBlowerTemp = SelectedTab.TestResult.TunnelFlow == null ? 0 : (double)SelectedTab.TestResult.TunnelFlow; await context.SaveChangesAsync(); } } } catch(Exception ex) { LogManager.Log(ex, "Could not save process parameters."); _notification.ShowError($"An error occurred while trying to save process parameters.\n{ex.Message}"); } } public void ApplyToWashingResults(TestResultViewVM testresultViewVM) { foreach ( var model in testresultViewVM.ColorsToMaterialCollection) { foreach( var colormodel in model.ColorValues) { var result = testresultViewVM.TestResult.RmlExtensionTestWashingResults.FirstOrDefault(x=> x.Guid == colormodel.RmlExtensionTestWashingResultGUID); if( result != null) { result.Color = model.Color; result.WashingValue = colormodel.ColorValue; } } } } public async void Save() { if (String.IsNullOrEmpty(SelectedMachineGUID)) { _notification.ShowWarning(LogManager.Log($"Could not save Test Results. Please, select machine.", LogCategory.Warning)); return; } try { IsFree = false; await Task.Run(() => { foreach (var tab in ResultTabs) { ApplyToWashingResults(tab); tab.TestResult.LastUpdated = DateTime.UtcNow; } _active_context.SaveChanges(); }); //LoadTestResults(); } catch (Exception ex) { LogManager.Log(ex, "Could not save test results."); _notification.ShowError($"An error occurred while trying to save test results.\n{ex.Message}"); } finally { IsFree = true; EventHandler handler = SaveTestResults; handler?.Invoke(this, new EventArgs()); } } #endregion #region Excel public async void LoadTestResultsExcel(List testResultsExcelModelList, string machineGUID, string machineSerialNumber) { try { IsFree = false; if (_active_context == null) { _active_context = ObservablesContext.CreateDefault(); } using (_notification.PushTaskItem("Loading Test Results Parameters for save in Excel file ...")) { SynchronizedObservableCollection testResults = SelectedTestResults; if (SelectedMachineGUID != machineGUID) { var loadedtestResults = await new RMLExtensionTestResultsCollectionBuilder(_active_context).SetAll().ForRMLExtension(RMLExtemtionGUID).ForMachine(machineGUID).WithRubbingAndTensileResults().BuildAsync(); testResults = loadedtestResults.OrderBy(x => x.ResultIndex).ToSynchronizedObservableCollection(); } foreach (var testresult in testResults) { TestResultsExcelModel testResultsExcelModel = new TestResultsExcelModel(); testResultsExcelModel.Thread_name_test_results = ThreadName; testResultsExcelModel.Machine_number = machineSerialNumber; testResultsExcelModel.Test_results_name__tab = testresult.Name; testResultsExcelModel.Dryer_temp = testresult.DryerTemperature == null ? 0 : (int)testresult.DryerTemperature; testResultsExcelModel.Dryer_flow = 0; testResultsExcelModel.Tunnel_temp = testresult.TunnelTemperature == null ? 0 : (int)testresult.TunnelTemperature; testResultsExcelModel.Tunnel_flow = testresult.TunnelFlow == null ? 0 : (int)testresult.TunnelFlow; testResultsExcelModel.Tension_in_head = testresult.TensionHeadMin == null ? "" : testresult.TensionHeadMin.ToString(); testResultsExcelModel.Tension_after_dryer = testresult.TensionAfterDryerMin == null ? "" : testresult.TensionAfterDryerMin.ToString(); testResultsExcelModel.Tension_in_winder = testresult.TensionWinderMin == null ? "" : testresult.TensionWinderMin.ToString(); testResultsExcelModel.BTSR = testresult.BtsrMin == null ? "" : testresult.BtsrMin.ToString(); testResultsExcelModel.Puller_tension = testresult.PullerTensionMin == null ? "" : testresult.PullerTensionMin.ToString(); testResultsExcelModel.Winder_tension = testresult.ExitTensionMin == null ? "" : testresult.ExitTensionMin.ToString(); foreach (var tensileResult in testresult.TensileResults) { if (tensileResult.TestResultColor == TestResultColors.CYAN) { if (tensileResult.ColorPercent == 100) { testResultsExcelModel.Load_N_100_C = tensileResult.MaxLoad == null ? 0 : (double)tensileResult.MaxLoad; testResultsExcelModel.STDEV_100_C = tensileResult.StdevMaxLoad == null ? 0 : (double)tensileResult.StdevMaxLoad; testResultsExcelModel.Change_100_C = tensileResult.PercentChangeLoad == null ? 0 : (double)tensileResult.PercentChangeLoad; testResultsExcelModel.Strain_100_C = tensileResult.StrainMaxLoad == null ? 0 : (double)tensileResult.StrainMaxLoad; testResultsExcelModel.STDEV_100_C_2 = tensileResult.StdevStrainMaxLoad == null ? 0 : (double)tensileResult.StdevStrainMaxLoad; testResultsExcelModel.Change_100_C_2 = tensileResult.PercentChangeStrain == null ? 0 : (double)tensileResult.PercentChangeStrain; } else if (tensileResult.ColorPercent == 200) { testResultsExcelModel.Load__N_200_C = tensileResult.MaxLoad == null ? 0 : (double)tensileResult.MaxLoad; testResultsExcelModel.STDEV_200_C = tensileResult.StdevMaxLoad == null ? 0 : (double)tensileResult.StdevMaxLoad; testResultsExcelModel.Change_200_C = tensileResult.PercentChangeLoad == null ? 0 : (double)tensileResult.PercentChangeLoad; testResultsExcelModel.Strain_200_C = tensileResult.StrainMaxLoad == null ? 0 : (double)tensileResult.StrainMaxLoad; testResultsExcelModel.STDEV_200_C_2 = tensileResult.StdevStrainMaxLoad == null ? 0 : (double)tensileResult.StdevStrainMaxLoad; testResultsExcelModel.Change_200_C_2 = tensileResult.PercentChangeStrain == null ? 0 : (double)tensileResult.PercentChangeStrain; } } else if (tensileResult.TestResultColor == TestResultColors.BLACK) { if (tensileResult.ColorPercent == 100) { testResultsExcelModel.Load__N_100_K = tensileResult.MaxLoad == null ? 0 : (double)tensileResult.MaxLoad; testResultsExcelModel.STDEV_100_K = tensileResult.StdevMaxLoad == null ? 0 : (double)tensileResult.StdevMaxLoad; testResultsExcelModel.Change__100_K = tensileResult.PercentChangeLoad == null ? 0 : (double)tensileResult.PercentChangeLoad; testResultsExcelModel.Strain_100_K = tensileResult.StrainMaxLoad == null ? 0 : (double)tensileResult.StrainMaxLoad; testResultsExcelModel.STDEV_100_K_2 = tensileResult.StdevStrainMaxLoad == null ? 0 : (double)tensileResult.StdevStrainMaxLoad; testResultsExcelModel.Change_100_K_2 = tensileResult.PercentChangeStrain == null ? 0 : (double)tensileResult.PercentChangeStrain; } else if (tensileResult.ColorPercent == 200) { testResultsExcelModel.Load__N_200_K = tensileResult.MaxLoad == null ? 0 : (double)tensileResult.MaxLoad; testResultsExcelModel.STDEV_200_K = tensileResult.StdevMaxLoad == null ? 0 : (double)tensileResult.StdevMaxLoad; testResultsExcelModel.Change_200_K = tensileResult.PercentChangeLoad == null ? 0 : (double)tensileResult.PercentChangeLoad; testResultsExcelModel.Strain_200_K = tensileResult.StrainMaxLoad == null ? 0 : (double)tensileResult.StrainMaxLoad; testResultsExcelModel.STDEV_200_K_2 = tensileResult.StdevStrainMaxLoad == null ? 0 : (double)tensileResult.StdevStrainMaxLoad; testResultsExcelModel.Change_200_K_2 = tensileResult.PercentChangeStrain == null ? 0 : (double)tensileResult.PercentChangeStrain; } } else if (tensileResult.IsWhiteColor) { testResultsExcelModel.Load__N_REF = tensileResult.MaxLoad == null ? 0 : (double)tensileResult.MaxLoad; testResultsExcelModel.STDEV_REF = tensileResult.StdevMaxLoad == null ? 0 : (double)tensileResult.StdevMaxLoad; testResultsExcelModel.STDEV_Strain_REF = tensileResult.StdevStrainMaxLoad == null ? 0 : (double)tensileResult.StdevStrainMaxLoad; testResultsExcelModel.REF_Strain = tensileResult.StrainMaxLoad == null ? 0 : (double)tensileResult.StrainMaxLoad; } } foreach (var rubbingresult in testresult.RubbingResults) { if (rubbingresult.TestResultColor == TestResultColors.CYAN) { testResultsExcelModel.Rubbing_C_100___DE = rubbingresult.DeltaeCie100 == null ? 0.0 : (double)rubbingresult.DeltaeCie100; testResultsExcelModel.Rubbing_C_100___GS = rubbingresult.Gs100 == null ? 0.0 : (double)rubbingresult.Gs100; testResultsExcelModel.Rubbing_C_200___DE = rubbingresult.DeltaeCie200 == null ? 0.0 : (double)rubbingresult.DeltaeCie200; testResultsExcelModel.Rubbing_C_200___GS = rubbingresult.Gs200 == null ? 0.0 : (double)rubbingresult.Gs200; } else if (rubbingresult.TestResultColor == TestResultColors.MAGENTA) { testResultsExcelModel.Rubbing_M_100___DE = rubbingresult.DeltaeCie100 == null ? 0.0 : (double)rubbingresult.DeltaeCie100; testResultsExcelModel.Rubbing_M_100___GS = rubbingresult.Gs100 == null ? 0.0 : (double)rubbingresult.Gs100; testResultsExcelModel.Rubbing_M_200___DE = rubbingresult.DeltaeCie200 == null ? 0.0 : (double)rubbingresult.DeltaeCie200; testResultsExcelModel.Rubbing_M_200___GS = rubbingresult.Gs200 == null ? 0.0 : (double)rubbingresult.Gs200; } else if (rubbingresult.TestResultColor == TestResultColors.YELLOW) { testResultsExcelModel.Rubbing_Y_100___DE = rubbingresult.DeltaeCie100 == null ? 0.0 : (double)rubbingresult.DeltaeCie100; testResultsExcelModel.Rubbing_Y_100___GS = rubbingresult.Gs100 == null ? 0.0 : (double)rubbingresult.Gs100; testResultsExcelModel.Rubbing_Y_200___DE = rubbingresult.DeltaeCie200 == null ? 0.0 : (double)rubbingresult.DeltaeCie200; testResultsExcelModel.Rubbing_Y_200___GS = rubbingresult.Gs200 == null ? 0.0 : (double)rubbingresult.Gs200; } else if (rubbingresult.TestResultColor == TestResultColors.BLACK) { testResultsExcelModel.Rubbing_K_100___DE = rubbingresult.DeltaeCie100 == null ? 0.0 : (double)rubbingresult.DeltaeCie100; testResultsExcelModel.Rubbing_K_100___GS = rubbingresult.Gs100 == null ? 0.0 : (double)rubbingresult.Gs100; testResultsExcelModel.Rubbing_K_200___DE = rubbingresult.DeltaeCie200 == null ? 0.0 : (double)rubbingresult.DeltaeCie200; testResultsExcelModel.Rubbing_K_200___GS = rubbingresult.Gs200 == null ? 0.0 : (double)rubbingresult.Gs200; } } string minZone = testresult.SeverityZone1Min == null ? "" : ((double)testresult.SeverityZone1Min).ToString(); string maxZone = testresult.SeverityZone1Max == null ? "" : ((double)testresult.SeverityZone1Max).ToString(); testResultsExcelModel.Uniformity_Zone_1 = $"{minZone} - {maxZone}"; minZone = testresult.SeverityZone2Min == null ? "" : ((double)testresult.SeverityZone2Min).ToString(); maxZone = testresult.SeverityZone2Max == null ? "" : ((double)testresult.SeverityZone2Max).ToString(); testResultsExcelModel.Uniformity_Zone_2 = $"{minZone} - {maxZone}"; testResultsExcelModel.COF_REF = testresult.RefCof == null ? 0.0 : (double)testresult.RefCof; testResultsExcelModel.CV_REF = 0.0; testResultsExcelModel.COF_Black = testresult.ThreadCof == null ? 0.0 : (double)testresult.ThreadCof; testResultsExcelModel.CV_Black = 0.0; testResultsExcelModel.lub_amount = testresult.ThreadLub == null ? 0.0 : (double)testresult.ThreadLub; testResultsExcelModel.Comments = testresult.Comment; testResultsExcelModel.Conclusion = testresult.Conclusions; testResultsExcelModelList.Add(testResultsExcelModel); } } IsFree = true; } catch (Exception ex) { LogManager.Log(ex, $"Error loading TestResults for saving in Excel file.\n{ex.FlattenMessage()}"); } finally { IsFree = true; } } #endregion } }