Quintiq file version 2.0
|
#parent: #root
|
Method GetHasCycle (
|
ProductInStockingPointInPeriod targetpispip,
|
output Process_MPs processes_o,
|
Number currentdepth,
|
Number maxdepth
|
) remote as Boolean
|
{
|
Description:
|
[*
|
Return false if there are a set of processes form a cycle for this pispip, and returns the paths (processes) which form the cycle.
|
Used to check pegging circularity
|
*]
|
TextBody:
|
[*
|
// soh yee Aug-14-2014 (created)
|
|
foundtarget := false;
|
currentdepth := currentdepth + 1;
|
|
// Start with the dependent demands of all the new supplies. If the targetpispip is found again when performing the depth first search,
|
// it means that a cycle is found
|
if( currentdepth <= maxdepth )
|
{
|
traverse( this, NewSupply.PeriodTask_MP.DependentDemand, dd,
|
not foundtarget // Stop the search once a cycle is found, or the foundtarget Boolean will be resetted
|
and not dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Product_MP().IsByProduct() )
|
{
|
pispip := dd.ProductInStockingPointInPeriodPlanningLeaf();
|
|
foundtarget := pispip = targetpispip
|
or pispip.GetHasCycle( targetpispip, processes_o, currentdepth, maxdepth );
|
|
// Save the period task if a cycle is found for the search branch
|
if( foundtarget )
|
{
|
processes_o.Add( dd.PeriodTask_MP().Process_MP() );
|
}
|
}
|
}
|
|
return foundtarget;
|
*]
|
}
|