Kenric Nugteren před 9 měsíci
rodič
revize
3d8d501add

+ 25 - 5
prs.classes/Entities/PurchaseOrder/PurchaseOrder.cs

@@ -270,6 +270,8 @@ namespace Comal.Classes
             LinkedProperties.Register<PurchaseOrder, SupplierLink, String>(x => x.SupplierLink, x => x.Code, x => x.SupplierCode);
             LinkedProperties.Register<PurchaseOrder, SupplierLink, String>(x => x.SupplierLink, x => x.Name, x => x.SupplierName);
         }
+
+        private static Column<PurchaseOrderItem> POProductIDColumn = new Column<PurchaseOrderItem>(x => x.Product.ID);
         
         /// <summary>
         /// Recalculate the cost of each PurchaseOrderItem in <paramref name="items"/>, by finding a <see cref="SupplierProduct"/> that matches.
@@ -277,7 +279,7 @@ namespace Comal.Classes
         /// <param name="items"></param>
         /// <param name="supplierid"></param>
         /// <param name="changes"></param>
-        public static void UpdateCosts(IEnumerable<PurchaseOrderItem> items, Guid supplierid, Dictionary<String,object?> changes)
+        public static void UpdateCosts(IEnumerable<PurchaseOrderItem> items, Guid supplierid, Dictionary<String,object?> changes, string columnName)
         {
             var itemsList = items.AsIList();
 
@@ -329,8 +331,17 @@ namespace Comal.Classes
                     && x.Job.ID == item.Job.ID);
                 if (supplierProduct != null)
                 {
-                    UpdateValue<string>(item, x => x.SupplierCode, supplierProduct.SupplierCode);
-                    UpdateValue<string>(item, x => x.Description, supplierProduct.SupplierDescription);
+                    if(POProductIDColumn.IsEqualTo(columnName))
+                    {
+                        if (!supplierProduct.SupplierCode.IsNullOrWhiteSpace())
+                        {
+                            UpdateValue<string>(item, x => x.SupplierCode, supplierProduct.SupplierCode);
+                        }
+                        if (!supplierProduct.SupplierDescription.IsNullOrWhiteSpace())
+                        {
+                            UpdateValue<string>(item, x => x.Description, supplierProduct.SupplierDescription);
+                        }
+                    }
                     UpdateValue<double>(item, x => x.ForeignCurrencyCost, supplierProduct.ForeignCurrencyPrice);
                     UpdateValue<double>(item, x => x.Cost, supplierProduct.CostPrice);
                     continue;
@@ -345,8 +356,17 @@ namespace Comal.Classes
                     && x.Job.ID == Guid.Empty);
                 if (supplierProduct != null)
                 {
-                    UpdateValue<string>(item, x => x.SupplierCode, supplierProduct.SupplierCode);
-                    UpdateValue<string>(item, x => x.Description, supplierProduct.SupplierDescription);
+                    if(POProductIDColumn.IsEqualTo(columnName))
+                    {
+                        if (!supplierProduct.SupplierCode.IsNullOrWhiteSpace())
+                        {
+                            UpdateValue<string>(item, x => x.SupplierCode, supplierProduct.SupplierCode);
+                        }
+                        if (!supplierProduct.SupplierDescription.IsNullOrWhiteSpace())
+                        {
+                            UpdateValue<string>(item, x => x.Description, supplierProduct.SupplierDescription);
+                        }
+                    }
                     UpdateValue<double>(item, x => x.ForeignCurrencyCost, supplierProduct.ForeignCurrencyPrice);
                     UpdateValue<double>(item, x => x.Cost, supplierProduct.CostPrice);
                     continue;

+ 1 - 0
prs.classes/Entities/PurchaseOrder/PurchaseOrderItemLookups.cs

@@ -51,6 +51,7 @@ namespace Comal.Classes
                 .Add(x => x.Cost)
                 .Add(x => x.Product.ID)
                 .Add(x => x.Style.ID)
+                .Add(x => x.Job.ID)
                 .Add(x=>x.ReceivedDate)
                 .Add(x => x.Consignment.ID)
                 .Add(x => x.Consignment.ExTax)

+ 1 - 3
prs.desktop/Panels/Factory/FactoryPanel.xaml.cs

@@ -721,7 +721,6 @@ namespace PRSDesktop
                     ? product.NettCost
                     : 0.0F;
 
-            Dictionary<PurchaseOrderItem, Guid> jobmappings = new();
             foreach (var row in window.Selected)
             {
                 var treatment = row.ToObject<ManufacturingTreatment>();
@@ -733,7 +732,6 @@ namespace PRSDesktop
                 var item = new PurchaseOrderItem();
                 item.PurchaseOrderLink.ID = order.ID;
                 item.Job.ID = treatment.Packet.SetoutLink.JobLink.ID;
-                jobmappings[item] = item.Job.ID;
                 item.Packet.ID = packet.ID;
                 item.Product.ID = window.ProductID;
                 if(product is not null)
@@ -745,7 +743,7 @@ namespace PRSDesktop
 
                 item.Dimensions.Length = treatment.Parameter == 0.0F ? 1.0F : treatment.Parameter;
 
-                var jobprice = supprods.FirstOrDefault(x => x.Job.ID.Equals(jobmappings[item]));
+                var jobprice = supprods.FirstOrDefault(x => x.Job.ID.Equals(item.Job.ID));
                 item.Cost = (jobprice != null ? jobprice.CostPrice : stdcost) * treatment.Parameter;
 
                 var description = new List<string>();

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

@@ -884,9 +884,7 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
         var page = new SupplierPurchaseOrders();
         page.OnAfterSave += (form, items) =>
         {
-            PurchaseOrderOnSave(form, items.Cast<PurchaseOrder>().ToArray());
             MessageBox.Show("Success - New Purchase Order Created (" + purchaseOrder.PONumber + ")");
-            
         };
         return page.EditItems(new[] { purchaseOrder }, LoadPurchaseOrderItems, true);
     }
@@ -910,6 +908,7 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
             POItem.Style.ID = material.Style.ID;
             POItem.Style.Code = material.Style.Code;
             POItem.Style.Description = material.Style.Description;
+            POItem.Job.ID = material.Job.ID;
             POItem.Dimensions.UnitSize = material.Dimensions.UnitSize;
             items.Add(POItem);
         }

+ 2 - 1
prs.desktop/Panels/PurchaseOrders/SupplierPurchaseOrderItemOneToMany.cs

@@ -712,7 +712,8 @@ public class SupplierPurchaseOrderItemOneToMany : DynamicOneToManyGrid<PurchaseO
             PurchaseOrder.UpdateCosts(
                 items, 
                 Item.SupplierLink.ID,
-                changes
+                changes,
+                args.ColumnName
             );
         }
     }

+ 1 - 1
prs.desktop/Panels/Reservation Management/ReservationManagementPanel.xaml.cs

@@ -572,7 +572,7 @@ public partial class ReservationManagementPanel : UserControl, IPanel<JobRequisi
                     orderItems.WithIndex().Select(x => new Tuple<PurchaseOrderItem, Guid>(x.Value.Item1, perSupplier[x.Key].SupplierProduct.TaxCode.ID)),
                     x => x.TaxCode);
                 LookupFactory.DoLookups<PurchaseOrderItem, Job, JobLink>(
-                    orderItems.WithIndex().Select(x => new Tuple<PurchaseOrderItem, Guid>(x.Value.Item1, x.Value.Item2.Job.ID)),
+                    orderItems.Select(x => new Tuple<PurchaseOrderItem, Guid>(x.Item1, x.Item2.Job.ID)),
                     x => x.Job);
 
                 foreach (var (i, item) in perSupplier.WithIndex())