Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method CreateGapPlanningFromPeriod ( 
 | 
  Period_MP baseperiod 
 | 
) as Period_MP 
 | 
{ 
 | 
  Description: 'Create a gap planning period from a base period for which no planning period exists.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // ODE2 May-23-2017 (created) 
 | 
     
 | 
    startofplanning := this.PeriodParameter_MP().StartOfPlanning(); 
 | 
     
 | 
    baseperiod.IsIncludedInGapPlanningPeriod( true ); 
 | 
     
 | 
    start := baseperiod.Start(); 
 | 
    end := baseperiod.End(); 
 | 
    currentplanningps := PeriodSpecification_MP::GetLowestLevelPlanningPeriodSpecification( baseperiod ); 
 | 
     
 | 
    baseperiodnext := baseperiod.NextBasePeriod(); 
 | 
    nextplanningps := PeriodSpecification_MP::GetLowestLevelPlanningPeriodSpecification( baseperiodnext ); 
 | 
     
 | 
    while( guard( this.GetHasPlanningPeriodSpecification( baseperiodnext.Start(), baseperiodnext.End() )          // Gap periods only get created on horizons for which planning periods are defined 
 | 
                  and not exists( this, PeriodSpecification_MP, ps,  
 | 
                                  ps.HasInclusivePlanningPeriod( baseperiodnext.Start(), baseperiodnext.End() ) ) // No planning period on the considered horizon 
 | 
                  and not baseperiodnext.Start() = startofplanning                                                // If accross start of planning, gap period should be split into 2 periods  
 | 
                  and currentplanningps = nextplanningps,  
 | 
                  false ) ) 
 | 
    { 
 | 
      // Tag period as included in a gap to avoid re-creating a gap from that period in a future iteration 
 | 
      baseperiodnext.IsIncludedInGapPlanningPeriod( true );  
 | 
      currentplanningps := PeriodSpecification_MP::GetLowestLevelPlanningPeriodSpecification( baseperiodnext ); 
 | 
      end := baseperiodnext.End(); 
 | 
       
 | 
      baseperiodnext := baseperiodnext.NextBasePeriod(); 
 | 
      nextplanningps := PeriodSpecification_MP::GetLowestLevelPlanningPeriodSpecification( baseperiodnext ); 
 | 
    } 
 | 
     
 | 
    // Create gap planning period 
 | 
    gapplanningperiod := this.CreateUpdateGapPlanningPeriod( start, end ); 
 | 
     
 | 
    return gapplanningperiod; 
 | 
  *] 
 | 
} 
 |