Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Delete ( 
 | 
  LibCal_ExplicitTimeIntervals timeIntervals_i, 
 | 
  Boolean deleteOfParticipationAllowed_i 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    if( timeIntervals_i.Size() > 0 ) 
 | 
    { 
 | 
      // The intervals always belong to the same participation. 
 | 
      participation := timeIntervals_i.Element( 0 ).Participation(); 
 | 
     
 | 
      traverse( timeIntervals_i, Elements, timeInterval ) 
 | 
      { 
 | 
        // If the TimeInterval belongs to the initiator of the Event, then the TimeInterval 
 | 
        // must be deleted for all subscribers to the Event. 
 | 
        if( participation.IsLeading() ) 
 | 
        { 
 | 
          traverse( timeInterval, SubscribingETI, subscribingETI ) 
 | 
          { 
 | 
            subscribingETI.Delete(); 
 | 
          } 
 | 
        } 
 | 
     
 | 
        timeInterval.Delete(); 
 | 
      } 
 | 
     
 | 
      // If deletion of the Participation is allowed, i.e. when the action is triggered by the user, 
 | 
      // then delete the Participations that have no TimeIntervals left. 
 | 
      // Delete _the_ Participation as last. 
 | 
      if( deleteOfParticipationAllowed_i ) 
 | 
      { 
 | 
        traverse( participation.Event(), Participation, part,  
 | 
                      part <> participation 
 | 
                  and not part.IsChanged() 
 | 
                  and not part.HasChangedRecurrencePeriod() 
 | 
                  and part.ExplicitTimeInterval( relsize ) = 0 ) 
 | 
        { 
 | 
          part.Delete(); 
 | 
        } 
 | 
         
 | 
        // Delete _the_ Participation as last, because this might trigger the deletion of the whole Event 
 | 
        // if it is the last Participation of the Event. 
 | 
        if( participation.ExplicitTimeInterval( relsize ) = 0 ) 
 | 
        { 
 | 
          participation.Delete(); 
 | 
        } 
 | 
      }     
 | 
    } 
 | 
  *] 
 | 
} 
 |