Browse Source

Added issues column to summary grid

Kenric Nugteren 1 year ago
parent
commit
f4787be481

+ 13 - 0
prs.classes/Entities/Stock/StockSummary.cs

@@ -189,6 +189,14 @@ namespace Comal.Classes
         public FormulaType Type => FormulaType.Virtual;
     }
 
+    public class StockSummaryCalculatedStringField : IFormula<StockSummary, string>
+    {
+        public Expression<Func<StockSummary, string>> Value => x => "";
+        public Expression<Func<StockSummary, string>>[] Modifiers => new Expression<Func<StockSummary, string>>[] { };
+        public FormulaOperator Operator => FormulaOperator.Constant;
+        public FormulaType Type => FormulaType.Virtual;
+    }
+
 
     [UserTracking(typeof(Product))]
     [AutoEntity(typeof(StockSummaryUnionGenerator))]
@@ -251,5 +259,10 @@ namespace Comal.Classes
         [DoubleEditor]
         [Formula(typeof(StockSummaryCalculatedField))]
         public double BalanceAvailable { get; set; }
+
+        [EditorSequence(13)]
+        [NullEditor]
+        [Formula(typeof(StockSummaryCalculatedStringField))]
+        public string Issues { get; set; }
     }
 }

+ 38 - 2
prs.desktop/Panels/StockSummary/StockSummaryGrid.cs

@@ -3,13 +3,16 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Linq.Expressions;
 using System.Reflection;
+using System.Windows;
 using System.Windows.Media;
+using System.Windows.Media.Imaging;
 using Comal.Classes;
 using InABox.Clients;
 using InABox.Configuration;
 using InABox.Core;
 using InABox.DynamicGrid;
 using InABox.Wpf;
+using InABox.WPF;
 using PRSDesktop.Utils;
 using Syncfusion.Data.Extensions;
 using Xceed.Wpf.Toolkit;
@@ -25,6 +28,7 @@ public enum StockSummaryMinimumStockBehaviour
 
 public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
 {
+    private static readonly BitmapImage _warning = InABox.Wpf.Resources.warning.AsBitmapImage();
     
     public Guid[] GroupIDs { get; set; }
     public Guid[] JobIDs { get; set; }
@@ -43,6 +47,7 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
         
         HiddenColumns.Add(x => x.Product.ID);
         HiddenColumns.Add(x => x.Product.Issues);
+        HiddenColumns.Add(x => x.Issues);
         HiddenColumns.Add(x => x.Style.ID);
         HiddenColumns.Add(x => x.Job.ID);
         HiddenColumns.Add(x => x.Dimensions.UnitSize);
@@ -57,7 +62,11 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
 
         HiddenColumns.Add(x => x.Product.Image.ID);
         HiddenColumns.Add(x => x.Product.Image.FileName);
-        ActionColumns.Add(new DynamicIssuesColumn<Product>(this, CoreUtils.GetFullPropertyName<StockSummary, string>(x => x.Product.Issues, "."), LoadProducts));
+        //ActionColumns.Add(new DynamicIssuesColumn<Product>(this, CoreUtils.GetFullPropertyName<StockSummary, string>(x => x.Product.Issues, "."), LoadProducts));
+        ActionColumns.Add(new DynamicImageColumn(Issues_Image, null)
+        {
+            ToolTip = Issues_Tooltip
+        });
         ActionColumns.Add(new DynamicImagePreviewColumn<StockSummary>(x => x.Product.Image)
             { Position = DynamicActionColumnPosition.Start });
 
@@ -66,6 +75,20 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
         MinStockBehaviour = new GlobalConfiguration<StockSummaryPanelSettings>().Load().MinimumStockBehaviour;
     }
 
+    private BitmapImage? Issues_Image(CoreRow? row)
+    {
+        if (row is null) return _warning;
+
+        return row.Get<StockSummary, string>(x => x.Issues).IsNullOrWhiteSpace() ? null : _warning;
+    }
+
+    private FrameworkElement? Issues_Tooltip(DynamicActionColumn column, CoreRow? row)
+    {
+        if (row is null) return null;
+
+        return column.TextToolTip(row.Get<StockSummary, string>(x => x.Issues));
+    }
+
     private class UIComponent : DynamicGridGridUIComponent<StockSummary>
     {
         private StockSummaryGrid Grid;
@@ -145,7 +168,7 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
         var grid = (Activator.CreateInstance(typeof(DynamicDataGrid<>).MakeGenericType(typeof(TEntity))) as IDynamicDataGrid);
         if (grid == null)
         {
-            MessageBox.Show($"Cannot create Grid for [{typeof(TEntity).Name}]");
+            MessageWindow.ShowError($"Cannot create Grid for [{typeof(TEntity).Name}]", "", shouldLog: false);
             return;
         }
         grid.ColumnsTag = $"{ColumnsTag}.{columnname}";
@@ -489,6 +512,19 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
                         };
 
                         newrow.Set<StockSummary, double>(x => x.BalanceAvailable, balance);
+
+                        var productIssues = rows.First().Get<StockSummary, string>(x => x.Product.Issues);
+                        var issues = new List<string>();
+                        if(balance < 0)
+                        {
+                            issues.Add("Not enough stock available.");
+                        }
+                        if (!productIssues.IsNullOrWhiteSpace())
+                        {
+                            issues.Add(productIssues);
+                        }
+                        newrow.Set<StockSummary, string>(x => x.Issues, string.Join('\n', issues));
+
                         table.Rows.Add(newrow);
                     }