|
@@ -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;
|