diff options
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.cs | 111 |
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(); + } } } |
