From 290e66e2ed986ae5c6fe3f78f7203a0988657e21 Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期四, 25 七月 2024 10:32:36 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/BL/Type_FinishedEngineInventory/Attribute_EngineModularPlatform.qbl                                                                      |    8 
 _Main/BL/Type_MachineStockData/Attribute_Product.qbl                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_ListInterfaceLoginfo.def                                                  |   42 +
 _Main/BL/Type_FinishedEngineInventory/Attribute_Price.qbl                                                                                      |    8 
 _Main/BL/Type_FinishedEngineInventory/Attribute_DWeek.qbl                                                                                      |    7 
 _Main/BL/Type_LibCal_SubscriberEventRow/Function_CalcName.qbl                                                                                  |   13 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def                                                |   15 
 _Main/BL/InfoMessages.qbl                                                                                                                      |   30 
 _Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl                                                                                      |    9 
 Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl                                                                           |    1 
 _Main/BL/Type_FinishedEngineInventory/Attribute_VehicleType.qbl                                                                                |    8 
 _Main/BL/Type_FinishedEngineInventory/_ROOT_Type_FinishedEngineInventory.qbl                                                                   |   10 
 _Main/BL/Type_MachineStockData/Attribute_Inventory.qbl                                                                                         |    8 
 _Main/BL/Type_FinishedEngineInventory/Attribute_Brand.qbl                                                                                      |    8 
 Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl                                        |    1 
 _Main/BL/Type_FinishedEngineInventory/Attribute_DDay.qbl                                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def                               |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listContextMenuMachineStockData.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick.def             |   16 
 _Main/BL/Type_MachineStockData/StaticMethod_GenerateData.qbl                                                                                   |   32 
 _Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl                                                                                 |   80 +-
 _Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listActionBarPageFinishedEngineInventory.def                       |   10 
 _Main/BL/Type_FinishedEngineInventory/Attribute_DType.qbl                                                                                      |    8 
 _Main/BL/Type_MachineStockData/Attribute_MaterialNo.qbl                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listContextMenuFinishedEngineInventory.def                         |   10 
 _Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl                                                                                  |   41 
 _Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl                                                                      |   10 
 _Main/BL/Type_FinishedEngineInventory/DefaultValue_Fac.qbl                                                                                     |    6 
 _Main/BL/Type_FinishedEngineInventory/StaticMethod_Synchronize.qbl                                                                             |   33 
 _Main/BL/Type_LibCal_SubscriberEventRow/Attribute_Name.qbl                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_ListFinishedEngineInventory.def                                    |   42 +
 _Main/BL/Type_MachineStockData/Attribute_Unit.qbl                                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ckbIsAllDay_OnChanged.def                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsEndDate_OnChanged.def                                 |   30 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listContextMenuInterfaceLoginfo.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def                                             |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/_ROOT_Component_FormMachineStockData.def                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent#778.def                                                       |    2 
 _Main/BL/Type_MachineStockData/Attribute_AllTotal.qbl                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def                                                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuEdit_OnClick.def                                           |   21 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnCli.def |   16 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def                                                 |   13 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick.def      |   16 
 _Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw                                                                           |    4 
 _Main/UI/MacroPlannerWebApp/Views/Interface_loginfo_view.vw                                                                                    |  146 ++++
 _Main/BL/Type_MachineStockData/Attribute_DDay.qbl                                                                                              |    8 
 _Main/BL/Type_FinishedEngineInventory/Attribute_FullName.qbl                                                                                   |    8 
 _Main/BL/Type_FinishedEngineInventory/Attribute_SpellName.qbl                                                                                  |    8 
 _Main/BL/Type_MachineStockData/Attribute_Date.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def                                                     |   14 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def                                         |    6 
 _Main/BL/Type_MachineStockData/StaticMethod_Synchronize.qbl                                                                                    |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listActionBarPageMachineStockData.def                                     |   10 
 _Main/BL/Type_FinishedEngineInventory/Attribute_Amount.qbl                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def                                                   |   14 
 _Main/BL/Type_FinishedEngineInventory/Attribute_BIPlace.qbl                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def                                     |    4 
 _Main/UI/MacroPlannerWebApp/Views/Machine_stock_data.vw                                                                                        |  119 +++
 _Main/BL/Type_FinishedEngineInventory/Attribute_EngineType.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowAllDay.def                                                            |   63 +
 _Main/BL/Type_FinishedEngineInventory/Attribute_ReceiptPlace.qbl                                                                               |    8 
 _Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl                                                                              |  101 +-
 _Main/BL/Type_MachineStockData/_ROOT_Type_MachineStockData.qbl                                                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def                                                  |    1 
 _Main/BL/Relations/Relation_FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedE.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/_ROOT_Component_FormInterfaceLoginfo.def                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def                                                           |    4 
 _Main/BL/Type_FinishedEngineInventory/Attribute_FourCode.qbl                                                                                   |    8 
 _Main/BL/Type_MachineStockData/Attribute_LineType.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def                                               |   46 +
 _Main/BL/Type_MachineStockData/Attribute_Total.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def                               |    4 
 _Main/UI/MacroPlannerWebApp/Views/Finished_engine_inventory.vw                                                                                 |  200 +++++
 _Main/BL/Type_MachineStockData/Attribute_FacName.qbl                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent#791.def                                                               |    7 
 _Main/BL/Type_MachineStockData/Attribute_Fac.qbl                                                                                               |    8 
 _Main/BL/Type_MachineStockData/StaticMethod_GetRequestBody.qbl                                                                                 |   15 
 _Main/BL/Type_FinishedEngineInventory/Attribute_Fac.qbl                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def                                                               |    2 
 _Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl                                                                             |   16 
 _Main/BL/Type_FinishedEngineInventory/StaticMethod_GetRequestBody.qbl                                                                          |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/_ROOT_Component_FormFinishedEngineInventory.def                              |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_ListMachineStockData.def                                                  |   42 +
 _Main/BL/Type_LibCal_Event/Attribute_IsMultiple.qbl                                                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def                                                                     |    8 
 _Main/BL/Type_FinishedEngineInventory/Attribute_DMonth.qbl                                                                                     |    7 
 /dev/null                                                                                                                                      |   22 
 _Main/BL/Type_FinishedEngineInventory/Attribute_Total.qbl                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listActionBarPageInterfaceLoginfo.def                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader#144.def                                                    |   57 +
 Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl                                                                        |    1 
 _Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl                                                                           |   32 
 _Main/BL/Type_MachineStockData/Attribute_MaterialName.qbl                                                                                      |    8 
 _Main/BL/Relations/Relation_MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData.qbl                                            |   23 
 _Main/BL/Type_FinishedEngineInventory/StaticMethod_GenerateData.qbl                                                                            |   50 +
 96 files changed, 1,804 insertions(+), 190 deletions(-)

diff --git a/Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl b/Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl
index cbcdcd6..d8bde91 100644
--- a/Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl
+++ b/Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl
@@ -12,7 +12,6 @@
     Cardinality: '0to1'
     ObjectDefinition: LibCal_ExplicitTimeInterval
     OwningSide: 'Reference'
-    InterfaceProperties { Accessibility: 'Module' }
   }
   RelationSide.RightSide SubscribingETI
   {
diff --git a/Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl b/Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl
index f4cb80f..3b07e04 100644
--- a/Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl
+++ b/Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl
@@ -14,5 +14,4 @@
       this.AddSubscriber( subscriber, useLeadingPeriod_i );
     }
   *]
-  InterfaceProperties { Accessibility: 'Module' }
 }
diff --git a/Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl b/Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl
index 17e54df..462efa6 100644
--- a/Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl
+++ b/Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl
@@ -19,5 +19,4 @@
     
     return timeInterval;
   *]
-  InterfaceProperties { Accessibility: 'Module' }
 }
diff --git a/_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl b/_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl
new file mode 100644
index 0000000..066ff70
--- /dev/null
+++ b/_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Daemon MachineStockInterface
+{
+  Frequency: P1DT0H0M0S
+  Priority: 'Default'
+  StartDate: 2024-07-19
+  StartTimeOfDay: P0DT9H0M0S
+  Text:
+  [*
+    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSInterfaceDataset::Root( mdskey ) -> MachineStockData::Synchronize( "Administrator" );
+  *]
+}
diff --git a/_Main/BL/InfoMessages.qbl b/_Main/BL/InfoMessages.qbl
index 666f1cd..35fd453 100644
--- a/_Main/BL/InfoMessages.qbl
+++ b/_Main/BL/InfoMessages.qbl
@@ -102,9 +102,37 @@
   {
     DefaultText: 'application/json'
   }
+  InfoMessage InterfaceDataset_FinishedEngineInventory_Name
+  {
+    DefaultText: 'Finished engine inventory'
+  }
+  InfoMessage InterfaceDataset_FinishedEngineInventory_Secret
+  {
+    DefaultText: '527100497300029474'
+  }
+  InfoMessage InterfaceDataset_FinishedEngineInventory_URL
+  {
+    DefaultText: '/data-service/api/service/post-data/V1.101/f084aa52d19c48d090416936a94f1dab'
+  }
+  InfoMessage InterfaceDataset_MachineStockData_Name
+  {
+    DefaultText: 'Machine stock data'
+  }
+  InfoMessage InterfaceDataset_MachineStockData_Secret
+  {
+    DefaultText: '527077575449641087'
+  }
+  InfoMessage InterfaceDataset_MachineStockData_URL
+  {
+    DefaultText: '/data-service/api/service/post-data/V1.101/2f6c42fe895c45bdb2e8e1ca8489b5a2'
+  }
   InfoMessage InterfaceDataset_ShippingActualData_Name
   {
     DefaultText: 'Shipping actual data'
+  }
+  InfoMessage InterfaceDataset_ShippingActualData_Secret
+  {
+    DefaultText: '527088907855069215'
   }
   InfoMessage InterfaceDataset_ShippingActualData_URL
   {
@@ -112,7 +140,7 @@
   }
   InfoMessage InterfaceDataset_Token_URL
   {
-    DefaultText: '/authorization/token/api/open/token/generateToken?grant_type=client_credentials&client_id=19KxoxPF25cy96K8TL&client_secret=514390007906041965'
+    DefaultText: '/authorization/token/api/open/token/generateToken?grant_type=client_credentials&client_id=19KxoxPF25cy96K8TL&client_secret='
   }
   InfoMessage MP_ChangeLossSetting_CheckNull
   {
diff --git a/_Main/BL/Relations/Relation_FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedE.qbl b/_Main/BL/Relations/Relation_FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedE.qbl
new file mode 100644
index 0000000..4a1f713
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedE.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedEngineInventory
+{
+  #keys: '1[415136.0.932110028]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceLoginfo
+  {
+    #keys: '3[415136.0.932110030][415136.0.932110029][415136.0.932110031]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinishedEngineInventory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinishedEngineInventory
+  {
+    #keys: '3[415136.0.932110033][415136.0.932110032][415136.0.932110034]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData.qbl b/_Main/BL/Relations/Relation_MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData.qbl
new file mode 100644
index 0000000..178bddd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData
+{
+  #keys: '1[415136.0.931886865]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceLoginfo
+  {
+    #keys: '3[415136.0.931886867][415136.0.931886866][415136.0.931886868]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachineStockData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MachineStockData
+  {
+    #keys: '3[415136.0.931886870][415136.0.931886869][415136.0.931886871]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_Amount.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_Amount.qbl
new file mode 100644
index 0000000..f702624
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_Amount.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Amount
+{
+  #keys: '3[415136.0.931887050][415136.0.931887049][415136.0.931887051]'
+  Description: '閲戦'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_BIPlace.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_BIPlace.qbl
new file mode 100644
index 0000000..d86e9fa
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_BIPlace.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BIPlace
+{
+  #keys: '3[415136.0.931887027][415136.0.931887026][415136.0.931887028]'
+  Description: '缁熻鍒嗘瀽鐨勫簱瀛樺湴鐐�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_Brand.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_Brand.qbl
new file mode 100644
index 0000000..6c02621
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_Brand.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Brand
+{
+  #keys: '3[415136.0.932110085][415136.0.932110084][415136.0.932110086]'
+  Description: '鍝佺墝'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_DDay.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_DDay.qbl
new file mode 100644
index 0000000..a778cc4
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_DDay.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DDay
+{
+  #keys: '3[415136.0.931887060][415136.0.931887059][415136.0.931887061]'
+  Description: '鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_DMonth.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_DMonth.qbl
new file mode 100644
index 0000000..bbe7e1b
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_DMonth.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DMonth
+{
+  #keys: '3[415136.0.932110115][415136.0.932110114][415136.0.932110116]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_DType.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_DType.qbl
new file mode 100644
index 0000000..03dce5c
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_DType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DType
+{
+  #keys: '3[415136.0.932110105][415136.0.932110104][415136.0.932110106]'
+  Description: 'SAP\\WZK\\ZT锛汼AP绯荤粺 闀挎槬澶栨棌搴� 澶ц繛鍦ㄩ��'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_DWeek.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_DWeek.qbl
new file mode 100644
index 0000000..3988a7f
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_DWeek.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DWeek
+{
+  #keys: '3[415136.0.931887068][415136.0.931887067][415136.0.931887069]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_EngineModularPlatform.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_EngineModularPlatform.qbl
new file mode 100644
index 0000000..9911d58
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_EngineModularPlatform.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EngineModularPlatform
+{
+  #keys: '3[415136.0.931887017][415136.0.931887016][415136.0.931887018]'
+  Description: '鍙戝姩鏈烘ā鍧楀寲骞冲彴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_EngineType.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_EngineType.qbl
new file mode 100644
index 0000000..0c7c09d
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_EngineType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EngineType
+{
+  #keys: '3[415136.0.932110075][415136.0.932110074][415136.0.932110076]'
+  Description: '鍙戝姩鏈虹被鍨嬶紝妯疆銆佺旱缃�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_Fac.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_Fac.qbl
new file mode 100644
index 0000000..2bb8850
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_Fac.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Fac
+{
+  #keys: '3[415136.0.931887064][415136.0.931887063][415136.0.931887065]'
+  Description: '宸ュ巶code'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_FourCode.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_FourCode.qbl
new file mode 100644
index 0000000..50524f4
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_FourCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FourCode
+{
+  #keys: '3[415136.0.932110043][415136.0.932110042][415136.0.932110044]'
+  Description: '鍥涗綅鐮�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_FullName.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_FullName.qbl
new file mode 100644
index 0000000..cc62e9b
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_FullName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FullName
+{
+  #keys: '3[415136.0.932110063][415136.0.932110062][415136.0.932110064]'
+  Description: '瀹屾暣鍨嬪彿鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_Price.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_Price.qbl
new file mode 100644
index 0000000..99767d8
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_Price.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[415136.0.931887037][415136.0.931887036][415136.0.931887038]'
+  Description: '鍗曚环'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_ReceiptPlace.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_ReceiptPlace.qbl
new file mode 100644
index 0000000..9f56ef6
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_ReceiptPlace.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReceiptPlace
+{
+  #keys: '3[415136.0.931886999][415136.0.931886998][415136.0.931887000]'
+  Description: '鏀惰揣鍦扮偣'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_SpellName.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_SpellName.qbl
new file mode 100644
index 0000000..2add113
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_SpellName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SpellName
+{
+  #keys: '3[415136.0.931887007][415136.0.931887006][415136.0.931887008]'
+  Description: '绠�鍐欏瀷鍙峰悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_Total.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_Total.qbl
new file mode 100644
index 0000000..adceff1
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_Total.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total
+{
+  #keys: '3[415136.0.932110095][415136.0.932110094][415136.0.932110096]'
+  Description: '搴撳瓨閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/Attribute_VehicleType.qbl b/_Main/BL/Type_FinishedEngineInventory/Attribute_VehicleType.qbl
new file mode 100644
index 0000000..26d0cec
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/Attribute_VehicleType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VehicleType
+{
+  #keys: '3[415136.0.932110053][415136.0.932110052][415136.0.932110054]'
+  Description: '鍙戝姩鏈鸿溅鍨�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/DefaultValue_Fac.qbl b/_Main/BL/Type_FinishedEngineInventory/DefaultValue_Fac.qbl
new file mode 100644
index 0000000..386d17b
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/DefaultValue_Fac.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Fac
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/StaticMethod_GenerateData.qbl b/_Main/BL/Type_FinishedEngineInventory/StaticMethod_GenerateData.qbl
new file mode 100644
index 0000000..ca6915a
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/StaticMethod_GenerateData.qbl
@@ -0,0 +1,50 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateData (
+  InterfaceLoginfo owner,
+  StringToDate cnv,
+  JSON item
+) as FinishedEngineInventory
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-17-2024 (created)
+    four_code                  := guard( item.Get( "four_code").GetString(),"");
+    vehicle_type               := guard( item.Get( "vehicle_type").GetString(),"");
+    receipt_place              := guard( item.Get( "receipt_place").GetString(),"");
+    full_name                  := guard( item.Get( "full_name").GetString(),"");
+    spell_name                 := guard( item.Get( "spell_name").GetString(),"");
+    engine_type                := guard( item.Get( "engine_type").GetString(),"");
+    engine_modular_platform    := guard( item.Get( "engine_modular_platform").GetString(),"");
+    brand                      := guard( item.Get( "brand").GetString(),"");
+    bi_place                   := guard( item.Get( "bi_place").GetString(),"");
+    price                      := guard( item.Get( "price").GetString(),"");
+    total                      := guard( item.Get( "total").GetReal(),0);
+    amount                     := guard( item.Get( "amount").GetReal(),0);
+    dtype                      := guard( item.Get( "dtype").GetString(),"");
+    fac                        := guard( item.Get( "fac").GetString(),"");
+    dday                       := guard( item.Get( "dday").GetString(),"");
+    dweek                      := guard( item.Get( "dweek").GetString(),"");
+    dmonth                     := guard( item.Get( "dmonth").GetString(),"");
+    
+    msdata           := owner.FinishedEngineInventory( relnew, FourCode := four_code
+                                                       , VehicleType := vehicle_type
+                                                       , ReceiptPlace := receipt_place
+                                                       , FullName := full_name
+                                                       , SpellName := spell_name
+                                                       , EngineType := engine_type
+                                                       , EngineModularPlatform := engine_modular_platform
+                                                       , Brand := brand
+                                                       , BIPlace := bi_place
+                                                       , Price := price
+                                                       , Total := total
+                                                       , Amount := amount
+                                                       , DType := dtype
+                                                       , Fac := fac
+                                                       , DDay := cnv.Convert( dday )
+                                                       , DWeek := dweek
+                                                       , DMonth := dmonth );
+    
+    return msdata;
+  *]
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/StaticMethod_GetRequestBody.qbl b/_Main/BL/Type_FinishedEngineInventory/StaticMethod_GetRequestBody.qbl
new file mode 100644
index 0000000..d122b01
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/StaticMethod_GetRequestBody.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetRequestBody (
+  Date date
+) as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-19-2024 (created)
+    json := JSON::Object()
+                  .Add( "inParam", JSON::Object().Add( "dday", date.Format( "Y-M2-D2" ) ) ).Build();
+    requestbody := json.AsString();
+    return requestbody
+  *]
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/StaticMethod_Synchronize.qbl b/_Main/BL/Type_FinishedEngineInventory/StaticMethod_Synchronize.qbl
new file mode 100644
index 0000000..184e857
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/StaticMethod_Synchronize.qbl
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Synchronize (
+  InterfaceDataset owner,
+  String executor
+)
+{
+  TextBody:
+  [*
+    //// 鐢勫叞楦� Jul-17-2024 (created)
+    date    := Date::ActualDate();
+    loginfo := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
+                                       , Name := Translations::InterfaceDataset_FinishedEngineInventory_Name()
+                                       , InterfaceDateTime := DateTime::ActualTime()
+                                       , Message := '搴撳瓨鏁版嵁锛堝彂鍔ㄦ満鎴愬搧搴撳瓨锛�'
+                                       , RequestBody := FinishedEngineInventory::GetRequestBody( date ) );
+    
+    data := InterfaceLoginfo::CallInterface( owner, loginfo );
+    if( not isnull( data ) ){
+      
+      cnv2 := StringToDate::StandardConverter();
+      cnv2.SetCustomConversion();
+      cnv2.CustomFormatString( 'yyyy-MM-dd' );
+      
+    //  sadatalist := construct( ShippingActualDatas );
+      for( seq := 0;seq < data.Size();seq++){
+        item := data.Get(seq);
+        FinishedEngineInventory::GenerateData( loginfo, cnv2, item );
+    //    sadatalist.Add( sadata );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinishedEngineInventory/_ROOT_Type_FinishedEngineInventory.qbl b/_Main/BL/Type_FinishedEngineInventory/_ROOT_Type_FinishedEngineInventory.qbl
new file mode 100644
index 0000000..8ad556c
--- /dev/null
+++ b/_Main/BL/Type_FinishedEngineInventory/_ROOT_Type_FinishedEngineInventory.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinishedEngineInventory
+{
+  #keys: '5[415136.0.932110025][415136.0.932110023][0.0.0][415136.0.932110024][415136.0.932110026]'
+  BaseType: Object
+  Description: '搴撳瓨鏁版嵁锛堝彂鍔ㄦ満鎴愬搧搴撳瓨锛�'
+  StructuredName: 'FinishedEngineInventorys'
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl
index aeb2d4b..ee7cfd8 100644
--- a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl
+++ b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl
@@ -10,23 +10,44 @@
     // 鐢勫叞楦� Jul-22-2024 (created)
     address       := Translations::InterfaceDataset_Address(); 
     httpinterface := HTTPInterface::Create( address,80);
-    
-    if( loginfo.Name() = Translations::InterfaceDataset_ShippingActualData_Name() ){//鍙戣繍瀹為檯鏁版嵁
-      
-      httpinterface.URL( Translations::InterfaceDataset_ShippingActualData_URL() );
-      httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
-      httpinterface.PostMethod( true ); 
-      try{
-        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken())
+    try{
+      if( loginfo.Name() = Translations::InterfaceDataset_ShippingActualData_Name() ){//鍙戣繍瀹為檯鏁版嵁
+        
+        httpinterface.URL( Translations::InterfaceDataset_ShippingActualData_URL() );
+        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
+        httpinterface.PostMethod( true ); 
+        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_ShippingActualData_Secret() ))
         
         httpinterface.Call( loginfo.RequestBody() );
         
         result := httpinterface.Result();
         loginfo.Response( result );
         loginfo.Success( true );
-      }onerror{
-        loginfo.ReturnMsg( e.GeneralInformation() );
+      } else if ( loginfo.Name() = Translations::InterfaceDataset_MachineStockData_Name() ){//搴撳瓨鏁版嵁锛堟満鍔犲簱瀛橈級
+        httpinterface.URL( Translations::InterfaceDataset_MachineStockData_URL() );
+        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
+        httpinterface.PostMethod( true ); 
+        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_MachineStockData_Secret() ))
+        
+        httpinterface.Call( loginfo.RequestBody() );
+        
+        result := httpinterface.Result();
+        loginfo.Response( result );
+        loginfo.Success( true );
+      } else if ( loginfo.Name() = Translations::InterfaceDataset_FinishedEngineInventory_Name() ){//搴撳瓨鏁版嵁锛堝彂鍔ㄦ満鎴愬搧搴撳瓨锛�
+        httpinterface.URL( Translations::InterfaceDataset_FinishedEngineInventory_URL() );
+        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
+        httpinterface.PostMethod( true ); 
+        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_FinishedEngineInventory_Secret() ))
+        
+        httpinterface.Call( loginfo.RequestBody() );
+        
+        result := httpinterface.Result();
+        loginfo.Response( result );
+        loginfo.Success( true );
       }
+    }onerror{
+      loginfo.ReturnMsg( e.GeneralInformation() );
     }
     if( loginfo.Name() = Translations::InterfaceDataset_ActualDailyProductionData_Name() ){//鐢熶骇瀹為檯鏁版嵁
       
diff --git a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl
index 864c257..a186eae 100644
--- a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl
+++ b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl
@@ -1,6 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
-StaticMethod CallToken () as String
+StaticMethod CallToken (
+  String secret
+) as String
 {
   TextBody:
   [*
@@ -8,13 +10,14 @@
     address       := Translations::InterfaceDataset_Address(); 
     httpinterface := HTTPInterface::Create( address,80);
     
-    httpinterface.URL( Translations::InterfaceDataset_Token_URL() );
+    httpinterface.URL( Translations::InterfaceDataset_Token_URL() + secret );
     httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
+    httpinterface.PostMethod( false );
     httpinterface.Call();
     result := httpinterface.Result();
     
     resultJson     := JSON::Parse( result );
-    token          := resultJson.Get( "access_token" ).AsString();
+    token          := resultJson.Get( "access_token" ).GetString();
     
     return token;
   *]
diff --git a/_Main/BL/Type_LibCal_Event/Attribute_IsMultiple.qbl b/_Main/BL/Type_LibCal_Event/Attribute_IsMultiple.qbl
new file mode 100644
index 0000000..959ef87
--- /dev/null
+++ b/_Main/BL/Type_LibCal_Event/Attribute_IsMultiple.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsMultiple
+{
+  #keys: '3[415136.0.918010824][415136.0.918010823][415136.0.918010825]'
+  Description: '鏄惁閫氳繃鎵归噺鐣岄潰鍒涘缓'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl b/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
index 76e31f8..0c5d133 100644
--- a/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
+++ b/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
@@ -41,55 +41,41 @@
   TextBody:
   [*
     //浜嬩欢鍒涘缓浜屽紑鏂规硶
-    //info( startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, recurrenceInterval_i, patternType_i
-    //      , patternDaily_IsEveryWeekday_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
-    //鏌ヨ鏄惁宸叉湁鍚屽悕浜嬩欢
+    //鏌ヨ鏄惁宸叉湁鍚屽悕鍦ㄦ壒閲忕晫闈㈠垱寤虹殑浜嬩欢s
     event := selectobject( owner_i, Event, event, event.Subject() = subject_i 
-                     and event.StartTimeOfDay() = startTimeOfDay_i 
-                     and event.EndTimeOfDay() = endTimeOfDay_i 
-                     and event.EventType() = eventtype_i );
+                           and event.EventType() = eventtype_i );
+    info( '-------------', not isnull( event ), ismultiple );
     //鍙湁閫氳繃鎵归噺鍒涘缓鐣岄潰涓斿凡鏈夊悓鍚嶄簨浠惰繘鍏ヤ笅闈㈡搷浣�
     if( ismultiple and not isnull( event ) ){
-      startdate := startDate_i;
-      enddate   := startDate_i;
-      dates := construct( Dates );
-      dates.Add( startDate_i );
-      //鑾峰彇鏃т簨浠剁殑寮�濮嬩簨浠跺拰缁撴潫浜嬩欢锛屼互鍙婃墍鏈夋椂闂寸偣
-      traverse( event, Participation.ExplicitTimeInterval, eti ){
-        if( startdate > eti.Start().Date() ){
-          startdate := eti.Start().Date();
-        }
-        if( enddate < eti.Start().Date() ) {
-          enddate := eti.Start().Date();
-        }
-        if( not exists( dates, Elements, e, e = eti.Start().Date() ) ){
-          dates.Add( eti.Start().Date() );
-        }
+      lp        := event.LeadingParticipation();
+      timezone  := lp.Calendar().GetTimeZone();
+      starttime := startDate_i.DateTime( timezone ).AddAsPeriod( timezone, startTimeOfDay_i );
+      endtime   := endDate_i.DateTime( timezone ).AddAsPeriod( timezone, endTimeOfDay_i );
+    //  startDate := starttime.Date( timezone );
+    //  endDate   := endtime.Date( timezone ) - ifexpr( endtime = endtime.StartOfDay( timezone ), 1, 0 );
+      lp.AddSubscribers( subscribers_i, true );;
+      leadingETI := selectobject( lp, ExplicitTimeInterval, eti, eti.Start() = starttime and eti.End() = endtime );
+      if( isnull( leadingETI ) ){
+        leadingETI := lp.CreateTimeInterval( starttime, endtime, event.Capacity() );
       }
-      //淇敼鏃т簨浠剁殑闂撮殧
-      nrOfOccurrences_i := enddate - startdate + 1;
-      startDate_i := startdate;
-      endDate_i   := startdate;
-      periodStartDate_i := startdate;
-      periodEndDate_i := enddate;
-    //  info( startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, recurrenceInterval_i, patternType_i
-    //      , patternDaily_IsEveryWeekday_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
-      event := LibCal_Event::CreateUpdateFromUI( owner_i, event.LeadingParticipation(), 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 );
-      //鍒犳帀涓嶉渶瑕佺殑鏃堕棿鐐�
-      timeIntervals := construct( LibCal_ExplicitTimeIntervals );
-      traverse( event, Participation.ExplicitTimeInterval, eti ){
-    //    info( '------------------------------', eti.Start(), eti.End(), exists( dates, Elements, e, e = eti.Start().Date() ), '------------------', dates.Find( eti.Start().Date() ) );
-        if( dates.Find( eti.Start().Date() ) < 0 ){
-          timeIntervals.Add( eti );
-        }
-      }
-      LibCal_ExplicitTimeInterval::Delete( timeIntervals, true );
+    //  info( '-----------------------2-----------------', lp.ExplicitTimeInterval( relsize ) );
+    //  if( not isnull( leadingETI ) ){
+    //    traverse( lp, Subscription, subscription, subscribers_i.Find( subscription.Calendar() ) >= 0 and
+    //              startDate <= subscription.Calendar().EndDate()   and
+    //              endDate   >= subscription.Calendar().StartDate() and
+    //              ( isnull( subscription.RecurrencePeriod() ) or
+    //                ( startDate <= subscription.RecurrencePeriod().EndDate() and
+    //                  endDate   >= subscription.RecurrencePeriod().StartDate() ) ) ){
+    //      info( '-----------------------1-----------------', subscription.ExplicitTimeInterval( relsize ) );
+    //      subscribingETI := subscription.CreateTimeInterval( starttime, endtime, event.Capacity() );
+    //      
+    //      if( not isnull( subscribingETI ) ){
+    //        subscribingETI.LeadingETI( relset, leadingETI );
+    //      }
+    //      info( '-----------------------4-----------------', subscription.ExplicitTimeInterval( relsize ) );
+    //    }
+    //  }
+    //  info( '-----------------------3-----------------', lp.ExplicitTimeInterval( relsize ) );
     } else {
       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, 
@@ -102,7 +88,9 @@
     if( not isnull( event ) ){
       event.EventType( relset, eventtype_i );
     }
-    
+    if( ismultiple ){
+      event.IsMultiple( ismultiple );
+    }
     return event;
   *]
 }
diff --git a/_Main/BL/Type_LibCal_SubscriberEventRow/Attribute_Name.qbl b/_Main/BL/Type_LibCal_SubscriberEventRow/Attribute_Name.qbl
new file mode 100644
index 0000000..5a246b9
--- /dev/null
+++ b/_Main/BL/Type_LibCal_SubscriberEventRow/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.918010439][415136.0.918010438][415136.0.918010440]'
+  Description: '浜х嚎In浜嬩欢'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_LibCal_SubscriberEventRow/Function_CalcName.qbl b/_Main/BL/Type_LibCal_SubscriberEventRow/Function_CalcName.qbl
new file mode 100644
index 0000000..f027aba
--- /dev/null
+++ b/_Main/BL/Type_LibCal_SubscriberEventRow/Function_CalcName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcName
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-23-2024 (created)
+    
+    value := this.Subscriber().Concat( " in " ).Concat( this.Event() );
+    
+    this.Name( value );
+  *]
+}
diff --git a/_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl b/_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl
index 14023ce..e3cd1e0 100644
--- a/_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl
+++ b/_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl
@@ -8,14 +8,14 @@
   [*
     // 鐢勫叞楦� May-28-2024 (created)
     rownr                 := this.LibCal_SubscriberEventRow( relsize );
-    subscribercolumn      := selectobject( this, LibCal_SubscriberEventColumn, column, column.RowName() = 'Line' );
-    if( isnull( subscribercolumn ) ){
-      subscribercolumn := this.LibCal_SubscriberEventColumn( relnew, RowName := 'Line' );
-    }
-    eventcolumn := selectobject( this, LibCal_SubscriberEventColumn, column, column.RowName() = 'Event' );
-    if( isnull( eventcolumn ) ){
-      eventcolumn := this.LibCal_SubscriberEventColumn( relnew, RowName := 'Event' );
-    }
+    //subscribercolumn      := selectobject( this, LibCal_SubscriberEventColumn, column, column.RowName() = 'Line' );
+    //if( isnull( subscribercolumn ) ){
+    //  subscribercolumn := this.LibCal_SubscriberEventColumn( relnew, RowName := 'Line' );
+    //}
+    //eventcolumn := selectobject( this, LibCal_SubscriberEventColumn, column, column.RowName() = 'Event' );
+    //if( isnull( eventcolumn ) ){
+    //  eventcolumn := this.LibCal_SubscriberEventColumn( relnew, RowName := 'Event' );
+    //}
     
     traverse( subscribers, Elements, subscriber ){
     //  info( '------------------------', subscriber.CalendarID(), subscriber.CalendarType() );
@@ -34,14 +34,14 @@
                                                  Event := event.Subject(), 
                                                  EventType := event.EventType().Name() );
           
-          subscribercell := subscribercolumn.LibCal_SubscriberEventCell( relnew, Value := row.Subscriber() );
-          if( counter( this, LibCal_SubscriberEventRow, linerow, linerow.Subscriber() = row.Subscriber() ) <> 1 ){
-            subscribercell.Value( '' );
-          }
-          row.LibCal_SubscriberEventCell( relinsert, subscribercell );
-          
-          eventcell := eventcolumn.LibCal_SubscriberEventCell( relnew, Value := row.Event() );
-          row.LibCal_SubscriberEventCell( relinsert, eventcell );
+    //      subscribercell := subscribercolumn.LibCal_SubscriberEventCell( relnew, Value := row.Subscriber() );
+    //      if( counter( this, LibCal_SubscriberEventRow, linerow, linerow.Subscriber() = row.Subscriber() ) <> 1 ){
+    //        subscribercell.Value( '' );
+    //      }
+    //      row.LibCal_SubscriberEventCell( relinsert, subscribercell );
+    //      
+    //      eventcell := eventcolumn.LibCal_SubscriberEventCell( relnew, Value := row.Event() );
+    //      row.LibCal_SubscriberEventCell( relinsert, eventcell );
           rownr := rownr + 1;
         }
         
diff --git a/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
index 77d0846..7cdbcf7 100644
--- a/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
@@ -1,66 +1,79 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  LibCal_SubscriberEventTable table
+  LibCal_SubscriberEventColumns columns,
+  LibCal_SubscriberEventRows rows
 ) as BinaryValue
 {
   TextBody:
   [*
     // 鐢勫叞楦� May-30-2024 (created)
     // lihongji Jun-8-2023 (created)
-    returnBinaryData := BinaryData::Construct();
-    tableGroupHandle := TableGroupHandle::Create( "" );
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + LibCal_SubscriberEventTable::GetDefaultName() + '</name></table>' );
     
-    xmlImpl := XMLDOMImplementation::Create();
-    xmlDoc := xmlImpl.CreateDocument();
-    xmlSeri := xmlImpl.CreateSerializer();
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    //浜х嚎
+    subscribercolumnelement := xmlDOM.CreateElement( "column" );
+    subscribernameelement   := xmlDOM.CreateElement( "name" );
+    subscribertypeelement   := xmlDOM.CreateElement( "type" );
+    subscribernameelement.TextContent( '浜х嚎' );
+    subscribertypeelement.TextContent( "String" );
+    subscribercolumnelement.AppendChild( subscribernameelement );
+    subscribercolumnelement.AppendChild( subscribertypeelement );
+    //浜嬩欢
+    eventcolumnelement := xmlDOM.CreateElement( "column" );
+    eventnameelement   := xmlDOM.CreateElement( "name" );
+    eventtypeelement   := xmlDOM.CreateElement( "type" );
+    eventnameelement.TextContent( '浜嬩欢' );
+    eventtypeelement.TextContent( "String" );
+    eventcolumnelement.AppendChild( eventnameelement );
+    eventcolumnelement.AppendChild( eventtypeelement );
+    
+    tableElement.AppendChild( subscribercolumnelement ); 
+    tableElement.AppendChild( eventcolumnelement ); 
       
-    xmlTable := xmlDoc.CreateElement( "table" );
-    xmlTableName := xmlDoc.CreateElement( "name" );
-    xmlTableName.TextContent( table.Name() );
-    xmlTable.AppendChild( xmlTableName );
+    traverse ( columns, Elements, column ) {
+      columnelement := xmlDOM.CreateElement( "column" );
+      nameelement   := xmlDOM.CreateElement( "name" );
+      typeelement   := xmlDOM.CreateElement( "type" );
+      nameelement.TextContent( column.Name() );
+      typeelement.TextContent( "String" );
+      columnelement.AppendChild( nameelement );
+      columnelement.AppendChild( typeelement );
       
-    traverse ( table, LibCal_SubscriberEventColumn, column ) {
-      xmlColumn := xmlDoc.CreateElement( "column" );
-      xmlColumnName := xmlDoc.CreateElement( "name" );
-      if( column.Index() = 0 ){
-        xmlColumnName.TextContent( '浜х嚎' );
-      }else if(column.Index() = 1 ){
-        xmlColumnName.TextContent( '浜嬩欢' );
-      }else{
-        xmlColumnName.TextContent( column.Name() );
-      }
-      xmlColumn.AppendChild( xmlColumnName );
-      xmlColumnType := xmlDoc.CreateElement( "type" );
-      xmlColumnType.TextContent( "String" );
-      xmlColumn.AppendChild( xmlColumnType );
-      
-      rowTotal := table.LibCal_SubscriberEventRow( relsize );
-      for ( i := 0; i < rowTotal; i++ ) {
-        cell := select( column, LibCal_SubscriberEventCell, cell, cell.LibCal_SubscriberEventRow().RowNr() = i );
-        row := cell.LibCal_SubscriberEventRow();
-        xmlCell := xmlDoc.CreateElement( "cell" );
+      cells := selectsortedset( column, LibCal_SubscriberEventCell, cell, rows.Find( cell.LibCal_SubscriberEventRow() ) > -1, cell.LibCal_SubscriberEventRow().RowNr() );
+    
+      traverse ( cells, Elements, c ) {
         if( column.Index() = 0 ){
-          xmlCell.SetAttribute( "value", row.Subscriber() );
-        }else if(column.Index() = 1 ){
-          xmlCell.SetAttribute( "value", row.Event() );
-        }else{
-          xmlCell.SetAttribute( "value", cell.Value() );
+          row := c.LibCal_SubscriberEventRow();
+          //subscriber
+          subscribercellElement := xmlDOM.CreateElement( "cell" );
+          subscribercellElement.SetAttribute( "value", row.Subscriber() );
+          subscribercolumnelement.AppendChild( subscribercellElement );
+          //event
+          eventcellElement := xmlDOM.CreateElement( "cell" );
+          eventcellElement.SetAttribute( "value", row.Event() );
+          eventcolumnelement.AppendChild( eventcellElement );
         }
-        xmlColumn.AppendChild( xmlCell );
+        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement.SetAttribute( "value", c.Value() ); 
+        columnelement.AppendChild( cellElement );
       }
-        
-      xmlTable.AppendChild( xmlColumn );
+      tableElement.AppendChild( columnelement );  
     }
       
-    xmlDoc.AppendChild( xmlTable );
-    xmlStr := xmlSeri.WriteToString( xmlDoc );
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlStr ) );
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( LibCal_SubscriberEventTable::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
-    //}
     
-    returnBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
     
-    return returnBinaryData.AsBinaryValue();
+    return binaryData.AsBinaryValue();
   *]
 }
diff --git a/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..ab03a51
--- /dev/null
+++ b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultName () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-23-2024 (created)
+    return 'Calendar unavailable event';
+  *]
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_AllTotal.qbl b/_Main/BL/Type_MachineStockData/Attribute_AllTotal.qbl
new file mode 100644
index 0000000..b3eb4eb
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_AllTotal.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AllTotal
+{
+  #keys: '3[415136.0.931886946][415136.0.931886945][415136.0.931886947]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_DDay.qbl b/_Main/BL/Type_MachineStockData/Attribute_DDay.qbl
new file mode 100644
index 0000000..d1a9eef
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_DDay.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DDay
+{
+  #keys: '3[415136.0.931886953][415136.0.931886952][415136.0.931886954]'
+  Description: '鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_Date.qbl b/_Main/BL/Type_MachineStockData/Attribute_Date.qbl
new file mode 100644
index 0000000..4bc883d
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_Date.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Date
+{
+  #keys: '3[415136.0.931886848][415136.0.931886847][415136.0.931886849]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_Fac.qbl b/_Main/BL/Type_MachineStockData/Attribute_Fac.qbl
new file mode 100644
index 0000000..3330234
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_Fac.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Fac
+{
+  #keys: '3[415136.0.931886928][415136.0.931886927][415136.0.931886929]'
+  Description: '宸ュ巶code'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_FacName.qbl b/_Main/BL/Type_MachineStockData/Attribute_FacName.qbl
new file mode 100644
index 0000000..c29b23b
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_FacName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FacName
+{
+  #keys: '3[415136.0.931886918][415136.0.931886917][415136.0.931886919]'
+  Description: '宸ュ巶鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_Inventory.qbl b/_Main/BL/Type_MachineStockData/Attribute_Inventory.qbl
new file mode 100644
index 0000000..b983b8f
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_Inventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Inventory
+{
+  #keys: '3[415136.0.931886842][415136.0.931886841][415136.0.931886843]'
+  Description: '瀵瑰簲鏃ユ湡鐨勫疄闄呭簱瀛樻暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_LineType.qbl b/_Main/BL/Type_MachineStockData/Attribute_LineType.qbl
new file mode 100644
index 0000000..bcae9ae
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_LineType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LineType
+{
+  #keys: '3[415136.0.931886957][415136.0.931886956][415136.0.931886958]'
+  Description: '浜х嚎绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_MaterialName.qbl b/_Main/BL/Type_MachineStockData/Attribute_MaterialName.qbl
new file mode 100644
index 0000000..f566022
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_MaterialName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaterialName
+{
+  #keys: '3[415136.0.931886910][415136.0.931886909][415136.0.931886911]'
+  Description: '闆朵欢鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_MaterialNo.qbl b/_Main/BL/Type_MachineStockData/Attribute_MaterialNo.qbl
new file mode 100644
index 0000000..9da74c7
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_MaterialNo.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaterialNo
+{
+  #keys: '3[415136.0.931886900][415136.0.931886899][415136.0.931886901]'
+  Description: '闆朵欢鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_Product.qbl b/_Main/BL/Type_MachineStockData/Attribute_Product.qbl
new file mode 100644
index 0000000..a249e20
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_Product.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Product
+{
+  #keys: '3[415136.0.931886845][415136.0.931886844][415136.0.931886846]'
+  Description: '浜у搧'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_Total.qbl b/_Main/BL/Type_MachineStockData/Attribute_Total.qbl
new file mode 100644
index 0000000..9691ce7
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_Total.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total
+{
+  #keys: '3[415136.0.931886936][415136.0.931886935][415136.0.931886937]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineStockData/Attribute_Unit.qbl b/_Main/BL/Type_MachineStockData/Attribute_Unit.qbl
new file mode 100644
index 0000000..0fb83f7
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.931886839][415136.0.931886838][415136.0.931886840]'
+  Description: '搴撳瓨鐐逛俊鎭�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineStockData/StaticMethod_GenerateData.qbl b/_Main/BL/Type_MachineStockData/StaticMethod_GenerateData.qbl
new file mode 100644
index 0000000..d070932
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/StaticMethod_GenerateData.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateData (
+  InterfaceLoginfo owner,
+  StringToDate cnv,
+  JSON item
+) as MachineStockData
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-17-2024 (created)
+    material_no       := guard( item.Get( "material_no").GetString(),"");
+    material_name     := guard( item.Get( "material_name").GetString(),"");
+    fac_name          := guard( item.Get( "fac_name").GetString(),"");
+    fac               := guard( item.Get( "fac").GetString(),"");
+    total             := guard( item.Get( "total").GetReal(), 0 );
+    all_total         := guard( item.Get( "all_total").GetReal(), 0 );
+    dday              := guard( item.Get( "dday").GetString(),"");
+    line_type         := guard( item.Get( "fac").GetString(),"");
+    
+    msdata           := owner.MachineStockData( relnew, MaterialNo := material_no
+                                                  , MaterialName := material_name
+                                                  , Fac := fac
+                                                  , FacName := fac_name
+                                                  , Total := total
+                                                  , AllTotal := all_total
+                                                  , DDay := cnv.Convert( dday )
+                                                  , LineType := line_type );
+    
+    return msdata;
+  *]
+}
diff --git a/_Main/BL/Type_MachineStockData/StaticMethod_GetRequestBody.qbl b/_Main/BL/Type_MachineStockData/StaticMethod_GetRequestBody.qbl
new file mode 100644
index 0000000..3751bf2
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/StaticMethod_GetRequestBody.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetRequestBody (
+  Date date
+) as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-19-2024 (created)
+    json := JSON::Object()
+                  .Add( "inParam", JSON::Object().Add( "dday", date.Format( "Y-M2-D2" ) ).Add( "fac", "" ) ).Build();
+    requestbody := json.AsString();
+    return requestbody
+  *]
+}
diff --git a/_Main/BL/Type_MachineStockData/StaticMethod_Synchronize.qbl b/_Main/BL/Type_MachineStockData/StaticMethod_Synchronize.qbl
new file mode 100644
index 0000000..6bc9761
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/StaticMethod_Synchronize.qbl
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Synchronize (
+  InterfaceDataset owner,
+  String executor
+)
+{
+  TextBody:
+  [*
+    //// 鐢勫叞楦� Jul-17-2024 (created)
+    date    := Date::ActualDate();
+    loginfo := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
+                                       , Name := Translations::InterfaceDataset_MachineStockData_Name()
+                                       , InterfaceDateTime := DateTime::ActualTime()
+                                       , Message := '搴撳瓨鏁版嵁锛堟満鍔犲簱瀛橈級'
+                                       , RequestBody := MachineStockData::GetRequestBody( date ) );
+    
+    data := InterfaceLoginfo::CallInterface( owner, loginfo );
+    if( not isnull( data ) ){
+      
+      cnv2 := StringToDate::StandardConverter();
+      cnv2.SetCustomConversion();
+      cnv2.CustomFormatString( 'yyyy-MM-dd' );
+      
+    //  sadatalist := construct( ShippingActualDatas );
+      for( seq := 0;seq < data.Size();seq++){
+        item := data.Get(seq);
+        MachineStockData::GenerateData( loginfo, cnv2, item );
+    //    sadatalist.Add( sadata );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MachineStockData/_ROOT_Type_MachineStockData.qbl b/_Main/BL/Type_MachineStockData/_ROOT_Type_MachineStockData.qbl
new file mode 100644
index 0000000..429b55e
--- /dev/null
+++ b/_Main/BL/Type_MachineStockData/_ROOT_Type_MachineStockData.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MachineStockData
+{
+  #keys: '5[415136.0.931886835][415136.0.931886833][0.0.0][415136.0.931886834][415136.0.931886836]'
+  BaseType: Object
+  Description: '搴撳瓨鏁版嵁锛堟満鍔犲簱瀛橈級'
+  StructuredName: 'MachineStockDatas'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def
index 3069a9f..a24dc49 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def
@@ -16,6 +16,21 @@
         Taborder: 0
       ]
     }
+    Component ButtonInterface
+    {
+      #keys: '[415136.0.931576995]'
+      BaseType: 'WebButton'
+      Children:
+      [
+        #child: ContextMenuInterface
+      ]
+      Properties:
+      [
+        Image: 'ARROW_SHUFFLE'
+        Label: 'Interface'
+        Taborder: 1
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
new file mode 100644
index 0000000..ac50d15
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component ContextMenuInterface
+{
+  #keys: '[415136.0.931500880]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component MenuInterface
+    {
+      #keys: '[415136.0.931500881]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT'
+        Taborder: 0
+        Title: 'Interface loginfo'
+      ]
+    }
+    Component MenuMachineStockData
+    {
+      #keys: '[415136.0.931501127]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SPREADSHEET'
+        Taborder: 1
+        Title: 'Machine stock data'
+      ]
+    }
+    Component MenuFinishedEngineInventory
+    {
+      #keys: '[415136.0.933525462]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SPREADSHEET'
+        Taborder: 2
+        Title: 'Finished engine inventory'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnCli.def
new file mode 100644
index 0000000..b68285d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnCli.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/MenuFinishedEngineInventory
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnClick
+{
+  #keys: '[415136.0.933525609]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Finished_engine_inventory", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick.def
new file mode 100644
index 0000000..7544bbd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/MenuInterface
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick
+{
+  #keys: '[415136.0.931500984]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Interface_loginfo_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick.def
new file mode 100644
index 0000000..352d640
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/MenuMachineStockData
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick
+{
+  #keys: '[415136.0.932240790]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Machine_stock_data", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
index 8b3cfbe..67028e6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
@@ -17,10 +17,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'LibCal_SubscriberEventTable'
-            Source: 'dhTable'
+            DataType: 'structured[LibCal_SubscriberEventColumn]'
+            Source: 'dhColumns'
             Taborder: 0
-            Transformation: 'LibCal_SubscriberEventColumn.LibCal_SubscriberEventCell'
+            Transformation: 'Elements.LibCal_SubscriberEventCell'
           ]
         }
       ]
@@ -44,18 +44,16 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'LibCal_SubscriberEventTable'
-            FilterArguments: 'subscribers:dhSubscribers;eventtypes:dhEventTypes'
-            FixedFilter: 'object.FilterBySubscriberAndEventType( subscribers, eventtypes )'
-            Source: 'dhTable'
+            DataType: 'structured[LibCal_SubscriberEventRow]'
+            Source: 'dhRows'
             Taborder: 0
-            Transformation: 'LibCal_SubscriberEventRow'
+            Transformation: 'Elements'
           ]
         }
       ]
       Properties:
       [
-        Legend: 'RowNr'
+        Legend: 'Name'
         SortCriteria: 'RowNr'
         Taborder: 1
       ]
@@ -72,13 +70,11 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'LibCal_SubscriberEventTable'
+            DataType: 'structured[LibCal_SubscriberEventColumn]'
             Description: 'object.FilterByDatePeriod( Date::MinDate(), Date::MaxDate() )'
-            FilterArguments: 'period:dhDate'
-            FixedFilter: 'object.FilterByDatePeriod( period.Start(), period.End() )'
-            Source: 'dhTable'
+            Source: 'dhColumns'
             Taborder: 0
-            Transformation: 'LibCal_SubscriberEventColumn'
+            Transformation: 'Elements'
           ]
         }
       ]
@@ -110,6 +106,6 @@
     Columns: 'MatrixEditorTableColumns'
     ContextMenu: 'matrixeditorContextMenuTable'
     Rows: 'MatrixEditorTableRows'
-    Taborder: 1
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
index 15a8928..4178267 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
@@ -12,7 +12,7 @@
       Properties:
       [
         Image: 'EXPORT1'
-        Taborder: 0
+        Taborder: 1
       ]
     }
     Component ButtonInitialize
@@ -22,7 +22,17 @@
       Properties:
       [
         Image: 'ARROW_CIRCLE'
-        Taborder: 1
+        Taborder: 2
+      ]
+    }
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.922435407]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Search'
+        Taborder: 0
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
index 3a1f26f..23f141e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
@@ -6,14 +6,24 @@
   Children:
   [
     #child: MatrixEditorTable
-    Component dhTable
+    Component dhColumns
     {
       #keys: '[415136.0.672310139]'
       BaseType: 'WebDataHolder'
-      Databinding: 'LibCal_SubscriberEventTable'
+      Databinding: 'structured[LibCal_SubscriberEventColumn]*'
       Properties:
       [
         Description: '琛�'
+        Taborder: 1
+      ]
+    }
+    Component dhRows
+    {
+      #keys: '[415136.0.922436014]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[LibCal_SubscriberEventRow]*'
+      Properties:
+      [
         Taborder: 0
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
index 04b4ca1..0d64dac 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
@@ -11,6 +11,16 @@
     [*
       
       this.InitializeSubscribers();
+      
+      columns     := construct( LibCal_SubscriberEventColumns );
+      rows        := construct( LibCal_SubscriberEventRows );
+      
+      traverse( dhCalendar.Data(), LibCal_SubscriberEventTable, table, table.ID() = RadioButtonGroupUseForPlanning.BoundValue() ){
+        columns  := selectset( table, LibCal_SubscriberEventColumn, column, true );
+        rows     := selectset( table, LibCal_SubscriberEventRow, row, true );
+      }
+      dhColumns.Data( &columns );
+      dhRows.Data( &rows );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
index 73a9922..63682a2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
@@ -9,9 +9,9 @@
   {
     Body:
     [*
-      binaryValue := LibCal_SubscriberEventTable::Export( dhTable.Data() );
+      binaryValue := LibCal_SubscriberEventTable::Export( dhColumns.Data(), dhRows.Data() );
       
-      Application.Download( "Unavailable events.xlsx", binaryValue.AsBinaryData() );
+      Application.Download( LibCal_SubscriberEventTable::GetDefaultName() + ".xlsx", binaryValue.AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..43d167d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSearch
+Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.922435443]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      columns     := construct( LibCal_SubscriberEventColumns );
+      rows        := construct( LibCal_SubscriberEventRows );
+      subscribers := dhSubscribers.Data();
+      eventtypes  := dhEventTypes.Data();
+      date        := dhDate.Data();
+      traverse( dhCalendar.Data(), LibCal_SubscriberEventTable, table, table.ID() = RadioButtonGroupUseForPlanning.BoundValue() ){
+        columns  := selectset( table, LibCal_SubscriberEventColumn, column, column.FilterByDatePeriod( date.Start(), date.End() ) );
+        rows     := selectset( table, LibCal_SubscriberEventRow, row, row.FilterBySubscriberAndEventType( subscribers, eventtypes ) );
+      }
+      dhColumns.Data( &columns );
+      dhRows.Data( &rows );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def
deleted file mode 100644
index 29c6ed7..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPeriods/RadioButtonGroupUseForPlanning
-Response OnChanged () id:Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged
-{
-  #keys: '[415136.0.672310167]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      owner_i := dhCalendar.Data();
-      if( owner_i.LibCal_SubscriberEventTable( relsize ) < 1 ){
-        LibCal_SubscriberEventTable::InitializeTable( dhPotentialSubscribers.Data(), dhCalendar.Data() );
-      }
-      table := selectobject( owner_i, LibCal_SubscriberEventTable, table, table.ID() = this.BoundValue() );
-      
-      dhTable.Data( table );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_ListFinishedEngineInventory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_ListFinishedEngineInventory.def
new file mode 100644
index 0000000..dec6b0f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_ListFinishedEngineInventory.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListFinishedEngineInventory
+{
+  #keys: '[415136.0.933380308]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorFinishedEngineInventory
+    {
+      #keys: '[415136.0.933380309]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'InterfaceDataset'
+        Source: 'InterfaceDataset'
+        Taborder: 0
+        Transformation: 'InterfaceLoginfo.FinishedEngineInventory'
+      ]
+    }
+    #child: listActionBarPageFinishedEngineInventory
+    Component DataSetLevelFinishedEngineInventory
+    {
+      #keys: '[415136.0.933380314]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuFinishedEngineInventory
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FourCode","title":"FourCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FourCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VehicleType","title":"VehicleType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VehicleType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiptPlace","title":"ReceiptPlace","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiptPlace"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FullName","title":"FullName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FullName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpellName","title":"SpellName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpellName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EngineType","title":"EngineType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EngineType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EngineModularPlatform","title":"EngineModularPlatform","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EngineModularPlatform"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Brand","title":"Brand","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Brand"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BIPlace","title":"BIPlace","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BIPlace"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total","title":"Total","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Amount","title":"Amount","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Amount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DType","title":"DType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Fac","title":"Fac","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Fac"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DDay","title":"DDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DWeek","title":"DWeek","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DWeek"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DMonth","title":"DMonth","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DMonth"}}]'
+        ContextMenu: 'listContextMenuFinishedEngineInventory'
+        SortCriteria: 'desc:DDay'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listActionBarPageFinishedEngineInventory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listActionBarPageFinishedEngineInventory.def
new file mode 100644
index 0000000..182e5cf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listActionBarPageFinishedEngineInventory.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageFinishedEngineInventory
+{
+  #keys: '[415136.0.933380311]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listContextMenuFinishedEngineInventory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listContextMenuFinishedEngineInventory.def
new file mode 100644
index 0000000..488df4f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listContextMenuFinishedEngineInventory.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuFinishedEngineInventory
+{
+  #keys: '[415136.0.933380316]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/_ROOT_Component_FormFinishedEngineInventory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/_ROOT_Component_FormFinishedEngineInventory.def
new file mode 100644
index 0000000..2fa6221
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/_ROOT_Component_FormFinishedEngineInventory.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormFinishedEngineInventory
+{
+  #keys: '[415136.0.933380255]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListFinishedEngineInventory
+  ]
+  Properties:
+  [
+    Image: 'SPREADSHEET'
+    Title: 'Finished engine inventory'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_ListInterfaceLoginfo.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_ListInterfaceLoginfo.def
new file mode 100644
index 0000000..9c5085b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_ListInterfaceLoginfo.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListInterfaceLoginfo
+{
+  #keys: '[415136.0.931545401]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorInterfaceLoginfo
+    {
+      #keys: '[415136.0.931545402]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[InterfaceDataset]'
+        Source: 'InterfaceDataset'
+        Taborder: 0
+        Transformation: 'InterfaceLoginfo'
+      ]
+    }
+    #child: listActionBarPageInterfaceLoginfo
+    Component DataSetLevelInterfaceLoginfo
+    {
+      #keys: '[415136.0.931545407]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuInterfaceLoginfo
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ExecuteUser","title":"ExecuteUser","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ExecuteUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"InterfaceDateTime","title":"InterfaceDateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"InterfaceDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FinishTime","title":"FinishTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FinishTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Message","title":"Message","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Message"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Success","title":"Success","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Success"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReturnSuccess","title":"ReturnSuccess","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReturnSuccess"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReturnMsg","title":"ReturnMsg","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReturnMsg"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Last","title":"Last","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Last"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TotalRow","title":"TotalRow","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TotalRow"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"RequestBody","title":"RequestBody","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"RequestBody"}}]'
+        ContextMenu: 'listContextMenuInterfaceLoginfo'
+        SortCriteria: 'desc:InterfaceDateTime'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listActionBarPageInterfaceLoginfo.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listActionBarPageInterfaceLoginfo.def
new file mode 100644
index 0000000..5e6a83a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listActionBarPageInterfaceLoginfo.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageInterfaceLoginfo
+{
+  #keys: '[415136.0.931545404]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listContextMenuInterfaceLoginfo.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listContextMenuInterfaceLoginfo.def
new file mode 100644
index 0000000..e02fdda
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listContextMenuInterfaceLoginfo.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuInterfaceLoginfo
+{
+  #keys: '[415136.0.931545409]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/_ROOT_Component_FormInterfaceLoginfo.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/_ROOT_Component_FormInterfaceLoginfo.def
new file mode 100644
index 0000000..884db36
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/_ROOT_Component_FormInterfaceLoginfo.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormInterfaceLoginfo
+{
+  #keys: '[415136.0.931210186]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListInterfaceLoginfo
+  ]
+  Properties:
+  [
+    Image: 'DOCUMENT'
+    Title: 'Interface loginfo'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_ListMachineStockData.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_ListMachineStockData.def
new file mode 100644
index 0000000..f9f1e69
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_ListMachineStockData.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListMachineStockData
+{
+  #keys: '[415136.0.931501240]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorMachineStockData
+    {
+      #keys: '[415136.0.931501241]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'InterfaceDataset'
+        Source: 'InterfaceDataset'
+        Taborder: 0
+        Transformation: 'InterfaceLoginfo.MachineStockData'
+      ]
+    }
+    #child: listActionBarPageMachineStockData
+    Component DataSetLevelMachineStockData
+    {
+      #keys: '[415136.0.931501246]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuMachineStockData
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialNo","title":"MaterialNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialName","title":"MaterialName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Fac","title":"Fac","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Fac"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FacName","title":"FacName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FacName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineType","title":"LineType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DDay","title":"DDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total","title":"Total","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AllTotal","title":"AllTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AllTotal"}}]'
+        ContextMenu: 'listContextMenuMachineStockData'
+        SortCriteria: 'desc:DDay'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listActionBarPageMachineStockData.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listActionBarPageMachineStockData.def
new file mode 100644
index 0000000..b082d74
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listActionBarPageMachineStockData.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageMachineStockData
+{
+  #keys: '[415136.0.931501243]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listContextMenuMachineStockData.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listContextMenuMachineStockData.def
new file mode 100644
index 0000000..e8477ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listContextMenuMachineStockData.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuMachineStockData
+{
+  #keys: '[415136.0.931501248]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/_ROOT_Component_FormMachineStockData.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/_ROOT_Component_FormMachineStockData.def
new file mode 100644
index 0000000..5e5e176
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/_ROOT_Component_FormMachineStockData.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormMachineStockData
+{
+  #keys: '[415136.0.931501186]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListMachineStockData
+  ]
+  Properties:
+  [
+    Image: 'SPREADSHEET'
+    Title: 'Machine stock data'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def
index 2716134..22130b5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def
@@ -49,6 +49,7 @@
       ]
       Properties:
       [
+        AllowEmpty: true
         Description: 'dhEvent.Data.EventType'
         DisplayField: 'Name'
         NumberOfColumns: 15
@@ -61,5 +62,6 @@
   [
     Orientation: 'horizontal'
     Taborder: 4
+    Visible: false
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent\043791.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent\043791.def"
index a775035..a9d7c68 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent\043791.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent\043791.def"
@@ -29,6 +29,13 @@
     {
       sEvent.Type( LibCal_Event::TYPE_PARTIAL() );
     }
+    if( guard( category_i.Name() = LibCal_Event::TYPE_UNAVAILABLE(), false ) )
+    {
+      pnlEventType.Visible( true );
+    }else
+    {
+      pnlEventType.Visible( false );
+    }
     
     // Set the Event and the related controls...
     // The values are explicitly assigned here 'at the beginning' to the controls,
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def
index c5a9ec4..df85806 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def
@@ -29,7 +29,13 @@
     this.InitializeEventTypes();
     // Must be done here, when done in the OnCreated() the checkmarks are not always set.
     this.InitializeSubscribers();
-    
+    if( guard( sEvent.EventCategory().Name() = LibCal_Event::TYPE_UNAVAILABLE(), false ) )
+    {
+      pnlEventType.Visible( true );
+    }else
+    {
+      pnlEventType.Visible( false );
+    }
     // Open the dialog.
     this.Show( "modal" );
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
index f978bc7..15c2afa 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
@@ -12,7 +12,7 @@
       Properties:
       [
         DataType: 'LibCal_EventCategory'
-        FixedFilter: "object.Participation().Calendar().CalendarID() <> 'Common Calendar'"
+        FixedFilter: "object.Participation().Calendar().CalendarID() <> 'Common Calendar' and object.Participation().Event().IsMultiple()"
         Source: 'dhCategory'
         Taborder: 0
         Transformation: 'Event.Participation.ExplicitTimeInterval'
@@ -29,7 +29,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Calendar.CalendarID","title":"浜х嚎","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Calendar.CalendarID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EventType.Name","title":"浜嬩欢绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EventType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Subject","title":"浜嬩欢","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Subject"}},{"attribute":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"StartDate","title":"鏃ユ湡","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.Start().Date()"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.StartTimeOfDay","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.StartTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EndTimeOfDay","title":"缁撴潫鏃堕棿","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EndTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Description","title":"澶囨敞","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Description"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Calendar.CalendarID","title":"浜х嚎","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Calendar.CalendarID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EventType.Name","title":"浜嬩欢绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EventType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Subject","title":"浜嬩欢","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Subject"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Start","title":"寮�濮嬫棩鏈�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Start"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"End","title":"缁撴潫鏃ユ湡","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Description","title":"澶囨敞","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Description"}}]'
         ContextMenu: 'listContextMenu967'
         SortCriteria: 'desc:Start'
         Taborder: 2
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def"
index 2e8c0e5..56e3225 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader\043144.def"
@@ -28,7 +28,8 @@
         Label: '寮�濮嬫棩鏈�'
         MaxDuration: P0DT23H59M0S
         MinDuration: P0DT0H0M0S
-        Taborder: 8
+        ShowLabel: false
+        Taborder: 9
       ]
     }
     Component dhStartTimeOfDay
@@ -38,7 +39,7 @@
       Databinding: 'Duration'
       Properties:
       [
-        Taborder: 9
+        Taborder: 10
       ]
     }
     Component durEndTimeOfDay
@@ -52,7 +53,8 @@
         Label: '缁撴潫鏃ユ湡'
         MaxDuration: P0DT23H59M0S
         MinDuration: P0DT0H0M0S
-        Taborder: 10
+        ShowLabel: false
+        Taborder: 13
       ]
     }
     Component dhEndTimeOfDay
@@ -62,7 +64,7 @@
       Databinding: 'Duration'
       Properties:
       [
-        Taborder: 11
+        Taborder: 14
       ]
     }
     Component edtDescription
@@ -77,7 +79,7 @@
         Multiline: true
         NumberOfColumns: 29
         ShowLabel: false
-        Taborder: 13
+        Taborder: 16
       ]
     }
     Component dsStartDate
@@ -87,8 +89,8 @@
       Properties:
       [
         DateFormat: 'DMMY'
-        Label: '鏃ユ湡'
-        Taborder: 6
+        Label: '寮�濮嬫棩鏈�'
+        Taborder: 7
       ]
     }
     Component dhStartDate
@@ -98,7 +100,7 @@
       Databinding: 'Date'
       Properties:
       [
-        Taborder: 7
+        Taborder: 8
       ]
     }
     Component lblDescription id:lblDescription_456
@@ -109,7 +111,7 @@
       [
         Label: '澶囨敞'
         NumberOfColumns: 0
-        Taborder: 12
+        Taborder: 15
       ]
     }
     Component ButtonCreate
@@ -119,7 +121,7 @@
       Properties:
       [
         Label: '鏂板'
-        Taborder: 14
+        Taborder: 17
       ]
     }
     Component ddslType id:ddslType_360
@@ -190,7 +192,6 @@
           Properties:
           [
             DataType: 'structured[LibCal_EventType]'
-            FixedFilter: 'object.IsLeaf()'
             Source: 'dhEventTypes'
             Taborder: 0
             Transformation: 'Elements'
@@ -199,12 +200,46 @@
       ]
       Properties:
       [
+        AllowEmpty: true
         DisplayField: 'Name'
         Label: '浜嬩欢绫诲瀷'
         NumberOfColumns: 15
         Taborder: 3
       ]
     }
+    Component dsEndDate
+    {
+      #keys: '[415136.0.923680588]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        DateFormat: 'DMMY'
+        Label: '缁撴潫鏃ユ湡'
+        Taborder: 11
+      ]
+    }
+    Component dhEndDate
+    {
+      #keys: '[415136.0.923671132]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Date'
+      Properties:
+      [
+        Taborder: 12
+      ]
+    }
+    Component ckbIsAllDay id:ckbIsAllDay_812
+    {
+      #keys: '[415136.0.926885762]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        CheckboxType: 'toggle'
+        Label: 'All day'
+        NumberOfColumns: 0
+        Taborder: 6
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
index cdb645c..196d498 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
@@ -12,10 +12,21 @@
       Properties:
       [
         Image: 'DELETE'
-        Taborder: 3
+        Taborder: 4
         Title: 'Delete'
       ]
     }
+    Component MenuEdit
+    {
+      #keys: '[415136.0.925451472]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 3
+        Title: 'Edit'
+      ]
+    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def" "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def"
index a3ed57b..ddcfc95 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent\043778.def"
@@ -48,7 +48,7 @@
     // 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()   );
+    dhEndDate.Data(   sLeadPart.EndDate()   );
     dhLeadingParticipation.Data( &sLeadPart );
     dhCategory.Data(category_i);
     //info( '-----------------------', isnull( dhLeadingParticipation.Data() ) );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def
index 1b3e681..a3aacd2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def
@@ -18,9 +18,9 @@
     isDefault      := ckbApplyToNewResources.Checked();
     startDate      := dsStartDate.Date();
     startTimeOfDay := durStartTimeOfDay.Duration();
-    endDate        := dsStartDate.Date();
+    endDate        := dsEndDate.Date();
     endTimeOfDay   := durEndTimeOfDay.Duration();
-    isAllDay       := false;
+    isAllDay       := ckbIsAllDay.Checked();
     
     eventType := ddslType.Text();
     capacity  := Real::MinReal();  // Always fill the capacity.
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def
index 12e8065..d57cae5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def
@@ -23,6 +23,7 @@
     // the value of the other controls are then set via the responses of these controls.
     //dhEndDate  .Data( sParticipation.EndDate() + delta );
     dsStartDate.Date( startDate );
+    dsEndDate.Date( startDate );
     
     // Directly initialize the Duration
     //this.InitializeDuration();
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowAllDay.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowAllDay.def
new file mode 100644
index 0000000..a3194f3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowAllDay.def
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+#parent: #root
+Method ShowAllDay () id:Method_LibCal_dlgMultipleEvent_ShowAllDay
+{
+  #keys: '[415136.0.926885827]'
+  Body:
+  [*
+    // Show the controls according to the state of ckbAllDay.
+    // Keep as is when running in days only mode.
+    if( not LibCal_Event::USE_ONLY_DAYS() )
+    {
+      if( ckbIsAllDay.Checked() )
+      {
+        // Store the EndDate before updating the StartTime, otherwise setting the StartTime can already have influenced the EndDate.
+        endDate := dsEndDate.Date();
+    
+        // Set to whole day if this is not yet the case.
+        if( durStartTimeOfDay.Duration() <> Duration::Zero() )
+        {
+          durStartTimeOfDay.Duration( Duration::Zero() );
+        }
+    
+        if( durEndTimeOfDay.Duration() <> Duration::Zero() )
+        {
+          durEndTimeOfDay.Duration( Duration::Zero() );
+          dsEndDate.Date( endDate + 1 );
+        }
+    
+        // Disable the controls.
+        durStartTimeOfDay.Enabled( false, "All day is selected" );
+        durEndTimeOfDay  .Enabled( false, "All day is selected" );
+      }
+      else
+      {
+        if( durStartTimeOfDay.Duration() <> dhStartTimeOfDay.Data() )
+        {
+          durStartTimeOfDay.Duration( dhStartTimeOfDay.Data() );
+        }
+    
+        if( durEndTimeOfDay.Duration() <> dhEndTimeOfDay.Data() )
+        {
+          durEndTimeOfDay.Duration( dhEndTimeOfDay.Data() );
+    
+          // During initialization, just take over the value from the DataHolder.
+          endDate := dsEndDate.Date();
+          if( endDate.IsInfinite() )
+          {
+            endDate := dhEndDate.Data();
+          }
+          // See if the EndDate must be corrected.
+          else if( dhEndTimeOfDay.Data() <> Duration::Zero() )
+          {
+            endDate := endDate - 1;
+          }
+          dsEndDate.Date( endDate );
+        }
+    
+        durStartTimeOfDay.Enabled( true, "" );
+        durEndTimeOfDay  .Enabled( true, "" );
+      }
+    }
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def
index 2318948..d11f369 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: ListList
 Response OnClick (
-  structured[ExplicitTimeInterval] selection
+  structured[LibCal_ExplicitTimeInterval] selection
 ) id:Response_ListList_MenuDelete_OnClick
 {
   #keys: '[415136.0.905460576]'
@@ -12,9 +12,7 @@
   {
     Body:
     [*
-      traverse( selection, Elements, e ){
-        e.Delete();
-      }
+      LibCal_ExplicitTimeInterval::Delete( selection, true );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuEdit_OnClick.def
new file mode 100644
index 0000000..f4e9cb1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuEdit_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListList
+Response OnClick (
+  LibCal_ExplicitTimeInterval selection
+) id:Response_ListList_MenuEdit_OnClick
+{
+  #keys: '[415136.0.925451544]'
+  CanBindMultiple: false
+  DefinitionID => /ListList/Responsedef_ListList_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( LibCal_dlgEditTimeInterval );
+      dlg.edtComment().Visible( false )
+      dlg.Edit( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ckbIsAllDay_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ckbIsAllDay_OnChanged.def
new file mode 100644
index 0000000..2f86201
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ckbIsAllDay_OnChanged.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/ckbIsAllDay_812
+Response OnChanged () id:Response_MacroPlanner_pnlStartTime_ckbIsAllDay_OnChanged
+{
+  #keys: '[415136.0.926885761]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏄惁鏄竴鏁村ぉ
+      Form.ShowAllDay();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsEndDate_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsEndDate_OnChanged.def
new file mode 100644
index 0000000..626e3ed
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsEndDate_OnChanged.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: PanelHeader_144/dsEndDate
+Response OnChanged () id:Response_PanelHeader_144_dsEndDate_OnChanged
+{
+  #keys: '[415136.0.923680587]'
+  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.
+      dhEndDate.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/Views/Calendar_unavailable_event_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
index 4b625b8..6ec090a 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
@@ -107,10 +107,10 @@
           FormCalendarUnavailableEvent_MatrixEditorTable
           {
             gridColor: '#c4c4c4'
-            totalHeaderWidth: 37
+            totalHeaderWidth: 231
             attributeHeaderWidthRatio: 0.6
             nameHeaderWidthRatio: 0.4
-            columnWidth: 238
+            columnWidth: 74
             horizontalGrid: true
             verticalGrid: true
             backendState
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Finished_engine_inventory.vw b/_Main/UI/MacroPlannerWebApp/Views/Finished_engine_inventory.vw
new file mode 100644
index 0000000..5e6e378
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Finished_engine_inventory.vw
@@ -0,0 +1,200 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormFinishedEngineInventory
+      {
+        title: 'QMacroPlanner::FormFinishedEngineInventory'
+        shown: true
+        componentID: 'QMacroPlanner::FormFinishedEngineInventory'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormFinishedEngineInventory_ListFinishedEngineInventory
+          {
+          }
+          FormFinishedEngineInventory_DataSetLevelFinishedEngineInventory
+          {
+            groupDepth: -1
+            sort: 'DESC:DDay'
+            column_FourCode
+            {
+              columnId: 'FourCode'
+              dataPath: 'FourCode'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_VehicleType
+            {
+              columnId: 'VehicleType'
+              dataPath: 'VehicleType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiptPlace
+            {
+              columnId: 'ReceiptPlace'
+              dataPath: 'ReceiptPlace'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_FullName
+            {
+              columnId: 'FullName'
+              dataPath: 'FullName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_SpellName
+            {
+              columnId: 'SpellName'
+              dataPath: 'SpellName'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_EngineType
+            {
+              columnId: 'EngineType'
+              dataPath: 'EngineType'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_EngineModularPlatform
+            {
+              columnId: 'EngineModularPlatform'
+              dataPath: 'EngineModularPlatform'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_Brand
+            {
+              columnId: 'Brand'
+              dataPath: 'Brand'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_BIPlace
+            {
+              columnId: 'BIPlace'
+              dataPath: 'BIPlace'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Total
+            {
+              columnId: 'Total'
+              dataPath: 'Total'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_Amount
+            {
+              columnId: 'Amount'
+              dataPath: 'Amount'
+              dataType: 'real'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_DType
+            {
+              columnId: 'DType'
+              dataPath: 'DType'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Fac
+            {
+              columnId: 'Fac'
+              dataPath: 'Fac'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_DDay
+            {
+              columnId: 'DDay'
+              dataPath: 'DDay'
+              dataType: 'date'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_DWeek
+            {
+              columnId: 'DWeek'
+              dataPath: 'DWeek'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_DMonth
+            {
+              columnId: 'DMonth'
+              dataPath: 'DMonth'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 24
+    image: 'SPREADSHEET'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Finished_engine_inventory'
+  name: 'Finished engine inventory'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Interface_loginfo_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Interface_loginfo_view.vw
new file mode 100644
index 0000000..cc85355
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Interface_loginfo_view.vw
@@ -0,0 +1,146 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormInterfaceLoginfo
+      {
+        title: 'QMacroPlanner::FormInterfaceLoginfo'
+        shown: true
+        componentID: 'QMacroPlanner::FormInterfaceLoginfo'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormInterfaceLoginfo_ListInterfaceLoginfo
+          {
+          }
+          FormInterfaceLoginfo_DataSetLevelInterfaceLoginfo
+          {
+            groupDepth: -1
+            sort: 'DESC:InterfaceDateTime'
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ExecuteUser
+            {
+              columnId: 'ExecuteUser'
+              dataPath: 'ExecuteUser'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_InterfaceDateTime
+            {
+              columnId: 'InterfaceDateTime'
+              dataPath: 'InterfaceDateTime'
+              dataType: 'datetime'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_FinishTime
+            {
+              columnId: 'FinishTime'
+              dataPath: 'FinishTime'
+              dataType: 'datetime'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Message
+            {
+              columnId: 'Message'
+              dataPath: 'Message'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Success
+            {
+              columnId: 'Success'
+              dataPath: 'Success'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ReturnSuccess
+            {
+              columnId: 'ReturnSuccess'
+              dataPath: 'ReturnSuccess'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_ReturnMsg
+            {
+              columnId: 'ReturnMsg'
+              dataPath: 'ReturnMsg'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_Last
+            {
+              columnId: 'Last'
+              dataPath: 'Last'
+              dataType: 'boolean'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_TotalRow
+            {
+              columnId: 'TotalRow'
+              dataPath: 'TotalRow'
+              dataType: 'number'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_RequestBody
+            {
+              columnId: 'RequestBody'
+              dataPath: 'RequestBody'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 22
+    image: 'DOCUMENT'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Interface_loginfo_view'
+  name: 'Interface loginfo view'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Machine_stock_data.vw b/_Main/UI/MacroPlannerWebApp/Views/Machine_stock_data.vw
new file mode 100644
index 0000000..0c37faa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Machine_stock_data.vw
@@ -0,0 +1,119 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormMachineStockData
+      {
+        title: 'QMacroPlanner::FormMachineStockData'
+        shown: true
+        componentID: 'QMacroPlanner::FormMachineStockData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormMachineStockData_ListMachineStockData
+          {
+          }
+          FormMachineStockData_DataSetLevelMachineStockData
+          {
+            groupDepth: -1
+            sort: 'DESC:DDay'
+            column_MaterialNo
+            {
+              columnId: 'MaterialNo'
+              dataPath: 'MaterialNo'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MaterialName
+            {
+              columnId: 'MaterialName'
+              dataPath: 'MaterialName'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Fac
+            {
+              columnId: 'Fac'
+              dataPath: 'Fac'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_FacName
+            {
+              columnId: 'FacName'
+              dataPath: 'FacName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_LineType
+            {
+              columnId: 'LineType'
+              dataPath: 'LineType'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_DDay
+            {
+              columnId: 'DDay'
+              dataPath: 'DDay'
+              dataType: 'date'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_Total
+            {
+              columnId: 'Total'
+              dataPath: 'Total'
+              dataType: 'real'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_AllTotal
+            {
+              columnId: 'AllTotal'
+              dataPath: 'AllTotal'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 23
+    image: 'SPREADSHEET'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Machine_stock_data'
+  name: 'Machine stock data'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3