aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs')
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs343
1 files changed, 280 insertions, 63 deletions
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
index f3e7711f9..023d91531 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
@@ -25,6 +25,8 @@ using Tango.SharedUI.Helpers;
using Tango.PPC.Common.Navigation;
using Tango.PPC.Jobs.NavigationObjects;
using Tango.PPC.Jobs.ViewContracts;
+using System.Collections.ObjectModel;
+using Tango.PPC.Jobs.Models;
namespace Tango.PPC.Jobs.ViewModels
{
@@ -39,19 +41,10 @@ namespace Tango.PPC.Jobs.ViewModels
private Thread _check_gamut_thread;
private Job _job_to_load;
private JobNavigationIntent _job_to_load_intent;
+ private static Dictionary<String, List<FineTuneItem>> _jobs_fine_tune_items;
#region Properties
- private BL.Enumerations.JobStatuses _jobStatus;
- /// <summary>
- /// Gets or sets the temporary job status.
- /// </summary>
- public BL.Enumerations.JobStatuses JobStatus
- {
- get { return _jobStatus; }
- set { _jobStatus = value; RaisePropertyChangedAuto(); }
- }
-
private Job _job;
/// <summary>
/// Gets or sets the selected job.
@@ -131,6 +124,46 @@ namespace Tango.PPC.Jobs.ViewModels
/// </summary>
public AutoCompleteProvider<Customer> CustomersAutoCompleteProvider { get; set; }
+ private ObservableCollection<FineTuneItem> _fineTuneItems;
+ /// <summary>
+ /// Gets or sets the fine tune items.
+ /// </summary>
+ public ObservableCollection<FineTuneItem> FineTuneItems
+ {
+ get { return _fineTuneItems; }
+ set { _fineTuneItems = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ObservableCollection<FineTuneItem> _approvalFineTuneItems;
+ /// <summary>
+ /// Gets or sets the fine tune items.
+ /// </summary>
+ public ObservableCollection<FineTuneItem> ApprovalFineTuneItems
+ {
+ get { return _approvalFineTuneItems; }
+ set { _approvalFineTuneItems = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isFineTuneExpanded;
+ /// <summary>
+ /// Gets or sets a value indicating whether the fine tuning region is expanded.
+ /// </summary>
+ public bool IsFineTuneExpanded
+ {
+ get { return _isFineTuneExpanded; }
+ set
+ {
+ _isFineTuneExpanded = value;
+ RaisePropertyChangedAuto();
+
+ if (_isFineTuneExpanded)
+ {
+ SyncFineTuneItemsToBrushStops();
+ }
+ }
+ }
+
+
#endregion
#region Commands
@@ -214,17 +247,54 @@ namespace Tango.PPC.Jobs.ViewModels
/// Gets or sets another sample command.
/// </summary>
public RelayCommand AnotherSampleCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the invoke fine tuning palette command.
+ /// </summary>
+ public RelayCommand<FineTuneItem> InvokeFineTuningPaletteCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the reset fine tuning command.
+ /// </summary>
+ public RelayCommand ResetFineTuningCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the start fine tuning command.
+ /// </summary>
+ public RelayCommand StartFineTuningCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the approve fine tuning command.
+ /// </summary>
+ public RelayCommand ApproveFineTuningCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the repeat fine tuning command.
+ /// </summary>
+ public RelayCommand RepeatFineTuningCommand { get; set; }
+
#endregion
#region Constructors
/// <summary>
+ /// Initializes the <see cref="JobViewVM"/> class.
+ /// </summary>
+ static JobViewVM()
+ {
+ _jobs_fine_tune_items = new Dictionary<string, List<FineTuneItem>>();
+ }
+
+ /// <summary>
/// Initializes a new instance of the <see cref="JobViewVM"/> class.
/// </summary>
public JobViewVM()
{
RegisterForMessage<JobSelectedMessage>(HandleJobSelectedMessage);
+ FineTuneItems = new ObservableCollection<FineTuneItem>();
+ ApprovalFineTuneItems = new ObservableCollection<FineTuneItem>();
+
CustomersAutoCompleteProvider = new AutoCompleteProvider<Customer>((customer, filter) =>
{
return customer.Name.ToLower().StartsWith(filter != null ? filter.ToLower() : String.Empty);
@@ -268,6 +338,11 @@ namespace Tango.PPC.Jobs.ViewModels
ApproveSampleCommand = new RelayCommand(ApproveSampleDye);
RepeatSampleDyeCommand = new RelayCommand(RepeatSampleDye);
AnotherSampleCommand = new RelayCommand(DyeAnotherSample);
+ InvokeFineTuningPaletteCommand = new RelayCommand<FineTuneItem>(InvokeFineTuningPalette);
+ ResetFineTuningCommand = new RelayCommand(ResetFineTuning);
+ StartFineTuningCommand = new RelayCommand(StartFineTuning, () => FineTuneItems.Any(x => x.IsSelected));
+ RepeatFineTuningCommand = new RelayCommand(RepeatFineTuning);
+ ApproveFineTuningCommand = new RelayCommand(ApproveFineTuning);
}
#endregion
@@ -275,15 +350,62 @@ namespace Tango.PPC.Jobs.ViewModels
#region Job Management
/// <summary>
- /// Saves the job.
+ /// Loads the job.
/// </summary>
- private async void SaveJob(bool displayNotification = true)
+ private async void LoadJob()
{
- if (JobStatus != BL.Enumerations.JobStatuses.Draft)
+ if (!(_job_to_load == null || (_job_to_load != null && Job != null && _job_to_load.Guid == Job.Guid)))
+ {
+ NotificationProvider.SetGlobalBusyMessage("Loading job details...");
+
+ _can_navigate_back = false;
+ base.OnNavigatedTo();
+
+ _db = ObservablesContext.CreateDefault();
+ var a = _db.Jobs.ToList();
+ Job = await _db.Jobs.SingleOrDefaultAsync(x => x.Guid == _job_to_load.Guid);
+ Job.ValidateOnPropertyChanged = true;
+ Rmls = await _db.Rmls.ToListAsync();
+ ColorSpaces = await _db.ColorSpaces.ToListAsync();
+ SpoolTypes = await _db.SpoolTypes.ToListAsync();
+ Customers = await _db.Customers.Where(x => x.OrganizationGuid == MachineProvider.Machine.OrganizationGuid).ToListAsync();
+
+ if (!_check_gamut_thread.IsAlive)
+ {
+ _check_gamut_thread.Start();
+ }
+
+ SegmentsCollectionView = CollectionViewSource.GetDefaultView(Job.Segments);
+ SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending));
+
+ InvokeUIOnIdle(() =>
+ {
+ NotificationProvider.ReleaseGlobalBusyMessage();
+ });
+
+ _job_to_load = null;
+ }
+
+ if (!_jobs_fine_tune_items.ContainsKey(Job.Guid) && Job.JobFineTuningStatus == BL.Enumerations.FineTuningStatuses.PendingApproval)
{
- Job.JobStatus = JobStatus;
+ Job.JobFineTuningStatus = BL.Enumerations.FineTuningStatuses.Unspecified;
}
+ if (Job.JobEditingState == BL.Enumerations.EditingStates.SampleDye && Job.JobSampleDyeStatus == BL.Enumerations.SampleDyeStatuses.PendingApproval)
+ {
+ View.DisplaySampleDye();
+ }
+ else if (Job.JobEditingState == BL.Enumerations.EditingStates.FineTuning && Job.JobFineTuningStatus == BL.Enumerations.FineTuningStatuses.PendingApproval)
+ {
+ View.DisplayFineTuning();
+ }
+ }
+
+ /// <summary>
+ /// Saves the job.
+ /// </summary>
+ private async void SaveJob(bool displayNotification = true)
+ {
if (Job.Validate(_db))
{
await _db.SaveChangesAsync();
@@ -310,12 +432,18 @@ namespace Tango.PPC.Jobs.ViewModels
}
}
+ /// <summary>
+ /// Starts the job.
+ /// </summary>
private void StartJob()
{
MachineProvider.MachineOperator.Print(Job);
NavigationManager.NavigateTo<JobsModule>(nameof(JobProgressView));
}
+ /// <summary>
+ /// Determines whether this instance [can start job].
+ /// </summary>
private bool CanStartJob()
{
return
@@ -488,7 +616,7 @@ namespace Tango.PPC.Jobs.ViewModels
{
Job sampleDyeJob = Job.Clone();
sampleDyeJob.Guid = Job.Guid;
- sampleDyeJob.IsSample = true;
+ sampleDyeJob.Designation = BL.Enumerations.JobDesignations.SampleDye;
sampleDyeJob.Name = Job.Name + " (sample)";
if (Job.JobType == BL.Enumerations.JobTypes.Embroidery)
@@ -508,14 +636,17 @@ namespace Tango.PPC.Jobs.ViewModels
SaveJob(false);
var thisJob = Job;
+ var thisContext = _db;
- MachineProvider.MachineOperator.Print(sampleDyeJob).Completed += (x, e) =>
+ MachineProvider.MachineOperator.Print(sampleDyeJob).Completed += async (x, e) =>
{
thisJob.JobStatus = BL.Enumerations.JobStatuses.PendingApproval;
if (Job != null && Job.Guid == thisJob.Guid)
{
- JobStatus = BL.Enumerations.JobStatuses.PendingApproval;
+ thisJob.JobEditingState = BL.Enumerations.EditingStates.SampleDye;
+ thisJob.JobSampleDyeStatus = BL.Enumerations.SampleDyeStatuses.PendingApproval;
+ await thisContext.SaveChangesAsync();
}
};
@@ -527,7 +658,8 @@ namespace Tango.PPC.Jobs.ViewModels
/// </summary>
private void RepeatSampleDye()
{
- JobStatus = BL.Enumerations.JobStatuses.Draft;
+ Job.JobEditingState = BL.Enumerations.EditingStates.Default;
+ Job.JobSampleDyeStatus = BL.Enumerations.SampleDyeStatuses.Unspecified;
}
/// <summary>
@@ -535,7 +667,10 @@ namespace Tango.PPC.Jobs.ViewModels
/// </summary>
private void ApproveSampleDye()
{
- JobStatus = BL.Enumerations.JobStatuses.Approved;
+ Job.JobEditingState = BL.Enumerations.EditingStates.Default;
+ Job.JobSampleDyeStatus = BL.Enumerations.SampleDyeStatuses.Approved;
+
+ Job.SampleDyeApproveDate = DateTime.UtcNow;
SaveJob(false);
}
@@ -544,7 +679,130 @@ namespace Tango.PPC.Jobs.ViewModels
/// </summary>
private void DyeAnotherSample()
{
- JobStatus = BL.Enumerations.JobStatuses.Draft;
+ Job.JobEditingState = BL.Enumerations.EditingStates.Default;
+ Job.JobSampleDyeStatus = BL.Enumerations.SampleDyeStatuses.Unspecified;
+ }
+
+ #endregion
+
+ #region Fine Tuning
+
+ /// <summary>
+ /// Synchronizes the fine tune items to brush stops.
+ /// </summary>
+ private void SyncFineTuneItemsToBrushStops()
+ {
+ if (Job != null)
+ {
+ if (_jobs_fine_tune_items.ContainsKey(Job.Guid))
+ {
+ FineTuneItems = _jobs_fine_tune_items[Job.Guid].ToObservableCollection();
+ }
+ else
+ {
+ FineTuneItems.Clear();
+
+ foreach (var stop in Job.Segments.SelectMany(x => x.BrushStops).DistinctBy(x => x.Color))
+ {
+ FineTuneItem item = new FineTuneItem(TangoColorConverter.GetSuggestions(stop));
+ item.BrushStops = Job.Segments.SelectMany(x => x.BrushStops).Where(x => x.Color == stop.Color).ToList();
+ item.SelectedSuggestion = item.Suggestions[item.Suggestions.Count / 2];
+ item.SelectedChanged += () => StartFineTuningCommand.RaiseCanExecuteChanged();
+ FineTuneItems.Add(item);
+ }
+
+ _jobs_fine_tune_items[Job.Guid] = FineTuneItems.ToList();
+ }
+
+ ApprovalFineTuneItems = FineTuneItems.Where(x => x.IsSelected).ToObservableCollection();
+
+ StartFineTuningCommand.RaiseCanExecuteChanged();
+ }
+ }
+
+ private async void InvokeFineTuningPalette(FineTuneItem fineTuneItem)
+ {
+ FineTuningPaletteViewVM vm = new FineTuningPaletteViewVM(fineTuneItem, Job);
+ await NotificationProvider.ShowDialog(vm);
+
+ if (vm.DialogResult)
+ {
+ fineTuneItem.Suggestions = vm.Suggestions;
+ fineTuneItem.SelectedSuggestion = vm.SelectedSuggestion;
+ }
+ }
+
+ private void ResetFineTuning()
+ {
+ SyncFineTuneItemsToBrushStops();
+ }
+
+ private void StartFineTuning()
+ {
+ try
+ {
+ Job fineTuneJob = Job.Clone();
+ fineTuneJob.NumberOfUnits = 1;
+ fineTuneJob.Designation = BL.Enumerations.JobDesignations.FineTuning;
+ fineTuneJob.Guid = Job.Guid;
+ fineTuneJob.Name = Job.Name + " (fine tuning)";
+ fineTuneJob.Segments.Clear();
+
+ foreach (var suggestion in FineTuneItems.Where(x => x.IsSelected).SelectMany(x => x.Suggestions))
+ {
+ var segment = fineTuneJob.AddSolidSegment(suggestion.Color);
+ }
+
+ _jobs_fine_tune_items[Job.Guid] = FineTuneItems.ToList();
+
+ var thisJob = Job;
+ var thisContext = _db;
+
+ MachineProvider.MachineOperator.Print(fineTuneJob).Completed += async (x, e) =>
+ {
+ thisJob.JobEditingState = BL.Enumerations.EditingStates.FineTuning;
+ thisJob.JobFineTuningStatus = BL.Enumerations.FineTuningStatuses.PendingApproval;
+ await thisContext.SaveChangesAsync();
+ };
+
+ NavigationManager.NavigateTo<JobsModule>(nameof(JobProgressView));
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex);
+ NotificationProvider.ShowError(ex.Message);
+ }
+ }
+
+ private void ApproveFineTuning()
+ {
+ Job.JobEditingState = BL.Enumerations.EditingStates.Default;
+ Job.JobFineTuningStatus = BL.Enumerations.FineTuningStatuses.Approved;
+
+ foreach (var item in ApprovalFineTuneItems)
+ {
+ foreach (var stop in item.BrushStops)
+ {
+ stop.Color = item.SelectedSuggestion.Color;
+ }
+ }
+
+
+ Job.FineTuningApproveDate = DateTime.UtcNow;
+ SaveJob(false);
+
+ if (_jobs_fine_tune_items.ContainsKey(Job.Guid))
+ {
+ _jobs_fine_tune_items.Remove(Job.Guid);
+ }
+
+ SyncFineTuneItemsToBrushStops();
+ }
+
+ private void RepeatFineTuning()
+ {
+ Job.JobEditingState = BL.Enumerations.EditingStates.Default;
+ Job.JobFineTuningStatus = BL.Enumerations.FineTuningStatuses.Unspecified;
}
#endregion
@@ -593,50 +851,9 @@ namespace Tango.PPC.Jobs.ViewModels
/// <summary>
/// Called when the navigation system has navigated to this VM view.
/// </summary>
- public async override void OnNavigatedTo()
+ public override void OnNavigatedTo()
{
- if (!(_job_to_load == null || (_job_to_load != null && Job != null && _job_to_load.Guid == Job.Guid)))
- {
- NotificationProvider.SetGlobalBusyMessage("Loading job details...");
-
- _can_navigate_back = false;
- base.OnNavigatedTo();
-
- if (_db != null)
- {
- _db.Dispose();
- }
-
- _db = ObservablesContext.CreateDefault();
- var a = _db.Jobs.ToList();
- Job = await _db.Jobs.SingleOrDefaultAsync(x => x.Guid == _job_to_load.Guid);
- Job.ValidateOnPropertyChanged = true;
- Rmls = await _db.Rmls.ToListAsync();
- ColorSpaces = await _db.ColorSpaces.ToListAsync();
- SpoolTypes = await _db.SpoolTypes.ToListAsync();
- Customers = await _db.Customers.Where(x => x.OrganizationGuid == MachineProvider.Machine.OrganizationGuid).ToListAsync();
-
- if (!_check_gamut_thread.IsAlive)
- {
- _check_gamut_thread.Start();
- }
-
- SegmentsCollectionView = CollectionViewSource.GetDefaultView(Job.Segments);
- SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending));
-
- InvokeUIOnIdle(() =>
- {
- NotificationProvider.ReleaseGlobalBusyMessage();
- });
-
- _job_to_load = null;
- }
-
- if (_job_to_load_intent == JobNavigationIntent.SampleDye)
- {
- JobStatus = Job.JobStatus;
- View.DisplaySampleDye();
- }
+ LoadJob();
}
/// <summary>