Hi Mike,
thanks for this - i will hold on to this sample. That compiles well.
However , what I'm after is input components , not output - ie; when someone saves the order I want to capture if any of the input component has been partially allocated. Example of a demo data wok order is pasted.
In this case the item “test” is partially allocated.
Based on your code – (which is looking at the output components) I tried to create a scenario for input components but I am getting a compilation error.
Besides that I want to use it on the Form Plugin as opposed to business logic plugin which you have used.
What should I do to make it work pls - what am I missing?
My code sample attached.,
Error:
Message
'JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.WorkOrder' does not contain a definition for 'InputItems' and no extension method 'InputItems' accepting a first argument of type 'JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.WorkOrder' could be found (
- Code: Select all
public class FormPlugin : System.MarshalByRefObject, JiwaFinancials.Jiwa.JiwaApplication.IJiwaFormPlugin
{
public override object InitializeLifetimeService()
{
// returning null here will prevent the lease manager
// from deleting the Object.
return null;
}
public void SetupBeforeHandlers(JiwaFinancials.Jiwa.JiwaApplication.IJiwaForm JiwaForm, JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin Plugin)
{
}
public void Setup(JiwaFinancials.Jiwa.JiwaApplication.IJiwaForm JiwaForm, JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin Plugin)
{
if(JiwaForm is JiwaFinancials.Jiwa.JiwaBillOfMaterialsUI.WorkOrder.WorkOrder )
{
JiwaFinancials.Jiwa.JiwaBillOfMaterialsUI.WorkOrder.WorkOrder workOrderForm = (JiwaFinancials.Jiwa.JiwaBillOfMaterialsUI.WorkOrder.WorkOrder )JiwaForm;
workOrderForm.WorkOrder.SaveStart += WorkOrder_SaveStart;
}
}
private void WorkOrder_SaveStart(object sender, System.EventArgs e)
{
JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.WorkOrder workOrder = (JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.WorkOrder)sender;
foreach(JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.InputItem inputItem in workOrder.InputItems) // error
{
foreach(JiwaFinancials.Jiwa.JiwaApplication.Inventory.SOH.LineDetail<JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.InputItem> inputLineDetail in inputItem.LineDetails)
{
if (workOrder.Allocations.get_TotalQuantityOutputUnAllocated(inputLineDetail) > 0)
{
MessageBox.Show("SaveStart fired for Work Order " + workOrder.ToString(), "Test");
throw new Exception(String.Format("Input item {0} has a line detail not fully allocated.", inputItem.Inventory.PartNo));
}
}
}
}
private void MikesVersion_WorkOrder_SaveStart(object sender, System.EventArgs e)
{
JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.WorkOrder workOrder = (JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.WorkOrder)sender;
foreach(JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.OutputItem outputItem in workOrder.OutputItems)
{
foreach(JiwaFinancials.Jiwa.JiwaApplication.Inventory.SOH.LineDetail<JiwaFinancials.Jiwa.JiwaBillOfMaterials.WorkOrder.OutputItem> outputLineDetail in outputItem.LineDetails)
{
if (workOrder.Allocations.get_TotalQuantityOutputUnAllocated(outputLineDetail) > 0)
{
throw new Exception(String.Format("Output item {0} has a line detail not fully allocated.", outputItem.Inventory.PartNo));
}
// workOrder.Allocations.get_TotalQuantityOutputAllocated(outputLineDetail) returns the total allocated (as opposed to unallocated)
// And there are also other methods for input items:
// workOrder.Allocations.get_TotalQuantityInputAllocated(inputItem)
// workOrder.Allocations.get_TotalQuantityInputAllocated(inputLineDetail)
// workOrder.Allocations.get_TotalQuantityInputAllocated(inputItem, outputLineDetail)
// workOrder.Allocations.get_TotalQuantityInputAllocated(inputLineDetail, outputItem)
// workOrder.Allocations.get_TotalQuantityInputAllocated(inputLineDetail, outputLineDetail)
}
}
}
}
#endregion