aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs111
1 files changed, 99 insertions, 12 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs
index db9dff355..ca384f6bf 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs
@@ -41,6 +41,13 @@ namespace Tango.MachineStudio.Dispensers.ViewModels
set { _activeDispenser = value; RaisePropertyChangedAuto(); }
}
+ private ObservableCollection<DispenserType> _dispenserTypes;
+ public ObservableCollection<DispenserType> DispenserTypes
+ {
+ get { return _dispenserTypes; }
+ set { _dispenserTypes = value; RaisePropertyChangedAuto(); }
+ }
+
private String _filter;
public String Filter
{
@@ -62,8 +69,11 @@ namespace Tango.MachineStudio.Dispensers.ViewModels
{
_notification = notificationProvider;
- ManageDispenserCommand = new RelayCommand(ManageSelectedDispenser,() => SelectedDispenser != null);
+ ManageDispenserCommand = new RelayCommand(() => LoadSelectedDispenser(), () => SelectedDispenser != null);
BackToDispensersCommand = new RelayCommand(() => { View.NavigateTo(DispensersNavigationView.DispensersView); });
+ SaveCommand = new RelayCommand(SaveActiveDispenser);
+ AddDispenserCommand = new RelayCommand(AddNewDispenser);
+ RemoveDispenserCommand = new RelayCommand(RemoveSelectedDispenser, () => SelectedDispenser != null);
}
private async void OnFilterChanged()
@@ -71,30 +81,107 @@ namespace Tango.MachineStudio.Dispensers.ViewModels
if (Filter != null)
{
IsFree = false;
- Dispensers = (await _dbContext.Dispensers.Where(x => x.SerialNumber.StartsWith(Filter)).ToListAsync()).ToObservableCollection();
+ Dispensers = (await _dbContext.Dispensers.Where(x => x.SerialNumber.ToLower().StartsWith(Filter.ToLower())).Include(x => x.DispenserType).Include(x => x.IdsPacks).ToListAsync()).ToObservableCollection();
IsFree = true;
}
}
- private async void ManageSelectedDispenser()
+ private async void LoadSelectedDispenser(bool isNew = false)
{
- if (SelectedDispenser != null)
+ if (_activeContext != null)
{
- if (_activeContext != null)
- {
- _activeContext.Dispose();
- }
+ _activeContext.Dispose();
+ }
- using (_notification.PushTaskItem("Loading dispenser data..."))
+ using (_notification.PushTaskItem("Loading dispenser data..."))
+ {
+ try
{
+ IsFree = false;
_activeContext = ObservablesContext.CreateDefault();
- ActiveDispenser = await _activeContext.Dispensers.SingleOrDefaultAsync(x => x.Guid == SelectedDispenser.Guid);
+ DispenserTypes = (await _activeContext.DispenserTypes.ToListAsync()).ToObservableCollection();
+
+ if (!isNew)
+ {
+ ActiveDispenser = await _activeContext.Dispensers.Include(x => x.DispenserType).Include(x => x.IdsPacks).SingleOrDefaultAsync(x => x.Guid == SelectedDispenser.Guid);
+ ActiveDispenser.InitMachine(_activeContext);
+ }
+ else
+ {
+ ActiveDispenser = new Dispenser();
+ _activeContext.Dispensers.Add(ActiveDispenser);
+ }
View.NavigateTo(DispensersNavigationView.DispenserView);
}
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error loading dispenser {SelectedDispenser.SerialNumber}.");
+ _notification.ShowError($"An error occurred while trying to load the selected dispenser data.\n{ex.Message}");
+ }
+ finally
+ {
+ IsFree = true;
+ InvalidateRelayCommands();
+ }
+ }
+ }
+
+
+ private void AddNewDispenser()
+ {
+ LoadSelectedDispenser(true);
+ }
+
+ private async void RemoveSelectedDispenser()
+ {
+ if (_notification.ShowQuestion("Are you sure you want to delete the selected dispenser?"))
+ {
+ try
+ {
+ IsFree = false;
+
+ if (SelectedDispenser.IsInstalled)
+ {
+ _notification.ShowError("Cannot delete an installed dispenser. Please detach it first from it's machine and try again.");
+ return;
+ }
+
+ _dbContext.Dispensers.Remove(SelectedDispenser);
+ await _dbContext.SaveChangesAsync();
+ Dispensers.Remove(SelectedDispenser);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error removing dispenser {SelectedDispenser.SerialNumber}.");
+ _notification.ShowError($"An error occurred while trying to remove the selected dispenser.\n{ex.FlattenMessage()}");
+ }
+ finally
+ {
+ IsFree = true;
+ }
}
- else
+ }
+
+ private async void SaveActiveDispenser()
+ {
+ using (_notification.PushTaskItem("Saving dispenser data..."))
{
- ActiveDispenser = null;
+ try
+ {
+ IsFree = false;
+ await _activeContext.SaveChangesAsync();
+ await SelectedDispenser.Reload(_dbContext);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error saving dispenser {ActiveDispenser.SerialNumber}.");
+ _notification.ShowError($"An error occurred while trying to save the dispenser data.\n{ex.Message}");
+ }
+ finally
+ {
+ IsFree = true;
+ InvalidateRelayCommands();
+ }
}
}