| Quintiq file version 2.0 | 
| #parent: #root | 
| Method SetPeriodWithNrOfOccurrences ( | 
|   Date startDate_i, | 
|   Number nrOfOccurrences_i | 
| ) | 
| { | 
|   Description: 'Set a recurrence period that starts at a specific date recurs for a specific number of times.' | 
|   TextBody: | 
|   [* | 
|     // Check if a new RecurrencePeriod must be created. | 
|     period       := guard( this.RecurrencePeriod().astype( LibCal_RecurrencePeriodNrOfOccurrences ), null( LibCal_RecurrencePeriodNrOfOccurrences ) ); | 
|     changeOfType := isnull( period ); | 
|      | 
|     isChanged := changeOfType  // There was no period yet, or it was not a PeriodNrOfOccurrences | 
|               or period.StartDate()       <> startDate_i | 
|               or period.NrOfOccurrences() <> nrOfOccurrences_i; | 
|      | 
|     if( isChanged ) | 
|     { | 
|       if( nrOfOccurrences_i >= 0 ) | 
|       { | 
|         prevPeriod    := this.GetRecurrencePeriod(); // Can be the one from the LeadingParticipation. | 
|         prevStartDate := guard( prevPeriod.StartDate(), Date::MinDate() ); | 
|         prevEndDate   := guard( prevPeriod.EndDate(),   Date::MaxDate() ); | 
|        | 
|         if( changeOfType ) | 
|         { | 
|           // Create a new RecurrencePeriod. | 
|           period := LibCal_RecurrencePeriodNrOfOccurrences::Create( this, startDate_i, nrOfOccurrences_i ); | 
|         } | 
|         else | 
|         { | 
|           period.StartDate( startDate_i ); | 
|           period.NrOfOccurrences( nrOfOccurrences_i ); | 
|         } | 
|          | 
|         // Directly calculate the new EndDate. | 
|         period.CalcEndDate(); | 
|        | 
|         // Register the previous startdate and enddate. | 
|         // They are used to determine which occurrences must be created / deleted for the changed period. | 
|         period.PreviousStartDate( prevStartDate ); | 
|         period.PreviousEndDate(   prevEndDate   ); | 
|        | 
|         this.HasChangedRecurrencePeriod( true ); | 
|       } | 
|       else | 
|       { | 
|         LibCal_Util::Error( this.Calendar().CalendarID() + "." + this.Event().Subject() + " : " +  | 
|                             Translations::Period_InvalidNrOfOccurrences() + "(is " + [String]nrOfOccurrences_i + ")" ); | 
|       }     | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |