| Quintiq file version 2.0 | 
| #parent: #root | 
| Method CopyOccurrences #extension | 
| { | 
|   TextBody: | 
|   [* | 
|     timezone := this.Calendar().GetTimeZone(); | 
|      | 
|     if( this.IsRecurring() and not this.LeadingParticipation().Event().IsMultiple() ) | 
|     { | 
|       // If the participation ends at the start of a day, this is the start of the next day. | 
|       // In that case, one day should be subtracted in order to not take the next day into account.  | 
|       endDate := this.LeadingParticipation().RecurrencePeriod().EndDate() | 
|                - ifexpr( this.LeadingParticipation().EndTime() = this.LeadingParticipation().EndTime().StartOfDay( timezone ), 1, 0 ); | 
|      | 
|       this.CopyOccurrences( this.LeadingParticipation().RecurrencePeriod().StartDate(), endDate ); | 
|     } | 
|     else | 
|     { | 
|       // In case of a non-recurring event, there is only one occurrence (i.e. ExplicitTimeInterval), | 
|       // with an arbitrary Start and End. The Start and End of this occurrence must be used in order to have it copied to the subscription. | 
|       leadingETI := select( this.LeadingParticipation(), ExplicitTimeInterval, eti, true, true ); | 
|      | 
|       if( not isnull( leadingETI ) ) | 
|       { | 
|         endDate := leadingETI.End().Date( timezone ) | 
|                  - ifexpr( leadingETI.End() = leadingETI.End().StartOfDay( timezone ), 1, 0 ); | 
|          | 
|         this.CopyOccurrences( leadingETI.Start().Date( timezone ), endDate ); | 
|       } | 
|     } | 
|   *] | 
| } |