Quintiq file version 2.0
|
#parent: #root
|
Method SynchronizeBasePeriods
|
{
|
Description: 'Synchronize base periods that will be used for planning'
|
TextBody:
|
[*
|
// DWE2 May-17-2016 (created)
|
// Reset all periods to none base and assume as deleted, we will flush the useless period at the end of this method
|
traverse( this, Period_MP, period )
|
{
|
period.IsBase( false );
|
}
|
|
sortedperiods := selectsortedset( this, Period_MP, period,
|
not period.IsDeleted()
|
and not period.GetIsSystemCreated(),
|
period.Start() );
|
if( sortedperiods.Size() > 0 )
|
{
|
starts := selectvalues( sortedperiods, Elements, period, true, period.Start() );
|
starts.Add( this.PeriodParameter_MP().StartOfPlanning() ); // Include start of planning as a chop off for period spans across it
|
|
ends := selectvalues( sortedperiods, Elements, period, true, period.End() );
|
|
periods := starts.Union( ends ).Unique();
|
periods.Sort();
|
|
i := 0;
|
while( i < periods.Size() - 1 )
|
{
|
start := periods.Element( i );
|
end := periods.Element( i + 1 );
|
|
// Use select instead of typeindex
|
systemperiod := select( this, Period_MP, period, period.Start() = start, period.End() = end );
|
|
|
// If there is no period, create new and mark as system created. (null period spec)
|
if( isnull( systemperiod ) )
|
{
|
systemperiod := Period_MP::Create( this, null( PeriodSpecification_MP ), start, end, true, false );
|
}
|
// If there is existing one which is marked as deleted, make it a system period
|
else if( systemperiod.IsDeleted() )
|
{
|
systemperiod.PeriodSpecification_MP( relflush );
|
Period_MP::ChangeKeyPeriodTypeIndex( systemperiod, "", systemperiod.Start(), systemperiod.End() );
|
}
|
|
systemperiod.IsBase( true );
|
systemperiod.IsDeleted( false );
|
i++;
|
}
|
}
|
|
if( not this.IsRollingPeriod() )
|
{
|
this.DeleteObsoleteBasePeriod();
|
}
|
*]
|
}
|