using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.BL.Entities; using Tango.Core.Commands; using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Common.StudioApplication; using Tango.SharedUI; using System.Data.Entity; namespace Tango.MachineStudio.UI.ViewModels { public class ConnectedMachineViewVM : DialogViewVM { public enum ConnectedMachineVMResult { Cancel, Disconnect, UploadHardwareConfig, Reset, TurnOffHeaters } private IStudioApplicationManager _applicationManager; public IStudioApplicationManager ApplicationManager { get { return _applicationManager; } set { _applicationManager = value; RaisePropertyChangedAuto(); } } public ConnectedMachineVMResult Result { get; set; } private IDiagnosticsFrameProvider _diagnosticsFrameProvider; public IDiagnosticsFrameProvider DiagnosticsFrameProvider { get { return _diagnosticsFrameProvider; } set { _diagnosticsFrameProvider = value; RaisePropertyChangedAuto(); } } private String _totalMachineWorkTime; public String TotalMachineWorkTime { get { return _totalMachineWorkTime; } set { _totalMachineWorkTime = value; RaisePropertyChangedAuto(); } } private String _totalMachineMeters; public String TotalMachineMeters { get { return _totalMachineMeters; } set { _totalMachineMeters = value; RaisePropertyChangedAuto(); } } public RelayCommand DisconnectCommand { get; set; } public RelayCommand UploadHardwareConfigurationCommand { get; set; } public RelayCommand ResetCommand { get; set; } public RelayCommand TurnOffHeatersCommand { get; set; } public ConnectedMachineViewVM(IStudioApplicationManager application, IDiagnosticsFrameProvider frameProvider) { ApplicationManager = application; DisconnectCommand = new RelayCommand(() => AcceptResult(ConnectedMachineVMResult.Disconnect)); UploadHardwareConfigurationCommand = new RelayCommand(() => AcceptResult(ConnectedMachineVMResult.UploadHardwareConfig)); ResetCommand = new RelayCommand(() => AcceptResult(ConnectedMachineVMResult.Reset)); TurnOffHeatersCommand = new RelayCommand(() => AcceptResult(ConnectedMachineVMResult.TurnOffHeaters)); DiagnosticsFrameProvider = frameProvider; } private void AcceptResult(ConnectedMachineVMResult result) { Result = result; Accept(); } public override void OnShow() { base.OnShow(); LoadMachineCounters(); } private async void LoadMachineCounters() { try { TotalMachineMeters = "loading..."; TotalMachineWorkTime = "loading..."; using (ObservablesContext db = ObservablesContext.CreateDefault()) { var jobRuns = await db.JobRuns.Where(x => x.MachineGuid == ApplicationManager.Machine.Guid).Select(x => new { x.StartDate, x.EndDate, x.EndPosition }).ToListAsync(); TotalMachineWorkTime = TimeSpan.FromHours(jobRuns.Select(x => x.EndDate - x.StartDate).Sum(x => x.TotalHours)).ToStringUnlimitedHours(); int meters = (int)jobRuns.Select(x => x.EndPosition).Sum(); TotalMachineMeters = $"{meters.ToString("N0")} meters"; } } catch (Exception ex) { LogManager.Log(ex, "Error loading machine counters."); TotalMachineMeters = "error!"; TotalMachineWorkTime = "error!"; } } } }