aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs
diff options
context:
space:
mode:
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.cs237
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
+ }
}