Browse Source

Moved DimensionUtils to prs stores; consolidated repetitive code.

Kenric Nugteren 1 year ago
parent
commit
ff31ff42b1

+ 0 - 55
PRSDimensionUtils/DimensionUtils.cs

@@ -1,55 +0,0 @@
-using Comal.Classes;
-using InABox.Core;
-using InABox.Scripting;
-
-namespace PRSDimensionUtils;
-
-   public static class DimensionUtils
-    { 
-        private static Dictionary<Guid, ScriptDocument>? _dimensionscriptcache;
-        
-        public static void ResetDimensionScriptCache() => _dimensionscriptcache = null;
-             
-        public static void ReloadDimensionScriptCache(Guid[]? ids, Func<Filter<ProductDimensionUnit>?,Columns<ProductDimensionUnit>,CoreTable> reload)
-        {
-
-            _dimensionscriptcache ??= new Dictionary<Guid, ScriptDocument>();
-
-            var scripts = reload(
-                ids != null
-                    ? new Filter<ProductDimensionUnit>(x => x.ID).InList(ids)
-                    : null,
-                Columns.None<ProductDimensionUnit>()
-                    .Add(x => x.ID)
-                    .Add(x => x.Conversion)
-            ).ToDictionary<ProductDimensionUnit, Guid, String>(x => x.ID, x => x.Conversion);
-
-        
-            foreach (var id in scripts.Keys)
-            {
-                var doc = !String.IsNullOrWhiteSpace(scripts[id]) ? new ScriptDocument(scripts[id]) : null;
-                if (doc?.Compile() == true)
-                    _dimensionscriptcache[id] = doc;
-                else
-                    _dimensionscriptcache.Remove(id);
-            }
-        }
-        
-        public static void ConvertDimensions(IDimensions dimensions, ref double quantity, Func<Filter<ProductDimensionUnit>?,Columns<ProductDimensionUnit>,CoreTable> reload)
-        {
-            if (quantity.IsEffectivelyEqual(0.0))
-                return;
-                    
-            if (_dimensionscriptcache == null)
-                ReloadDimensionScriptCache(null, reload);
-            
-            if (_dimensionscriptcache?.TryGetValue(dimensions.Unit.ID, out ScriptDocument? script) == true)
-            {
-                script.SetValue("Quantity", quantity);
-                script.SetValue("Dimensions", dimensions);
-                script.Execute("Module", DimensionUnit.ConvertDimensionsMethodName());
-                quantity = Convert.ToDouble(script.GetValue("Quantity"));
-            }
-        }
-        
-    }

+ 4 - 4
prs.classes/EnclosedEntities/Dimensions/DimensionUnit.cs

@@ -64,12 +64,12 @@ namespace Comal.Classes
             return
             return
                 "using Comal.Classes;\n"+
                 "using Comal.Classes;\n"+
                 "\n"+
                 "\n"+
-                "    public Double Quantity { get; set; }\n"+
-                "    public IDimensions Dimensions { get; set; }\n"+
-                "\n"+
                 "public class Module\n"+
                 "public class Module\n"+
                 "{\n"+
                 "{\n"+
-                "    public double " + ConvertDimensionsMethodName() + "()\n"+
+                "    public Double Quantity { get; set; }\n"+
+                "    public IDimensions Dimensions { get; set; }\n"+
+                "\n" +
+                "    public void " + ConvertDimensionsMethodName() + "()\n"+
                 "    {\n"+
                 "    {\n"+
                 "        // Update Dimensions and Quantity here\n"+
                 "        // Update Dimensions and Quantity here\n"+
                 "        // eg. the following will explode a pack into its component parts:\n"+
                 "        // eg. the following will explode a pack into its component parts:\n"+

+ 1 - 1
prs.classes/Entities/Stock/StockHolding/StockHolding.cs

@@ -164,7 +164,7 @@ namespace Comal.Classes
             return movement;
             return movement;
         }
         }
 
 
-        public static IEnumerable<StockHolding> GroupMovements(IEnumerable<StockMovement> movements)
+        public static List<StockHolding> GroupMovements(IEnumerable<StockMovement> movements)
         {
         {
             var grouped = new List<StockHolding>();
             var grouped = new List<StockHolding>();
 
 

+ 27 - 109
prs.desktop/Panels/Reservation Management/ReservationManagementItemGrid.cs

@@ -361,22 +361,8 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
 
 
     }
     }
 
 
-    private bool HasPurchaseOrders()
-    {
-        var ids = SelectedRows.Select(r => r.Get<JobRequisitionItem, Guid>(x => x.ID)).ToArray();
-        return Client.Query(
-            new Filter<PurchaseOrderItemAllocation>(x => x.JobRequisitionItem.ID).InList(ids),
-            Columns.None<PurchaseOrderItemAllocation>().Add(x => x.ID)
-        ).Rows.Any();
-    }
-    
     private void CreatePurchaseOrder()
     private void CreatePurchaseOrder()
     {
     {
-        if (HasPurchaseOrders())
-        {
-            MessageWindow.ShowMessage("You cannot do this when Purchase Orders already exist!","Error");
-            return;
-        }        
         var mr = MessageWindow.ShowYesNoCancel("Include Style in Order?", "Confirm");
         var mr = MessageWindow.ShowYesNoCancel("Include Style in Order?", "Confirm");
         if (mr == MessageWindowResult.Cancel)
         if (mr == MessageWindowResult.Cancel)
             return;
             return;
@@ -386,7 +372,9 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
         {
         {
             var jri = row.ToObject<JobRequisitionItem>();
             var jri = row.ToObject<JobRequisitionItem>();
             if (mr != MessageWindowResult.Yes)
             if (mr != MessageWindowResult.Yes)
+            {
                 jri.Style.CopyFrom(new ProductStyle());
                 jri.Style.CopyFrom(new ProductStyle());
+            }
 
 
             var qtyrequired = row.Get<JobRequisitionItem, double>(c => c.Qty) - row.Get<JobRequisitionItem, double>(c => c.InStock);
             var qtyrequired = row.Get<JobRequisitionItem, double>(c => c.Qty) - row.Get<JobRequisitionItem, double>(c => c.InStock);
             
             
@@ -440,12 +428,6 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
 
 
     private void AddToExistingOrder()
     private void AddToExistingOrder()
     {
     {
-        if (HasPurchaseOrders())
-        {
-            MessageWindow.ShowMessage("You cannot do this when Purchase Orders already exist!", "Error");
-            return;
-        }
-
         var dlg = new MultiSelectDialog<PurchaseOrder>(
         var dlg = new MultiSelectDialog<PurchaseOrder>(
             new Filter<PurchaseOrder>(x => x.ClosedDate).IsEqualTo(DateTime.MinValue),
             new Filter<PurchaseOrder>(x => x.ClosedDate).IsEqualTo(DateTime.MinValue),
             Columns.None<PurchaseOrder>().Add(x => x.ID),
             Columns.None<PurchaseOrder>().Add(x => x.ID),
@@ -663,7 +645,12 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
                     x => x.Item.PurchaseOrderLink.SupplierLink.Name)
                     x => x.Item.PurchaseOrderLink.SupplierLink.Name)
                 .ToArray();
                 .ToArray();
             foreach (var tuple in orders)
             foreach (var tuple in orders)
-                column.AddItem($"{tuple.Item2}: {tuple.Item3}", PRSDesktop.Resources.purchase, (r) => ViewPurchaseOrder(tuple.Item1), viewOrder);
+            {
+                if(tuple.Item1 != Guid.Empty)
+                {
+                    column.AddItem($"{tuple.Item2}: {tuple.Item3}", PRSDesktop.Resources.purchase, (r) => ViewPurchaseOrder(tuple.Item1), viewOrder);
+                }
+            }
         }
         }
     }
     }
 
 
@@ -859,92 +846,44 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
 
 
     private void ViewPurchaseOrder(Guid id)
     private void ViewPurchaseOrder(Guid id)
     {
     {
-
-        if (Guid.Equals(id, Guid.Empty)) return;
-        
         var _entity = Client.Query(
         var _entity = Client.Query(
                 new Filter<PurchaseOrder>(x => x.ID).IsEqualTo(id),
                 new Filter<PurchaseOrder>(x => x.ID).IsEqualTo(id),
-                DynamicGridUtils.LoadEditorColumns(Columns.None<PurchaseOrder>())
-            ).Rows
-            .FirstOrDefault()?
-            .ToObject<PurchaseOrder>();
+                DynamicGridUtils.LoadEditorColumns(Columns.None<PurchaseOrder>()))
+            .ToObjects<PurchaseOrder>().FirstOrDefault();
         
         
         if (_entity is null) return;
         if (_entity is null) return;
 
 
-        var _window = new Window() { Title = "View Purchase Order Details" };
-        
-        var _editor = new EmbeddedDynamicEditorForm
+        var window = new DynamicEditorForm()
         {
         {
-            HighlightButtons = true,
-            DisableButtons = true,
-            HideButtons = false,
-            Margin = new Thickness(5)
+            Title = "View Purchase Order Details"
         };
         };
-        _editor.SetValue(Grid.RowProperty, 1);
-        _editor.SetLayoutType<VerticalDynamicEditorGridLayout>();
-        _window.Content = _editor;
+        window.Form.HighlightButtons = true;
+        window.Form.DisableOKIfUnchanged = true;
+        window.Form.SetLayoutType<VerticalDynamicEditorGridLayout>();
 
 
-        new SupplierPurchaseOrders().InitialiseEditorForm(_editor, new PurchaseOrder[] { _entity }, null, true);
+        new SupplierPurchaseOrders().InitialiseEditorForm(window, new PurchaseOrder[] { _entity }, null, true);
         
         
-        _editor.AddButton(new Button()
+        window.Form.AddButton(new Button()
         {
         {
             Content = new System.Windows.Controls.Image() { Source = PRSDesktop.Resources.printer.AsBitmapImage(32,32) },
             Content = new System.Windows.Controls.Image() { Source = PRSDesktop.Resources.printer.AsBitmapImage(32,32) },
-            Command = new ActionCommand(() => ShowReports(_editor, id)),
+            Command = new ActionCommand(() => ShowReports(id)),
             Width = 40
             Width = 40
         });
         });
-        _editor.OnAfterEditorValueChanged += (sender, args) =>
-        {
-            _editor.DisableButtons = false;
-            return null;
-        };
-
-        _editor.OnOK += () =>
-        {
-            _editor.SaveItem(new CancelEventArgs());
-            _window.DialogResult = true;
-            Refresh(false,true);
-        };
-        _editor.OnCancel += () =>
+        if (window.ShowDialog() == true)
         {
         {
-            _window.DialogResult = false;
-        };
-         _editor.OnChanged += (sender, args) =>
-         {
-             _editor.DisableButtons = false;
-         };
-
-        _window.ShowDialog();
-
+            Refresh(false, true);
+        }
     }
     }
 
 
-    private void ShowReports(EmbeddedDynamicEditorForm editor, Guid id)
+    private static void ShowReports(Guid id)
     {
     {
         var _model = new AutoDataModel<PurchaseOrder>(new Filter<PurchaseOrder>(x => x.ID).IsEqualTo(id));
         var _model = new AutoDataModel<PurchaseOrder>(new Filter<PurchaseOrder>(x => x.ID).IsEqualTo(id));
         var menu = new ContextMenu();
         var menu = new ContextMenu();
         var templates = ReportUtils.LoadReports("Purchase Orders", _model, Columns.None<ReportTemplate>().Add(x => x.ID, x => x.Name));
         var templates = ReportUtils.LoadReports("Purchase Orders", _model, Columns.None<ReportTemplate>().Add(x => x.ID, x => x.Name));
-
-        foreach (var template in templates)
-        {
-            var item = new MenuItem
-            {
-                Header = template.Name,
-                Icon = new System.Windows.Controls.Image() { Source = PRSDesktop.Resources.printer.AsBitmapImage(24,24) },
-                Command = new ActionCommand(() => 
-                    ReportUtils.PreviewReport(
-                        template, 
-                        _model, 
-                        false, 
-                        Security.IsAllowed<CanDesignReports>()
-                    )
-                ),
-                IsEnabled = editor.DisableButtons
-            };
-            menu.Items.Add(item);
-
-        }
+        ReportUtils.PopulateMenu(menu, "Purchase Orders", _model, Security.IsAllowed<CanDesignReports>(), true);
 
 
         if (menu.Items.Count == 0)
         if (menu.Items.Count == 0)
-            menu.Items.Add(new MenuItem() { Header = "No Reports Available!" });
+            menu.AddItem("No reports", null, null, enabled: false);
         menu.IsOpen = true;
         menu.IsOpen = true;
     }
     }
 
 
@@ -953,7 +892,6 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
     {
     {
         if (row is null) return;
         if (row is null) return;
 
 
-        List<StockHolding> _holdings = new();
         var _movements = Client.Query(
         var _movements = Client.Query(
             new Filter<StockMovement>(x => x.JobRequisitionItem.ID)
             new Filter<StockMovement>(x => x.JobRequisitionItem.ID)
                 .IsEqualTo(row.Get<JobRequisitionItem, Guid>(x => x.ID)),
                 .IsEqualTo(row.Get<JobRequisitionItem, Guid>(x => x.ID)),
@@ -968,30 +906,11 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
                 .Add(x=>x.Units)
                 .Add(x=>x.Units)
                 .Add(x=>x.Cost)
                 .Add(x=>x.Cost)
         ).ToObjects<StockMovement>();
         ).ToObjects<StockMovement>();
-        foreach (var _movement in _movements)
-        {
-            var _holding = _holdings.FirstOrDefault(x =>
-                Guid.Equals(x.Location.ID, _movement.Location.ID)
-                && Guid.Equals(x.Style.ID, _movement.Style.ID)
-                && x.Dimensions.Equals(_movement.Dimensions)
-            );
-            if (_holding == null)
-            {
-                _holding = new StockHolding();
-                _holding.Location.CopyFrom(_movement.Location);
-                _holding.Style.CopyFrom(_movement.Style);
-                _holding.Dimensions.CopyFrom(_movement.Dimensions);
-                _holding.Units += _movement.Units;
-                _holding.Value += _movement.Units * _movement.Cost;
-                if (!_holding.Units.IsEffectivelyEqual(0.0))
-                    _holding.AverageValue = _holding.Value / _holding.Units;
-            }
-            _holdings.Add(_holding);
-        }
 
 
-        DynamicItemsListGrid<StockHolding> grid = new()
+        var holdings = StockHoldingExtensions.GroupMovements(_movements);
+        var grid = new DynamicItemsListGrid<StockHolding>()
         {
         {
-            Items = _holdings
+            Items = holdings
         };
         };
         grid.ColumnsLoaded += (sender, args) =>
         grid.ColumnsLoaded += (sender, args) =>
         {
         {
@@ -1008,7 +927,6 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
 
 
         var window = DynamicGridUtils.CreateGridWindow("Stock Holdings", grid);
         var window = DynamicGridUtils.CreateGridWindow("Stock Holdings", grid);
         window.ShowDialog();
         window.ShowDialog();
-
     }
     }
     
     
     private void ViewStockMovements(CoreRow? row)
     private void ViewStockMovements(CoreRow? row)

+ 1 - 5
prs.desktop/Panels/Stock Forecast/OrderScreen/StockForecastOrderingGrid.cs

@@ -861,10 +861,6 @@ public class StockForecastOrderingGrid : DynamicItemsListGrid<StockOrderingItem>
                     IsReadOnly = true,
                     IsReadOnly = true,
                     Focusable = false,
                     Focusable = false,
                 };
                 };
-                // editor.ValueChanged += (o, e) =>
-                // {
-                //     Item.GetQuantity(SupplierIndex).OrderTotal = editor.Value ?? default;
-                // };
                 Grid.SetColumn(editor, 0);
                 Grid.SetColumn(editor, 0);
                 grid.Children.Add(editor);
                 grid.Children.Add(editor);
 
 
@@ -884,7 +880,7 @@ public class StockForecastOrderingGrid : DynamicItemsListGrid<StockOrderingItem>
                     var qty = Item.GetQuantity(SupplierIndex);
                     var qty = Item.GetQuantity(SupplierIndex);
 
 
                     var alloc = qty.Breakups
                     var alloc = qty.Breakups
-                        .Where(x=>!(Guid.Equals(x.Key.JobID,Guid.Empty) && Guid.Equals(x.Key.RequiID,Guid.Empty)))
+                        .Where(x => !Guid.Equals(x.Key.JobID,Guid.Empty) || !Guid.Equals(x.Key.RequiID,Guid.Empty))
                         .Sum(x => x.Value);
                         .Sum(x => x.Value);
                     var order = qty.OrderTotal;
                     var order = qty.OrderTotal;
                     var dim = new StockDimensions();
                     var dim = new StockDimensions();

+ 55 - 0
prs.stores/Utilities/DimensionUtils.cs

@@ -0,0 +1,55 @@
+using Comal.Classes;
+using InABox.Core;
+using InABox.Scripting;
+
+namespace PRSDimensionUtils;
+
+public static class DimensionUtils
+{ 
+    private static Dictionary<Guid, ScriptDocument>? _dimensionscriptcache;
+    
+    public static void ResetDimensionScriptCache() => _dimensionscriptcache = null;
+         
+    public static void ReloadDimensionScriptCache(Guid[]? ids, Func<Filter<ProductDimensionUnit>?,Columns<ProductDimensionUnit>,CoreTable> reload)
+    {
+
+        _dimensionscriptcache ??= new Dictionary<Guid, ScriptDocument>();
+
+        var scripts = reload(
+            ids != null
+                ? new Filter<ProductDimensionUnit>(x => x.ID).InList(ids)
+                : null,
+            Columns.None<ProductDimensionUnit>()
+                .Add(x => x.ID)
+                .Add(x => x.Conversion)
+        ).ToDictionary<ProductDimensionUnit, Guid, String>(x => x.ID, x => x.Conversion);
+
+    
+        foreach (var id in scripts.Keys)
+        {
+            var doc = !String.IsNullOrWhiteSpace(scripts[id]) ? new ScriptDocument(scripts[id]) : null;
+            if (doc?.Compile() == true)
+                _dimensionscriptcache[id] = doc;
+            else
+                _dimensionscriptcache.Remove(id);
+        }
+    }
+    
+    public static void ConvertDimensions(IDimensions dimensions, ref double quantity, Func<Filter<ProductDimensionUnit>?,Columns<ProductDimensionUnit>,CoreTable> reload)
+    {
+        if (quantity.IsEffectivelyEqual(0.0))
+            return;
+                
+        if (_dimensionscriptcache == null)
+            ReloadDimensionScriptCache(null, reload);
+        
+        if (_dimensionscriptcache?.TryGetValue(dimensions.Unit.ID, out ScriptDocument? script) == true)
+        {
+            script.SetValue("Quantity", quantity);
+            script.SetValue("Dimensions", dimensions);
+            script.Execute("Module", DimensionUnit.ConvertDimensionsMethodName());
+            quantity = Convert.ToDouble(script.GetValue("Quantity"));
+        }
+    }
+    
+}