Selaa lähdekoodia

Improved DynamicGrid summary interface

Kenric Nugteren 8 kuukautta sitten
vanhempi
commit
b474104d99

+ 4 - 4
prs.classes/Entities/PurchaseOrder/PurchaseOrder.cs

@@ -158,19 +158,19 @@ namespace Comal.Classes
         [LookupDefinition(typeof(EmployeeLookup))]
         public EmployeeLink IssuedBy { get; set; }
         
-        [DoubleEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
+        [CurrencyEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
         [Aggregate(typeof(PurchaseOrderExTax))]
         public double ExTax { get; set; }
         
-        [DoubleEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
+        [CurrencyEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
         [Aggregate(typeof(PurchaseOrderTax))]
         public double Tax { get; set; }
         
-        [DoubleEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
+        [CurrencyEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
         [Aggregate(typeof(PurchaseOrderIncTax))]
         public double IncTax { get; set; }
         
-        [DoubleEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
+        [CurrencyEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
         [Aggregate(typeof(PurchaseOrderBalance))]
         public double Balance { get; set; }
         

+ 3 - 31
prs.desktop/Panels/Jobs/Summary/JobRequisitionItemSummaryGrid.cs

@@ -110,14 +110,7 @@ public class JobRequisitionItemSummaryGrid : DynamicDataGrid<JobRequisitionItem>
         var qtyColumn = AddDoubleColumn(x => x.Qty, "Qty.");
         qtyColumn.GetSummary = () =>
         {
-            return new GridSummaryColumn
-            {
-                Name = "Qty",
-                Format = "{Sum:F2}",
-                MappingName = "Qty",
-                SummaryType = Syncfusion.Data.SummaryType.Custom,
-                CustomAggregate = new QtyAggregate()
-            };
+            return new DynamicGridCustomSummary(Qty_Aggregate, "F2");
         };
 
         InStockColumn = AddDoubleColumn(x => x.InStock, "Stk.");
@@ -130,30 +123,9 @@ public class JobRequisitionItemSummaryGrid : DynamicDataGrid<JobRequisitionItem>
         ColumnsTag = "JobRequisitionReview";
     }
 
-    private class QtyAggregate : ISummaryAggregate
+    private object Qty_Aggregate(IEnumerable<CoreRow> rows)
     {
-        public double Sum { get; private set; }
-
-        public Action<IEnumerable, string, PropertyDescriptor> CalculateAggregateFunc()
-        {
-            return AggregateFunc;
-        }
-
-        private void AggregateFunc(IEnumerable items, string property, PropertyDescriptor args)
-        {
-            if (items is IEnumerable<DataRowView> rows)
-            {
-                Sum = 0;
-                foreach (var dataRow in rows)
-                {
-                    Sum += (double)dataRow["Qty"];
-                }
-            }
-            else
-            {
-                Logger.Send(LogType.Error, "", $"Attempting to calculate aggregate on invalid data type '{items.GetType()}'.");
-            }
-        }
+        return rows.Sum(x => x.Get<JobRequisitionItem, double>(x => x.Qty));
     }
 
     private DynamicActionColumn AddDoubleColumn(Expression<Func<JobRequisitionItem, object>> property, string header)

+ 3 - 1
prs.desktop/Panels/Products/Locations/StockHoldingGrid.cs

@@ -355,6 +355,8 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
 
     private bool ReceiveStock(Button arg1, CoreRow[] rows)
     {
+        if (rows.Length == 0) return false;
+
         var movement = new StockMovement();
         movement.Location.ID = Location.ID;
         movement.Location.Code = Location.Code;
@@ -368,7 +370,7 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
 
         movement.CommitChanges();
 
-        var holding = rows.FirstOrDefault()?.ToObject<StockHolding>();
+        var holding = rows[0].ToObject<StockHolding>();
         var smg = CheckStockMovementGrid(MovementAction.Receive, holding);
         var result = smg.EditItems(new[] { movement });
 

+ 2 - 10
prs.desktop/Panels/Reservation Management/JobRequisitionItemSelectionGrid.cs

@@ -137,11 +137,7 @@ public abstract class JobRequisitionItemSelectionGrid<T> : DynamicItemsListGrid<
             Width = 60,
             GetSummary = () =>
             {
-                var summary = new GridSummaryColumn
-                {
-                    TemplateSelector = new FuncTemplateSelector((item, o) => TotalQuantity_Template())
-                };
-                return summary;
+                return new DynamicGridTemplateSummary(TotalQuantity_Template);
             }
         });
         ActionColumns.Add(new DynamicTemplateColumn(QuantityColumn_Template)
@@ -150,11 +146,7 @@ public abstract class JobRequisitionItemSelectionGrid<T> : DynamicItemsListGrid<
             Width = 230,
             GetSummary = () =>
             {
-                var summary = new GridSummaryColumn
-                {
-                    TemplateSelector = new FuncTemplateSelector((item, o) => TotalIssued_Template())
-                };
-                return summary;
+                return new DynamicGridTemplateSummary(TotalIssued_Template);
             }
         });
     }

+ 19 - 19
prs.desktop/Panels/Reservation Management/Treatment PO/ReservationManagementTreatmentOrderGrid.cs

@@ -560,19 +560,31 @@ public class ReservationManagementTreatmentOrderGrid: DynamicItemsListGrid<Reser
             ContextMenu = contextMenuFunc,
             GetSummary = () =>
             {
-                var summary = new GridSummaryColumn
-                {
-                    Format = "{Sum:C2}",
-                    SummaryType = Syncfusion.Data.SummaryType.Custom,
-                    CustomAggregate = new CostAggregate(idx, this)
-                };
-                return summary;
+                return new DynamicGridCustomSummary((rows) => Cost_Aggregate(idx, rows), "C2");
             }
         };
         ActionColumns.Add(QuantityColumns[idx]);
         ActionColumns.Add(CostColumns[idx]);
     }
 
+    private double Cost_Aggregate(int supplierIdx, IEnumerable<CoreRow> rows)
+    {
+        return rows.Sum(row =>
+        {
+            var item = LoadItem(row);
+            var supplierProduct = GetSupplierProduct(item, Suppliers[supplierIdx].ID);
+            if (supplierProduct is not null)
+            {
+                var qty = item.GetQuantity(supplierIdx);
+                return qty * item.Multiplier * supplierProduct.CostPrice;
+            }
+            else
+            {
+                return 0;
+            }
+        });
+    }
+
     private void CreateSupplierProduct_Click(Tuple<ReservationManagementTreatmentPOItem, int> tuple)
     {
         var (item, supplierIdx) = tuple;
@@ -639,18 +651,6 @@ public class ReservationManagementTreatmentOrderGrid: DynamicItemsListGrid<Reser
         {
             if (items is IEnumerable<DataRowView> rows)
             {
-                Sum = 0;
-                foreach (var dataRow in rows)
-                {
-                    var rowIdx = dataRow.Row.Table.Rows.IndexOf(dataRow.Row);
-                    var item = Grid.LoadItem(Grid.Data.Rows[rowIdx]);
-                    var supplierProduct = Grid.GetSupplierProduct(item, Grid.Suppliers[SupplierIndex].ID);
-                    if(supplierProduct is not null)
-                    {
-                        var qty = item.GetQuantity(SupplierIndex);
-                        Sum += qty * item.Multiplier * supplierProduct.CostPrice;
-                    }
-                }
             }
             else
             {

+ 18 - 50
prs.desktop/Panels/Stock Forecast/OrderScreen/StockForecastOrderingGrid.cs

@@ -1087,13 +1087,7 @@ public class StockForecastOrderingGrid : DynamicItemsListGrid<StockOrderingItem>
             ContextMenu = contextMenuFunc,
             GetSummary = () =>
             {
-                var summary = new GridSummaryColumn
-                {
-                    Format = "{Sum:C2}",
-                    SummaryType = Syncfusion.Data.SummaryType.Custom,
-                    CustomAggregate = new CostAggregate(idx, this)
-                };
-                return summary;
+                return new DynamicGridCustomSummary((rows) => Cost_Aggregate(idx, rows), "C2");
             }
         };
         ActionColumns.Add(SupplierProductColumns[idx]);
@@ -1101,6 +1095,23 @@ public class StockForecastOrderingGrid : DynamicItemsListGrid<StockOrderingItem>
         ActionColumns.Add(CostColumns[idx]);
     }
 
+    private double Cost_Aggregate(int supplierIdx, IEnumerable<CoreRow> rows)
+    {
+        return rows.Sum(row =>
+        {
+            var item = LoadItem(row);
+            var qty = item.GetQuantity(supplierIdx);
+            if(qty.SupplierProduct is not null)
+            {
+                return qty.OrderTotal * qty.SupplierProduct.CostPrice;
+            }
+            else
+            {
+                return 0;
+            }
+        });
+    }
+
     private void CreateSupplierProduct_Click(Tuple<StockOrderingItem, int> tuple)
     {
         var (item, supplierIdx) = tuple;
@@ -1127,47 +1138,4 @@ public class StockForecastOrderingGrid : DynamicItemsListGrid<StockOrderingItem>
             InvalidateGrid();
         }
     }
-
-    private class CostAggregate : ISummaryAggregate
-    {
-        public double Sum { get; private set; }
-
-        private int SupplierIndex;
-
-        private StockForecastOrderingGrid Grid;
-
-        public CostAggregate(int supplierIndex, StockForecastOrderingGrid grid)
-        {
-            SupplierIndex = supplierIndex;
-            Grid = grid;
-        }
-
-        public Action<IEnumerable, string, PropertyDescriptor> CalculateAggregateFunc()
-        {
-            return AggregateFunc;
-        }
-
-        private void AggregateFunc(IEnumerable items, string property, PropertyDescriptor args)
-        {
-            if (items is IEnumerable<DataRowView> rows)
-            {
-                Sum = 0;
-                foreach (var dataRow in rows)
-                {
-                    var rowIdx = dataRow.Row.Table.Rows.IndexOf(dataRow.Row);
-                    var item = Grid.LoadItem(Grid.Data.Rows[rowIdx]);
-
-                    var qty = item.GetQuantity(SupplierIndex);
-                    if(qty.SupplierProduct is not null)
-                    {
-                        Sum += qty.OrderTotal * qty.SupplierProduct.CostPrice;
-                    }
-                }
-            }
-            else
-            {
-                Logger.Send(LogType.Error, "", $"Attempting to calculate aggregate on invalid data type '{items.GetType()}'.");
-            }
-        }
-    }
 }

+ 1 - 1
prs.desktop/Panels/Tasks/ITaskControl.cs

@@ -22,7 +22,7 @@ namespace PRSDesktop
         Kanban? CreateKanban(Action<Kanban> customise);
         IEnumerable<Kanban> LoadKanbans(IEnumerable<TaskModel> models, Columns<Kanban> columns);
 
-        bool EditKanbans(IEnumerable<TaskModel> models, Action<Kanban> customise = null);
+        bool EditKanbans(IEnumerable<TaskModel> models, Action<Kanban>? customise = null);
         void DeleteKanbans(IEnumerable<TaskModel> models, string auditnote);
 
         //Requisition CreateRequisition(TaskModel model, Action<Requisition> customise);

+ 1 - 0
prs.desktop/Panels/Tasks/TaskGrid.cs

@@ -33,6 +33,7 @@ public class TaskGrid : DynamicDataGrid<Kanban>, ITaskControl, IDefaultGrid
         options.SelectColumns = true;
         options.FilterRows = true;
         options.RecordCount = true;
+        options.PageSize = 1000;
     }
 
     private bool FormMenuClick(CoreRow? row)