| Quintiq file version 2.0 | 
| #parent: #root | 
| Method GetNextOptimizationLevel ( | 
|   const RunContextForCapacityPlanning runcontext, | 
|   Boolean scopebypreprodselector, | 
|   Number levelstart | 
| ) const as Number | 
| { | 
|   TextBody: | 
|   [* | 
|     value := levelstart;  | 
|     rcm := this.GetRunContextMeta();  | 
|     if ( runcontext.IsMetaIteration() and ( rcm.OptionCPLEXSkipLevelPriorToFocus() or scopebypreprodselector ) )  | 
|     { | 
|       firstlevelnotset := minselect( this,  | 
|                                      MacroPlan.StrategyMacroPlan.StrategyLevelMacroPlan,  | 
|                                      level, | 
|                                      levelstart <= level.Level()  | 
|                                      and level.Level() < ( this.FocusLevel() + ifexpr( scopebypreprodselector, 1, 0 ) ) // we check also up to the focus level, because that one can be fixed for the pre production selector ( want to just minimize PTQty) | 
|                                      and not level.IsLevelSkippedByMetaOptimizer( rcm ),  | 
|                                      level.Level() );   | 
|                                       | 
|       if ( not isnull( firstlevelnotset ) )  | 
|       { | 
|         value := firstlevelnotset.Level();  | 
|       }   | 
|       else | 
|       { | 
|         value := maxvalue( levelstart,  | 
|                            ifexpr(  scopebypreprodselector, this.FocusLevel() + 1, this.FocusLevel() ) ); // for pre production selector we have checked up to including the focus level  | 
|       } | 
|     } | 
|           | 
|     return value; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |