Quintiq file version 2.0
#parent: #root
Method CreateEvent (
  internal[GUIComponent] parent_i,
  LibCal_Calendar owner_i,
  LibCal_EventCategory category_i,
  DateTime start_i,
  DateTime end_i
) as LibCal_Event id:Method_LibCal_dlgEvent_CreateEvent_653
{
  #keys: '[131094.0.1233348206]'
  Body:
  [*
    timezone := owner_i.GetTimeZone();
    
    // Create a new Event.
    sEvent := owner_i.Event( relshadow,
                             EventID        := [String]Key::NextPersistentKey(),
                             StartTimeOfDay := start_i.TimeOfDay( timezone ),
                             EndTimeOfDay   := end_i.TimeOfDay( timezone ),
                             EventCategory  := category_i );
    
    // Special case: by default the EventType is 'Unavailable', but when an event is created for
    // category 'Available' or 'Partial' then set the Type to 'Available' resp. 'Partial'. 
    if( guard( category_i.Name() = LibCal_Event::TYPE_AVAILABLE(), false ) )
    {
      sEvent.Type( LibCal_Event::TYPE_AVAILABLE() );
    }
    else if( guard( category_i.Name() = LibCal_Event::TYPE_PARTIAL(), false ) )
    {
      sEvent.Type( LibCal_Event::TYPE_PARTIAL() );
    }
                             
    Dialog.Data( sEvent );
    
    // Create a new LeadingParticipation.
    // Only set the dates, the times will be updated from the Event later if necessary.
    sLeadPart := owner_i.Participation( relshadow, LibCal_LeadingParticipation,
                                        ParticipationID := [String]Key::NextPersistentKey(),
                                        StartDate       := start_i.Date( timezone ),
                                        EndDate         := end_i.Date( timezone ) );
    dhLeadingParticipation.Data( &sLeadPart );
    this.InitializeRecurrence( start_i.Date( timezone ) ); 
    
    event := null( LibCal_Event );
    
    if( Dialog.DoModal( parent_i ) > 0 )
    {
      event := this.CreateUpdateEventAndParticipation();
    }
    
    return event;
  *]
}
