using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Xml.Serialization; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core.Commands; using Tango.Integration.Operation; using Tango.SharedUI.Helpers; namespace Tango.MachineStudio.Technician.TechItems { [TechItem(21,false)] public class JobRunnerItem : TechItem { public event Action StartJob; public event Action StopJob; private Job _job; /// /// Gets or sets the job. /// [XmlIgnore] public Job Job { get { return _job; } set { _job = value; RaisePropertyChangedAuto(); } } private Segment _segment; /// /// Gets or sets the segment. /// [XmlIgnore] public Segment Segment { get { return _segment; } set { _segment = value; RaisePropertyChangedAuto(); } } private BrushStop _brushStop; /// /// Gets or sets the brush stop. /// [XmlIgnore] public BrushStop BrushStop { get { return _brushStop; } set { _brushStop = value; RaisePropertyChangedAuto(); } } private Machine _machine; /// /// Gets or sets the machine. /// [XmlIgnore] public Machine Machine { get { return _machine; } set { _machine = value; RaisePropertyChangedAuto(); Init(); StartStopJobCommand.RaiseCanExecuteChanged(); } } private ProcessParametersTable _processParameters; /// /// Gets or sets the process parameters. /// [XmlIgnore] public ProcessParametersTable ProcessParameters { get { return _processParameters; } set { _processParameters = value; RaisePropertyChangedAuto(); Init(); StartStopJobCommand.RaiseCanExecuteChanged(); } } private Rml _rml; /// /// Gets or sets the RML. /// [XmlIgnore] public Rml Rml { get { return _rml; } set { _rml = value; RaisePropertyChangedAuto(); Init(); StartStopJobCommand.RaiseCanExecuteChanged(); } } private RunningJobStatus _runningJobStatus; /// /// Gets or sets the running job status. /// [XmlIgnore] public RunningJobStatus RunningJobStatus { get { return _runningJobStatus; } set { _runningJobStatus = value; RaisePropertyChangedAuto(); } } private bool _isJobStarted; [XmlIgnore] public bool IsJobStarted { get { return _isJobStarted; } set { _isJobStarted = value; RaisePropertyChangedAuto(); } } /// /// Gets or sets the start stop job command. /// [XmlIgnore] public RelayCommand StartStopJobCommand { get; set; } [XmlIgnore] public JobHandler JobHandler { get; set; } /// /// Initializes a new instance of the class. /// public JobRunnerItem() : base() { StartStopJobCommand = new RelayCommand(StartStopJob, (x) => Job != null && Segment != null && BrushStop != null && Machine != null && Rml != null && ProcessParameters != null); Job = new Job(); Job.Name = "Job Runner"; Job.WindingMethod = Adapter.WindingMethods.FirstOrDefault(); Job.SpoolType = Adapter.SpoolTypes.FirstOrDefault(); Job.JobType = JobTypes.Sewing; Segment = Job.AddSolidSegment(); BrushStop = Segment.AddBrushStop(); BrushStop.ColorSpace = Adapter.ColorSpaces.SingleOrDefault(x => x.Code == ColorSpaces.Volume.ToInt32()); Name = "Job Runner"; Description = "Job Runner"; Image = ResourceHelper.GetImageFromResources("Images/rgb-big.png"); } private void StartStopJob() { if (!IsJobStarted) { IsJobStarted = true; StartJob?.Invoke(); } else { StopJob?.Invoke(); } } /// /// Initializes the specified configuration. /// /// The configuration. /// The RML. /// The process parameters. public void Init() { if (Machine != null && Rml != null && ProcessParameters != null && BrushStop != null) { Job.Machine = Machine; Job.Rml = Rml; BrushStop.SetLiquidVolumes(Machine.Configuration, Rml, ProcessParameters); } } /// /// Initializes a new instance of the class. /// /// The job. public JobRunnerItem(Job job) : this() { } /// /// Clones this instance. /// /// public override TechItem Clone() { JobRunnerItem cloned = base.Clone() as JobRunnerItem; cloned.Job = Job.Clone(); cloned.Segment = cloned.Job.Segments.First(); cloned.BrushStop = cloned.Job.Segments.First().BrushStops.First(); return cloned; } } }