using Microsoft.Win32; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Calibration; using Tango.BL.Entities; using Tango.Core.Commands; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; namespace Tango.MachineStudio.RML.ViewModels { public class CalibrationDataViewVM : ViewModel { private INotificationProvider _notification; private ObservableCollection _liquidsCalibrationData; /// /// Gets or sets the liquids calibration data. /// public ObservableCollection LiquidsCalibrationData { get { return _liquidsCalibrationData; } set { _liquidsCalibrationData = value; RaisePropertyChangedAuto(); } } /// /// Gets or sets the import excel command. /// public RelayCommand ImportExcelCommand { get; set; } /// /// Gets or sets the export excel command. /// public RelayCommand ExportExcelCommand { get; set; } /// /// Initializes a new instance of the class. /// public CalibrationDataViewVM(INotificationProvider notificationProvider) { _notification = notificationProvider; LiquidsCalibrationData = new ObservableCollection(); ImportExcelCommand = new RelayCommand(ImportExcel); ExportExcelCommand = new RelayCommand(ExportExcel); } /// /// Initializes a new instance of the class. /// /// The liquids calibration data. public CalibrationDataViewVM(INotificationProvider notificationProvider, ObservableCollection liquidsCalibrationData) : this(notificationProvider) { LiquidsCalibrationData = liquidsCalibrationData; } private void ImportExcel(CalibrationDataVM vm) { OpenFileDialog dlg = new OpenFileDialog(); try { dlg.Title = $"Import excel calibration file for {vm.LiquidType.Name}"; dlg.Filter = "Excel Files|*.xlsx"; if (dlg.ShowDialog().Value) { vm.CalibrationPoints.Clear(); var points = CalibrationHelper.ImportCalibrationDataFromExcel(dlg.FileName); foreach (var p in points) { vm.CalibrationPoints.Add(new CalibrationDataPointVM(p)); } } } catch (Exception ex) { LogManager.Log(ex, "Error importing excel file " + dlg.FileName); _notification.ShowError("An error occurred while trying to import the selected excel file. Please check the file format if valid and is available to read."); } } private void ExportExcel(CalibrationDataVM vm) { SaveFileDialog dlg = new SaveFileDialog(); try { dlg.Title = $"Export excel calibration file for {vm.LiquidType.Name}"; dlg.Filter = "Excel Files|*.xlsx"; dlg.DefaultExt = ".xlsx"; dlg.FileName = $"CData_{vm.LiquidType.Name}_v{vm.LiquidType.Version}.xlsx"; if (dlg.ShowDialog().Value) { var points = vm.CalibrationPoints.Select(x => x.ToPMR()).ToList(); CalibrationHelper.ExportCalibrationDataToExcel(points, dlg.FileName); } } catch (Exception ex) { LogManager.Log(ex, "Error exporting excel file " + dlg.FileName); _notification.ShowError("An error occurred while trying to export the calibration data."); } } public void ApplyCalibrationData(LiquidType liquidType, List newpoints) { CalibrationDataVM vm = LiquidsCalibrationData.FirstOrDefault(x => x.LiquidType == liquidType); if(vm != null) { newpoints.ForEach(x => vm.CalibrationPoints.Add(x)); } } } }