From 78895e61c773c785dd8d8e3ed4f17236cdcefcd0 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Sun, 30 Dec 2018 16:34:04 +0200 Subject: Working on dispensers module ! --- .../ViewModels/MainViewVM.cs | 111 ++++++++++++++++++--- .../Views/DispenserView.xaml | 20 ++++ .../Views/DispensersView.xaml | 2 +- .../MachineStudio.Dispensers/Views/MainView.xaml | 2 +- 4 files changed, 121 insertions(+), 14 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Modules') 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 _dispenserTypes; + public ObservableCollection 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(); + } } - else + } + + + private void AddNewDispenser() + { + LoadSelectedDispenser(true); + } + + private async void RemoveSelectedDispenser() + { + if (_notification.ShowQuestion("Are you sure you want to delete the selected dispenser?")) { - ActiveDispenser = null; + 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; + } + } + } + + private async void SaveActiveDispenser() + { + using (_notification.PushTaskItem("Saving dispenser data...")) + { + 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(); + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml index 796c0f8a4..f571b8d61 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml @@ -5,6 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:observables="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:vm="clr-namespace:Tango.MachineStudio.Dispensers.ViewModels" @@ -39,7 +40,26 @@ + + + + + + + Serial Number: + + + Dispenser Type: + + + Nanoliter / Pulse: + + + Installed On Machine: + + + diff --git a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispensersView.xaml b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispensersView.xaml index 3ae7082f0..91ee5a189 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispensersView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispensersView.xaml @@ -66,7 +66,7 @@ - + diff --git a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/MainView.xaml index 4062f8b74..526e8e156 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/MainView.xaml @@ -13,7 +13,7 @@ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" mc:Ignorable="d" d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - + -- cgit v1.3.1