From 7f68c5b2e96c6707be1589ff8b5fbdcdab53f412 Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期一, 27 五月 2024 20:57:52 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def                                          |   14 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetCalendarTimeZone.def                                                 |   12 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlCategory.def                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def                                            |   19 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_mnDelete_OnClick.def                               |   26 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/_ROOT_Component_LibCal_frmCommonCalendar.def                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_OnOK.def                                                                |   34 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_cmEventCategories.def                                               |   19 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageData.def                                                |    1 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetEventData.def                                                        |   36 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateUpdateEventAndParticipation.def                                           |   80 ++
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetDaysOnlyMode.def                                                     |   26 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEvent.def                                                                 |    8 
 _Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl                                                                               |   54 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/_ROOT_Component_LibCal_dlgEvent.def                                                    |   10 
 Calendars/BL/Type_LibCal_Calendar/Method_GetPotentialSubscribers.qbl                                                                         |    1 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_lstSubscribers#537.def                                               |   61 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Response_MacroPlanner_lstEventCategories_MenuCreateMultipleEvents_OnClick.def |   19 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnChanged.def                       |   42 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesDatesOK.def                                                       |   43 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_Panelleft#582.def                                                    |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeSubscribers.def                                               |   21 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent#778.def                                                     |   75 ++
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarSearchList.def                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowDaysOnlyModeWarning.def                                             |   29 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlContent.def                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEventSearchList.def                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_pnlSubscribers.def                                                   |   60 +
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetNrOfMonth.def                                                        |   17 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnCheckedChanged.def                               |   20 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listActionBarPage902.def                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/_ROOT_Component_LibCal_dlgMultipleEvent.def                                    |   71 ++
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelContent.def                                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTimezone.def                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_abpListSubscribers#1.def                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def                                   |   76 ++
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnChanged.def                         |   23 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesEventOK.def                                                       |   37 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ButtonCreate_OnClick.def                              |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEvent.def                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnSelectionChanged.def                             |   32 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def                                                |   30 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_OnCreated.def                                                         |   27 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlRecurrence.def                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/_ROOT_Component_LibCal_GlobalState.def                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def                                                         |   41 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/Method_CreateMultipleEvent.def                                                      |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlStartAndEnd.def                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelList.def                                                        |   14 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeCapacity.def                                                  |   49 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ddslType_OnSelectionChanged#613.def                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_cmSubscribers#1.def                                                  |   24 
 _Main/BL/Type_LibCal_Event/Attribute_EventType.qbl                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/_ROOT_Component_FormCalendarUnavailableEvent.def                          |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesOK.def                                                            |   26 
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_CalendarsWebUI.qp                                                                                  |    5 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventData.def                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTextualInfo.def                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def                                                             |   35 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnInputIdle.def                     |   32 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_lstEventCategories.def                                              |   14 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent.def                                                         |   18 
 Calendars/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI#865.qbl                                                                       |    1 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlControls.def                                                              |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarEventTypes.def                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_pnlEventCategories.def                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelHeader.def                                                 |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarLineList.def                                       |   10 
 _Main/BL/Type_LibCal_Event/_ROOT_Type_LibCal_Event.qbl                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsStartDate_OnChanged.def                             |   30 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnInputIdle.def                       |   22 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader#144.def                                                  |  186 ++++++
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlApplyToNewResources.def                                                   |    8 
 75 files changed, 1,856 insertions(+), 2 deletions(-)

diff --git a/Calendars/BL/Type_LibCal_Calendar/Method_GetPotentialSubscribers.qbl b/Calendars/BL/Type_LibCal_Calendar/Method_GetPotentialSubscribers.qbl
index 5a9b41c..0b1884e 100644
--- a/Calendars/BL/Type_LibCal_Calendar/Method_GetPotentialSubscribers.qbl
+++ b/Calendars/BL/Type_LibCal_Calendar/Method_GetPotentialSubscribers.qbl
@@ -18,5 +18,4 @@
     
     return &subscribers;
   *]
-  InterfaceProperties { Accessibility: 'Module' }
 }
diff --git "a/Calendars/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI\043865.qbl" "b/Calendars/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI\043865.qbl"
index 337ffc5..c2f450e 100644
--- "a/Calendars/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI\043865.qbl"
+++ "b/Calendars/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI\043865.qbl"
@@ -86,5 +86,4 @@
     
     return event;
   *]
-  InterfaceProperties { Accessibility: 'Module' }
 }
diff --git a/_Main/BL/Type_LibCal_Event/Attribute_EventType.qbl b/_Main/BL/Type_LibCal_Event/Attribute_EventType.qbl
new file mode 100644
index 0000000..a55e723
--- /dev/null
+++ b/_Main/BL/Type_LibCal_Event/Attribute_EventType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EventType
+{
+  #keys: '3[415136.0.658372336][415136.0.658372335][415136.0.658372337]'
+  Description: '浜嬩欢绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl b/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
new file mode 100644
index 0000000..14da6c2
--- /dev/null
+++ b/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
@@ -0,0 +1,54 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateUpdateFromUI (
+  LibCal_Calendar owner_i,
+  LibCal_LeadingParticipation participation_i,
+  String subject_i,
+  String description_i,
+  String type_i,
+  String eventtype_i,
+  Real capacity_i,
+  LibCal_EventCategory category_i,
+  Boolean isDefault_i,
+  Date startDate_i,
+  Duration startTimeOfDay_i,
+  Date endDate_i,
+  Duration endTimeOfDay_i,
+  Boolean isAllDay_i,
+  Boolean isRecurring_i,
+  Number recurrenceInterval_i,
+  String patternType_i,
+  Boolean patternDaily_IsEveryWeekday_i,
+  String patternWeekly_Weekdays_i,
+  Boolean patternMonthly_IsDay_i,
+  Number patternMonthly_Day_i,
+  String patternMonthly_WeekOfMonth_i,
+  String patternMonthly_DayOfWeek_i,
+  Boolean patternYearly_IsDate_i,
+  Number patternYearly_Month_i,
+  Number patternYearly_Day_i,
+  String patternYearly_WeekOfMonth_i,
+  String patternYearly_DayOfWeek_i,
+  String periodType_i,
+  Date periodStartDate_i,
+  Number nrOfOccurrences_i,
+  Date periodEndDate_i,
+  LibCal_Calendars subscribers_i
+) as LibCal_Event
+{
+  Description: 'Create and/or update an Event and its LeadingParticipation, based on information from the UI.'
+  TextBody:
+  [*
+    event := LibCal_Event::CreateUpdateFromUI( owner_i, participation_i, subject_i, description_i, type_i, capacity_i, category_i, isDefault_i, 
+                                      startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, 
+                                      isRecurring_i, recurrenceInterval_i,
+                                      patternType_i, patternDaily_IsEveryWeekday_i, patternWeekly_Weekdays_i, 
+                                      patternMonthly_IsDay_i, patternMonthly_Day_i, patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i,
+                                      patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i,
+                                      periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i );
+    
+    event.EventType( eventtype_i );
+    
+    return event;
+  *]
+}
diff --git a/_Main/BL/Type_LibCal_Event/_ROOT_Type_LibCal_Event.qbl b/_Main/BL/Type_LibCal_Event/_ROOT_Type_LibCal_Event.qbl
new file mode 100644
index 0000000..31bda92
--- /dev/null
+++ b/_Main/BL/Type_LibCal_Event/_ROOT_Type_LibCal_Event.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type LibCal_Event #extension
+{
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
new file mode 100644
index 0000000..645df5f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component ActionBarGroupDataViews #extension
+{
+  Children:
+  [
+    Component ButtonCapacities #extension
+    {
+      Children:
+      [
+        #child: ContextMenuCapacities
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageData.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageData.def
index e68c241..1c10729 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageData.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageData.def
@@ -4,5 +4,6 @@
   Children:
   [
     #child: ActionBarGroupImportExportData
+    #child: ActionBarGroupDataViews
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def
new file mode 100644
index 0000000..6c23590
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+Component ContextMenuCapacities #extension
+{
+  Children:
+  [
+    Component MenuCapacitiesUnavailableEvent
+    {
+      #keys: '[415136.0.645511697]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DATE-TIME_PREFERENCES'
+        Taborder: 6
+        Title: 'Calendar unavailable event'
+        Tooltip: 'Calendar unavailable event'
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarEventTypes.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarEventTypes.def
new file mode 100644
index 0000000..506d63d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarEventTypes.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component PanelCalendarEventTypes
+{
+  #keys: '[415136.0.658772868]'
+  BaseType: 'WebPanel'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarLineList.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarLineList.def
new file mode 100644
index 0000000..c7e0337
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarLineList.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component PanelCalendarLineList
+{
+  #keys: '[415136.0.658772834]'
+  BaseType: 'WebPanel'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarSearchList.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarSearchList.def
new file mode 100644
index 0000000..bdaa56e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarSearchList.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelCalendarSearchList
+{
+  #keys: '[415136.0.658772708]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelCalendarLineList
+    #child: PanelCalendarEventTypes
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEvent.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEvent.def
new file mode 100644
index 0000000..bf94026
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEvent.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelCalendarUnavailableEvent
+{
+  #keys: '[415136.0.658772631]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelCalendarSearchList
+    #child: PanelCalendarUnavailableEventSearchList
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEventSearchList.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEventSearchList.def
new file mode 100644
index 0000000..d2d3188
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelCalendarUnavailableEventSearchList.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelCalendarUnavailableEventSearchList
+{
+  #keys: '[415136.0.658772725]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelHeader
+    #child: PanelList
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelHeader.def
new file mode 100644
index 0000000..862e4b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelHeader.def
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+Component PanelHeader
+{
+  #keys: '[415136.0.658772785]'
+  BaseType: 'WebPanel'
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
new file mode 100644
index 0000000..45c2dd3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component PanelList
+{
+  #keys: '[415136.0.658772810]'
+  BaseType: 'WebPanel'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/_ROOT_Component_FormCalendarUnavailableEvent.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/_ROOT_Component_FormCalendarUnavailableEvent.def
new file mode 100644
index 0000000..e9723b0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/_ROOT_Component_FormCalendarUnavailableEvent.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCalendarUnavailableEvent
+{
+  #keys: '[415136.0.657952289]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelCalendarUnavailableEvent
+  ]
+  Properties:
+  [
+    Title: 'Calendar unavailable event'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/Method_CreateMultipleEvent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/Method_CreateMultipleEvent.def
new file mode 100644
index 0000000..945c4f7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/Method_CreateMultipleEvent.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateMultipleEvent (
+  LibCal_Calendar owner_i,
+  LibCal_EventCategory category_i
+) id:Method_LibCal_GlobalState_CreateMultipleEvent
+{
+  #keys: '[415136.0.645500983]'
+  Body:
+  [*
+    // Create a new Event.
+    // The time of the planning-dataset will be suggested as start.
+    dlg := construct( LibCal_dlgMultipleEvent );
+    dlg.CreateEvent( owner_i, category_i );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/_ROOT_Component_LibCal_GlobalState.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/_ROOT_Component_LibCal_GlobalState.def
new file mode 100644
index 0000000..63b9aca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_GlobalState/_ROOT_Component_LibCal_GlobalState.def
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#root
+#parent: CalendarsWebUI
+OrphanComponent LibCal_GlobalState #extension
+{
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlApplyToNewResources.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlApplyToNewResources.def
new file mode 100644
index 0000000..1689396
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlApplyToNewResources.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlApplyToNewResources #extension
+{
+  Properties:
+  [
+    Taborder: 6
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlCategory.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlCategory.def
new file mode 100644
index 0000000..d48085c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlCategory.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlCategory #extension
+{
+  Properties:
+  [
+    Taborder: 5
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlContent.def
new file mode 100644
index 0000000..9068ab1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlContent.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlContent #extension
+{
+  Children:
+  [
+    #child: pnlEvent
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlControls.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlControls.def
new file mode 100644
index 0000000..3f11eb0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlControls.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+Component pnlControls #extension
+{
+  Children:
+  [
+    Component lblMarginBottom_1 #extension
+    {
+      Properties:
+      [
+        Taborder: 11
+      ]
+    }
+    #child: pnlEventType
+    #child: pnlTextualInfo
+    #child: pnlTimezone
+    #child: pnlCategory
+    #child: pnlApplyToNewResources
+    #child: pnlStartAndEnd
+    #child: pnlRecurrence
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEvent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEvent.def
new file mode 100644
index 0000000..adf2b14
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEvent.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlEvent #extension
+{
+  Children:
+  [
+    #child: pnlEventData
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventData.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventData.def
new file mode 100644
index 0000000..0b96a1d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventData.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlEventData #extension
+{
+  Children:
+  [
+    #child: pnlControls
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def
new file mode 100644
index 0000000..76366d7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component pnlEventType
+{
+  #keys: '[415136.0.657951967]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblEventType
+    {
+      #keys: '[415136.0.657922045]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: 'Event type'
+        NumberOfColumns: 0
+        Taborder: 0
+      ]
+    }
+    Component edtEventType
+    {
+      #keys: '[415136.0.657922077]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEvent.Data.EventType'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlRecurrence.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlRecurrence.def
new file mode 100644
index 0000000..e8feedc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlRecurrence.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlRecurrence #extension
+{
+  Properties:
+  [
+    Taborder: 9
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlStartAndEnd.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlStartAndEnd.def
new file mode 100644
index 0000000..1266a50
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlStartAndEnd.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlStartAndEnd #extension
+{
+  Properties:
+  [
+    Taborder: 8
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTextualInfo.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTextualInfo.def
new file mode 100644
index 0000000..5379336
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTextualInfo.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlTextualInfo #extension
+{
+  Properties:
+  [
+    Taborder: 10
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTimezone.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTimezone.def
new file mode 100644
index 0000000..d29f1bb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlTimezone.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlTimezone #extension
+{
+  Properties:
+  [
+    Taborder: 7
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateUpdateEventAndParticipation.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateUpdateEventAndParticipation.def
new file mode 100644
index 0000000..ea28715
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateUpdateEventAndParticipation.def
@@ -0,0 +1,80 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateUpdateEventAndParticipation () as LibCal_Event id:Method_LibCal_dlgEvent_CreateUpdateEventAndParticipation #extension
+{
+  Body:
+  [*
+    sEvent    := dhEvent.Data();
+    sLeadPart := dhLeadingParticipation.Data();
+    
+    // Get the values from the controls.
+    
+    // Event and LeadingParticipation
+    subject        := edtName.Text();
+    description    := edtDescription.Text();
+    category       := ddlCategory.Data();
+    eventTypeList  := edtEventType.Text();
+    isDefault      := ckbApplyToNewResources.Checked();
+    startDate      := dsStartDate.Date();
+    startTimeOfDay := durStartTimeOfDay.Duration();
+    endDate        := dsEndDate.Date();
+    endTimeOfDay   := durEndTimeOfDay.Duration();
+    isAllDay       := ckbIsAllDay.Checked();
+    
+    eventType := ddslType.Text();
+    capacity  := this.StringToReal( edtCapacity.Text() );  // Always fill the capacity.
+    
+    // RecurrencePattern
+    isRecurring        := not btnOnce.IsPressed();
+    recurrenceInterval := this.GetRecurrenceInterval();
+    patternType        := this.GetPatternType();
+    
+    // Daily
+    daily_IsEveryWeekday := ckbEveryWeekday.Checked();
+    
+    // Weekly
+    weekly_Weekdays := ifexpr( btnMonday   .IsPressed(), "Mon;", "" )
+                     + ifexpr( btnTuesday  .IsPressed(), "Tue;", "" )
+                     + ifexpr( btnWednesday.IsPressed(), "Wed;", "" )
+                     + ifexpr( btnThursday .IsPressed(), "Thu;", "" )
+                     + ifexpr( btnFriday   .IsPressed(), "Fri;", "" )
+                     + ifexpr( btnSaturday .IsPressed(), "Sat;", "" )
+                     + ifexpr( btnSunday   .IsPressed(), "Sun;", "" );
+    
+    // Monthly
+    monthly_IsDay       := ckbMonthlyDay.Checked();
+    monthly_Day         := [Number]edtMonthlyDay.Text();
+    monthly_WeekOfMonth := ssMonthlyPatternWeekOfMonth.Text();
+    monthly_DayOfWeek   := ssMonthlyPatternDayOfWeek.Text();
+    
+    // Yearly
+    yearly_IsDate      := ckbYearlyDay.Checked();
+    month              := ifexpr( yearly_IsDate, ssYearlyMonth.Text(), ssYearlyPatternMonth.Text() );
+    yearly_Month       := this.GetNrOfMonth( month );
+    yearly_Day         := [Number]ssYearlyDayOfMonth.Text();
+    yearly_WeekOfMonth := ssYearlyPatternWeekOfMonth.Text();
+    yearly_DayOfWeek   := ssYearlyPatternDayOfWeek.Text();
+    
+    // RecurrencePeriod
+    periodType      := this.GetPeriodType();
+    periodStartDate := dsStartOfPeriod.Date();
+    periodEndDate   := dsEndOfPeriod.Date();
+    nrOfOccurrences := [Number]edtNrOfOccurrences.Text();
+    
+    // All values are passed to the Server, only the relevant values are used there.
+    event := LibCal_Event::CreateUpdateFromUI( sEvent.Calendar(), sLeadPart.WrappedInstance(),
+                                               subject, description, eventType, eventTypeList, capacity, category, isDefault,
+                                               startDate, startTimeOfDay, endDate, endTimeOfDay, isAllDay,
+                                               // RecurrencePattern
+                                               isRecurring, recurrenceInterval, patternType,
+                                               daily_IsEveryWeekday,
+                                               weekly_Weekdays,
+                                               monthly_IsDay, monthly_Day,  monthly_WeekOfMonth, monthly_DayOfWeek,
+                                               yearly_IsDate, yearly_Month, yearly_Day, yearly_WeekOfMonth, yearly_DayOfWeek,
+                                               // RecurrencePeriod
+                                               periodType, periodStartDate, nrOfOccurrences, periodEndDate,
+                                               // Subscribers
+                                               dhSubscribers.Data() );
+    return event;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/_ROOT_Component_LibCal_dlgEvent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/_ROOT_Component_LibCal_dlgEvent.def
new file mode 100644
index 0000000..14b7eb6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/_ROOT_Component_LibCal_dlgEvent.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: CalendarsWebUI
+OrphanComponent LibCal_dlgEvent #extension
+{
+  Children:
+  [
+    #child: pnlContent
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
new file mode 100644
index 0000000..4ab4363
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListList
+{
+  #keys: '[415136.0.657740253]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor367
+    {
+      #keys: '[415136.0.657740254]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'LibCal_EventCategory'
+        Source: 'dhCategory'
+        Taborder: 0
+        Transformation: 'Event.Participation'
+      ]
+    }
+    #child: listActionBarPage902
+    Component DataSetLevel151
+    {
+      #keys: '[415136.0.657740259]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu967
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Calendar.CalendarID","title":"CalendarID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Calendar.CalendarID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Event.Subject","title":"Subject","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Event.Subject"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Event.StartTimeOfDay","title":"StartTimeOfDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Event.StartTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Event.EndTimeOfDay","title":"EndTimeOfDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Event.EndTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Event.Description","title":"Description","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Event.Description"}}]'
+        ContextMenu: 'listContextMenu967'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelContent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelContent.def
new file mode 100644
index 0000000..257129e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelContent.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelContent
+{
+  #keys: '[415136.0.647401424]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: Panelleft_582
+    #child: pnlSubscribers
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 5
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def"
new file mode 100644
index 0000000..8f68633
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def"
@@ -0,0 +1,186 @@
+Quintiq file version 2.0
+Component PanelHeader id:PanelHeader_144
+{
+  #keys: '[415136.0.647401494]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component edtName
+    {
+      #keys: '[415136.0.647401496]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEvent.Data.Subject'
+        Label: 'Name'
+        PlaceHolder: '<Enter a name>'
+        Taborder: 0
+      ]
+    }
+    Component edtEventType
+    {
+      #keys: '[415136.0.647401498]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: 'Event type'
+        Taborder: 1
+      ]
+    }
+    Component durStartTimeOfDay
+    {
+      #keys: '[415136.0.647401500]'
+      BaseType: 'WebDurationSelector'
+      Properties:
+      [
+        CanBeNegative: false
+        DurationFormat: 'h:m'
+        Label: 'Start time'
+        MaxDuration: P0DT23H59M0S
+        MinDuration: P0DT0H0M0S
+        Taborder: 7
+      ]
+    }
+    Component dhStartTimeOfDay
+    {
+      #keys: '[415136.0.647401501]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Duration'
+      Properties:
+      [
+        Taborder: 8
+      ]
+    }
+    Component durEndTimeOfDay
+    {
+      #keys: '[415136.0.647401506]'
+      BaseType: 'WebDurationSelector'
+      Properties:
+      [
+        CanBeNegative: false
+        DurationFormat: 'h:m'
+        Label: 'End time'
+        MaxDuration: P0DT23H59M0S
+        MinDuration: P0DT0H0M0S
+        Taborder: 9
+      ]
+    }
+    Component dhEndTimeOfDay
+    {
+      #keys: '[415136.0.647401507]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Duration'
+      Properties:
+      [
+        Taborder: 10
+      ]
+    }
+    Component edtDescription
+    {
+      #keys: '[415136.0.647401509]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEvent.Data.Description'
+        Label: 'Description'
+        MaxRows: 1
+        Multiline: true
+        NumberOfColumns: 29
+        ShowLabel: false
+        Taborder: 12
+      ]
+    }
+    Component dsStartDate
+    {
+      #keys: '[415136.0.647401510]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        DateFormat: 'DMMY'
+        Label: 'Date'
+        Taborder: 5
+      ]
+    }
+    Component dhStartDate
+    {
+      #keys: '[415136.0.647401511]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Date'
+      Properties:
+      [
+        Taborder: 6
+      ]
+    }
+    Component lblDescription id:lblDescription_456
+    {
+      #keys: '[415136.0.647492310]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: 'Description'
+        NumberOfColumns: 0
+        Taborder: 11
+      ]
+    }
+    Component ButtonCreate
+    {
+      #keys: '[415136.0.647262469]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '鏂板缓'
+        Taborder: 13
+      ]
+    }
+    Component ddslType id:ddslType_360
+    {
+      #keys: '[415136.0.646711730]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        InitialValue: 'Unavailable'
+        NumberOfColumns: 15
+        ShowLabel: false
+        Sorting: 'none'
+        Strings: 'Available;Unavailable'
+        Taborder: 2
+        Visible: false
+      ]
+    }
+    Component ckbApplyToNewResources id:ckbApplyToNewResources_667
+    {
+      #keys: '[415136.0.646712077]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        DataBinding: 'dhEvent.Data.IsDefault'
+        Label: 'Apply to new resources'
+        NumberOfColumns: 0
+        Taborder: 3
+        Tooltip: 'If checked, calendars of new resources will automatically subscribe to the event.'
+        Visible: false
+      ]
+    }
+    Component valTimezone id:valTimezone_653
+    {
+      #keys: '[415136.0.646712169]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        FixedSize: false
+        NumberOfColumns: 0
+        ShowLabel: false
+        SizeRatio: 0
+        Taborder: 4
+        Text: '<Timezone>'
+        Visible: false
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelList.def
new file mode 100644
index 0000000..f7703b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelList.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelList
+{
+  #keys: '[415136.0.654300441]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListList
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_Panelleft\043582.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_Panelleft\043582.def"
new file mode 100644
index 0000000..6ec0614
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_Panelleft\043582.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component Panelleft id:Panelleft_582
+{
+  #keys: '[415136.0.647401493]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelHeader_144
+    #child: PanelList
+  ]
+  Properties:
+  [
+    SizeRatio: 2
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_abpListSubscribers\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_abpListSubscribers\0431.def"
new file mode 100644
index 0000000..54d1682
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_abpListSubscribers\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component abpListSubscribers id:abpListSubscribers_1
+{
+  #keys: '[415136.0.647401568]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_cmSubscribers\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_cmSubscribers\0431.def"
new file mode 100644
index 0000000..880cfed
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_cmSubscribers\0431.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component cmSubscribers id:cmSubscribers_1
+{
+  #keys: '[415136.0.647401567]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component mnDelete
+    {
+      #keys: '[415136.0.655381025]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 3
+        Title: 'Delete'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listActionBarPage902.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listActionBarPage902.def
new file mode 100644
index 0000000..85d8360
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listActionBarPage902.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage902
+{
+  #keys: '[415136.0.657740256]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
new file mode 100644
index 0000000..f3a5116
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenu967
+{
+  #keys: '[415136.0.657740261]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_lstSubscribers\043537.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_lstSubscribers\043537.def"
new file mode 100644
index 0000000..69170e1
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_lstSubscribers\043537.def"
@@ -0,0 +1,61 @@
+Quintiq file version 2.0
+Component lstSubscribers id:lstSubscribers_537
+{
+  #keys: '[415136.0.647401564]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component deSubscribers
+    {
+      #keys: '[415136.0.647401565]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[LibCal_Calendar]'
+        Source: 'dhPotentialSubscribers'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    Component dslSubscribers
+    {
+      #keys: '[415136.0.647401566]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: cmSubscribers_1
+      ]
+      Properties:
+      [
+        Columns: 'CalendarID'
+        ContextMenu: 'cmSubscribers'
+        SortCriteria: 'CalendarID'
+        Taborder: 1
+      ]
+    }
+    #child: abpListSubscribers_1
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 4
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_lstSubscribers_537_WebMenu_OnClick
+    {
+      #keys: '[415136.0.647401558]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[3739.0.1873455]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_pnlSubscribers.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_pnlSubscribers.def
new file mode 100644
index 0000000..2b76272
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_pnlSubscribers.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component pnlSubscribers
+{
+  #keys: '[415136.0.647401562]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhPotentialSubscribers
+    {
+      #keys: '[415136.0.647401563]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[LibCal_Calendar]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: lstSubscribers_537
+    Component lblInfo
+    {
+      #keys: '[415136.0.647401569]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        ShowLabel: false
+        Taborder: 3
+        Text: 'Calendars that are subscribing to this event.'
+      ]
+    }
+    Component lblIsInitialized
+    {
+      #keys: '[415136.0.647401570]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Taborder: 2
+        Text: 'false'
+        Visible: false
+      ]
+    }
+    Component dhSubscribers
+    {
+      #keys: '[415136.0.647401571]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[LibCal_Calendar]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    MinimumColumns: 49
+    Taborder: 1
+    Title: 'Subscribers'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def"
new file mode 100644
index 0000000..ac27f5c
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def"
@@ -0,0 +1,75 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateEvent (
+  LibCal_Calendar owner_i,
+  LibCal_EventCategory category_i,
+  DateTime start_i,
+  DateTime end_i
+) id:Method_LibCal_dlgMultipleEvent_CreateEvent_778
+{
+  #keys: '[415136.0.645530672]'
+  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,
+                             IsDefault      := owner_i.istype( LibCal_CommonCalendar ) );
+    
+    // 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() );
+    }
+    
+    // Set the Event and the related controls...
+    // The values are explicitly assigned here 'at the beginning' to the controls,
+    // so that the values can be used by the rest of the logic. Databinding is executed too late for that.
+    // Further initialization is done in the OnCreated of the Dialog.
+    dhEvent.Data( &sEvent );
+    this.SetEventData();
+    
+    // ...and an accompanying 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 ) );
+    //info( '----------------------', isnull( sLeadPart ) );
+    // Set the Participation and the related controls
+    // (only the DataHolders, the Date-controls are set later on, after the recurrence has been initialized)
+    dhStartDate.Data( sLeadPart.StartDate() );
+    //dhEndDate.Data(   sLeadPart.EndDate()   );
+    dhLeadingParticipation.Data( &sLeadPart );
+    dhCategory.Data(category_i);
+    //info( '-----------------------', isnull( dhLeadingParticipation.Data() ) );
+    
+    // Initialize the capacity here, when done in the OnCreate() edtCapacity is not disabled correctly.
+    this.InitializeCapacity();
+    
+    // Initialize the category here, when done in the OnCreate() there is no selection in the DropDownList.
+    // Select the general category for new events.
+    //this.InitializeCategories();
+    //ddlCategory.Data( owner_i.CalendarRegistry().GetGeneralEventCategory() );
+    
+    // Must be done here, when done in the OnCreate() the checkmarks are not always set when the dialog is opened for editing an event.
+    // Pre-select all resources as subscriber when creating a common event.
+    this.InitializeSubscribers();
+    if( owner_i.istype( LibCal_CommonCalendar ) )
+    {
+      lstSubscribers.CheckAll();
+    }
+    
+    // Open the dialog.
+    this.Show( "modal" );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent.def
new file mode 100644
index 0000000..3177dfb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateEvent (
+  LibCal_Calendar owner_i,
+  LibCal_EventCategory category_i
+) id:Method_LibCal_dlgMultipleEvent_CreateEvent
+{
+  #keys: '[415136.0.645530478]'
+  Body:
+  [*
+    // Use the time of the planning-dataset as suggested start.
+    start := LibCal_GlobalState.DetermineStartOfEvent( LibCal_GlobalState.GetPlanningTime(),
+                                                       owner_i.GetTimeZone() );
+    end := LibCal_GlobalState.DetermineEndOfEvent( start );
+    
+    this.CreateEvent( owner_i, category_i, start, end );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def
new file mode 100644
index 0000000..0587aa7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def
@@ -0,0 +1,76 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateUpdateEventAndParticipation () as LibCal_Event id:Method_LibCal_dlgMultipleEvent_CreateUpdateEventAndParticipation
+{
+  #keys: '[415136.0.649421703]'
+  Body:
+  [*
+    sEvent    := dhEvent.Data();
+    sLeadPart := dhLeadingParticipation.Data();
+    
+    // Get the values from the controls.
+    
+    // Event and LeadingParticipation
+    subject        := edtName.Text();
+    description    := edtDescription.Text();
+    eventTypeList  := edtEventType.Text();
+    category       := sEvent.EventCategory(); 
+    isDefault      := ckbApplyToNewResources.Checked();
+    startDate      := dsStartDate.Date();
+    startTimeOfDay := durStartTimeOfDay.Duration();
+    endDate        := dsStartDate.Date();
+    endTimeOfDay   := durEndTimeOfDay.Duration();
+    isAllDay       := false;
+    
+    eventType := ddslType.Text();
+    capacity  := Real::MinReal();  // Always fill the capacity.
+    
+    // RecurrencePattern
+    isRecurring        := false;
+    recurrenceInterval := 1;
+    patternType        := LibCal_RecurrencePeriod::TYPE_WITHOUTEND();
+    
+    // Daily
+    daily_IsEveryWeekday := false;
+    
+    // Weekly
+    weekly_Weekdays := "";
+    
+    // Monthly
+    monthly_IsDay       := false;
+    monthly_Day         := 0;
+    monthly_WeekOfMonth := '';
+    monthly_DayOfWeek   := '';
+    
+    // Yearly
+    yearly_IsDate      := false;
+    //month              := '';
+    yearly_Month       := 0;
+    yearly_Day         := 0;
+    yearly_WeekOfMonth := '';
+    yearly_DayOfWeek   := '';
+    
+    // RecurrencePeriod
+    periodType      := LibCal_RecurrencePeriod::TYPE_WITHOUTEND();
+    periodStartDate := Date::MinDate();
+    periodEndDate   := Date::MinDate();
+    nrOfOccurrences := 0;
+    
+    // All values are passed to the Server, only the relevant values are used there.
+    event := LibCal_Event::CreateUpdateFromUI( sEvent.Calendar(), sLeadPart.WrappedInstance(),
+                                               subject, description, eventType, eventTypeList, capacity, category, isDefault,
+                                               startDate, startTimeOfDay, endDate, endTimeOfDay, isAllDay,
+                                               // RecurrencePattern
+                                               isRecurring, recurrenceInterval, patternType,
+                                               daily_IsEveryWeekday,
+                                               weekly_Weekdays,
+                                               monthly_IsDay, monthly_Day,  monthly_WeekOfMonth, monthly_DayOfWeek,
+                                               yearly_IsDate, yearly_Month, yearly_Day, yearly_WeekOfMonth, yearly_DayOfWeek,
+                                               // RecurrencePeriod
+                                               periodType, periodStartDate, nrOfOccurrences, periodEndDate,
+                                               // Subscribers
+                                               dhSubscribers.Data() );
+    
+    return event;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetCalendarTimeZone.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetCalendarTimeZone.def
new file mode 100644
index 0000000..7e5de2e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetCalendarTimeZone.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCalendarTimeZone () as TimeZone id:Method_LibCal_dlgMultipleEvent_GetCalendarTimeZone
+{
+  #keys: '[415136.0.646711553]'
+  Body:
+  [*
+    return dhEvent.Data().Calendar().GetTimeZone();
+  *]
+  Declarative: true
+  ReturnsOwning: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetNrOfMonth.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetNrOfMonth.def
new file mode 100644
index 0000000..bc128d1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_GetNrOfMonth.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetNrOfMonth (
+  String month_i
+) as Number id:Method_LibCal_dlgMultipleEvent_GetNrOfMonth
+{
+  #keys: '[415136.0.647371986]'
+  Body:
+  [*
+    rowSeparator := ";";  // ssYearlyMonth.RowSeparator() in not possible (yet?) in WC.
+    
+    months    := Translations::Pattern_Months().Tokenize( rowSeparator );
+    nrOfMonth := months.Find( month_i ) + 1;
+    
+    return nrOfMonth;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeCapacity.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeCapacity.def
new file mode 100644
index 0000000..4dc84ac
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeCapacity.def
@@ -0,0 +1,49 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitializeCapacity () id:Method_LibCal_dlgMultipleEvent_InitializeCapacity
+{
+  #keys: '[415136.0.647371166]'
+  Body:
+  [*
+    // Extensible method USE_PARTIAL_CAPACITY indicates if partial capacity is allowed.
+    // If so, then add it as possible option.
+    useParticalCapacity := LibCal_Event::USE_PARTIAL_CAPACITY();
+    
+    if( useParticalCapacity )
+    {
+      ddslType.Strings( ddslType.Strings() + ";" + LibCal_Event::TYPE_PARTIAL() );
+    }
+    
+    event     := dhEvent.Data();
+    eventType := event.Type();
+    
+    // See if the eventType can be used as is or if it should be converted first.
+    if( useParticalCapacity )
+    {
+      ddslType.Text( eventType );
+    }
+    else
+    {
+      // Partial capacity should not be used. Convert it to Unavailable or Available.
+      // This is an edge case that can only happen via import, or when using partial capacity was first enabled and later disabled.
+      if( eventType = LibCal_Event::TYPE_PARTIAL() )
+      {
+        if( event.PartialCapacity() = 0.0 )
+        {
+          eventType := LibCal_Event::TYPE_UNAVAILABLE();
+        }
+        else
+        {
+          eventType := LibCal_Event::TYPE_AVAILABLE();
+        }
+    
+        // Show a message to inform the user that the EventType and Capacity was changed.
+        capacity := LibCal_GlobalState.RealToString( event.PartialCapacity() );
+        WebMessageBox::Warning( "The event type was 'Partial' with Capacity = " + capacity + ", but partial capacity is not enabled."
+                              + "The event type is set to '" + eventType + "'.", false, false );
+      }
+    
+      ddslType.Text( eventType );
+    }
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeSubscribers.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeSubscribers.def
new file mode 100644
index 0000000..8cd3a70
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_InitializeSubscribers.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitializeSubscribers () id:Method_LibCal_dlgMultipleEvent_InitializeSubscribers
+{
+  #keys: '[415136.0.647231508]'
+  Body:
+  [*
+    participation        := dhLeadingParticipation.Data();
+    calendar             := participation.Calendar();
+    potentialSubscribers := calendar.GetPotentialSubscribers();
+    
+    // Remove the calendar of the initiator (cannot subscribe to self).
+    initiator := dhEvent.Data().Calendar();
+    if( potentialSubscribers.Find( initiator ) >= 0 )
+    {
+      potentialSubscribers.Remove( initiator );
+    }
+    
+    dhPotentialSubscribers.Data( &potentialSubscribers );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_OnOK.def
new file mode 100644
index 0000000..7e2c2c7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_OnOK.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_LibCal_dlgMultipleEvent_OnOK
+{
+  #keys: '[415136.0.647733138]'
+  Body:
+  [*
+    // If applicable, inform the user that the recurrence cannot always be applied exactly as defined.
+    //if( btnMonthly.IsPressed() and
+    //    ckbMonthlyDay.Checked() )
+    //{
+    //  day := [Number]edtMonthlyDay.Text();
+    //  if( day > 28 )
+    //  {
+    //    WebMessageBox::Warning( Translations::Pattern_Monthly_LessDays( day ), "OK", true );
+    //  }
+    //}
+    
+    // subscribers_i contains the calendars that are checked in the list with subscribers.
+    //subscribers := subscribers_i.Copy();
+    //dhSubscribers.Data( &subscribers );
+    
+    // If the dialog was opened from dlgSubscription, update the data in that dialog.
+    //if( not isnull( dhdlgSubscription.Data() ) )
+    //{
+    //  this.CallbackSubscriptionDialog();
+    //}
+    
+    // Effectuate the changes and close the form.
+    event := Form.CreateUpdateEventAndParticipation();
+    info( '-------------1----------------', isnull( event ) );
+    //Form.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetDaysOnlyMode.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetDaysOnlyMode.def
new file mode 100644
index 0000000..f26ff4b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetDaysOnlyMode.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetDaysOnlyMode () id:Method_LibCal_dlgMultipleEvent_SetDaysOnlyMode
+{
+  #keys: '[415136.0.646700929]'
+  Body:
+  [*
+    // Force the times to be 0:00, in case an event is edited that was created in 'regular' mode,
+    // and set IsAllDay.
+    this.ShowDaysOnlyModeWarning();
+    
+    dhStartTimeOfDay.Data( Duration::Zero() );
+    dhEndTimeOfDay  .Data( Duration::Zero() );
+    
+    durStartTimeOfDay.Duration( Duration::Zero() );
+    durEndTimeOfDay  .Duration( Duration::Zero() );
+    
+    //ckbIsAllDay.Checked(  true );
+    
+    // Disable start and end time, and hide checkbox 'All day'.
+    // Disabling start and end makes the duration more clear; you can better see that end is NOT part of the duration.
+    durStartTimeOfDay.Enabled( false, "Days only mode is enabled" );
+    durEndTimeOfDay  .Enabled( false, "Days only mode is enabled" );
+    //ckbIsAllDay      .Visible( false );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetEventData.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetEventData.def
new file mode 100644
index 0000000..6fa40fe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetEventData.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetEventData () id:Method_LibCal_dlgMultipleEvent_SetEventData
+{
+  #keys: '[415136.0.645530896]'
+  Body:
+  [*
+    // Set the values of the controls that are related to the Event.
+    // Don't rely on databinding, because this is too late for the visualization logic;
+    // the values have not been taken over from the bound attributes yet when the logic needs them.
+    sEvent := dhEvent.Data();
+    
+    edtName.Text( sEvent.Subject() );
+    //Type
+    //ddslType.Text( sEvent.Type()    );
+    
+    //capacity := LibCal_GlobalState.RealToString( sEvent.PartialCapacity() );
+    //edtCapacity.Text( capacity );
+    
+    // Days only mode requires special treatment.
+    if( LibCal_Event::USE_ONLY_DAYS() )
+    {
+      this.SetDaysOnlyMode();
+    }
+    else
+    {
+      dhStartTimeOfDay.Data( sEvent.StartTimeOfDay() );
+      dhEndTimeOfDay  .Data( sEvent.EndTimeOfDay()   );
+    
+      durStartTimeOfDay.Duration( sEvent.StartTimeOfDay() );
+      durEndTimeOfDay  .Duration( sEvent.EndTimeOfDay()   );
+    
+    //  ckbIsAllDay.Checked( sEvent.IsAllDay() );
+    }
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def
new file mode 100644
index 0000000..12e8065
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetParticipationData () id:Method_LibCal_dlgMultipleEvent_SetParticipationData
+{
+  #keys: '[415136.0.647763952]'
+  Body:
+  [*
+    sParticipation := dhLeadingParticipation.Data();
+    
+    // If the StartDate is earlier than the start of the CalendarWindow, then set the StartDate
+    // to the date of the first recurrence within the CalendarWindow.
+    // This prevents showing dates from potentially long in the past.
+    startDate := sParticipation.StartDate();
+    if( sParticipation.IsRecurring() and
+        startDate < sParticipation.Calendar().StartDate() )
+    {
+      startDate := Date::MinDate();
+    }
+    
+    //delta := startDate - sParticipation.StartDate();
+    
+    // Only the value of the following two controls have to be set explicitly (in this order!),
+    // the value of the other controls are then set via the responses of these controls.
+    //dhEndDate  .Data( sParticipation.EndDate() + delta );
+    dsStartDate.Date( startDate );
+    
+    // Directly initialize the Duration
+    //this.InitializeDuration();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowDaysOnlyModeWarning.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowDaysOnlyModeWarning.def
new file mode 100644
index 0000000..889da37
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowDaysOnlyModeWarning.def
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+Method ShowDaysOnlyModeWarning () id:Method_LibCal_dlgMultipleEvent_ShowDaysOnlyModeWarning
+{
+  #keys: '[415136.0.646701003]'
+  Body:
+  [*
+    // Show a warning when the StartTimeOfDay and/or EndTimeOfDay of the Event will be set to 0:00
+    // because of running in days only mode.
+    event := dhEvent.Data();
+    msg   := "";
+    
+    if( event.StartTimeOfDay() <> Duration::Zero() )
+    {
+      msg := "StartTimeOfDay is changed from " + [String]event.StartTimeOfDay() + " to 0:00";
+    }
+    
+    if( event.EndTimeOfDay() <> Duration::Zero() )
+    {
+      msg := msg + ifexpr( msg <> "", "\n", "" )
+                 + "EndTimeOfDay is changed from " + [String]event.EndTimeOfDay() + " to 0:00";
+    }
+    
+    if( msg <> "" )
+    {
+      WebMessageBox::Warning( "DaysOnly-mode is enabled for the calendars.\n" + msg, false, false );
+    }
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesDatesOK.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesDatesOK.def
new file mode 100644
index 0000000..58c3135
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesDatesOK.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: #root
+Method ValuesDatesOK () as Boolean id:Method_LibCal_dlgMultipleEvent_ValuesDatesOK
+{
+  #keys: '[415136.0.654351264]'
+  Body:
+  [*
+    feedback := FeedbackObject::LocalFeedback();
+    timezone := this.GetCalendarTimeZone();
+    
+    if( dsStartDate.Date().IsInfinite() )
+    {
+      feedback.AddHard( Translations::Event_InvalidStartDate() );
+    }
+    
+    //if( dsEndDate.Date().IsInfinite() )
+    //{
+    //  feedback.AddHard( Translations::Event_InvalidEndDate() );
+    //}
+    
+    if( feedback.IsAllowed() )
+    {
+      start := dsStartDate.Date().DateTime( timezone ).AddAsPeriod( timezone, durStartTimeOfDay.Duration() );
+      end   := dsStartDate.Date().DateTime( timezone ).AddAsPeriod( timezone, durEndTimeOfDay  .Duration() );
+    
+      if( end <= start )
+      {
+        feedback.AddHard( Translations::Event_EndMustBeGreaterThanStart() );
+      }
+    
+      // End must be greater than StartOfCalendar.
+      startOfCalendar := dhEvent.Data().Calendar().Start();
+      if( end <= startOfCalendar )
+      {
+        convOps := ConversionOptions::ISO();
+        feedback.AddHard( Translations::Event_EndMustBeGreaterThanStartOfCalendar( end            .Format( Translations::DateTimeFormat(), convOps ),
+                                                                                   startOfCalendar.Format( Translations::DateTimeFormat(), convOps ) ) );
+      }
+    }
+    
+    return feedback.IsAllowed();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesEventOK.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesEventOK.def
new file mode 100644
index 0000000..4221e03
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesEventOK.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+Method ValuesEventOK () as Boolean id:Method_LibCal_dlgMultipleEvent_ValuesEventOK
+{
+  #keys: '[415136.0.654351189]'
+  Body:
+  [*
+    feedback := FeedbackObject::LocalFeedback();
+    
+    if( edtName.Text().TrimBoth() = "" )
+    {
+      feedback.AddHard( Translations::Event_NoSubject() );
+    }
+    
+    //if( ddslType.Text() = LibCal_Event::TYPE_PARTIAL() )
+    //{
+    //  capacity := this.StringToReal( edtCapacity.Text() );
+    //
+    //  if( capacity <> Real::MinReal() )
+    //  {
+    //    // Check the value of the Real.
+    //    if( capacity < 0.0 or  // cannot happen, because '-' is not accepted
+    //        capacity > 1.0 )
+    //    {                                                           // Format according to the applicable locale.
+    //      feedback.AddHard( Translations::Event_CapacityMustBeBetween0and1( ( 0.0 ).Format( "N(Dec(1))" ),
+    //                                                                        ( 1.0 ).Format( "N(Dec(1))" ) ) );
+    //    }
+    //  }
+    //  else
+    //  {
+    //    feedback.AddHard( Translations::Event_InvalidCapacity() );
+    //  }
+    //}
+    
+    return feedback.IsAllowed();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesOK.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesOK.def
new file mode 100644
index 0000000..d9c8738
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ValuesOK.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Method ValuesOK () as Boolean id:Method_LibCal_dlgMultipleEvent_ValuesOK
+{
+  #keys: '[415136.0.654351117]'
+  Body:
+  [*
+    feedback := FeedbackObject::LocalFeedback();
+    
+    this.ValuesEventOK();
+    
+    // Only check for dates when the event is not recurring...
+    //if( btnOnce.IsPressed() )
+    //{
+      this.ValuesDatesOK();
+    //}
+    
+    //else  // ... otherwise check if the recurrence pattern and period are ok.
+    //{
+    //  this.ValuesRecurrenceOK();
+    //  this.ValuesPeriodRangeOK();
+    //}
+    
+    return feedback.IsAllowed();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_OnCreated.def
new file mode 100644
index 0000000..7a7fc3d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_OnCreated.def
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_LibCal_dlgMultipleEvent_OnCreated
+{
+  #keys: '[415136.0.647763850]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      // Generic initialization
+      calendar := dhLeadingParticipation.Data().Calendar();
+      this.Title( "Event for calendar '" + calendar.CalendarID() + "'" );
+      
+      // Only show the checkbox for common events.
+      //pnlApplyToNewResources.Visible( calendar.istype( LibCal_CommonCalendar ) );
+      
+      //this.InitializeWeekdayButtons();
+      //this.InitializeRecurrence();
+      this.SetParticipationData();  // Determine the StartDate after the recurrence has been initialized,
+                                    // so it can be updated to the first occurrence inside the CalendarWindow if necessary.
+      //this.InitializeTimezone();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ButtonCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ButtonCreate_OnClick.def
new file mode 100644
index 0000000..2490324
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ButtonCreate_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/ButtonCreate
+Response OnClick () id:Response_PanelHeader_144_ButtonCreate_OnClick
+{
+  #keys: '[415136.0.654000146]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.OnOK();
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ddslType_OnSelectionChanged\043613.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ddslType_OnSelectionChanged\043613.def"
new file mode 100644
index 0000000..9e077dd
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ddslType_OnSelectionChanged\043613.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/ddslType_360
+Response OnSelectionChanged () id:Response_pnlType_ddslType_OnSelectionChanged_613
+{
+  #keys: '[415136.0.646711729]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      // Show the editfield for the capacity, if applicable.
+      //edtCapacity.Visible( selection = LibCal_Event::TYPE_PARTIAL() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsStartDate_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsStartDate_OnChanged.def
new file mode 100644
index 0000000..203f73c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsStartDate_OnChanged.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/dsStartDate
+Response OnChanged () id:Response_PanelHeader_144_dsStartDate_OnChanged
+{
+  #keys: '[415136.0.647401487]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      // Adjust the EndDate accordingly.
+      //if( dhStartDate.Data().IsFinite() )
+      //{
+      //  // Use the EndDate of the instance if the value of the control has not been set yet.
+      //  endDate := ifexpr( dsEndDate.Date().IsFinite(), dsEndDate.Date(), dhLeadingParticipation.Data().EndDate() );
+      //
+      //  delta := this.Date() - dhStartDate.Data();
+      //  dsEndDate.Date( endDate + delta );
+      //}
+       
+      // Update the 'memory' for later delta-calculation, and/or setting the time back when AllDay is turned off.
+      dhStartDate.Data( this.Date() );
+      
+      // Also set StartOfPeriod (always, also in case of a non-recurring event).
+      //dsStartOfPeriod.Date( this.Date() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnChanged.def
new file mode 100644
index 0000000..76755aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnChanged.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/durEndTimeOfDay
+Response OnChanged () id:Response_PanelHeader_144_durEndTimeOfDay_OnChanged
+{
+  #keys: '[415136.0.647401489]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      // Update the 'memory', but only when not all day, because otherwise it will be set to 0:00.
+      //if( not ckbIsAllDay.Checked() )
+      //{
+      //  dhEndTimeOfDay.Data( this.Duration() );
+      //}
+      //
+      //Form.UpdateDuration();
+      //Form.UpdateTextualInfo();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnInputIdle.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnInputIdle.def
new file mode 100644
index 0000000..41f118d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durEndTimeOfDay_OnInputIdle.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/durEndTimeOfDay
+Response OnInputIdle () id:Response_PanelHeader_144_durEndTimeOfDay_OnInputIdle
+{
+  #keys: '[415136.0.647401488]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnInputIdle'
+  QuillAction
+  {
+    Body:
+    [*
+      // Update the 'memory', but only when not all day, because otherwise it will be set to 0:00.
+      //if( not ckbIsAllDay.Checked() )
+      //{
+      //  dhEndTimeOfDay.Data( this.Duration() );
+      //}
+      //
+      //Form.UpdateDuration();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnChanged.def
new file mode 100644
index 0000000..c8a664b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnChanged.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/durStartTimeOfDay
+Response OnChanged () id:Response_PanelHeader_144_durStartTimeOfDay_OnChanged
+{
+  #keys: '[415136.0.647401492]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      // If not AllDay, adjust the EndTimeOfDay accordingly.
+      // When EndTimeOfDay is not changed, UpdateDuration must be done from here.
+      //updateDuration := true;
+      //
+      //if( not ckbIsAllDay.Checked() )
+      //{
+      //  delta := this.Duration() - dhStartTimeOfDay.Data();
+      //  
+      //  if( delta <> Duration::Zero() )
+      //  {
+      //    endTimeOfDay := durEndTimeOfDay.Duration() + delta;
+      //
+      //    // Also adjust dsEndDate if necessary.    
+      //    dsEndDate.Date( dsEndDate.Date() + endTimeOfDay.Days() );
+      //    durEndTimeOfDay.Duration( endTimeOfDay - Duration::Days( endTimeOfDay.Days() ) );
+      //  
+      //    // Update the 'memory' for later delta-calculation, and/or setting the time back when AllDay is turned off.
+      //    dhStartTimeOfDay.Data( this.Duration() );
+      //    
+      //    updateDuration := false;
+      //  }
+      //}
+      //
+      //if( updateDuration )
+      //{
+      //  Form.UpdateDuration();
+      //}
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnInputIdle.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnInputIdle.def
new file mode 100644
index 0000000..d47285d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_durStartTimeOfDay_OnInputIdle.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/durStartTimeOfDay
+Response OnInputIdle () id:Response_PanelHeader_144_durStartTimeOfDay_OnInputIdle
+{
+  #keys: '[415136.0.647401491]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnInputIdle'
+  QuillAction
+  {
+    Body:
+    [*
+      // If not AllDay, adjust the EndTimeOfDay accordingly.
+      //if( not ckbIsAllDay.Checked() )
+      //{
+      //  delta := this.Duration() - dhStartTimeOfDay.Data();
+      //  
+      //  if( delta <> Duration::Zero() )
+      //  {
+      //    endTimeOfDay := durEndTimeOfDay.Duration() + delta;
+      //
+      //    // Also adjust dsEndDate if necessary.    
+      //    dsEndDate.Date( dsEndDate.Date() + endTimeOfDay.Days() );
+      //    durEndTimeOfDay.Duration( endTimeOfDay - Duration::Days( endTimeOfDay.Days() ) );
+      //  
+      //    // Update the 'memory' for later delta-calculation, and/or setting the time back when AllDay is turned off.
+      //    dhStartTimeOfDay.Data( this.Duration() );
+      //  }
+      //}
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnCheckedChanged.def
new file mode 100644
index 0000000..fd17c51
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnCheckedChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: lstSubscribers_537
+Response OnCheckedChanged (
+  structured[LibCal_Calendar] checkeditems
+) id:Response_lstSubscribers_537_OnCheckedChanged
+{
+  #keys: '[415136.0.654000327]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      subscribers := checkeditems.Copy();
+      
+      dhSubscribers.Data( &subscribers );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnSelectionChanged.def
new file mode 100644
index 0000000..e04e4a0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_OnSelectionChanged.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: lstSubscribers_537
+Response OnSelectionChanged (
+  LibCal_Calendar selection
+) id:Response_lstSubscribers_537_OnSelectionChanged
+{
+  #keys: '[415136.0.647401559]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      // Initialize the list by setting the checkmark for the subscribing calendars when this has not been done before.
+      // This should only be done when OnSelectionChanged is executed for the first time.
+      if( lblIsInitialized.Text() = "false" )
+      {
+        // Get the calendars of the subscriptions.
+        calendars := selectset( dhEvent.Data(), LeadingParticipation.Subscription.Calendar, calendar, true, true ).Unique();
+        
+        traverse( calendars, Elements, subscriber )
+        {
+          lstSubscribers.ExtendCheckByKey( subscriber.Key() );
+        }
+          
+        // Register that the list has been initialized.
+        lblIsInitialized.Text( "true" );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_mnDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_mnDelete_OnClick.def
new file mode 100644
index 0000000..01d56c3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_lstSubscribers_537_mnDelete_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: lstSubscribers_537
+Response OnClick (
+  structured[LibCal_Subscription] selection
+) id:Response_lstSubscribers_537_mnDelete_OnClick
+{
+  #keys: '[415136.0.655381139]'
+  CanBindMultiple: false
+  DefinitionID => /lstSubscribers_537/Responsedef_lstSubscribers_537_WebMenu_OnClick
+  Initiator: 'mnDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection, Elements, e ){
+        leadingP := e.LeadingParticipation();
+        if( leadingP.Subscription( relsize ) > 0 ){
+          leadingP.Event().Delete();
+          leadingP.Delete();
+        }
+        e.Delete();
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/_ROOT_Component_LibCal_dlgMultipleEvent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/_ROOT_Component_LibCal_dlgMultipleEvent.def
new file mode 100644
index 0000000..c3c4761
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/_ROOT_Component_LibCal_dlgMultipleEvent.def
@@ -0,0 +1,71 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent LibCal_dlgMultipleEvent
+{
+  #keys: '[415136.0.645501432]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component dhEvent id:dhEvent_957
+    {
+      #keys: '[415136.0.645530811]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[LibCal_Event]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component dhLeadingParticipation id:dhLeadingParticipation_384
+    {
+      #keys: '[415136.0.646701431]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[LibCal_LeadingParticipation]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: PanelContent
+    Component dhdlgSubscription id:dhdlgSubscription_640
+    {
+      #keys: '[415136.0.647733217]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'LibCal_dlgSubscription'
+      Properties:
+      [
+        Description: 'Is set when the dialog is opened from dlgSubscription.'
+        Taborder: 2
+      ]
+    }
+    Component dhEvents
+    {
+      #keys: '[415136.0.655311659]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[LibCal_Event]*'
+      Properties:
+      [
+        Description: '瀛樺偍鐢辨壒閲忕晫闈㈠垱寤虹殑浜嬩欢'
+        Taborder: 3
+      ]
+    }
+    Component dhCategory
+    {
+      #keys: '[415136.0.657911841]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'LibCal_EventCategory'
+      Properties:
+      [
+        Description: 'Unavaliable绫诲埆'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    MinimumRows: 100
+    Title: 'Multiple event'
+    Tooltip: 'Multiple event'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_cmEventCategories.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_cmEventCategories.def
new file mode 100644
index 0000000..197356b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_cmEventCategories.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+Component cmEventCategories #extension
+{
+  Children:
+  [
+    Component MenuCreateMultipleEvents
+    {
+      #keys: '[415136.0.645500589]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'CALENDAR'
+        Taborder: 5
+        Title: 'Create multiple events'
+        Tooltip: 'Create multiple events'
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_lstEventCategories.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_lstEventCategories.def
new file mode 100644
index 0000000..4ce044f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_lstEventCategories.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component lstEventCategories #extension
+{
+  Children:
+  [
+    Component dslEventCategories #extension
+    {
+      Children:
+      [
+        #child: cmEventCategories
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_pnlEventCategories.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_pnlEventCategories.def
new file mode 100644
index 0000000..a8341fb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Component_pnlEventCategories.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlEventCategories #extension
+{
+  Children:
+  [
+    #child: lstEventCategories
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Response_MacroPlanner_lstEventCategories_MenuCreateMultipleEvents_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Response_MacroPlanner_lstEventCategories_MenuCreateMultipleEvents_OnClick.def
new file mode 100644
index 0000000..32f7b6e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/Response_MacroPlanner_lstEventCategories_MenuCreateMultipleEvents_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: lstEventCategories
+Response OnClick (
+  LibCal_EventCategory selection
+) id:Response_lstEventCategories_MenuCreateMultipleEvents_OnClick
+{
+  #keys: '[415136.0.647763266]'
+  CanBindMultiple: false
+  DefinitionID => /lstEventCategories/Responsedef_lstEventCategories_WebMenu_OnClick
+  Initiator: 'MenuCreateMultipleEvents'
+  QuillAction
+  {
+    Body:
+    [*
+      LibCal_GlobalState.CreateMultipleEvent( dhCalendar.Data(), selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/_ROOT_Component_LibCal_frmCommonCalendar.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/_ROOT_Component_LibCal_frmCommonCalendar.def
new file mode 100644
index 0000000..2544900
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_frmCommonCalendar/_ROOT_Component_LibCal_frmCommonCalendar.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: CalendarsWebUI
+OrphanComponent LibCal_frmCommonCalendar #extension
+{
+  Children:
+  [
+    #child: pnlEventCategories
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_CalendarsWebUI.qp b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_CalendarsWebUI.qp
new file mode 100644
index 0000000..ff9fe86
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_CalendarsWebUI.qp
@@ -0,0 +1,5 @@
+Quintiq file version 2.0
+#parent: #root
+Project id:CalendarsWebUI #extension
+{
+}

--
Gitblit v1.9.3