Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method FindPeggingCircularity ( 
 | 
  output Process_MPs processes_o 
 | 
) as String 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // soh yee Aug-13-2014 (created) 
 | 
     
 | 
    // Cycle examples: 
 | 
    // Example 1: 
 | 
    // Scrap + Prime -> Caster -> Ingot + Scrap 
 | 
    // Example 2: 
 | 
    // Scrap + Prime -> Caster -> Ingot 
 | 
    // Ingot -> Furnace -> Molten + Scrap 
 | 
     
 | 
    hascycle := false; 
 | 
    value := ''; 
 | 
    searchdepth := GlobalParameters_MP::GetSearchDepthForPeggingCircular(); 
 | 
     
 | 
    for( i := 1; i <= searchdepth and not hascycle; i++ ) 
 | 
    { 
 | 
      traverse( this, LastBasePeriod.StockingPointInPeriod.LeafPlanningPISPIPs, pispip, not hascycle ) 
 | 
      { 
 | 
        hascycle := pispip.GetHasCycle( pispip, processes_o, 0, i ); 
 | 
     
 | 
        if( hascycle ) 
 | 
        { 
 | 
          processes := selectvalues( processes_o, Elements, process, true, process.AsProcess_MP().Name() + ": " + process.Name() ); 
 | 
          value := Translations::MP_MacroPlan_FindPeggingCircularity_CircularityFound( i, pispip.ProductInStockingPoint_MP().Name(), processes.ToString( String::NewLine() ) ) 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // No cycle is found for all active pispip. Return a not found message 
 | 
    if( not hascycle ) 
 | 
    { 
 | 
      value := Translations::MP_MacroPlan_FindPeggingCircularity_CircularityNotFound( searchdepth ); 
 | 
    } 
 | 
     
 | 
    return value; 
 | 
  *] 
 | 
} 
 |