فهرست منبع

Fixed saving issue with JobRequiItemStore, which wasn't saving items when calculating status. Fixed null columns query in POItemStore, which was massively slowing down saves.
Wrote database update script to get to 7.52

Kenric Nugteren 1 سال پیش
والد
کامیت
7bb2d222ff

+ 1 - 0
prs.shared/Database Update Scripts/DatabaseUpdateScripts.cs

@@ -39,5 +39,6 @@ public static class DatabaseUpdateScripts
         DataUpdater.RegisterUpdateScript<Update_7_43>();
         DataUpdater.RegisterUpdateScript<Update_7_48_ProductInstances>();
         DataUpdater.RegisterUpdateScript<Update_7_48_RequisitionActualQuantity>();
+        DataUpdater.RegisterUpdateScript<Update_7_52>();
     }
 }

+ 11 - 4
prs.stores/JobRequisitionItemStore.cs

@@ -14,7 +14,7 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
     {
         if (item.ID != Guid.Empty)
         {
-            var newStatus = CalculateStatus(this, item.ID);
+            var newStatus = CalculateStatus(this, item);
             if(newStatus != null)
             {
                 item.Status = newStatus.Value;
@@ -23,7 +23,7 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
         base.BeforeSave(item);
     }
 
-    private static Columns<JobRequisitionItem> StatusRequiredColumns()
+    public static Columns<JobRequisitionItem> StatusRequiredColumns()
     {
         return new Columns<JobRequisitionItem>(
             x => x.ID,
@@ -36,7 +36,13 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
             x => x.Qty);
     }
 
-    private static JobRequisitionItemStatus? CalculateStatus(IStore store, JobRequisitionItem item)
+    /// <summary>
+    /// Ensure that the columns of <paramref name="item"/> match <see cref="StatusRequiredColumns"/>.
+    /// </summary>
+    /// <param name="store"></param>
+    /// <param name="item"></param>
+    /// <returns></returns>
+    public static JobRequisitionItemStatus? CalculateStatus(IStore store, JobRequisitionItem item)
     {
         if (item.Archived != DateTime.MinValue)
         {
@@ -79,7 +85,7 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
                     new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.JobRequisitionItem.ID).IsEqualTo(item.ID)
                         .And(x => x.PurchaseOrderItem.ReceivedDate).IsEqualTo(DateTime.MinValue)
                         .And(x => x.PurchaseOrderItem.Product.ID).IsNotEqualTo(item.Product.ID),
-                    new Columns<JobRequisitionItemPurchaseOrderItem>());
+                    new Columns<JobRequisitionItemPurchaseOrderItem>(x => x.ID));
                 if (jriPois.Rows.Count > 0)
                 {
                     return JobRequisitionItemStatus.TreatmentOnOrder;
@@ -170,6 +176,7 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
             if (newStatus.HasValue)
             {
                 item.Status = newStatus.Value;
+                store.Provider.Save(item);
             }
         }
     }

+ 18 - 6
prs.stores/PurchaseOrderItemStore.cs

@@ -10,6 +10,19 @@ namespace Comal.Stores;
 
 internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
 {
+    private Columns<PurchaseOrderItem> RequiredColumns()
+    {
+        return new Columns<PurchaseOrderItem>(x => x.ID)
+            .Add(x => x.Product.ID)
+            .Add(x => x.Qty)
+            .Add(x => x.Cost)
+            .Add(x => x.StockLocation.ID)
+            .Add(x => x.Style.ID)
+            .Add(x => x.Job.ID)
+            .Add(x => x.ReceivedDate)
+            .Add(x => x.PurchaseOrderLink.PONumber)
+            .AddDimensionsColumns(x => x.Dimensions, Dimensions.ColumnsType.Data);
+    }
 
     private void UpdateStockMovements(PurchaseOrderItem entity)
     {
@@ -281,8 +294,6 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
             movement.Job.ID = entity.Job.ID;
             movement.Location.ID = locationid;
             movement.Style.ID = entity.Style.ID;
-            movement.Style.Code = entity.Style.Code;
-            movement.Style.Description = entity.Style.Description;
             movement.Notes = string.Format("Received on PO {0}", entity.PurchaseOrderLink.PONumber);
             movement.Cost = entity.Cost;
             movement.Type = StockMovementType.Receive;
@@ -298,7 +309,7 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
             movement.JobRequisitionItem.ID = jobRequisitionItemID;
         }
 
-        var updates = movements.Where(x => x.IsChanged());
+        var updates = movements.Where(x => x.IsChanged()).ToList();
         if (updates.Any())
             FindSubStore<StockMovement>().Save(updates, "Updated by Purchase Order Modification");
     }
@@ -326,9 +337,10 @@ internal class PurchaseOrderItemStore : BaseStore<PurchaseOrderItem>
                 DeleteStockMovements(entity);
             else
             {
-                var item = Provider
-                    .Query(new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.ID))
-                    .Rows.FirstOrDefault()?.ToObject<PurchaseOrderItem>();
+                var item = Provider.Query(
+                        new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.ID),
+                        RequiredColumns())
+                    .ToObjects<PurchaseOrderItem>().FirstOrDefault();
                 if (item != null)
                 {
                     UpdateStockMovements(item);