| Quintiq file version 2.0 | 
| #parent: #root | 
| Method UpdateSubscription ( | 
|   Boolean useLeadingPeriod_i, | 
|   Boolean isRecurring_i, | 
|   String periodType_i, | 
|   Date startOfPeriod_i, | 
|   Number nrOfOccurrences_i, | 
|   Date endOfPeriod_i | 
| ) | 
| { | 
|   TextBody: | 
|   [* | 
|     if( this.IsRecurring() ) | 
|     { | 
|       wasUsingLeadingPeriod := this.UseLeadingPeriod(); | 
|        | 
|       this.UseLeadingPeriod( useLeadingPeriod_i ); | 
|        | 
|       if( useLeadingPeriod_i ) | 
|       { | 
|         if( not wasUsingLeadingPeriod ) | 
|         { | 
|           // Start using the RecurrencePeriod of the LeadingParticipation by removing the specific RecurrencePeriod and its occurrences... | 
|           this.RemoveRecurrencePeriod(); | 
|        | 
|           // ... and copying all occurrences of the LeadingParticipation. | 
|           this.CopyOccurrences(); | 
|         } | 
|       } | 
|        | 
|       else | 
|       { | 
|         // Remember the start and end of the current period. | 
|         // They are used to determine which occurrences must be created / deleted when the period was changed. | 
|         period := this.GetRecurrencePeriod(); | 
|         prevStartDate := guard( period.StartDate(), Date::MinDate() ); | 
|         prevEndDate   := guard( period.EndDate(),   Date::MaxDate() ); | 
|        | 
|         // Update the RecurrencePeriod of the subscription, i.e. the subscription period. | 
|         this.UpdateRecurrencePeriod( isRecurring_i, periodType_i, startOfPeriod_i, nrOfOccurrences_i, endOfPeriod_i ); | 
|        | 
|         // Determine the consequences of the change in start and end of the period. | 
|         this.AlignOccurrences( prevStartDate, prevEndDate ); | 
|       } | 
|     } | 
|     else | 
|     { | 
|       if( not useLeadingPeriod_i ) | 
|       { | 
|         LibCal_Util::Warning( "Cannot set a subscription period for a subscription to a non-recurring event | " | 
|                             + "ParticipationID = " + this.ParticipationID() + ", " + this.Event().GetEventInfo() | 
|                             + ", subscribing Calendar = '" + this.Calendar().CalendarID() + "'" ); | 
|       } | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |