using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core.Commands; using Tango.Core.DI; using Tango.PPC.Common; using Tango.PPC.Common.Connection; using Tango.PPC.Common.Lubrication; using Tango.Settings; using Tango.SharedUI; namespace Tango.PPC.Jobs.Dialogs { /// /// Represents the a job type picker view model /// /// public class JobCreationViewVM : DialogViewVM { public class RMLModel { public String Name { get; set; } public String Guid { get; set; } public String FinalName { get; set; } } /// /// Gets or sets the machine provider. /// [TangoInject] public IMachineProvider MachineProvider { get; set; } private String _jobName; public String JobName { get { return _jobName; } set { _jobName = value; RaisePropertyChangedAuto(); OKCommand.RaiseCanExecuteChanged(); } } /// /// Gets or sets the available RMLS. /// public List Rmls { get; set; } public ObservableCollection RMLDisplayList { get; set; } private RMLModel _selectedRML; public RMLModel SelectedRML { get { return _selectedRML; } set { if(_selectedRML != value) { _selectedRML = value; OnRmlSelectionChanged(); RaisePropertyChangedAuto(); OKCommand.RaiseCanExecuteChanged(); } } } private List _spoolTypes; /// /// Gets or sets the available spool types. /// public List SpoolTypes { get { return _spoolTypes; } set { _spoolTypes = value; RaisePropertyChangedAuto(); OKCommand.RaiseCanExecuteChanged(); } } private SpoolType _selectedSpoolType; /// /// Gets or sets the type of the selected spool. /// public SpoolType SelectedSpoolType { get { return _selectedSpoolType; } set { if(_selectedSpoolType != value) { _selectedSpoolType = value; OnSelectedSpoolTypeChanged(); RaisePropertyChangedAuto(); } } } public bool UseFlatSpool { get; set; } private RmlLubricationLevel _lubricationLevel; public RmlLubricationLevel LubricationLevel { get { return _lubricationLevel; } set { _lubricationLevel = value; RaisePropertyChangedAuto(); } } private int _btsrSpoolTension; public int BtsrSpoolTension { get { return _btsrSpoolTension; } set { _btsrSpoolTension = value; RaisePropertyChangedAuto(); } } private PPCSettings _settings; /// /// Gets the main PPC settings. /// public PPCSettings Settings { get { if (_settings == null) { _settings = SettingsManager.Default.GetOrCreate(); } return _settings; } private set { _settings = value; } } private double _whiteGap; public double WhiteGap { get { return _whiteGap; } set { _whiteGap = value; RaisePropertyChangedAuto(); } } private bool _showDuplicate; public bool ShowDuplicate { get { return _showDuplicate; } set { _showDuplicate = value; RaisePropertyChangedAuto(); } } public bool IsDuplicate { get; set; } public RelayCommand DuplicateCommand { get; set; } /// /// Initializes a new instance of the class. /// /// The supported job types. /// The supported color spaces public JobCreationViewVM(List spoolTypes, List rmls, string selectedRmlGuid, double whitegap, bool showDuplicate) : base() { JobName = "Unnamed"; SpoolTypes = spoolTypes; Rmls = rmls.OrderBy(x => x.Name).ToList(); DuplicateCommand = new RelayCommand(Duplicate); IsDuplicate = false; ShowDuplicate = showDuplicate; WhiteGap = whitegap; RMLDisplayList = rmls.Select( p => new RMLModel{ Guid = p.Guid, Name = p.Name, FinalName = p.FinalName }).OrderBy(x => x.FinalName).ToObservableCollection(); SelectedRML = String.IsNullOrEmpty(selectedRmlGuid) ? RMLDisplayList.FirstOrDefault() : RMLDisplayList.FirstOrDefault( x=> x.Guid == selectedRmlGuid); } #region Commands private void Duplicate(object obj) { IsDuplicate = true; Accept(); } protected override bool CanOK() { //var ret = (false == String.IsNullOrEmpty(JobName) && SelectedRML != null && SelectedSpoolType != null); return (false == String.IsNullOrEmpty(JobName) && SelectedRML!=null );//&& SelectedSpoolType!=null); } #endregion #region update on change value private void OnRmlSelectionChanged() { GetLubricationLevel(); SetSpoolTension(); } private void OnSelectedSpoolTypeChanged() { SetSpoolTension(); } #endregion #region Lubrication Level private void GetLubricationLevel() { if (SelectedRML != null) { LubricationLevel = Settings.LubricationLevels.FirstOrDefault(x => x.RmlGuid == SelectedRML.Guid); } else { LubricationLevel = null; } } #endregion #region Spool Tension private async void SetSpoolTension() { if (SelectedRML != null && SelectedSpoolType != null) { using (ObservablesContext db = ObservablesContext.CreateDefault()) { Rml selectedRML = Rmls.FirstOrDefault( x=> x.Guid == SelectedRML.Guid); if(selectedRML != null) { BtsrSpoolTension = await selectedRML.GetRequiredBtsrSpoolTension(db, SelectedSpoolType); } } } } #endregion } }