Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Update ( 
 | 
  String subject_i, 
 | 
  String description_i, 
 | 
  String type_i, 
 | 
  Real capacity_i, 
 | 
  Boolean isDefault_i, 
 | 
  Duration startTimeOfDay_i, 
 | 
  Duration endTimeOfDay_i, 
 | 
  Duration duration_i, 
 | 
  Boolean isAllDay_i, 
 | 
  Boolean isFromUI_i 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Register if there are changes. 
 | 
    // Change of Subject and/or IsDefault should not result in re-generation of the TimeIntervals. 
 | 
    isChanged := this.IsAllDay() <> isAllDay_i 
 | 
              or ( not isAllDay_i and 
 | 
                   ( this.StartTimeOfDay() <> startTimeOfDay_i 
 | 
                  or this.Duration()       <> duration_i ) ); 
 | 
     
 | 
    // Keep some values to check for more changes later on. 
 | 
    startTimeOfDay := this.StartTimeOfDay(); 
 | 
    endTimeOfDay   := this.EndTimeOfDay(); 
 | 
    duration       := this.Duration(); 
 | 
     
 | 
    this.Subject(         subject_i        ); 
 | 
    this.Description(     description_i    ); 
 | 
    this.Type(            type_i           ); 
 | 
    this.PartialCapacity( capacity_i       ); 
 | 
    this.IsDefault(       isDefault_i      ); 
 | 
    this.StartTimeOfDay(  startTimeOfDay_i ); 
 | 
     
 | 
    // The logic below can only be executed when the LeadingParticipation exists. 
 | 
    // It will exist most of the time, except when this method is called during the synchronization 
 | 
    // of a newly imported event. In that case the logic is executed later during the synchronization, 
 | 
    // after the LeadingParticipation has been created. 
 | 
    if( not isnull( this.LeadingParticipation() ) ) 
 | 
    { 
 | 
      // Use SetDuration() to also update LeadingParticipation.EndDate, if applicable. 
 | 
      this.SetDuration( duration_i ); 
 | 
       
 | 
      // When the update is triggered from the UI, the correct start and end have already been enforced by the UI. 
 | 
      // Otherwise, use SetIsAllDay() in order to 'overrule' the given startTimeOfDay_i and endTimeOfDay_i if necessary. 
 | 
      // This can change the StartTimeOfDay, EndTimeOfDay and/or Duration, so additional checking for changes is required. 
 | 
      if( isFromUI_i ) 
 | 
      { 
 | 
        this.IsAllDay( isAllDay_i ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        this.SetIsAllDay( isAllDay_i ); 
 | 
      } 
 | 
       
 | 
      // See if there are changes after processing IsAllDay. 
 | 
      if( not isChanged and 
 | 
          isAllDay_i ) 
 | 
      { 
 | 
        isChanged := isnull( this.LeadingParticipation() ) 
 | 
                  or this.StartTimeOfDay() <> startTimeOfDay 
 | 
                  or this.EndTimeOfDay()   <> endTimeOfDay 
 | 
                  or this.Duration()       <> duration; 
 | 
      } 
 | 
    } 
 | 
     
 | 
    if( isChanged ) 
 | 
    { 
 | 
      this.IsChanged( true ); 
 | 
    } 
 | 
  *] 
 | 
} 
 |