aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-30 16:34:04 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-30 16:34:04 +0200
commit78895e61c773c785dd8d8e3ed4f17236cdcefcd0 (patch)
tree8439490ec00433d62f2615c6adc570f756ee6915 /Software/Visual_Studio/MachineStudio/Modules
parent721e03d7e6926055111d4edbbdf5f700a11ed58a (diff)
downloadTango-78895e61c773c785dd8d8e3ed4f17236cdcefcd0.tar.gz
Tango-78895e61c773c785dd8d8e3ed4f17236cdcefcd0.zip
Working on dispensers module !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs111
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml20
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispensersView.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/MainView.xaml2
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/>