aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Messages/OpenEntityEditViewMessage.cs
blob: 789cecdee18ba209cc82355435c0dee8977645b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.MachineStudio.Common.Messages;
using Tango.MachineStudio.DB.ViewModels;
using Tango.SharedUI;

namespace Tango.MachineStudio.DB.Messages
{
    /// <summary>
    /// Invoked when the user has opened an entity for editing.
    /// </summary>
    /// <seealso cref="Tango.MachineStudio.Common.Messages.IStudioMessage" />
    public class OpenEntityEditViewMessage : IStudioMessage
    {
        /// <summary>
        /// Gets or sets the dialog open mode.
        /// </summary>
        public DialogOpenMode DialogOpenMode { get; set; }

        /// <summary>
        /// Gets or sets the context.
        /// </summary>
        public ViewModel Context { get; set; }

        /// <summary>
        /// Gets or sets the type of the entity.
        /// </summary>
        public Type EntityType { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="OpenEntityEditViewMessage"/> class.
        /// </summary>
        /// <param name="mode">The mode.</param>
        /// <param name="context">The context.</param>
        /// <param name="entityType">Type of the entity.</param>
        public OpenEntityEditViewMessage(DialogOpenMode mode, ViewModel context, Type entityType)
        {
            DialogOpenMode = mode;
            Context = context;
            EntityType = entityType;
        }
    }
}
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<WashingTestMaterial> WashingTestMaterials { get; set; }


        private SynchronizedObservableCollection<RmlExtensionTestResult> _selectedTestResults;

        public SynchronizedObservableCollection<RmlExtensionTestResult> SelectedTestResults
        {
            get { return _selectedTestResults; }
            set { _selectedTestResults = value; }
        }


        private ObservableCollection<TestResultViewVM> _resultTabs;

        public ObservableCollection<TestResultViewVM> ResultTabs
        {
            get { return _resultTabs; }
            set { _resultTabs = value; }
        }

        private TestResultViewVM _selectedTab;
        /// <summary>
        /// Gets or sets the selected tab.
        /// </summary>
        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;
        /// <summary>
        /// Gets or sets the selected machine.
        /// </summary>
        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<BtsrApplicationType> _btsrApplicationTypes;
        public ObservableCollection<BtsrApplicationType> BtsrApplicationTypes
        {
            get { return _btsrApplicationTypes; }
            set { _btsrApplicationTypes = value; RaisePropertyChangedAuto(); }
        }

        private ObservableCollection<BtsrYarnType> _btsrYarnTypes;
        public ObservableCollection<BtsrYarnType> BtsrYarnTypes
        {
            get { return _btsrYarnTypes; }
            set { _btsrYarnTypes = value; RaisePropertyChangedAuto(); }
        }

        #endregion

        #region Commands
        /// <summary>
        /// Gets or sets the add tab command.
        /// </summary>
        public RelayCommand AddTabCommand { get; set; }

        /// <summary>
        /// Gets or sets the remove tab command.
        /// </summary>
        public RelayCommand<TestResultViewVM> RemoveTabCommand { get; set; }
        
        /// <summary>
        /// Gets or sets the rename tab command.
        /// </summary>
        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<TestResultViewVM>();
            
            AddTabCommand = new RelayCommand(() => AddNewTab());
            RemoveTabCommand = new RelayCommand<TestResultViewVM>(RemoveTab);
            RenameTabCommand = new RelayCommand(RenameTab);

            ApplyToProcessParametersCommand = new RelayCommand(ApplyToProcessParameters);
            SaveCommand = new RelayCommand(Save, () => IsFree);
        }

        #region Tabs modification
       
        /// <summary>
        /// Removes the specified tab.
        /// </summary>
        /// <param name="tab">The tab.</param>
        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();
               
            }
        }

        /// <summary>
        /// Adds a new tab.
        /// </summary>
        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;
            }
        }

        /// <summary>
        /// Renames the tab.
        /// </summary>
        /// <param name="tab">The tab.</param>
        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<RubbingResult>();
            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<TensileResult>();
            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<WashingMaterialColorModel>();
                Dictionary<int, WashingMaterialColorModel> colorDictionary = new Dictionary<int, WashingMaterialColorModel>();
                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<RmlExtensionTestWashingResult>();
                var collecction = new ObservableCollection<WashingMaterialColorModel>();
                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<TestResultsExcelModel> 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<RmlExtensionTestResult> 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
        
    }
}