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' } 
 | 
} 
 |