aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-03-11 14:03:02 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-03-11 14:03:02 +0200
commitc923d6611ffa64605879779c490a979e03daa189 (patch)
tree8fedfe9963847146018c18ceee9cce7e0d0d579e /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles
parent4188ea39897f5aa3bc4be5a44358b79436baf0b4 (diff)
downloadTango-c923d6611ffa64605879779c490a979e03daa189.tar.gz
Tango-c923d6611ffa64605879779c490a979e03daa189.zip
Working on Users & Roles module !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs61
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml103
2 files changed, 140 insertions, 24 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs
index fdb0f8983..9478014b7 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs
@@ -81,6 +81,14 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels
public RelayCommand AddOrganizationCommand { get; set; }
+ public RelayCommand RemoveOrganizationCommand { get; set; }
+
+ public RelayCommand BackToManagedOrganizationCommand { get; set; }
+
+ public RelayCommand<Role> RemoveRoleCommand { get; set; }
+
+ public RelayCommand SaveManagedUserCommand { get; set; }
+
public MainViewVM(UsersAndRolesNavigationManager navigation, INotificationProvider notification)
{
_navigation = navigation;
@@ -88,11 +96,15 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels
LoadOrganizations();
- ManageOrganizationCommand = new RelayCommand(ManageOrganization, () => SelectedOrganization != null);
+ ManageOrganizationCommand = new RelayCommand(LoadSelectedOrganization, () => SelectedOrganization != null);
BackToOrganizationsCommand = new RelayCommand(BackToOrganizations);
ManageUserCommand = new RelayCommand(ManageUser, () => SelectedUser != null);
SaveOrganizationCommand = new RelayCommand(SaveOrganization);
AddOrganizationCommand = new RelayCommand(AddOrganization);
+ RemoveOrganizationCommand = new RelayCommand(RemoveOrganization, () => SelectedOrganization != null);
+ BackToManagedOrganizationCommand = new RelayCommand(BackToManagedOrganization);
+ RemoveRoleCommand = new RelayCommand<Role>(RemoveUserRole);
+ SaveManagedUserCommand = new RelayCommand(SaveManagedUser);
}
private async void AddOrganization()
@@ -111,7 +123,19 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels
await org.SaveAsync(_organizationsContext);
Organizations = _organizationsContext.Organizations.ToObservableCollection();
SelectedOrganization = org;
- ManageOrganization();
+ LoadSelectedOrganization();
+ }
+ }
+ }
+
+ private async void RemoveOrganization()
+ {
+ if (_notification.ShowQuestion("Are you sure you want to remove " + SelectedOrganization.Name + " organization?"))
+ {
+ using (_notification.PushTaskItem("Removing organization..."))
+ {
+ await SelectedOrganization.DeleteCascadeAsync(_organizationsContext);
+ LoadOrganizations();
}
}
}
@@ -120,7 +144,7 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels
{
using (_notification.PushTaskItem("Saving organization address and contact..."))
{
- ManagedOrganization.Contact.FullName = ManagedOrganization.Contact.FirstName + " " + ManagedOrganization.Contact.LastName;
+ ManagedOrganization.Contact.SetFullName();
await ManagedOrganization.SaveAsync(_manageContext);
LoadOrganizations();
SelectedOrganization = Organizations.SingleOrDefault(x => x.Guid == ManagedOrganization.Guid);
@@ -134,8 +158,8 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels
Task.Factory.StartNew(() =>
{
_userContext = ObservablesContext.CreateDefault();
- Roles = _manageContext.Roles.ToObservableCollection();
- ManagedUser = _manageContext.Users.SingleOrDefault(x => x.Guid == SelectedUser.Guid);
+ Roles = _userContext.Roles.ToObservableCollection();
+ ManagedUser = _userContext.Users.SingleOrDefault(x => x.Guid == SelectedUser.Guid);
ManagedUserRoles = ManagedUser.Roles.ToObservableCollection();
InvokeUI(() => _navigation.NavigateTo(UsersAndRolesNavigationView.UserManagementView));
@@ -148,7 +172,32 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels
_navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationSelectionView);
}
- private void ManageOrganization()
+ private void BackToManagedOrganization()
+ {
+ _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationManagementView);
+ }
+
+ private void RemoveUserRole(Role role)
+ {
+ ManagedUserRoles.Remove(role);
+
+ foreach (var userRole in ManagedUser.UsersRoles.Where(x => x.Role == role).ToList())
+ {
+ userRole.DefferedDelete(_userContext);
+ }
+ }
+
+ private async void SaveManagedUser()
+ {
+ using (_notification.PushTaskItem("Saving user details..."))
+ {
+ ManagedUser.Contact.SetFullName();
+ await ManagedUser.SaveAsync(_userContext);
+ LoadSelectedOrganization();
+ }
+ }
+
+ private void LoadSelectedOrganization()
{
using (_notification.PushTaskItem("Loading organization..."))
{
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml
index eaeb180ab..b92682b84 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml
@@ -20,7 +20,7 @@
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="300"/>
+ <ColumnDefinition Width="400"/>
</Grid.ColumnDefinitions>
<Grid Margin="10">
@@ -29,21 +29,27 @@
<Grid>
<StackPanel>
<StackPanel Orientation="Horizontal">
- <Image Source="../Images/user.png" Width="100" RenderOptions.BitmapScalingMode="Fant"></Image>
- <TextBlock Text="{Binding ManagedUser.Contact.FullName,FallbackValue='Roy Ben Shabat'}" VerticalAlignment="Center" FontSize="30" Margin="10 0 0 0"></TextBlock>
+ <Button MinWidth="160" Height="50" Command="{Binding BackToManagedOrganizationCommand}" HorizontalAlignment="Left">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="KeyboardBackspace" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">BACK</TextBlock>
+ </StackPanel>
+ </Button>
+ <Image Source="../Images/user.png" Width="100" RenderOptions.BitmapScalingMode="Fant" Margin="130 0 0 0"></Image>
+ <TextBlock Text="{Binding ManagedUser.Contact.FullName,FallbackValue='Roy Ben Shabat'}" VerticalAlignment="Center" FontSize="25" Margin="10 0 0 0"></TextBlock>
</StackPanel>
- <StackPanel Orientation="Horizontal" Margin="0 10 0 0">
+ <StackPanel Orientation="Horizontal" Margin="0 20 0 0" HorizontalAlignment="Center">
<StackPanel>
<TextBlock FontSize="16" FontWeight="SemiBold">ADDRESS</TextBlock>
- <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="5" Height="300">
- <local:AddressView FontSize="10" />
+ <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="5" Height="300" Background="#8EFFFFFF">
+ <local:AddressView FontSize="10" DataContext="{Binding ManagedUser.Address}" />
</Border>
</StackPanel>
<StackPanel Margin="10 0 0 0">
<TextBlock FontSize="16" FontWeight="SemiBold">CONTACT</TextBlock>
- <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="5" Height="300">
- <local:ContactView FontSize="10" />
+ <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="5" Height="300" Background="#8EFFFFFF">
+ <local:ContactView FontSize="10" DataContext="{Binding ManagedUser.Contact}" />
</Border>
</StackPanel>
</StackPanel>
@@ -51,7 +57,7 @@
</Grid>
</Grid>
<Grid DockPanel.Dock="Bottom">
- <Button Margin="0 10 0 0" MinWidth="200" Height="60" Command="{Binding ManageUserCommand}" HorizontalAlignment="Right">
+ <Button Margin="0 10 0 0" MinWidth="200" Height="60" Command="{Binding SaveManagedUserCommand}" HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="18" VerticalAlignment="Center">SAVE</TextBlock>
<materialDesign:PackIcon Margin="5 0 0 0" Kind="ContentSave" Width="30" Height="30" />
@@ -61,7 +67,7 @@
<Grid>
<DockPanel Margin="0 20 0 0">
<TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="SemiBold">ROLES</TextBlock>
- <Grid Margin="0 5 0 0" Style="{StaticResource droppableGrid}" dragAndDrop:DragAndDropService.Drop="OnDropRole">
+ <Grid Margin="0 5 0 0" Style="{StaticResource droppableGrid}" dragAndDrop:DragAndDropService.Drop="OnDropRole" Background="#7BFFFFFF">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="Silver" FontSize="20">DRAG &amp; DROP ROLES</TextBlock>
<Border BorderBrush="Gray" BorderThickness="1" Padding="10">
<ListBox ItemsSource="{Binding ManagedUserRoles}" ItemContainerStyle="{StaticResource basicListBoxItem}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
@@ -72,8 +78,25 @@
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type entities:Role}">
- <Grid Style="{StaticResource draggableGrid}">
- <Border Margin="5" CornerRadius="5" Width="100" Height="100" BorderThickness="1" Padding="2" IsHitTestVisible="False">
+ <Grid>
+ <Grid.ToolTip>
+ <StackPanel>
+ <TextBlock Text="{Binding Description}" FontSize="10" Margin="0 0 0 10"></TextBlock>
+ <ItemsControl ItemsSource="{Binding RolesPermissions}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <Grid>
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Security" Width="12" />
+ <TextBlock Margin="5 0 0 0" FontSize="10" Text="{Binding Permission.Name}"></TextBlock>
+ </StackPanel>
+ </Grid>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </Grid.ToolTip>
+ <Border Margin="5" CornerRadius="5" Width="100" Height="100" BorderThickness="1" Padding="2">
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Silver"></Setter>
@@ -91,9 +114,26 @@
</LinearGradientBrush>
</Border.Background>
<Grid>
- <TextBlock Text="{Binding Name}"></TextBlock>
+ <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
+ <Image Source="../Images/roles.png" Width="32" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <TextBlock Text="{Binding Name}" TextWrapping="Wrap" HorizontalAlignment="Center" TextAlignment="Center" FontSize="13" Margin="5"></TextBlock>
+ </StackPanel>
</Grid>
</Border>
+
+ <Button HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10" Cursor="Hand" ToolTip="Remove Role" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RemoveRoleCommand}" CommandParameter="{Binding}">
+ <Button.Style>
+ <Style TargetType="Button" BasedOn="{StaticResource emptyButton}">
+ <Setter Property="Visibility" Value="Hidden"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=IsMouseOver}" Value="True">
+ <Setter Property="Visibility" Value="Visible"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Button.Style>
+ <materialDesign:PackIcon Kind="Delete" Foreground="#FF5C5C" Width="16" Height="16" />
+ </Button>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
@@ -105,7 +145,7 @@
</DockPanel>
</Grid>
- <Grid Grid.Column="1" Background="#A9FFFFFF">
+ <Grid Grid.Column="1" Background="White">
<DockPanel Margin="10">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Image Source="../Images/roles.png" Width="70" RenderOptions.BitmapScalingMode="Fant"></Image>
@@ -117,6 +157,21 @@
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="Transparent" IsHitTestVisible="True" Style="{StaticResource draggableGrid}" dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Draggable="True" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}">
+ <Grid.ToolTip>
+ <StackPanel>
+ <TextBlock Text="{Binding Description}" FontSize="10" Margin="0 0 0 10"></TextBlock>
+ <ItemsControl ItemsSource="{Binding RolesPermissions}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Security" Width="12" />
+ <TextBlock Margin="5 0 0 0" FontSize="10" Text="{Binding Permission.Name}"></TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </Grid.ToolTip>
<DockPanel>
<Border DockPanel.Dock="Left" Width="100" Height="100" IsHitTestVisible="False" BorderBrush="Silver" BorderThickness="1" CornerRadius="5" Margin="5" Padding="2">
<Border.Background>
@@ -128,21 +183,31 @@
<Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<Image Source="../Images/roles.png" Width="32" RenderOptions.BitmapScalingMode="Fant"></Image>
- <TextBlock Text="{Binding Name}" HorizontalAlignment="Center" TextAlignment="Center" FontSize="13" FontWeight="SemiBold" Margin="5"></TextBlock>
+ <TextBlock Text="{Binding Name}" TextWrapping="Wrap" HorizontalAlignment="Center" TextAlignment="Center" FontSize="13" Margin="5"></TextBlock>
</StackPanel>
</Grid>
</Border>
- <Grid>
+
+ <Grid MaxHeight="85" HorizontalAlignment="Left" Margin="20 0 0 0">
<ItemsControl ItemsSource="{Binding RolesPermissions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
- <materialDesign:PackIcon Kind="Security" Width="16" />
- <TextBlock Text="{Binding Permission.Name}"></TextBlock>
+ <materialDesign:PackIcon Kind="Security" Width="12" />
+ <TextBlock Margin="5 0 0 0" FontSize="10" TextTrimming="CharacterEllipsis" MaxWidth="150" Text="{Binding Permission.Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
+
+ <Grid>
+ <Grid.Background>
+ <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
+ <GradientStop/>
+ <GradientStop Color="White" Offset="1"/>
+ </LinearGradientBrush>
+ </Grid.Background>
+ </Grid>
</Grid>
</DockPanel>
</Grid>
@@ -151,6 +216,8 @@
</ListBox>
</Grid>
</DockPanel>
+
+ <Rectangle HorizontalAlignment="Left" Stroke="#BBBBBB" StrokeThickness="1"></Rectangle>
</Grid>
</Grid>