Browse Source

Fixed issue when receiving PO Items linked to Job Requisition Items

frogsoftware 1 year ago
parent
commit
0f560e22f9

+ 3 - 2
prs.desktop/Panels/Delivery/DeliveryRackList.cs

@@ -74,8 +74,9 @@ internal class DeliveryRackList : DynamicDataGrid<Shipment>, IMasterDetailContro
                 shipment.Delivery.Synchronise(Master);
             }
 
-            var items = new Client<DeliveryItem>().Query(filter,
-                new Columns<DeliveryItem>(x => x.Delivery.ID).Add(x => x.ID)).ToArray<DeliveryItem>();
+            var itemtable = new Client<DeliveryItem>().Query(filter,
+                new Columns<DeliveryItem>(x => x.Delivery.ID).Add(x => x.ID));
+            var items = itemtable.ToArray<DeliveryItem>();
             foreach (var item in items)
             {
                 item.Delivery.ID = Master.ID;

+ 1 - 1
prs.desktop/prsdesktop.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Desktop"
-#define MyAppVersion "7.66"
+#define MyAppVersion "7.66b"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSDesktop.exe"

+ 1 - 1
prs.licensing/PRSLicensing.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Licensing"
-#define MyAppVersion "7.66"
+#define MyAppVersion "7.66b"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSLicensing.exe"

+ 1 - 1
prs.server/PRSServer.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Server"
-#define MyAppVersion "7.66"
+#define MyAppVersion "7.66b"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSServer.exe"

+ 32 - 18
prs.stores/PurchaseOrderItemStore.cs

@@ -54,15 +54,17 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
         var locationid = entity.StockLocation.ID;
         var locationValid = entity.StockLocation.IsValid();
 
-        var jobRequisitionItemTask = Task<Guid>.Run(() =>
+        var jriTask = Task<Guid>.Run(() =>
         {
             return Provider.Query(
                 new Filter<JobRequisitionItem>(x => x.ID).InQuery(
                     new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.ID).IsEqualTo(entity.ID),
                     x => x.JobRequisitionItem.ID),
                 new Columns<JobRequisitionItem>(x => x.ID)
-                    .Add(x => x.Status))
-            .ToObjects<JobRequisitionItem>().FirstOrDefault();
+                    .Add(x => x.Status)
+                    .Add(x=>x.Qty)
+                )
+            .ToObjects<JobRequisitionItem>();
         });
 
         var instancetask = new Task<CoreRow?>(() =>
@@ -142,12 +144,12 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
         });
         locationtask.Start();
 
-        Task.WaitAll(producttask, locationtask, instancetask, jobRequisitionItemTask);
+        Task.WaitAll(producttask, locationtask, instancetask, jriTask);
 
         var instancerow = instancetask.Result;
         var productrow = producttask.Result;
         var defaultlocations = locationtask.Result;
-        var jri = jobRequisitionItemTask.Result;
+        var jris = jriTask.Result.ToArray();
         
         if (productrow is null)
         {
@@ -266,6 +268,26 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
         };
         var movements = new List<StockMovement>();
 
+        var _pototal = entity.Qty;
+        foreach (var jri in jris)
+        {
+            CreateMovement(entity, locationid, movements, jri, jri.Qty);
+            _pototal -= jri.Qty;
+        }
+        if (!_pototal.IsEffectivelyEqual(0.0F))
+            CreateMovement(entity, locationid, movements, null, _pototal);
+
+        FindSubStore<StockMovementBatch>().Save(batch, "Received on PO");
+        foreach(var mvt in movements)
+        {
+            mvt.Batch.ID = batch.ID;
+        }
+        
+        FindSubStore<StockMovement>().Save(movements, "Updated by Purchase Order Modification");
+    }
+
+    private static void CreateMovement(PurchaseOrderItem entity, Guid locationid, List<StockMovement> movements, JobRequisitionItem jri, double qty)
+    {
         var movement = new StockMovement();
         movement.Product.ID = entity.Product.ID;
         movement.Job.ID = entity.Job.ID;
@@ -274,15 +296,15 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
         movement.Dimensions.CopyFrom(entity.Dimensions);
 
         movement.Date = entity.ReceivedDate;
-        movement.Received = entity.Qty;
+        movement.Received = qty;
         movement.Employee.ID = Guid.Empty;
         movement.OrderItem.ID = entity.ID;
         movement.Notes = string.Format("Received on PO {0}", entity.PurchaseOrderLink.PONumber);
         movement.Cost = entity.Cost;
         movement.Type = StockMovementType.Receive;
         movements.Add(movement);
-
-        if(jri is not null)
+        
+        if (jri is not null)
         {
             movement.JobRequisitionItem.ID = jri.ID;
             if (!jri.Cancelled.IsEmpty())
@@ -292,7 +314,7 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
                 var tOut = movement.CreateMovement();
                 tOut.JobRequisitionItem.ID = jri.ID;
                 tOut.Date = entity.ReceivedDate;
-                tOut.Issued = entity.Qty;
+                tOut.Issued = jri.Qty;
                 tOut.OrderItem.ID = entity.ID;
                 tOut.Notes = "Internal transfer from cancelled requisition";
                 tOut.System = true;
@@ -302,7 +324,7 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
                 var tIn = movement.CreateMovement();
                 tIn.Transaction = tOut.Transaction;
                 tIn.Date = entity.ReceivedDate;
-                tIn.Received = entity.Qty;
+                tIn.Received = jri.Qty;
                 tIn.OrderItem.ID = entity.ID;
                 tOut.Notes = "Internal transfer from cancelled requisition";
                 tOut.System = true;
@@ -313,14 +335,6 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
                 movements.Add(tIn);
             }
         }
-
-        FindSubStore<StockMovementBatch>().Save(batch, "Received on PO");
-        foreach(var mvt in movements)
-        {
-            mvt.Batch.ID = batch.ID;
-        }
-        
-        FindSubStore<StockMovement>().Save(movements, "Updated by Purchase Order Modification");
     }