diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-30 16:34:04 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-30 16:34:04 +0200 |
| commit | 78895e61c773c785dd8d8e3ed4f17236cdcefcd0 (patch) | |
| tree | 8439490ec00433d62f2615c6adc570f756ee6915 /Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers | |
| parent | 721e03d7e6926055111d4edbbdf5f700a11ed58a (diff) | |
| download | Tango-78895e61c773c785dd8d8e3ed4f17236cdcefcd0.tar.gz Tango-78895e61c773c785dd8d8e3ed4f17236cdcefcd0.zip | |
Working on dispensers module !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers')
4 files changed, 121 insertions, 14 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(); + } } } 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 @@ </Grid> <Grid Margin="0 20"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="139*"/> + <ColumnDefinition Width="237*"/> + </Grid.ColumnDefinitions> + <Border Margin="100 140" CornerRadius="5" Background="#68F6F6F6" Padding="10" BorderBrush="Silver" BorderThickness="1"> + <controls:TableGrid RowHeight="50" Margin="10"> + <TextBlock FontWeight="SemiBold">Serial Number:</TextBlock> + <TextBox Text="{Binding ActiveDispenser.SerialNumber}"></TextBox> + + <TextBlock FontWeight="SemiBold">Dispenser Type:</TextBlock> + <ComboBox ItemsSource="{Binding DispenserTypes}" SelectedItem="{Binding ActiveDispenser.DispenserType}" DisplayMemberPath="Name"></ComboBox> + + <TextBlock FontWeight="SemiBold">Nanoliter / Pulse:</TextBlock> + <mahapps:NumericUpDown HasDecimals="True" BorderThickness="0 0 0 1" Background="Transparent" Minimum="0" Maximum="5" Value="{Binding ActiveDispenser.NlPerPulse}"></mahapps:NumericUpDown> + + <TextBlock FontWeight="SemiBold">Installed On Machine:</TextBlock> + <TextBox IsEnabled="False" Text="{Binding ActiveDispenser.Machine.SerialNumber,Mode=OneWay,TargetNullValue='N/A',FallbackValue='N/A'}" IsReadOnly="True"></TextBox> + </controls:TableGrid> + </Border> </Grid> </DockPanel> </Grid> 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 @@ <DataGridTextColumn Header="SERIAL NUMBER" Binding="{Binding SerialNumber}" Width="Auto" /> <DataGridTextColumn Header="TYPE" Binding="{Binding DispenserType.Name}" Width="Auto" /> <DataGridTextColumn Header="NANOLITER / PULSE" Binding="{Binding NlPerPulse}" Width="Auto" /> - <DataGridTextColumn Header="INSTALLED" Binding="{Binding Installed}" Width="Auto" /> + <DataGridTextColumn Header="INSTALLED" Binding="{Binding IsInstalled}" Width="Auto" /> <DataGridTextColumn Header="LAST UPDATED" Binding="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="Auto" /> </DataGrid.Columns> </DataGrid> 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}"> - <Grid> + <Grid IsEnabled="{Binding IsFree}"> <controls:NavigationControl x:Name="navigationControl" TransitionType="Slide"> <local:DispensersView /> <local:DispenserView/> |
