Browse Source

Adding support for multiple filter selections on grids.

Kenric Nugteren 1 year ago
parent
commit
e988dff8a4

+ 22 - 5
prs.desktop/Grids/TimesheetGrid.cs

@@ -16,7 +16,23 @@ namespace PRSDesktop
 {
     public class TimeSheetGridSettings : IUserConfigurationSettings
     {
-        public CoreFilterDefinition CurrentFilter { get; set; }
+        [Obsolete]
+        private CoreFilterDefinition? _currentFilter;
+
+        [Obsolete]
+        public CoreFilterDefinition? CurrentFilter
+        {
+            get => _currentFilter;
+            set
+            {
+                if (value is not null)
+                {
+                    Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+                }
+            }
+        }
+
+        public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
     }
 
     public class TimesheetGrid : DynamicDataGrid<TimeSheet>
@@ -37,7 +53,9 @@ namespace PRSDesktop
             base.Init();
 
             _settings = new UserConfiguration<TimeSheetGridSettings>().Load();
-            SelectFilter(_settings.CurrentFilter, false);
+
+            FilterComponent.SetSettings(_settings.Filters, false);
+            FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
 
             ActionColumns.Add(new DynamicMenuColumn(BuildMenu) { Position = DynamicActionColumnPosition.Start });
             ActionColumns.Add(new DynamicMapColumn<TimeSheet>(this, x => x.StartLocation));
@@ -517,10 +535,9 @@ namespace PRSDesktop
             return result;
         }
 
-        protected override void FilterSelected(CoreFilterDefinition filter)
+        private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
         {
-            base.FilterSelected(filter);
-            _settings.CurrentFilter = filter;
+            _settings.Filters = settings;
             new UserConfiguration<TimeSheetGridSettings>().Save(_settings);
         }
     }

+ 0 - 1
prs.desktop/MainWindow.xaml.cs

@@ -170,7 +170,6 @@ namespace PRSDesktop
                 case DatabaseType.Networked:
                     if (App.DatabaseSettings.Protocol == SerializerProtocol.RPC)
                     {
-                        //new RPC stuff (temporary disabled - for enabling when RPC is ready)
                         _transport = new RpcClientSocketTransport(App.DatabaseSettings.URLs);
                         _transport.OnClose += TransportConnectionLost;
                         _transport.OnException += Transport_OnException;

+ 28 - 10
prs.desktop/Panels/Customers/CustomerReceipts.cs

@@ -14,7 +14,23 @@ namespace PRSDesktop;
 
 public class ReceiptGridSettings : IUserConfigurationSettings
 {
-    public CoreFilterDefinition CurrentFilter { get; set; }
+    [Obsolete]
+    private CoreFilterDefinition? _currentFilter;
+
+    [Obsolete]
+    public CoreFilterDefinition? CurrentFilter
+    {
+        get => _currentFilter;
+        set
+        {
+            if (value is not null)
+            {
+                Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+            }
+        }
+    }
+
+    public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
 }
 
 public class CustomerReceipts : DynamicDataGrid<Receipt>, IPanel<Receipt>
@@ -26,6 +42,8 @@ public class CustomerReceipts : DynamicDataGrid<Receipt>, IPanel<Receipt>
     {
         //AddButton("Show All", PRSDesktop.Resources.view.AsBitmapImage(), ToggleView);
         OnBeforeSave += BeforeSave;
+
+        _settings = new UserConfiguration<ReceiptGridSettings>().Load();
     }
 
     protected override void DoReconfigure(FluentList<DynamicGridOption> options)
@@ -37,8 +55,15 @@ public class CustomerReceipts : DynamicDataGrid<Receipt>, IPanel<Receipt>
     protected override void Init()
     {
         base.Init();
-        _settings = new UserConfiguration<ReceiptGridSettings>().Load();
-        SelectFilter(_settings.CurrentFilter, false);
+
+        FilterComponent.SetSettings(_settings.Filters, refresh: false);
+        FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
+    }
+
+    private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
+    {
+        _settings.Filters = settings;
+        new UserConfiguration<ReceiptGridSettings>().Save(_settings);
     }
 
     public bool IsReady { get; set; }
@@ -98,11 +123,4 @@ public class CustomerReceipts : DynamicDataGrid<Receipt>, IPanel<Receipt>
             receipt.Notes = string.Format("Invoice{0} {1}", numbers.Length > 1 ? "s" : "", string.Join(", ", numbers));
         }
     }
-    
-    protected override void FilterSelected(CoreFilterDefinition filter)
-    {
-        base.FilterSelected(filter);
-        _settings.CurrentFilter = filter;
-        new UserConfiguration<ReceiptGridSettings>().Save(_settings);
-    }
 }

+ 23 - 5
prs.desktop/Panels/DataEntry/DataEntryHistory.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Windows.Controls;
 using System.Windows.Media.Imaging;
@@ -13,7 +14,23 @@ namespace PRSDesktop;
 
 public class DataEntryHistorySettings : IUserConfigurationSettings
 {
-    public CoreFilterDefinition CurrentFilter { get; set; }
+    [Obsolete]
+    private CoreFilterDefinition? _currentFilter;
+
+    [Obsolete]
+    public CoreFilterDefinition? CurrentFilter
+    {
+        get => _currentFilter;
+        set
+        {
+            if (value is not null)
+            {
+                Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+            }
+        }
+    }
+
+    public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
 }
 
 public class DataEntryHistory : DynamicDataGrid<DataEntryDocument>
@@ -22,7 +39,9 @@ public class DataEntryHistory : DynamicDataGrid<DataEntryDocument>
     public DataEntryHistory()
     {
         _settings = new UserConfiguration<DataEntryHistorySettings>().Load();
-        SelectFilter(_settings.CurrentFilter, false);
+
+        FilterComponent.SetSettings(_settings.Filters, false);
+        FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
         
         HiddenColumns.Add(x => x.Tag.ID);
         HiddenColumns.Add(x => x.Tag.AppliesTo);
@@ -46,10 +65,9 @@ public class DataEntryHistory : DynamicDataGrid<DataEntryDocument>
                 : null;
     }
 
-    protected override void FilterSelected(CoreFilterDefinition filter)
+    private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
     {
-        base.FilterSelected(filter);
-        _settings.CurrentFilter = filter;
+        _settings.Filters = settings;
         new UserConfiguration<DataEntryHistorySettings>().Save(_settings);
     }
 

+ 23 - 6
prs.desktop/Panels/Invoices/InvoiceGrid.cs

@@ -11,13 +11,30 @@ using InABox.Wpf.Reports;
 using InABox.WPF;
 using System.Windows.Media.Imaging;
 using InABox.Configuration;
+using System.Collections.Generic;
 
 namespace PRSDesktop
 {
     
     public class InvoiceGridSettings : IUserConfigurationSettings
     {
-        public CoreFilterDefinition CurrentFilter { get; set; }
+        [Obsolete]
+        private CoreFilterDefinition? _currentFilter;
+
+        [Obsolete]
+        public CoreFilterDefinition? CurrentFilter
+        {
+            get => _currentFilter;
+            set
+            {
+                if (value is not null)
+                {
+                    Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+                }
+            }
+        }
+
+        public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
     }
     
     public class InvoiceGrid : DynamicDataGrid<Invoice>
@@ -34,8 +51,9 @@ namespace PRSDesktop
             base.Init();
             
             _settings = new UserConfiguration<InvoiceGridSettings>().Load();
-            SelectFilter(_settings.CurrentFilter, false);
-            
+            FilterComponent.SetSettings(_settings.Filters, false);
+            FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
+
             AddButton("Print", PRSDesktop.Resources.printer.AsBitmapImage(), PrintInvoice2);
             AddButton("Email", PRSDesktop.Resources.email.AsBitmapImage(), EmailInvoice2);
             HiddenColumns.Add(x => x.CustomerLink.ID);
@@ -254,10 +272,9 @@ namespace PRSDesktop
             // mailer.SendMessage(msg);
         }
         
-        protected override void FilterSelected(CoreFilterDefinition filter)
+        private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
         {
-            base.FilterSelected(filter);
-            _settings.CurrentFilter = filter;
+            _settings.Filters = settings;
             new UserConfiguration<InvoiceGridSettings>().Save(_settings);
         }
     }

+ 0 - 1
prs.desktop/Panels/Jobs/JobAssignmentPanel.xaml.cs

@@ -4,7 +4,6 @@ using System.Linq;
 using System.Windows.Controls;
 using Comal.Classes;
 using System.ComponentModel;
-using System.ComponentModel;
 using InABox.Core;
 
 namespace PRSDesktop

+ 21 - 5
prs.desktop/Panels/Jobs/JobGrid.cs

@@ -12,7 +12,23 @@ namespace PRSDesktop
 
     public class JobGridSettings : IUserConfigurationSettings
     {
-        public CoreFilterDefinition? CurrentFilter { get; set; }
+        [Obsolete]
+        private CoreFilterDefinition? _currentFilter;
+
+        [Obsolete]
+        public CoreFilterDefinition? CurrentFilter
+        {
+            get => _currentFilter;
+            set
+            {
+                if (value is not null)
+                {
+                    Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+                }
+            }
+        }
+
+        public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
     }
 
     public class JobGrid : DynamicDataGrid<Job>
@@ -24,7 +40,8 @@ namespace PRSDesktop
         public JobGrid()
         {
             _settings = new UserConfiguration<JobGridSettings>().Load();
-            SelectFilter(_settings.CurrentFilter, false);
+            FilterComponent.SetSettings(_settings.Filters, false);
+            FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
 
             HiddenColumns.Add(x => x.ID);
             HiddenColumns.Add(x => x.JobNumber);
@@ -112,10 +129,9 @@ namespace PRSDesktop
             return result;
         }
 
-        protected override void FilterSelected(CoreFilterDefinition filter)
+        private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
         {
-            base.FilterSelected(filter);
-            _settings.CurrentFilter = filter;
+            _settings.Filters = settings;
             new UserConfiguration<JobGridSettings>().Save(_settings);
         }
     }

+ 18 - 13
prs.desktop/Panels/Products/Reservation Management/JobRequisitionReviewGrid.cs

@@ -15,12 +15,23 @@ namespace PRSDesktop
 {
     public class JobRequisitionReviewUserSettings : IUserConfigurationSettings
     {
-        public CoreFilterDefinition Filter { get; set; }
+        [Obsolete]
+        private CoreFilterDefinition? _currentFilter;
 
-        public JobRequisitionReviewUserSettings()
+        [Obsolete]
+        public CoreFilterDefinition? CurrentFilter
         {
-            Filter = new CoreFilterDefinition();
+            get => _currentFilter;
+            set
+            {
+                if (value is not null)
+                {
+                    Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+                }
+            }
         }
+
+        public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
     }
 
     public delegate void JobRequiItemSelect(CoreRow[] rows);
@@ -38,11 +49,7 @@ namespace PRSDesktop
         public JobRequisitionReviewGrid()
         {
             FilterSettings = new UserConfiguration<JobRequisitionReviewUserSettings>().Load();
-            if (!string.IsNullOrWhiteSpace(FilterSettings.Filter.Name))
-            {
-                SelectedFilter = new(FilterSettings.Filter.Name, Serialization.Deserialize<Filter<JobRequisitionItem>>(FilterSettings.Filter.Filter));
-                UpdateFilterButton(InABox.Wpf.Resources.filter_set, FilterSettings.Filter.Name);
-            }
+            FilterComponent.SetSettings(FilterSettings.Filters, false);
 
             HiddenColumns.Add(x => x.ID);
             HiddenColumns.Add(x => x.Product.ID);
@@ -99,7 +106,7 @@ namespace PRSDesktop
                 empName = table.Rows.FirstOrDefault().Values[1].ToString();
             }
 
-            OnFilterSelected += GridOnFilterSelected;
+            FilterComponent.OnFiltersSelected += GridOnFilterSelected;
         }
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
@@ -119,12 +126,10 @@ namespace PRSDesktop
                 .EndUpdate();
         }
 
-
-        private bool GridOnFilterSelected(CoreFilterDefinition filter)
+        private void GridOnFilterSelected(DynamicGridSelectedFilterSettings settings)
         {
-            new UserConfiguration<JobRequisitionReviewUserSettings>().Save(new JobRequisitionReviewUserSettings { Filter = filter });
+            new UserConfiguration<JobRequisitionReviewUserSettings>().Save(new JobRequisitionReviewUserSettings { Filters = settings });
             OnGridRefresh?.Invoke();
-            return true;
         }
 
         private void LoadStockMovements()

+ 21 - 5
prs.desktop/Panels/Staging/Setouts/StagingSetoutGrid.cs

@@ -30,7 +30,23 @@ namespace PRSDesktop
     
     public class StagingSetoutGridSettings : IUserConfigurationSettings
     {
-        public CoreFilterDefinition CurrentFilter { get; set; }
+        [Obsolete]
+        private CoreFilterDefinition? _currentFilter;
+
+        [Obsolete]
+        public CoreFilterDefinition? CurrentFilter
+        {
+            get => _currentFilter;
+            set
+            {
+                if (value is not null)
+                {
+                    Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+                }
+            }
+        }
+
+        public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
     }
 
     
@@ -223,7 +239,8 @@ namespace PRSDesktop
         {
             base.Init();
             _settings = new UserConfiguration<StagingSetoutGridSettings>().Load();
-            SelectFilter(_settings.CurrentFilter, false);
+            FilterComponent.SetSettings(_settings.Filters, false);
+            FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
         }
 
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
@@ -471,10 +488,9 @@ namespace PRSDesktop
         //     base.Reload(criteria, columns, ref sort, action);
         // }
         
-        protected override void FilterSelected(CoreFilterDefinition filter)
+        private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
         {
-            base.FilterSelected(filter);
-            _settings.CurrentFilter = filter;
+            _settings.Filters = settings;
             new UserConfiguration<StagingSetoutGridSettings>().Save(_settings);
         }
         

+ 1 - 3
prs.desktop/Panels/StockSummary/StockSummaryGrid.cs

@@ -254,9 +254,7 @@ namespace PRSDesktop
         private Filters<StockSummary> GetFilters() 
         {
             var filters = new Filters<StockSummary>();
-            
-            if (SelectedFilter?.Item2 != null)
-                filters.Add(SelectedFilter.Item2);
+            filters.Add(FilterComponent.GetFilter());
             
             Filter<StockSummary>? _groupfilter = !GroupIDs.Any()
                 ? new Filter<StockSummary>().None()

+ 22 - 9
prs.desktop/Panels/Suppliers/PurchaseOrders/SupplierPurchaseOrders.cs

@@ -11,16 +11,29 @@ using InABox.Configuration;
 using InABox.Core;
 using InABox.DynamicGrid;
 using InABox.WPF;
-using NPOI.SS.Formula.Functions;
-using sun.misc;
-using Syncfusion.UI.Xaml.Diagram.Controls;
 
 namespace PRSDesktop
 {
     
     public class SupplierPurchaseOrdersSettings : IUserConfigurationSettings
     {
-        public CoreFilterDefinition? CurrentFilter { get; set; }
+        [Obsolete]
+        private CoreFilterDefinition? _currentFilter;
+
+        [Obsolete]
+        public CoreFilterDefinition? CurrentFilter
+        {
+            get => _currentFilter;
+            set
+            {
+                if (value is not null)
+                {
+                    Filters = new DynamicGridSelectedFilterSettings(new List<CoreFilterDefinition> { value }, false);
+                }
+            }
+        }
+
+        public DynamicGridSelectedFilterSettings Filters { get; set; } = new();
     }
     
     public class SupplierPurchaseOrders : DynamicDataGrid<PurchaseOrder>
@@ -36,8 +49,9 @@ namespace PRSDesktop
         public SupplierPurchaseOrders()
         {
             _settings = new UserConfiguration<SupplierPurchaseOrdersSettings>().Load();
-            SelectFilter(_settings.CurrentFilter, false);
-            
+            FilterComponent.SetSettings(_settings.Filters, false);
+            FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected;
+
             OnEditorValueChanged += SupplierPurchaseOrders_OnEditorValueChanged;
             OnCustomiseEditor += SupplierPurchaseOrders_OnCustomiseEditor;
             
@@ -241,10 +255,9 @@ namespace PRSDesktop
             return LoadItems(rows);
         }
         
-        protected override void FilterSelected(CoreFilterDefinition filter)
+        private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings)
         {
-            base.FilterSelected(filter);
-            _settings.CurrentFilter = filter;
+            _settings.Filters = settings;
             new UserConfiguration<SupplierPurchaseOrdersSettings>().Save(_settings);
         }
     }