using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.BL.Enumerations;
using Tango.Core.Commands;
using Tango.Integration.Operation;
using Tango.PPC.Common;
using Tango.PPC.Jobs;
using Tango.PPC.Jobs.NavigationObjects;
using Tango.PPC.Jobs.Views;
namespace Tango.PPC.UI.ViewModels
{
public class MachineStatusViewVM : PPCViewModel
{
#region Properties
private JobHandler _handler;
private Job _job;
///
/// Gets or sets the job.
///
public Job Job
{
get { return _job; }
set { _job = value;
if(_job == null)
IsDyeingProcess = false;
RaisePropertyChangedAuto(); }
}
private RunningJobStatus _runningJobStatus;
///
/// Gets or sets the running job status.
///
public RunningJobStatus RunningJobStatus
{
get { return _runningJobStatus; }
set {
_runningJobStatus = value;
IsDyeingProcess = (_runningJobStatus != null && _runningJobStatus.CurrentSegment != null);
if(_runningJobStatus != null && _runningJobStatus.CurrentSegment != null)
{
var segment = Job.Segments.FirstOrDefault(x=>x.SegmentIndex == _runningJobStatus.CurrentSegment.SegmentIndex);
if(segment != null)
CurrentBrushStop = segment.FirstBrushStop;
}
RaisePropertyChangedAuto();
}
}
private bool _isJobStatusViewEnable;
public bool IsJobStatusViewEnable
{
get { return _isJobStatusViewEnable; }
set { _isJobStatusViewEnable = value; RaisePropertyChangedAuto(); }
}
private bool _isEnabledStopButton;
///
/// Gets or sets a value indicating whether this instance is enabled stop button.
///
public bool IsEnabledStopButton
{
get { return _isEnabledStopButton; }
set { _isEnabledStopButton = value; RaisePropertyChangedAuto(); }
}
private bool _isSpoolView;
///
/// Gets or sets a value indicating whether this instance is spool view.
///
public bool IsSpoolView
{
get { return _isSpoolView; }
set { _isSpoolView = value; RaisePropertyChangedAuto(); }
}
private bool _isWeightView;
///
/// Gets or sets a value indicating whether this instance is length. Show indicator values in length or weight.
///
public bool IsWeghtView
{
get { return _isWeightView; }
set { _isWeightView = value; RaisePropertyChangedAuto(); }
}
private bool _isDyeingProcess;
public bool IsDyeingProcess
{
get { return _isDyeingProcess; }
set {
if(_isDyeingProcess != value)
{
_isDyeingProcess = value;
RaisePropertyChangedAuto();
}
}
}
private BrushStop _currentBrushStop;
public BrushStop CurrentBrushStop
{
get { return _currentBrushStop; }
set {
if(_currentBrushStop != value)
{
_currentBrushStop = value;
OnUpdateCurrentBrush();
RaisePropertyChangedAuto();
}
}
}
public double CyanOutput
{
get { return GetVolumeLiquidType(LiquidTypes.Cyan); }
}
public double MagentaOutput
{
get { return GetVolumeLiquidType(LiquidTypes.Magenta); }
}
public double YellowOutput
{
get { return GetVolumeLiquidType(LiquidTypes.Yellow); }
}
public double BlackOutput
{
get { return GetVolumeLiquidType(LiquidTypes.Black); }
}
public double LightCyanOutput
{
get { return GetVolumeLiquidType(LiquidTypes.LightCyan); }
}
public double LightMagentaOutput
{
get { return GetVolumeLiquidType(LiquidTypes.LightMagenta); }
}
public double LightYellowOutput
{
get { return GetVolumeLiquidType(LiquidTypes.LightYellow); }
}
//public double TransparentInkOutput
//{
// get { return GetVolumeLiquidType(LiquidTypes.TransparentInk); }
//}
//public double LubricantOutput
//{
// get { return GetVolumeLiquidType(LiquidTypes.Lubricant); }
//}
#endregion
#region Commands
public RelayCommand StopCommand { get; set; }
public RelayCommand AbortCommand { get; set; }
public RelayCommand GoToJobCommand { get; set; }
///
/// Gets or sets the job status view command.
///
public RelayCommand JobStatusViewCommand { get; set; }
///
/// Gets or sets the overview view command.
///
public RelayCommand OverviewViewCommand { get; set; }
public RelayCommand ClearAllNotificationsCommand { get; set; }
#endregion
public MachineStatusViewVM()
{
StopCommand = new RelayCommand(StopJob, ()=>CanStopped());
AbortCommand = new RelayCommand(AbortJob, () => CanStopped());
GoToJobCommand = new RelayCommand(GoToJob);
JobStatusViewCommand = new RelayCommand(JobStatusView);
OverviewViewCommand = new RelayCommand(OverviewView);
ClearAllNotificationsCommand = new RelayCommand(ClearAllNotifications);
IsJobStatusViewEnable = true;
IsEnabledStopButton = false;
IsSpoolView = false;
IsWeghtView = false;
}
#region printing
public override void OnApplicationStarted()
{
MachineProvider.MachineOperator.PrintingStarted += MachineOperator_PrintingStarted;
MachineProvider.MachineOperator.PrintingEnded += MachineOperator_PrintingEnded;
}
private void MachineOperator_PrintingStarted(object sender, PrintingEventArgs e)
{
_handler = e.JobHandler;
Job = e.Job;
e.JobHandler.StatusChanged += JobHandler_StatusChanged;
//e.JobHandler.SpoolChangeRequired += JobHandler_SpoolChangeRequired;
e.JobHandler.Stopped += JobHandler_Stopped;
e.JobHandler.CanCancelChanged += JobHandler_CanCancelChanged;
InvokeUI(() =>
{
IsEnabledStopButton = true;
StopCommand.RaiseCanExecuteChanged();
AbortCommand.RaiseCanExecuteChanged();
});
}
private void JobHandler_Stopped(object sender, EventArgs e)
{
if (_handler != null)
{
_handler.StatusChanged -= JobHandler_StatusChanged;
//_handler.SpoolChangeRequired -= JobHandler_SpoolChangeRequired;
_handler.Stopped -= JobHandler_Stopped;
_handler.StatusChanged -= JobHandler_StatusChanged;
_handler.CanCancelChanged -= JobHandler_CanCancelChanged;
}
}
private void MachineOperator_PrintingEnded(object sender, PrintingEventArgs e)
{
LogManager.Log("Printing ended");
InvokeUI(() =>
{
IsEnabledStopButton = false;
StopCommand.RaiseCanExecuteChanged();
AbortCommand.RaiseCanExecuteChanged();
});
}
private void JobHandler_StatusChanged(object sender, RunningJobStatus e)
{
InvokeUI(() =>
{
RunningJobStatus = e;
});
}
private void JobHandler_CanCancelChanged(object sender, EventArgs e)
{
InvokeUI( () =>
{
IsEnabledStopButton = _handler.CanCancel;
StopCommand.RaiseCanExecuteChanged();
AbortCommand.RaiseCanExecuteChanged();
});
}
#endregion
#region Methods
private void GoToJob()
{
NavigationManager.NavigateWithObject(new JobNavigationObject() { Job = _handler.Job });
NavigationManager.ClearHistoryExcept();
}
///
/// Toggles the application technician mode.
///
public void ToggleTechnicianMode()
{
if (!ApplicationManager.IsInTechnicianMode)
{
ApplicationManager.EnterTechnicianMode();
}
else
{
ApplicationManager.ExitTechnicianMode();
}
}
protected void JobStatusView()
{
IsJobStatusViewEnable = true;
}
protected void OverviewView()
{
IsJobStatusViewEnable = false;
}
private double GetVolumeLiquidType(LiquidTypes liquidType)
{
if(CurrentBrushStop != null && CurrentBrushStop.LiquidVolumes != null && CurrentBrushStop.LiquidVolumes.Count > 0)
{
var lt = CurrentBrushStop.LiquidVolumes.FirstOrDefault(x => x.LiquidType == liquidType);
if (lt != null)
{
return Math.Round(lt.Volume, 2);
}
}
return 0;
}
private bool CanStopped()
{
return IsEnabledStopButton;
}
private void StopJob()
{
_handler?.Cancel();
}
private void AbortJob()
{
_handler?.Cancel();
Job = null;
}
protected void ClearAllNotifications()
{
NotificationProvider.NotificationItems.Where(x=>x.CanClose).ToList().ForEach(y=> NotificationProvider.PopNotification(y));
}
protected void OnUpdateCurrentBrush()
{
RaisePropertyChanged(nameof(CyanOutput));
RaisePropertyChanged(nameof(LightCyanOutput));
RaisePropertyChanged(nameof(MagentaOutput));
RaisePropertyChanged(nameof(LightMagentaOutput));
RaisePropertyChanged(nameof(YellowOutput));
RaisePropertyChanged(nameof(LightYellowOutput));
RaisePropertyChanged(nameof(BlackOutput));
}
#endregion
}
}