diff options
Diffstat (limited to 'Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs')
| -rw-r--r-- | Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs | 237 |
1 files changed, 233 insertions, 4 deletions
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs index 9981166e2..33b0cb2f7 100644 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Win32; +using Microsoft.WindowsAPICodePack.Dialogs; using Tango.Core.Commands; using Tango.CSV; using Tango.DispenserAnalyzer.UI.Models; @@ -26,9 +27,15 @@ using System.Windows.Xps.Packaging; using System.Windows.Media.Imaging; using PdfSharp; using OxyPlot.Reporting; -using System.Threading; +using Tango.Documents; using Tango.DispenserAnalyzer.UI.View; - +using Tango.Core.Helpers; +using Tango.DispenserAnalyzer.UI.ExcelModel; +using Tango.DispenserAnalyzer.UI.Analyzers; +using static Tango.DispenserAnalyzer.UI.Analyzers.FlowAnalyser; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Globalization; namespace Tango.DispenserAnalyzer.UI.ViewModels { @@ -249,6 +256,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels public RelayCommand GenerateCommand { get; set; } public RelayCommand OpenSettingWndCommand { get; set; } public RelayCommand CompareCommand { get; set; } + public RelayCommand SaveExelCommand { get; set; } #endregion public MainWindowVM() @@ -259,6 +267,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels GenerateCommand = new RelayCommand(Generate, CanGenerate); OpenSettingWndCommand = new RelayCommand(OpenSettingWnd); CompareCommand = new RelayCommand(Compareresults, CanCompareresults); + SaveExelCommand = new RelayCommand(SaveExel, CanSaveExel); YFormatter = value => value.ToString(); _from = 0; @@ -382,6 +391,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels FileHelper.OpenFilePath = OpenFilePath; FileName = Path.GetFileName(OpenFilePath); } + SaveExelCommand.RaiseCanExecuteChanged(); } #endregion @@ -389,6 +399,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels public bool CanGenerate() { + var value = (OpenFilePath != null && OpenFilePath.Length != 0 && File.Exists(OpenFilePath)); return (OpenFilePath!= null && OpenFilePath.Length != 0 && File.Exists(OpenFilePath)); } @@ -464,6 +475,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels { await PrintToXpsFile(); } + InvalidateRelayCommands(); } /// <summary> @@ -497,6 +509,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels List<IAnalyzerResult> res = await analyzer.Process(samples, true); AnalyzerResults = new ObservableCollection<IAnalyzerResult>(res); + await ExportResultsToTextFile(); } @@ -707,6 +720,205 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels }); } + + public async void ExportFlowResultsToExcel() + { + string filePath = (string)Settings.GetValueByName(AnalyzerSettingsEnum.DirectoryPath); + + if (!Directory.Exists(filePath)) + { + CommonOpenFileDialog dialog = new CommonOpenFileDialog(); + dialog.InitialDirectory = "C:\\Users"; + dialog.IsFolderPicker = true; + if (dialog.ShowDialog() == CommonFileDialogResult.Ok) + { + filePath = dialog.FileName; + if (filePath.Count(x => x == '%') == 2) + { + var variable = Regex.Match(filePath, "(?<=%)(.*?)(?=%)").Value; + filePath = filePath.Replace($"%{variable}%", Environment.ExpandEnvironmentVariables($"%{variable}%")); + } + Settings.SetValueByName(AnalyzerSettingsEnum.DirectoryPath, filePath); + Settings.SetDefaultPath(filePath); + } + else + { + MessageBox.Show("An error occurred while trying to open directory for saving result. ", + "Warning", + MessageBoxButton.OK, + MessageBoxImage.Warning); + return; + } + } + await Task.Run(() => + { + ExcelWriter writer = null; + ExcelReader reader = null; + try + { + IsFree = false; + + Stream stream = null; + bool dispose = false; + + if (false == filePath.EndsWith(@"\")) + { + filePath += @"\"; + } + String file = filePath + $"DispensersData.xlsx"; + + if (File.Exists(file)) + { + //stream = File.OpenRead(file); + stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + dispose = true; + } + else + { + var b = Assembly.GetExecutingAssembly().GetManifestResourceNames(); + stream = EmbeddedResourceHelper.GetEmbeddedResourceStream("Tango.DispenserAnalyzer.UI.Templates.DispensersData.xlsx"); + } + if (stream == null) + return; + + byte[] data = new byte[stream.Length]; + stream.Read(data, 0, data.Length); + File.WriteAllBytes(file, data); + + if (dispose) + { + stream.Dispose(); + } + reader = new ExcelReader(file); + List<ExcelDataModel> old_threadCharacteristicsExelModels = reader.GetDataByIndex<ExcelDataModel>("Data", 2); + reader.Dispose(); + reader = null; + + + int maxNumber = old_threadCharacteristicsExelModels.Count > 0 ? old_threadCharacteristicsExelModels.OrderBy(x => x.No___of_test).Max(x => x.No___of_test) : 0; + maxNumber++; + var time_test = AnalysisService.GetDateTimeString(FileName); + + var dispenser = AnalysisService.GetDispenserNumber(FileName); + int iterations = 0; + if (old_threadCharacteristicsExelModels.Count > 0) + { + var one_existed = old_threadCharacteristicsExelModels.OrderBy(x => x.No___of_test).Count(x => x.DISPENSER == dispenser && x.DATE == time_test); + if (one_existed > 0) + { + InvokeUI(() => + { + var warningresult = MessageBox.Show($"The result is already saved for the dispenser {dispenser} at time {time_test}. Do you want to save it anyway?", + "Warning", + MessageBoxButton.YesNo, + MessageBoxImage.Question); + if(warningresult == MessageBoxResult.Cancel) + return; + }); + } + iterations = old_threadCharacteristicsExelModels.OrderBy(x => x.No___of_test).Count(x => x.DISPENSER == dispenser ); + + } + iterations++; + + //write results + List<ExcelDataModel> threadCharacteristicsExelModels = new List<ExcelDataModel>(); + ExcelDataModel model = new ExcelDataModel(); + + model.No___of_test = maxNumber;//Could be defiend and saved + model.DISPENSER = dispenser; + model.iteration = iterations; + model.Location = FileName.IndexOf("CH8") > 0 ? "Dagesh" : "Twine"; + model.DATE = time_test; + List<IAnalyzerResult> results = AnalyzerResults.ToList(); + bool firstFlowAverageResult = true; + bool firstPrimingResult = true; + bool firstErrorResult = true; + bool pass = true; + foreach (var res in results) + { + if (res is PrimingAnalyzerResult) + { + if (firstPrimingResult) + { + model.PBU___sec__First_cycle = (res as PrimingAnalyzerResult).OnlyTime; + firstPrimingResult = false; + } + else + { + model.PBU___sec__Second_cycle = (res as PrimingAnalyzerResult).OnlyTime; + } + } + else if (res is FlowAverageAnalyzerResult) + { + if (firstFlowAverageResult) + { + model.Average_Value = (res as FlowAverageAnalyzerResult).AverageValue.ToString("0.##"); + firstFlowAverageResult = false; + if ((res as FlowAverageAnalyzerResult).Result == AnalyzerResultValue.Failed) + pass = false; + } + else + { + model.AverageValue2 = (res as FlowAverageAnalyzerResult).AverageValue.ToString("0.##"); + if ((res as FlowAverageAnalyzerResult).Result == AnalyzerResultValue.Failed) + pass = false; + } + } + else if (res is FlowAnalyzerResult) + { + if (firstErrorResult) + { + model.Max_Error = (res as FlowAnalyzerResult).PersentageOfError.ToString("0.##"); + model.Error__mBr = (res as FlowAnalyzerResult).MaxLocalError.ToString(); + model.Trend = (res as FlowAnalyzerResult).Trend; + firstErrorResult = false; + } + else + { + model.MaxError2 = (res as FlowAnalyzerResult).PersentageOfError.ToString("0.##"); + model.Error2 = (res as FlowAnalyzerResult).MaxLocalError.ToString(); + model.Trend2 = (res as FlowAnalyzerResult).Trend; + } + } + } + + model.Test_result = pass ? "Pass" : "Fail"; + model.Eng_Recommendations = "-"; + model.Last_Action = "-"; + + threadCharacteristicsExelModels.Add(model); + + writer = new ExcelWriter(file); + writer.WriteData(threadCharacteristicsExelModels, "Data"); + + writer.Dispose(); + writer = null; + + } + catch (Exception ex) + { + InvokeUI(() => + { + MessageBox.Show("An error occurred while trying to save results in file DispensersData.xlsx. Error" + ex.Message, + "Warning", + MessageBoxButton.OK, + MessageBoxImage.Warning); + }); + } + finally + { + IsFree = true; + + if (reader != null) + reader.Dispose(); + if (writer != null) + writer.Dispose(); + + } + }); + + } #endregion #region CompareResults @@ -762,6 +974,23 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels } } - #endregion - } + public bool CanSaveExel(object arg) + { + var analyzer = AnalysisService.GetAnalyzer(OpenFilePath); + if (analyzer == null) + return false; + return AnalyzerResults.Count > 0 && analyzer is FlowAnalyser; + } + + private void SaveExel() + { + if(!IsFree) + return; + + // await ExportRMLToExcel().ConfigureAwait(false); + ExportFlowResultsToExcel(); + } + + #endregion + } } |
