Procházet zdrojové kódy

Added creating a picking list from Factory Floor

Kenric Nugteren před 1 rokem
rodič
revize
a6678047f7

+ 5 - 2
prs.desktop/Panels/Factory/FactoryPanel.xaml.cs

@@ -1768,7 +1768,7 @@ namespace PRSDesktop
         private void UpdateFlag(object sender, string property, bool value)
         {
             var updates = new List<ManufacturingPacket>();
-            var rows = (sender as MenuItem).Tag as IEnumerable<CoreRow>;
+            var rows = (sender as MenuItem)!.Tag as IEnumerable<CoreRow>;
             foreach (var row in rows)
             {
                 var packet = row.ToObject<ManufacturingPacket>();
@@ -2570,7 +2570,10 @@ namespace PRSDesktop
 
         private void RequestMaterials_Click(object sender, RoutedEventArgs e)
         {
-
+            var updates = new List<ManufacturingPacket>();
+            var rows = (sender as MenuItem)!.Tag as IEnumerable<CoreRow>;
+            ManufacturingPanelColumn.CreatePickingList(rows!.Select(x => x.ToObject<ManufacturingPacket>()).ToList(), true,
+                () => new GlobalConfiguration<ManufacturingPanelProperties>().Load());
         }
     }
 }

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

@@ -18,6 +18,7 @@ using InABox.Wpf.Reports;
 using InABox.WPF;
 using InABox.Scripting;
 using System.Threading;
+using InABox.Wpf;
 
 namespace PRSDesktop
 {
@@ -719,9 +720,9 @@ namespace PRSDesktop
                 ProgressPacket(model, date, Guid.Empty);
         }
 
-        private List<RequisitionItem>? CustomisePickingList(Requisition requisition, List<RequisitionItem> items)
+        private static List<RequisitionItem>? CustomisePickingList(Requisition requisition, List<RequisitionItem> items, Func<ManufacturingPanelProperties> properties)
         {
-            var script = Data.Properties.PickingListOptimisationScript;
+            var script = properties().PickingListOptimisationScript;
             if (!script.IsNullOrWhiteSpace())
             {
                 var scriptDocument = new ScriptDocument(script);
@@ -738,29 +739,19 @@ namespace PRSDesktop
             return items;
         }
 
-        private void CreatePickingList_Click(object sender, RoutedEventArgs e)
+        public static void CreatePickingList(IList<ManufacturingPacket> packets, bool allowNoComponents, Func<ManufacturingPanelProperties> properties)
         {
-            var item = (MenuItem)sender;
-            var model = (ManufacturingKanban)item.Tag;
-
-            var pkts = GetSelectedPackets(model.ID).ToList();
-            if(pkts.Count == 0)
-            {
-                MessageBox.Show("Cannot create picking list: no packets selected.");
-                return;
-            }
-
-            var jobs = pkts.Select(x => x.SetoutLink.JobLink.ID).Distinct().ToArray();
+            var jobs = packets.Select(x => x.SetoutLink.JobLink.ID).Distinct().ToArray();
             if(jobs.Length > 1)
             {
-                MessageBox.Show("Cannot create picking list: packets from more than one job are selected.");
+                MessageWindow.ShowMessage("Cannot create picking list: packets from more than one job are selected.", "Multiple jobs selected");
                 return;
             }
             var jobID = jobs.First();
 
             var components =
                 Client.Query(
-                    new Filter<ManufacturingPacketComponent>(x => x.Packet.ID).InList(pkts.Select(x => x.ID).ToArray())
+                    new Filter<ManufacturingPacketComponent>(x => x.Packet.ID).InList(packets.Select(x => x.ID).ToArray())
                         .And(x => x.Requisition.ID).IsEqualTo(Guid.Empty),
                     new Columns<ManufacturingPacketComponent>()
                         .Add(x => x.ID)
@@ -775,24 +766,18 @@ namespace PRSDesktop
                         .Add(x => x.Product.DefaultLocation.Code)
                         .Add(x => x.Product.DefaultLocation.Description)
                         .Add(x => x.Quantity)
-                        .Add(x => x.Dimensions.Unit.ID)
-                        .Add(x => x.Dimensions.Quantity)
-                        .Add(x => x.Dimensions.Length)
-                        .Add(x => x.Dimensions.Width)
-                        .Add(x => x.Dimensions.Height)
-                        .Add(x => x.Dimensions.Weight)
-                        .Add(x => x.Dimensions.UnitSize))
-                .ToObjects<ManufacturingPacketComponent>().ToList();
-            if (components.Count == 0)
+                        .AddDimensionsColumns(x => x.Dimensions, Dimensions.ColumnsType.Local))
+                .ToList<ManufacturingPacketComponent>();
+            if (components.Count == 0 && !allowNoComponents)
             {
-                MessageBox.Show("No items to create picking list; all selected components already have requisitions.");
+                MessageWindow.ShowMessage("No items to create picking list; all selected components already have requisitions.", "No components");
                 return;
             }
 
             var requisitionItems = new List<RequisitionItem>();
             foreach(var component in components)
             {
-                var packet = pkts.Find(x => x.ID == component.Packet.ID);
+                var packet = packets.FirstOrDefault(x => x.ID == component.Packet.ID);
                 if(packet is null)
                 {
                     continue;
@@ -816,7 +801,7 @@ namespace PRSDesktop
 
             var requisition = new Requisition
             {
-                Title = $"Materials for {string.Join(',', pkts.Select(x => x.Serial))}"
+                Title = $"Materials for {string.Join(',', packets.Select(x => x.Serial))}"
             };
             requisition.Notes = new[] { requisition.Title };
             requisition.RequestedBy.ID = App.EmployeeID;
@@ -825,10 +810,10 @@ namespace PRSDesktop
 
             try
             {
-                requisitionItems = CustomisePickingList(requisition, requisitionItems);
+                requisitionItems = CustomisePickingList(requisition, requisitionItems, properties);
                 if (requisitionItems is null)
                 {
-                    MessageBox.Show("Creating picking list cancelled.");
+                    MessageWindow.ShowMessage("Creating picking list cancelled.", "Cancelled");
                     return;
                 }
 
@@ -850,15 +835,30 @@ namespace PRSDesktop
                         component.Requisition.ID = requisition.ID;
                     }
                     new Client<ManufacturingPacketComponent>().Save(components, $"Created picking list for requisition {requisition.Number}.");
-                    MessageBox.Show($"Created requisition {requisition.Number}");
+                    MessageWindow.ShowMessage($"Created requisition {requisition.Number}", "Success");
                 }
             }
             catch(Exception err)
             {
-                MessageBox.Show($"Error: {err.Message}");
+                MessageWindow.ShowError("Error creating picking list.", err);
             }
         }
 
+        private void CreatePickingList_Click(object sender, RoutedEventArgs e)
+        {
+            var item = (MenuItem)sender;
+            var model = (ManufacturingKanban)item.Tag;
+
+            var pkts = GetSelectedPackets(model.ID).ToList();
+            if(pkts.Count == 0)
+            {
+                MessageWindow.ShowMessage("Cannot create picking list: no packets selected.", "No packets selected");
+                return;
+            }
+
+            CreatePickingList(pkts, false, () => Data.Properties);
+        }
+
         private void IssueGroup_Click(object sender, RoutedEventArgs e)
         {
             var item = (MenuItem)sender;