| Quintiq file version 2.0 | 
| #parent: #root | 
| Method SetPeriodWithEndDate ( | 
|   Date startDate_i, | 
|   Date endDate_i | 
| ) | 
| { | 
|   Description: 'Set a recurrence period that starts at a specific date and ends at a specific date.' | 
|   TextBody: | 
|   [* | 
|     // Check if a new RecurrencePeriod must be created. | 
|     period       := guard( this.RecurrencePeriod().astype( LibCal_RecurrencePeriodWithEndDate ), null( LibCal_RecurrencePeriodWithEndDate ) ); | 
|     changeOfType := isnull( period ); | 
|      | 
|     isChanged := changeOfType  // There was no period yet, or it was not a PeriodWithoutEnd | 
|               or period.StartDate() <> startDate_i | 
|               or period.EndDate()   <> endDate_i; | 
|      | 
|     if( isChanged ) | 
|     { | 
|       if( endDate_i >= startDate_i ) | 
|       { | 
|         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_RecurrencePeriodWithEndDate::Create( this, startDate_i, endDate_i ); | 
|         } | 
|         else | 
|         { | 
|           period.StartDate( startDate_i ); | 
|           period.EndDateSet( endDate_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() + " : " +  | 
|                             "EndOfPeriod < StartOfPeriod (" + [String]endDate_i + " < " + [String]startDate_i + ")" ); | 
|       }     | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |