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.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<CalibrationDataVM> _liquidsCalibrationData;
/// <summary>
/// Gets or sets the liquids calibration data.
/// </summary>
public ObservableCollection<CalibrationDataVM> LiquidsCalibrationData
{
get { return _liquidsCalibrationData; }
set { _liquidsCalibrationData = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Gets or sets the import excel command.
/// </summary>
public RelayCommand<CalibrationDataVM> ImportExcelCommand { get; set; }
/// <summary>
/// Gets or sets the export excel command.
/// </summary>
public RelayCommand<CalibrationDataVM> ExportExcelCommand { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="CalibrationDataViewVM"/> class.
/// </summary>
public CalibrationDataViewVM(INotificationProvider notificationProvider)
{
_notification = notificationProvider;
LiquidsCalibrationData = new ObservableCollection<CalibrationDataVM>();
ImportExcelCommand = new RelayCommand<CalibrationDataVM>(ImportExcel);
ExportExcelCommand = new RelayCommand<CalibrationDataVM>(ExportExcel);
}
/// <summary>
/// Initializes a new instance of the <see cref="CalibrationDataViewVM"/> class.
/// </summary>
/// <param name="liquidsCalibrationData">The liquids calibration data.</param>
public CalibrationDataViewVM(INotificationProvider notificationProvider, ObservableCollection<CalibrationDataVM> 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.");
}
}
}
}