Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SynchronizePeriods 
 | 
{ 
 | 
  Description: 'This will create periods based on this period definition' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // DWE2 Apr-25-2016 (modified) 
 | 
    traverse( this, Period_MP, period ) 
 | 
    { 
 | 
      period.IsDeleted( true ); 
 | 
    } 
 | 
     
 | 
    // To create from historical period 
 | 
    start := PeriodSpecification_MP::GetStartOfPreviousPeriod( this.PeriodAlignment().Date(), 
 | 
                                                               this.TimeUnit(), 
 | 
                                                               this.NrOfTimeUnit() * this.NrOfHistoricalPeriod() ); // Multiply to get the earlist start 
 | 
     
 | 
    totalofperiods := this.NrOfFuturePeriod() + this.NrOfHistoricalPeriod(); // Sum for total period needs to be created 
 | 
     
 | 
    for( i:= 0; i < totalofperiods ; i++ ) 
 | 
    { 
 | 
      end := PeriodSpecification_MP::GetStartOfNextPeriod( start, this.TimeUnit(), this.NrOfTimeUnit() ); 
 | 
      period := Period_MP::FindPeriodTypeIndex( this.ID(), start , end ); 
 | 
      if( isnull( period ) ) 
 | 
      { 
 | 
        //Check if there's already a gap planning period with the same start and end 
 | 
        period := select( this, MacroPlan.Period_MP, p, 
 | 
                          p.IsSystemCreated(), 
 | 
                          p.Start() = start 
 | 
                          and p.End() = end ); 
 | 
        if( isnull( period ) ) 
 | 
        { 
 | 
          Period_MP::Create( this.MacroPlan(), this, start, end, false, false ); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
          //Change redundant gap planning period to planning period 
 | 
          period.LinkGapPlanningToPeriodSpecification( this ); 
 | 
        } 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        period.Update( this );      // It may created by system as a base period previously 
 | 
        period.IsDeleted( false ); 
 | 
      } 
 | 
      start := end; 
 | 
    } 
 | 
     
 | 
    if( not this.MacroPlan().IsRollingPeriod() ) 
 | 
    { 
 | 
      periods := selectset( this, Period_MP, period, period.IsDeleted() ) 
 | 
      Period_MP::Delete( periods ); 
 | 
    } 
 | 
  *] 
 | 
} 
 |