Browse Source

Added order button from stock Forecast screen

Kenric Nugteren 1 year ago
parent
commit
3b4151e7a4

+ 1 - 1
prs.desktop/Panels/Jobs/DocumentSets/JobDocumentSetPanel.xaml.cs

@@ -165,7 +165,7 @@ namespace PRSDesktop
 
         private void JobSettingsClick(PanelAction obj)
         {
-            if (DynamicGridUtils.Edit(_settings))
+            if (DynamicGridUtils.EditObject(_settings))
                 new GlobalConfiguration<JobDocumentSetSettings>().Save(_settings);
         }
 

+ 1 - 1
prs.desktop/Panels/Manufacturing/ManufacturingPanelColumn.xaml.cs

@@ -817,7 +817,7 @@ namespace PRSDesktop
                     return;
                 }
 
-                var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicGrid<>), typeof(Requisition));
+                var grid = DynamicGridUtils.CreateDynamicGrid<Requisition>(typeof(DynamicGrid<>));
                 if (grid.EditItems(new Requisition[] { requisition }, t =>
                 {
                     if (t == typeof(RequisitionItem))

+ 71 - 4
prs.desktop/Panels/StockSummary/StockSummaryGrid.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using System.Linq.Expressions;
 using System.Reflection;
 using System.Windows;
+using System.Windows.Controls;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using Comal.Classes;
@@ -35,6 +36,8 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
     public Guid[] SupplierIDs { get; set; }
 
     private StockSummaryMinimumStockBehaviour MinStockBehaviour { get; set; }
+
+    private Button OrderButton;
     
     public StockSummaryGrid() : base()
     {
@@ -47,6 +50,7 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
         
         HiddenColumns.Add(x => x.Product.ID);
         HiddenColumns.Add(x => x.Product.Issues);
+        HiddenColumns.Add(x => x.Product.Supplier.SupplierLink.ID);
         HiddenColumns.Add(x => x.Issues);
         HiddenColumns.Add(x => x.Style.ID);
         HiddenColumns.Add(x => x.Job.ID);
@@ -73,6 +77,70 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
         OnCellDoubleClick += StockSummaryGrid_OnCellDoubleClick;
 
         MinStockBehaviour = new GlobalConfiguration<StockSummaryPanelSettings>().Load().MinimumStockBehaviour;
+
+        OrderButton = AddButton("Order Stock", PRSDesktop.Resources.purchase.ToBitmapImage(), OrderStock_Click);
+        OrderButton.IsEnabled = false;
+    }
+
+    protected override void SelectItems(CoreRow[]? rows)
+    {
+        base.SelectItems(rows);
+
+        OrderButton.IsEnabled = rows is not null && rows.Length > 0;
+    }
+
+    private bool OrderStock_Click(Button button, CoreRow[] rows)
+    {
+        if(rows.Length == 0)
+        {
+            return false;
+        }
+
+        var items = rows.ToObjects<StockSummary>().ToArray();
+
+        var order = new PurchaseOrder();
+        order.Description = "Purchase Order created from Stock Forecast Screen";
+        order.RaisedBy.ID = App.EmployeeID;
+        order.IssuedBy.ID = App.EmployeeID;
+        order.IssuedDate = DateTime.Today;
+
+        var orderItems = new List<PurchaseOrderItem>();
+
+        foreach(var stockSummary in items)
+        {
+            var orderItem = new PurchaseOrderItem();
+            orderItem.Product.ID = stockSummary.Product.ID;
+            orderItem.Style.ID = stockSummary.Style.ID;
+            orderItem.Job.ID = stockSummary.Job.ID;
+            orderItem.Dimensions.CopyFrom(stockSummary.Dimensions);
+            orderItem.Qty = Math.Max(-stockSummary.BalanceAvailable, 0);
+            orderItems.Add(orderItem);
+        }
+        LookupFactory.DoLookups<PurchaseOrderItem, Product, ProductLink>(
+            orderItems.Select(x => new Tuple<PurchaseOrderItem, Guid>(x, x.Product.ID)),
+            x => x.Product);
+        LookupFactory.DoLookups<PurchaseOrderItem, ProductStyle, ProductStyleLink>(
+            orderItems.Select(x => new Tuple<PurchaseOrderItem, Guid>(x, x.Style.ID)),
+            x => x.Style);
+        LookupFactory.DoLookups<PurchaseOrderItem, Job, JobLink>(
+            orderItems.Select(x => new Tuple<PurchaseOrderItem, Guid>(x, x.Job.ID)),
+            x => x.Job);
+
+        if (DynamicGridUtils.EditEntity(order, t =>
+        {
+            if (t == typeof(PurchaseOrderItem))
+            {
+                var table = new CoreTable();
+                table.LoadColumns(typeof(PurchaseOrderItem));
+                table.LoadRows(orderItems);
+                return table;
+            }
+            return null;
+        }, preloadPages: true))
+        {
+            MessageWindow.ShowMessage("Purchase order created.", "Success.");
+        }
+        return false;
     }
 
     private BitmapImage? Issues_Image(CoreRow? row)
@@ -486,13 +554,12 @@ public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
             );
             query.Query();
             var holdings = query.Get<StockHolding>();
-            Columns<StockHolding> holdingcolumns = new Columns<StockHolding>(holdings.Columns.Select(x => x.ColumnName));
+            var holdingcolumns = new Columns<StockHolding>(holdings.Columns.Select(x => x.ColumnName));
             
             var orders = query.Get<PurchaseOrderItem>();
-            Columns<PurchaseOrderItem> ordercolumns = new Columns<PurchaseOrderItem>(orders.Columns.Select(x => x.ColumnName));
+            var ordercolumns = new Columns<PurchaseOrderItem>(orders.Columns.Select(x => x.ColumnName));
 
-            
-            CoreTable table = new CoreTable();
+            var table = new CoreTable();
             table.LoadColumns(columns);
             
             if (o != null)

+ 1 - 1
prs.desktop/Panels/Users/UserGrid.cs

@@ -83,7 +83,7 @@ namespace PRSDesktop
                 To = user.EmailAddress,
                 ExpiryTime = 10
             };
-            if (DynamicGridUtils.Edit(data, customiseGrid: (grid) =>
+            if (DynamicGridUtils.EditObject(data, customiseGrid: (grid) =>
             {
                 grid.OnLoadEditorButtons += (item, buttons) =>
                 {