aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs182
1 files changed, 121 insertions, 61 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs
index 04e2b8826..4b5d0897d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs
@@ -30,6 +30,7 @@ using Tango.MachineStudio.Common.Authentication;
using Tango.BL.DTO;
using Tango.Core.Cryptography;
using Tango.BL.Enumerations;
+using Tango.MachineStudio.MachineDesigner.Models;
namespace Tango.MachineStudio.MachineDesigner.ViewModels
{
@@ -52,13 +53,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
set { _isNewMachine = value; RaisePropertyChangedAuto(); }
}
- private ObservablesStaticCollections _machinesAdapter;
- public ObservablesStaticCollections MachinesAdapter
- {
- get { return _machinesAdapter; }
- set { _machinesAdapter = value; RaisePropertyChangedAuto(); }
- }
-
private ObservablesStaticCollections _activeMachineAdapter;
public ObservablesStaticCollections ActiveMachineAdapter
{
@@ -66,11 +60,21 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
set { _activeMachineAdapter = value; RaisePropertyChangedAuto(); }
}
- private Machine _selectedMachine;
+ private List<MachineModel> _machines;
+ /// <summary>
+ /// Gets or sets the available filtered machines.
+ /// </summary>
+ public List<MachineModel> Machines
+ {
+ get { return _machines; }
+ set { _machines = value; RaisePropertyChangedAuto(); }
+ }
+
+ private MachineModel _selectedMachine;
/// <summary>
/// Gets or sets the selected machine from the drop down.
/// </summary>
- public Machine SelectedMachine
+ public MachineModel SelectedMachine
{
get { return _selectedMachine; }
set
@@ -263,11 +267,12 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
/// </summary>
public MainViewVM(INotificationProvider notification, IAuthenticationProvider authentication, IActionLogManager actionLogManager)
{
- MachinesAdapter = new ObservablesStaticCollections(ObservablesContext.CreateDefault());
_notification = notification;
_authentication = authentication;
_actionLogManager = actionLogManager;
+ Machines = new List<MachineModel>();
+
_machines_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200));
_dispensers_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200));
@@ -292,17 +297,11 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
#endregion
- #region Application Ready
-
- public override async void OnApplicationReady()
+ public override void OnApplicationReady()
{
- MachinesAdapter.MachineVersions = (await MachinesAdapter.Context.MachineVersions.ToListAsync()).ToObservableCollection();
- MachinesAdapter.MachinePrototypes = (await MachinesAdapter.Context.MachinePrototypes.ToListAsync()).ToObservableCollection();
- MachinesAdapter.HardwareVersions = (await MachinesAdapter.Context.HardwareVersions.ToListAsync()).ToObservableCollection();
+
}
- #endregion
-
private void OnDispensersFilterChanged()
{
if (!String.IsNullOrWhiteSpace(DispensersFilter))
@@ -792,7 +791,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
if (SelectedMachine != null)
{
- await SelectedMachine.Reload(MachinesAdapter.Context);
+ await LoadMachines();
}
await ColorCalibrationViewVM.Invalidate();
@@ -810,19 +809,49 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
}
}
- private void AddNewMachine()
+ private async void AddNewMachine()
{
+ List<MachinePrototype> prototypes = new List<MachinePrototype>();
+ List<HardwareVersion> hardwareVersions = new List<HardwareVersion>();
+
+ try
+ {
+ IsFree = false;
+
+ using (_notification.PushTaskItem("Loading machine creation data..."))
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ prototypes = await db.MachinePrototypes.ToListAsync();
+ hardwareVersions = await db.HardwareVersions.ToListAsync();
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error loading machine creation data.");
+ _notification.ShowError($"Error loading machine creation data\n{ex.FlattenMessage()}");
+ return;
+ }
+ finally
+ {
+ IsFree = true;
+ }
+
MachineCreationDialogVM vm = new MachineCreationDialogVM();
vm.IsNewMachine = true;
- vm.Prototypes = MachinesAdapter.MachinePrototypes.ToList();
- vm.HardwareVersions = MachinesAdapter.HardwareVersions.OrderByDescending(x => x.Version).ToList();
+ vm.Prototypes = prototypes.ToList();
+ vm.HardwareVersions = hardwareVersions.OrderByDescending(x => x.Version).ToList();
vm.SelectedHardwareVersion = vm.HardwareVersions.FirstOrDefault();
_notification.ShowModalDialog<MachineCreationDialogVM, Views.MachineCreationDialog>(vm, (x) =>
{
- if (MachinesAdapter.Context.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower()))
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- _notification.ShowError("Machine serial number or name already exists.");
- return;
+ if (db.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower()))
+ {
+ _notification.ShowError("Machine serial number or name already exists.");
+ return;
+ }
}
LoadSelectedMachine(true, false, vm);
@@ -831,6 +860,8 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
private async void RemoveSelectedMachine()
{
+ if (SelectedMachine == null) return;
+
if (_notification.ShowQuestion("Are you sure you want to delete the selected machine?"))
{
using (_notification.PushTaskItem("Removing machine..."))
@@ -839,25 +870,28 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
{
IsFree = false;
- var machineToDelete = await new MachineBuilder(MachinesAdapter.Context).Set(SelectedMachine).WithConfiguration().BuildAsync();
-
- await machineToDelete.DeleteCascadeAsync(MachinesAdapter.Context);
- await machineToDelete.Configuration.DeleteCascadeAsync(MachinesAdapter.Context);
- foreach (var dispenser in machineToDelete.Configuration.NoneEmptyIdsPacks.Select(x => x.Dispenser))
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- if (dispenser != null)
+ var machineToDelete = await new MachineBuilder(db).Set(SelectedMachine.Guid).WithConfiguration().BuildAsync();
+
+ await machineToDelete.DeleteCascadeAsync(db);
+ await machineToDelete.Configuration.DeleteCascadeAsync(db);
+ foreach (var dispenser in machineToDelete.Configuration.NoneEmptyIdsPacks.Select(x => x.Dispenser))
{
- await dispenser.DeleteCascadeAsync(MachinesAdapter.Context);
+ if (dispenser != null)
+ {
+ await dispenser.DeleteCascadeAsync(db);
+ }
}
- }
- _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineDeleted, _authentication.CurrentUser, SelectedMachine.Name, SelectedMachine, "Machine deleted using Machine Studio.");
- MachinesAdapter.Context.Machines.Remove(SelectedMachine);
- MachinesAdapter.Machines.Remove(SelectedMachine);
+ await LoadMachines();
+
+ _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineDeleted, _authentication.CurrentUser, SelectedMachine.Name, machineToDelete, "Machine deleted using Machine Studio.");
+ }
}
catch (Exception ex)
{
- LogManager.Log(ex, $"Error removing machine {SelectedMachine.SerialNumber}.");
+ LogManager.Log(ex, $"Error removing machine selected machine.");
_notification.ShowError($"An error occurred while trying to delete the selected machine.\n{ex.Message}");
}
finally
@@ -895,7 +929,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
MachinePrototype prototype = MachinePrototype.CreateNew(ActiveMachine, protoName, protoName);
db.MachinePrototypes.Add(prototype);
await db.SaveChangesAsync();
- MachinesAdapter.MachinePrototypes = (await MachinesAdapter.Context.MachinePrototypes.ToListAsync()).ToObservableCollection();
}
}
catch (Exception ex)
@@ -915,13 +948,15 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
{
MachineCreationDialogVM vm = new MachineCreationDialogVM();
vm.IsNewMachine = false;
- vm.Prototypes = MachinesAdapter.MachinePrototypes.ToList();
_notification.ShowModalDialog<MachineCreationDialogVM, Views.MachineCreationDialog>(vm, (x) =>
{
- if (MachinesAdapter.Context.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower()))
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- _notification.ShowError("Machine serial number or name already exists.");
- return;
+ if (db.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower()))
+ {
+ _notification.ShowError("Machine serial number or name already exists.");
+ return;
+ }
}
LoadSelectedMachine(false, true, vm);
@@ -945,29 +980,54 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
}
}
- private void OnFilterChanged()
+ private async void OnFilterChanged()
+ {
+ await LoadMachines();
+ }
+
+ private async Task LoadMachines()
{
- if (Filter != null)
+ String filter = Filter.ToStringOrEmpty();
+
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- _machines_action_timer.ResetReplace(() =>
- {
- Task.Factory.StartNew(() =>
+ var machines = await db.Machines.Where(x => filter == String.Empty || x.SerialNumber.ToLower().StartsWith(filter.ToLower()) || x.Name.ToLower().Contains(filter.ToLower()))
+ .Include(x => x.Configuration)
+ .Include(x => x.MachineVersion.Name)
+ .Include(x => x.Organization.Name)
+ .Include(x => x.Configuration.HardwareVersion.Name)
+ .Include(x => x.Configuration.HardwareVersion.Version).Select(x => new
{
- try
- {
- IsFree = false;
- MachinesAdapter.Machines = MachinesAdapter.Context.Machines.Where(x => x.SerialNumber.StartsWith(Filter)).Include(x => x.Organization).Include(x => x.MachineVersion).Include(x => x.Configuration).Include(x => x.Configuration.HardwareVersion).OrderBy(x => x.SerialNumber).ToSynchronizedObservableCollection();
- }
- catch
- {
+ x.Guid,
+ x.SerialNumber,
+ x.Name,
+ Organization = x.Organization.Name,
+ MachineVersion = x.MachineVersion.Name,
+ HardwareVersionName = x.Configuration.HardwareVersion.Name,
+ HardwareVersionVersion = x.Configuration.HardwareVersion.Version,
+ x.IsDeviceRegistered,
+ x.IsDemo,
+ x.LastUpdated
+ }).OrderBy(x => x.SerialNumber).ToListAsync();
- }
- finally
- {
- IsFree = true;
- }
- });
- });
+ List<MachineModel> models = new List<MachineModel>();
+
+ foreach (var machine in machines)
+ {
+ MachineModel model = new MachineModel();
+ model.Guid = machine.Guid;
+ model.SerialNumber = machine.SerialNumber;
+ model.Name = machine.Name;
+ model.Organization = machine.Organization;
+ model.HardwareVersion = machine.HardwareVersionName + " v" + machine.HardwareVersionVersion;
+ model.MachineVersion = machine.MachineVersion;
+ model.IsDeviceRegistered = machine.IsDeviceRegistered;
+ model.IsDemo = machine.IsDemo;
+ model.LastUpdated = machine.LastUpdated;
+ models.Add(model);
+ }
+
+ Machines = models;
}
}