ソースを参照

Merge commit '87b9480f74d5cb1ed503e8cae67ffef0823af42e' into frank

Frank van den Bos 1 年間 前
コミット
1075fd31af

+ 30 - 3
prs.classes/Entities/Kanban/ClientKanbanSubscriberSet.cs

@@ -56,12 +56,21 @@ namespace Comal.Classes
 
         public void EnsureManager(Guid kanbanid, Guid employeeid)
         {
+            if(employeeid == Guid.Empty)
+            {
+                return;
+            }
             var manager = EnsureSubscriber(kanbanid, employeeid);
 
             // No-one else can be a manager
             var others = _subscribers.Where(x => Equals(x.Kanban.ID, kanbanid)).ToArray();
             foreach (var other in others)
-                other.Manager = false;
+            {
+                if(other != manager)
+                {
+                    other.Manager = false;
+                }
+            }
 
             // only this one!
             manager.Manager = true;
@@ -69,12 +78,21 @@ namespace Comal.Classes
 
         public void EnsureAssignee(Guid kanbanid, Guid employeeid)
         {
+            if (employeeid == Guid.Empty)
+            {
+                return;
+            }
             var assignee = EnsureSubscriber(kanbanid, employeeid);
 
             // No-one else can be a assignee
             var others = _subscribers.Where(x => Equals(x.Kanban.ID, kanbanid)).ToArray();
             foreach (var other in others)
-                other.Assignee = false;
+            {
+                if (other != assignee)
+                {
+                    other.Assignee = false;
+                }
+            }
 
             // only this one!
             assignee.Assignee = true;
@@ -82,12 +100,21 @@ namespace Comal.Classes
 
         public void EnsureObserver(Guid kanbanid, Guid employeeid)
         {
+            if (employeeid == Guid.Empty)
+            {
+                return;
+            }
             var observer = EnsureSubscriber(kanbanid, employeeid);
 
             // Employee can only be an observer once
             var subscribers = _subscribers.Where(x => Equals(x.Kanban.ID, kanbanid) && Equals(x.Employee.ID, employeeid)).ToArray();
             foreach (var subscriber in subscribers)
-                subscriber.Observer = false;
+            {
+                if (subscriber != observer)
+                {
+                    subscriber.Observer = false;
+                }
+            }
 
             observer.Observer = true;
         }

+ 0 - 18
prs.classes/SecurityDescriptors/HumanResources_Descriptors.cs

@@ -22,24 +22,6 @@ namespace Comal.Classes
     {
     }
 
-    [Caption("View Org Charts (Employee)")]
-    [SecurityDescriptorScope(SecurityDescriptorScope.Global)]
-    public class CanViewOrgChartByEmployee : EnabledSecurityDescriptor<HumanResourcesLicense, Employee>
-    {
-    }
-
-    [Caption("View Org Charts (Position)")]
-    [SecurityDescriptorScope(SecurityDescriptorScope.Global)]
-    public class CanViewOrgChartByPosition : EnabledSecurityDescriptor<HumanResourcesLicense, Employee, EmployeePosition>
-    {
-    }
-
-    [Caption("View Org Charts (Job Role)")]
-    [SecurityDescriptorScope(SecurityDescriptorScope.Global)]
-    public class CanViewOrgChartByRole : EnabledSecurityDescriptor<HumanResourcesLicense, Employee, EmployeeRole>
-    {
-    }
-
     [Caption("Edit Org Chart Structure")]
     public class CanEditOrgChart : EnabledSecurityDescriptor<HumanResourcesLicense, Employee>
     {

+ 15 - 1
prs.desktop/App.xaml

@@ -14,7 +14,21 @@
                 <ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Generic.xaml" />
 
                 <ResourceDictionary>
-                    
+
+                    <Style x:Key="TemplateHeaderStyle" TargetType="{x:Type syncfusion:GridHeaderCellControl}">
+                        <Setter Property="Background" Value="LightSkyBlue"/>
+                        <Setter Property="Foreground" Value="Black"/>
+                        <Setter Property="BorderBrush" Value="Black"/>
+                        <Setter Property="BorderThickness" Value="0.5,0.5,0.5,0.5"/>
+                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
+                        <Setter Property="VerticalContentAlignment" Value="Center"/>
+                        <Setter Property="Padding" Value="5,3"/>
+                        <Setter Property="FontFamily" Value="Segoe UI"/>
+                        <Setter Property="FontSize" Value="14"/>
+                        <Setter Property="FontWeight" Value="Normal"/>
+                        <Setter Property="IsTabStop" Value="False"/>
+                    </Style>
+
                     <Style TargetType="fluent:RibbonTabItem">
                         <Setter Property="HeaderPadding" Value="20,0,20,0" />
                         <Setter Property="Margin" Value="0,0,5,0" />

+ 8 - 8
prs.desktop/Dashboards/Common/DigitalFormsDashboard.xaml.cs

@@ -1156,7 +1156,7 @@ namespace PRSDesktop
             {
                 e.Column = new GridImageColumn();
                 e.Column.Width = DataGrid.RowHeight;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 e.Column.HeaderText = "";
                 e.Column.Padding = new Thickness(4);
                 e.Column.ValueBinding = new Binding
@@ -1169,36 +1169,36 @@ namespace PRSDesktop
             else if (ParentType is not null && parentColumns.TryGetValue(ParentType, out var pColumns) && pColumns.Any(x => x.Item2.Equals(value.Path.Path)))
             {
                 e.Column.ColumnSizer = GridLengthUnitType.Auto;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Job No"))
             {
                 e.Column.Width = 60;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Description"))
             {
                 e.Column.TextAlignment = TextAlignment.Left;
                 e.Column.HorizontalHeaderContentAlignment = HorizontalAlignment.Left;
                 e.Column.Width = 450;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Completed"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 (e.Column as GridDateTimeColumn)!.Pattern = DateTimePattern.CustomPattern;
                 (e.Column as GridDateTimeColumn)!.CustomPattern = "dd MMM yy hh:mm";
             }
             else if (value.Path.Path.Equals("Completed By"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Processed"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else
             {
@@ -1207,7 +1207,7 @@ namespace PRSDesktop
                 //Style style = new Style(typeof(GridCell));
                 //e.Column.CellStyle = style;
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 e.Column.HeaderText = QuestionCodes[e.Column.MappingName];
             }
         }

+ 11 - 11
prs.desktop/Dashboards/Common/QADashboard.xaml.cs

@@ -98,13 +98,13 @@ namespace PRSDesktop
             else if (value.Path.Path.Equals("Number"))
             {
                 e.Column.Width = 80;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Location_Timestamp"))
             {
                 e.Column = new GridImageColumn();
                 e.Column.Width = dataGrid.RowHeight;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 e.Column.HeaderText = "";
                 e.Column.Padding = new Thickness(4);
                 e.Column.ValueBinding = new Binding
@@ -117,46 +117,46 @@ namespace PRSDesktop
             else if (parentColumns.TryGetValue(parentType, out var pColumns) && pColumns.Any(x => x.Item2.Equals(value.Path.Path)))
             {
                 e.Column.ColumnSizer = GridLengthUnitType.Auto;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Job No"))
             {
                 e.Column.Width = 60;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Description"))
             {
                 e.Column.TextAlignment = TextAlignment.Left;
                 e.Column.HorizontalHeaderContentAlignment = HorizontalAlignment.Left;
                 e.Column.Width = 450;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Completed"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 (e.Column as GridDateTimeColumn).Pattern = DateTimePattern.CustomPattern;
                 (e.Column as GridDateTimeColumn).CustomPattern = "dd MMM yy hh:mm";
             }
             else if (value.Path.Path.Equals("Completed By"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Processed"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Created By"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Created"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 (e.Column as GridDateTimeColumn).Pattern = DateTimePattern.CustomPattern;
                 (e.Column as GridDateTimeColumn).CustomPattern = "dd MMM yy hh:mm";
             }
@@ -167,7 +167,7 @@ namespace PRSDesktop
                 //Style style = new Style(typeof(GridCell));
                 //e.Column.CellStyle = style;
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 e.Column.HeaderText = QuestionCodes[e.Column.MappingName];
             }
         }

+ 6 - 6
prs.desktop/Dashboards/Manufacturing/FactoryFloorAnalysis.xaml.cs

@@ -441,27 +441,27 @@ namespace PRSDesktop
             if (value.Path.Path.Equals("Serial"))
             {
                 e.Column.Width = 150;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Job"))
             {
                 e.Column.Width = 60;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Setout"))
             {
                 e.Column.Width = 120;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Description"))
             {
                 e.Column.Width = 350;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Template"))
             {
                 e.Column.Width = 80;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
 
             else
@@ -469,7 +469,7 @@ namespace PRSDesktop
                 var style = new Style(typeof(GridCell));
                 e.Column.CellStyle = style;
                 e.Column.Width = 50;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
                 e.Column.HeaderText = e.Column.HeaderText.Split(':').Last(); //SectionDisplayNames[value.Path.Path];
             }
         }

+ 5 - 4
prs.desktop/Dashboards/Manufacturing/ManufacturingTemplateAnalysis.xaml.cs

@@ -244,17 +244,17 @@ namespace PRSDesktop
             if (value.Path.Path.Equals("Code"))
             {
                 e.Column.Width = 100;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Description"))
             {
                 e.Column.Width = 300;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else if (value.Path.Path.Equals("Qty"))
             {
                 e.Column.Width = 60;
-                e.Column.HeaderStyle = Resources["TemplateHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
             }
             else
             {
@@ -265,7 +265,8 @@ namespace PRSDesktop
                 //style.Setters.Add(new Setter(GridCell.FontWeightProperty, new Binding(value.Path.Path) { Converter = new LeaveFontWeightConverter() }));
                 e.Column.CellStyle = style;
                 e.Column.Width = 50;
-                e.Column.HeaderStyle = Resources["DataHeaderStyle"] as Style;
+                e.Column.HeaderStyle = Application.Current.Resources["TemplateHeaderStyle"] as Style;
+                // e.Column.HeaderStyle = Resources["DataHeaderStyle"] as Style;
                 e.Column.HeaderText = SectionDisplayNames[value.Path.Path];
             }
         }

+ 5 - 1
prs.desktop/Grids/EmployeePositionGrid.cs

@@ -1,4 +1,5 @@
 using Comal.Classes;
+using InABox.Configuration;
 using InABox.Core;
 using InABox.DynamicGrid;
 
@@ -8,7 +9,10 @@ namespace PRSDesktop
     {
         protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
         {
-            if (column.ColumnName.StartsWith("OrgChart.") && !Security.IsAllowed<CanViewOrgChartByPosition>())
+            if (!Security.IsAllowed<CanEditOrgChart>())
+                return new NullEditor();
+            var orgChartSettings = new GlobalConfiguration<OrgChartSettings>().Load();
+            if (column.ColumnName.StartsWith($"{nameof(Role.OrgChart)}.") && orgChartSettings.Layout != OrgChartLayout.Position)
                 return new NullEditor();
             return base.GetEditor(item, column);
         }

+ 5 - 1
prs.desktop/Grids/RoleGrid.cs

@@ -1,4 +1,5 @@
 using Comal.Classes;
+using InABox.Configuration;
 using InABox.Core;
 using InABox.DynamicGrid;
 
@@ -8,7 +9,10 @@ namespace PRSDesktop
     {
         protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
         {
-            if (column.ColumnName.StartsWith("OrgChart.") && !Security.IsAllowed<CanViewOrgChartByRole>())
+            if(!Security.IsAllowed<CanEditOrgChart>())
+                return new NullEditor();
+            var orgChartSettings = new GlobalConfiguration<OrgChartSettings>().Load();
+            if (column.ColumnName.StartsWith($"{nameof(Role.OrgChart)}.") && orgChartSettings.Layout != OrgChartLayout.Role)
                 return new NullEditor();
             return base.GetEditor(item, column);
         }

+ 2 - 6
prs.desktop/MainWindow.xaml.cs

@@ -994,12 +994,8 @@ namespace PRSDesktop
             SetVisibility(LeaveRequestsButton, Security.CanView<LeaveRequest>() && Security.IsAllowed<ViewDesktopLeaveRequestsScreen>());
             SetVisibility(OrgChartButton,
                 ClientFactory.IsSupported<Employee>()
-                && (
-                Security.IsAllowed<CanViewOrgChartByEmployee>()
-                    || Security.IsAllowed<CanViewOrgChartByPosition>()
-                    || Security.IsAllowed<CanViewOrgChartByRole>()
-                    )
-                && Security.IsAllowed<ViewDesktopOrgChartScreen>()
+                && 
+                Security.IsAllowed<ViewDesktopOrgChartScreen>()
             );
             SetVisibility(MeetingsButton, Security.IsAllowed<ViewDesktopMeetingsScreen>());
 

+ 5 - 1
prs.desktop/Panels/Employees/EmployeeGrid.cs

@@ -9,6 +9,7 @@ using System.Windows.Media.Imaging;
 using Comal.Classes;
 using FastReport.DataVisualization.Charting;
 using InABox.Clients;
+using InABox.Configuration;
 using InABox.Core;
 using InABox.DynamicGrid;
 using InABox.WPF;
@@ -228,7 +229,10 @@ namespace PRSDesktop
 
         protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
         {
-            if (column.ColumnName.StartsWith("OrgChart.") && !Security.IsAllowed<CanViewOrgChartByEmployee>())
+            if (!Security.IsAllowed<CanEditOrgChart>())
+                return new NullEditor();
+            var orgChartSettings = new GlobalConfiguration<OrgChartSettings>().Load();
+            if (column.ColumnName.StartsWith($"{nameof(Role.OrgChart)}.") && orgChartSettings.Layout != OrgChartLayout.Employee)
                 return new NullEditor();
             return base.GetEditor(item, column);
         }

+ 0 - 12
prs.desktop/Panels/OrgChart/OrgChartPanel.xaml

@@ -26,18 +26,6 @@
                 Margin="0">
             <DockPanel Margin="2">
 
-                <Label x:Name="LayoutLabel" Content="Layout:" DockPanel.Dock="Left" VerticalContentAlignment="Center" />
-                <ComboBox x:Name="Layout" DockPanel.Dock="Left" Width="100" VerticalContentAlignment="Center"
-                          SelectedIndex="0" SelectionChanged="Layout_SelectionChanged" />
-
-                <Label Content="Appearance:" DockPanel.Dock="Left" VerticalContentAlignment="Center" Margin="10,0,0,0" />
-                <ComboBox x:Name="Appearance" DockPanel.Dock="Left" Width="100" VerticalContentAlignment="Center"
-                          SelectedIndex="0" SelectionChanged="Appearance_SelectionChanged">
-                    <ComboBoxItem Content="Vertical" />
-                    <ComboBoxItem Content="Horizontal" />
-                    <ComboBoxItem Content="Radial" />
-                </ComboBox>
-
                 <Label Content="Zoom:" DockPanel.Dock="Left" VerticalContentAlignment="Center" Margin="10,0,0,0" />
                 <Slider x:Name="Zoom" DockPanel.Dock="Left" Minimum="25" Value="100" Maximum="400" Interval="1"
                         ValueChanged="Zoom_ValueChanged" Width="200" VerticalAlignment="Center" />

+ 21 - 50
prs.desktop/Panels/OrgChart/OrgChartPanel.xaml.cs

@@ -18,6 +18,7 @@ using InABox.WPF;
 using Microsoft.Win32;
 using Syncfusion.UI.Xaml.Diagram;
 using System.ComponentModel;
+using NPOI.SS.Formula.Functions;
 
 namespace PRSDesktop
 {
@@ -33,41 +34,35 @@ namespace PRSDesktop
         public OrgChartPanel()
         {
             InitializeComponent();
-            if (Security.IsAllowed<CanViewOrgChartByEmployee>())
-                Layout.Items.Add("Employees");
-            if (Security.IsAllowed<CanViewOrgChartByPosition>())
-                Layout.Items.Add("Positions");
-            if (Security.IsAllowed<CanViewOrgChartByRole>())
-                Layout.Items.Add("Job Roles");
-            Layout.Visibility = Layout.Items.Count > 1 ? Visibility.Visible : Visibility.Collapsed;
-            LayoutLabel.Visibility = Layout.Visibility;
         }
 
         public event DataModelUpdateEvent? OnUpdateDataModel;
 
         public bool IsReady { get; set; }
 
-        private void SaveSettings()
-        {
-            //_settings.Zoom = Zoom.Value;
-            _settings.Appearance = (OrgChartAppearance)Appearance.SelectedIndex;
-
-            _settings.Layout = Equals(Layout.SelectedValue, "Employees")
-                ? OrgChartLayout.Employee
-                : Equals(Layout.SelectedValue, "Positions")
-                    ? OrgChartLayout.Position
-                    : OrgChartLayout.Role;
-
-
-            Task.Run(
-                () => { new UserConfiguration<OrgChartSettings>().Save(_settings); }
-            );
-        }
-
         #region IPanel Support
 
         public void CreateToolbarButtons(IPanelHost host)
         {
+            if (Security.IsAllowed<CanEditOrgChart>())
+            {
+                host.CreateSetupAction(new PanelAction
+                {
+                    Caption = "Org Chart Settings",
+                    OnExecute = OrgChartSettings_Click
+                });
+            }
+        }
+
+        private void OrgChartSettings_Click(PanelAction obj)
+        {
+            var settings = new GlobalConfiguration<OrgChartSettings>().Load();
+            var grid = new DynamicItemsListGrid<OrgChartSettings>();
+            if (grid.EditItems(new OrgChartSettings[] { settings }))
+            {
+                new GlobalConfiguration<OrgChartSettings>().Save(settings);
+                _settings = settings;
+            }
         }
 
         public Dictionary<string, object[]> Selected()
@@ -81,17 +76,9 @@ namespace PRSDesktop
 
         public void Setup()
         {
-            _settings = new UserConfiguration<OrgChartSettings>().Load();
+            _settings = new GlobalConfiguration<OrgChartSettings>().Load();
 
-            Appearance.SelectedIndex = (int)_settings.Appearance;
             model.Appearance = _settings.Appearance;
-
-            var layout = _settings.Layout == OrgChartLayout.Employee
-                ? "Employees"
-                : _settings.Layout == OrgChartLayout.Position
-                    ? "Positions"
-                    : "Job Roles";
-            Layout.SelectedValue = Layout.Items.Contains(layout) ? layout : Layout.Items[0];
             model.Layout = _settings.Layout;
 
             //Zoom.Value = _settings.Zoom;
@@ -567,22 +554,6 @@ namespace PRSDesktop
             }
         }
 
-        private void Appearance_SelectionChanged(object sender, SelectionChangedEventArgs e)
-        {
-            if (model.Active)
-                SaveSettings();
-
-            model.Appearance = (OrgChartAppearance)Appearance.SelectedIndex;
-        }
-
-        private void Layout_SelectionChanged(object sender, SelectionChangedEventArgs e)
-        {
-            if (model.Active)
-                SaveSettings();
-
-            model.Layout = _settings != null ? _settings.Layout : OrgChartLayout.Employee;
-        }
-
         #endregion
     }
 }

+ 4 - 1
prs.desktop/Panels/OrgChart/OrgChartSettings.cs

@@ -1,11 +1,14 @@
 using InABox.Configuration;
+using InABox.Core;
 
 namespace PRSDesktop
 {
-    public class OrgChartSettings : IUserConfigurationSettings
+    public class OrgChartSettings : BaseObject, IGlobalConfigurationSettings
     {
+        [EnumLookupEditor(typeof(OrgChartAppearance))]
         public OrgChartAppearance Appearance { get; set; }
 
+        [EnumLookupEditor(typeof(OrgChartLayout))]
         public OrgChartLayout Layout { get; set; }
         //public double Zoom { get; set; }
     }