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!";
}
}
}
}