瀏覽代碼

Added some code to ensure the right columns are loaded.

Kenric Nugteren 9 月之前
父節點
當前提交
d6d6fc96ca

+ 11 - 8
prs.classes/Entities/Stock/StockHolding/StockHolding.cs

@@ -237,17 +237,20 @@ namespace Comal.Classes
             holding.Weight = holding.Qty * holding.Dimensions.Weight;
         }
         
-        public static IEnumerable<JobRequisitionItem> LoadRequisitionItems(this StockHolding holding, bool alwaysshowunallocated = false)
+        public static IEnumerable<JobRequisitionItem> LoadRequisitionItems(this StockHolding holding, bool alwaysshowunallocated = false, Columns<JobRequisitionItem>? columns = null)
         {
+            columns ??= Columns.None<JobRequisitionItem>();
+            columns.Add(x => x.ID)
+                .Add(x => x.Job.ID)
+                .Add(x => x.Job.JobNumber)
+                .Add(x => x.Job.Name)
+                .Add(x => x.Requisition.Number)
+                .Add(x => x.Requisition.Description)
+                .Add(x => x.Qty);
+
             var items = new Client<JobRequisitionItem>().Query(
                     new Filter<JobRequisitionItem>(x => x.ID).InQuery(StockHolding.GetFilter(holding), x => x.JobRequisitionItem.ID),
-                    Columns.None<JobRequisitionItem>().Add(x => x.ID)
-                        .Add(x => x.Job.ID)
-                        .Add(x => x.Job.JobNumber)
-                        .Add(x => x.Job.Name)
-                        .Add(x => x.Requisition.Number)
-                        .Add(x => x.Requisition.Description)
-                        .Add(x => x.Qty))
+                    columns)
                 .ToObjects<JobRequisitionItem>();
             if (holding.Available > 0 || alwaysshowunallocated)
             {

+ 8 - 2
prs.desktop/Panels/Jobs/Summary/JobSummaryGrid.cs

@@ -62,7 +62,7 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
             ReleaseStock);
     }
 
-    public Dictionary<StockHolding,IEnumerable<JobRequisitionItem>> GetHoldings(CoreRow[] rows)
+    public Dictionary<StockHolding,IEnumerable<JobRequisitionItem>> GetHoldings(CoreRow[] rows, Columns<JobRequisitionItem> jriColumns)
     {
         var result = new Dictionary<StockHolding,IEnumerable<JobRequisitionItem>>();
         foreach (var row in rows)
@@ -147,7 +147,13 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
         var updates = new List<JobRequisitionItem>();
         Progress.ShowModal("Loading Holdings", progress =>
         {
-            var holdings = GetHoldings(rows);
+            var holdings = GetHoldings(rows,
+                Columns.None<JobRequisitionItem>()
+                    .Add(x => x.ID)
+                    .Add(x => x.Cancelled)
+                    .Add(x => x.Archived)
+                    .Add(x => x.Qty)
+                    .Add(x => x.Issued));
             foreach (var holding in holdings)
             {
                 var items = holding.Value.Where(

+ 17 - 5
prs.desktop/Panels/Reservation Management/ReservationManagementPurchasing.xaml.cs

@@ -238,24 +238,36 @@ public partial class ReservationManagementPurchasing : UserControl
         CreatePOEditor();
     }
 
-    public void DropItems(IEnumerable<CoreRow> rows)
+    public void DropItems(IList<CoreRow> rows)
     {
         var page = Editor.Pages.OfType<SupplierPurchaseOrderItemOneToMany>().First();
 
-        if(CreatePOItemsFromRequiItems(rows.ToObjects<JobRequisitionItem>(), page.Items))
+        if(CreatePOItemsFromRequiItems(rows.ToArray<JobRequisitionItem>(), page.Items))
         {
             page.Refresh(false, true);
             page.DoChanged();
         }
     }
 
-    private bool CreatePOItemsFromRequiItems(IEnumerable<JobRequisitionItem> selected, List<PurchaseOrderItem> items)
+    private bool CreatePOItemsFromRequiItems(IList<JobRequisitionItem> selected, List<PurchaseOrderItem> items)
     {
+        // These columns probably are already there, but if they aren't, let's load them.
+        Client.EnsureColumns(selected,
+            Columns.None<JobRequisitionItem>()
+                .Add(x => x.Qty)
+                .Add(x => x.Issued)
+                .Add(x => x.InStock)
+                .Add(x => x.ID)
+                .Add(x => x.Product.Name)
+                .Add(x => x.Product.ID)
+                .Add(x => x.Style.ID)
+                .AddDimensionsColumns(x => x.Dimensions, Dimensions.ColumnsType.Data));
+
         var changed = false;
         foreach (var jobRequisitionItem in selected)
         {
-            // We only want not checked or order required.
-            if(!jobRequisitionItem.Qty.IsEffectivelyGreaterThan(jobRequisitionItem.InStock))
+            // We only want stuff which doesn't have enough total stock allocated, which is the InStock and Issued added together.
+            if(!jobRequisitionItem.Qty.IsEffectivelyGreaterThan(jobRequisitionItem.InStock + jobRequisitionItem.Issued))
                 continue;
             
             // Filter out ones we've already got.

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

@@ -68,9 +68,9 @@ public class StockForecastOrderData(ProductLink product, ProductStyleLink style,
 
     public List<QuantityBreakup> GetRequiredQuantities() => RequiredQuantities;
     
-    public void SetRequiredQuantity(Guid jobid, Guid requiid, string description, double qty)
+    public void SetRequiredQuantity(Guid jobID, Guid requiID, string description, double qty)
     {
-        RequiredQuantities.Add(new(jobid, requiid,description,qty));
+        RequiredQuantities.Add(new(jobID, requiID, description,qty));
     }
 }
 
@@ -85,7 +85,6 @@ public class StockForecastOrderingItemQuantity
     public event Action? Changed;
 
     private double orderTotal;
-
     public double OrderTotal
     {
         get => orderTotal;
@@ -478,7 +477,9 @@ public class StockForecastOrderingGrid : DynamicItemsListGrid<StockForecastOrder
                 qty.OrderTotal = GetRequiredQuantity(item, selectedSupplierProduct, item.RequiredQuantity);
                 qty.Breakups.Clear();
                 foreach(var (id, q) in item.GetJobRequiredQuantities())
-                        qty.Breakups[id] = q;
+                {
+                    qty.Breakups[id] = q;
+                }
             }
         }
     }