| 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; | 
|   *] | 
| } |