Quintiq file version 2.0
|
#parent: #root
|
Method GenerateOccurrencesWhenWindowChanged
|
{
|
TextBody:
|
[*
|
// Update the CalendarTime after a potential change of the Start of the Window.
|
timezone := this.GetTimeZone();
|
this.CalendarTime( this.Start().AddAsPeriod( timezone, Duration::Days( this.History() ) ) );
|
|
windowChanged := guard( this.StartDate() <> this.PreviousStartDate(), false )
|
or guard( this.EndDate() <> this.PreviousEndDate(), false );
|
|
if( windowChanged )
|
{
|
// Let the Events generate their occurrences based on the changed calendar window.
|
traverse( this, Event.LeadingParticipation, leadPart )
|
{
|
onlyWhenChanged := false;
|
leadPart.UpdateCalendar( onlyWhenChanged );
|
}
|
|
// Also update the occurrences of the subscriptions to other events.
|
// This is only necessary when there is (or was!) as difference between the window of the calendar and
|
// the window of the calendar to which is subscribed.
|
traverse( this.Subscriptions(), Elements, subscription )
|
{
|
eventCalendarStartDate := subscription.Event().Calendar().StartDate();
|
eventCalendarEndDate := subscription.Event().Calendar().EndDate();
|
if( eventCalendarStartDate <> this.StartDate()
|
or eventCalendarStartDate <> this.PreviousStartDate()
|
or eventCalendarEndDate <> this.EndDate()
|
or eventCalendarEndDate <> this.PreviousEndDate() )
|
{
|
subscription.AlignOccurrences( this.PreviousStartDate(), this.PreviousEndDate() );
|
}
|
}
|
|
// Update the previous dates for the next check.
|
// This should only be done after updating the calendars, because during the update
|
// the previous dates are required to determine if new time intervals should be generated.
|
this.PreviousStartDate( this.StartDate() );
|
this.PreviousEndDate( this.EndDate() );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|