From 3e3615ba9b1e68b1046e270f6add5487ad178ab7 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 22 七月 2024 16:28:22 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/BL/InfoMessages.qbl                                                                              |   24 +++
 _Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl                                              |   21 ++
 _Main/BL/Type_InterfaceLoginfo/DefaultValue_Name.qbl                                                   |    6 
 _Main/BL/Type_InterfaceLoginfo/Attribute_ReturnMsg.qbl                                                 |    8 +
 _Main/BL/Type_InterfaceLoginfo/Attribute_Name.qbl                                                      |    8 +
 _Main/BL/Type_InterfaceLoginfo/Attribute_RequestBody.qbl                                               |    8 +
 _Main/BL/Type_InterfaceLoginfo/_ROOT_Type_InterfaceLoginfo.qbl                                         |    9 +
 _Main/BL/Type_InterfaceLoginfo/Attribute_Message.qbl                                                   |    8 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def                   |   21 ++
 _Main/BL/Type_InterfaceLoginfo/DefaultValue_Response.qbl                                               |    6 
 _Main/BL/Type_InterfaceLoginfo/Attribute_ExecuteUser.qbl                                               |    8 +
 _Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl                                         |    2 
 _Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl                                          |  110 +++++++------
 _Main/BL/Type_InterfaceLoginfo/Attribute_FinishTime.qbl                                                |    8 +
 _Main/BL/Type_InterfaceLoginfo/Attribute_TotalRow.qbl                                                  |    8 +
 _Main/BL/Relations/Relation_InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLog.qbl    |   23 ++
 _Main/BL/Type_InterfaceLoginfo/DefaultValue_Message.qbl                                                |    6 
 _Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl                                          |   52 ++++++
 _Main/BL/Type_InterfaceLoginfo/Method_UpdateLast.qbl                                                   |   15 +
 _Main/BL/Type_InterfaceLoginfo/Attribute_ReturnSuccess.qbl                                             |    7 
 _Main/BL/Relations/Relation_InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo.qbl    |   23 ++
 /dev/null                                                                                              |   23 --
 _Main/BL/Type_InterfaceLoginfo/Attribute_InterfaceDateTime.qbl                                         |    8 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def         |   14 +
 _Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl                                   |    2 
 _Main/BL/Type_InterfaceLoginfo/Attribute_Response.qbl                                                  |    8 +
 _Main/BL/Type_InterfaceLoginfo/Attribute_Success.qbl                                                   |    7 
 _Main/BL/Type_InterfaceLoginfo/Attribute_Last.qbl                                                      |    8 +
 _Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def |   21 ++
 29 files changed, 395 insertions(+), 77 deletions(-)

diff --git a/_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl b/_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl
index 21e6039..d62eedf 100644
--- a/_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl
+++ b/_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl
@@ -11,6 +11,6 @@
     options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
     mdskey := DatasetController::FindUnique( options );
     
-    MDSInterfaceDataset::Root( mdskey ) -> ShippingActualData::Synchronize();
+    MDSInterfaceDataset::Root( mdskey ) -> ShippingActualData::Synchronize( "Administrator" );
   *]
 }
diff --git a/_Main/BL/InfoMessages.qbl b/_Main/BL/InfoMessages.qbl
index 2e0fc10..902eb83 100644
--- a/_Main/BL/InfoMessages.qbl
+++ b/_Main/BL/InfoMessages.qbl
@@ -86,6 +86,26 @@
   {
     DefaultText: 'There are duplicate three digit codes present'
   }
+  InfoMessage InterfaceDataset_Address
+  {
+    DefaultText: 'ds-yunrong-gw.dmp.vwfawedl.mobi'
+  }
+  InfoMessage InterfaceDataset_ContentType
+  {
+    DefaultText: 'application/json'
+  }
+  InfoMessage InterfaceDataset_ShippingActualData_Name
+  {
+    DefaultText: 'Shipping actual data'
+  }
+  InfoMessage InterfaceDataset_ShippingActualData_URL
+  {
+    DefaultText: '/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8'
+  }
+  InfoMessage InterfaceDataset_Token_URL
+  {
+    DefaultText: '/authorization/token/api/open/token/generateToken?grant_type=client_credentials&client_id=19KxoxPF25cy96K8TL&client_secret=514390007906041965'
+  }
   InfoMessage MP_ChangeLossSetting_CheckNull
   {
     DefaultText: 'The required field is blank.'
@@ -142,6 +162,10 @@
   {
     DefaultText: 'The Event type of binding Event exists.'
   }
+  InfoMessage MP_LibCal_Event_ValidDate
+  {
+    DefaultText: 'This date is not within the planned cycle!'
+  }
   InfoMessage MP_Routing_IllegalDateRange
   {
     DefaultText: 'The start date cannot be longer than the end date.'
diff --git a/_Main/BL/Relations/Relation_InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo.qbl b/_Main/BL/Relations/Relation_InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo.qbl
new file mode 100644
index 0000000..c164a29
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo
+{
+  #keys: '1[415136.0.917964687]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceDataset
+  {
+    #keys: '3[415136.0.917964689][415136.0.917964688][415136.0.917964690]'
+    Cardinality: '0to1'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InterfaceLoginfo
+  {
+    #keys: '3[415136.0.917964692][415136.0.917964691][415136.0.917964693]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceDataset
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLog.qbl b/_Main/BL/Relations/Relation_InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLog.qbl
new file mode 100644
index 0000000..8de99d2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLog.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLoginfo
+{
+  #keys: '1[415136.0.917964760]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide ShippingActualData
+  {
+    #keys: '3[415136.0.917964762][415136.0.917964761][415136.0.917964763]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide InterfaceLoginfo
+  {
+    #keys: '3[415136.0.917964765][415136.0.917964764][415136.0.917964766]'
+    Cardinality: '0to1'
+    ObjectDefinition: ShippingActualData
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ShippingActualData_InterfaceDataset_InterfaceDataset_ShippingActual.qbl b/_Main/BL/Relations/Relation_ShippingActualData_InterfaceDataset_InterfaceDataset_ShippingActual.qbl
deleted file mode 100644
index 92a820d..0000000
--- a/_Main/BL/Relations/Relation_ShippingActualData_InterfaceDataset_InterfaceDataset_ShippingActual.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation ShippingActualData_InterfaceDataset_InterfaceDataset_ShippingActualData
-{
-  #keys: '1[415136.0.904000041]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide InterfaceDataset
-  {
-    #keys: '3[415136.0.904000043][415136.0.904000042][415136.0.904000044]'
-    Cardinality: '0to1'
-    ObjectDefinition: ShippingActualData
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide ShippingActualData
-  {
-    #keys: '3[415136.0.904000046][415136.0.904000045][415136.0.904000047]'
-    Cardinality: '1toN'
-    ObjectDefinition: InterfaceDataset
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_ExecuteUser.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_ExecuteUser.qbl
new file mode 100644
index 0000000..a135da8
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_ExecuteUser.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecuteUser
+{
+  #keys: '3[415136.0.917964722][415136.0.917964721][415136.0.917964723]'
+  Description: '鎵ц浜�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_FinishTime.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_FinishTime.qbl
new file mode 100644
index 0000000..5676651
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_FinishTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FinishTime
+{
+  #keys: '3[415136.0.917964701][415136.0.917964700][415136.0.917964702]'
+  Description: '瀹屾垚鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_InterfaceDateTime.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_InterfaceDateTime.qbl
new file mode 100644
index 0000000..633bf52
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_InterfaceDateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute InterfaceDateTime
+{
+  #keys: '3[415136.0.917964734][415136.0.917964733][415136.0.917964735]'
+  Description: '瑙﹀彂鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_Last.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_Last.qbl
new file mode 100644
index 0000000..b8c5118
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_Last.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Last
+{
+  #keys: '3[415136.0.917964713][415136.0.917964712][415136.0.917964714]'
+  Description: '鏄惁鏄渶鏂扮殑鎺ュ彛鏁版嵁'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_Message.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_Message.qbl
new file mode 100644
index 0000000..2e4c000
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_Message.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Message
+{
+  #keys: '3[415136.0.917964728][415136.0.917964727][415136.0.917964729]'
+  Description: '鎺ュ彛淇℃伅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_Name.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_Name.qbl
new file mode 100644
index 0000000..f10995a
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.917964704][415136.0.917964703][415136.0.917964705]'
+  Description: '鎺ュ彛鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_RequestBody.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_RequestBody.qbl
new file mode 100644
index 0000000..c682c01
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_RequestBody.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RequestBody
+{
+  #keys: '3[415136.0.917964731][415136.0.917964730][415136.0.917964732]'
+  Description: '鎺ュ彛鍏ュ弬'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_Response.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_Response.qbl
new file mode 100644
index 0000000..29af7df
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_Response.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Response
+{
+  #keys: '3[415136.0.917964710][415136.0.917964709][415136.0.917964711]'
+  Description: '鎺ュ彛杩斿洖鏁版嵁'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnMsg.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnMsg.qbl
new file mode 100644
index 0000000..d388c1d
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnMsg.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReturnMsg
+{
+  #keys: '3[415136.0.917964719][415136.0.917964718][415136.0.917964720]'
+  Description: '杩斿洖淇℃伅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnSuccess.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnSuccess.qbl
new file mode 100644
index 0000000..35a6def
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnSuccess.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReturnSuccess
+{
+  #keys: '3[415136.0.917964737][415136.0.917964736][415136.0.917964738]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_Success.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_Success.qbl
new file mode 100644
index 0000000..e6e0fe2
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_Success.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Success
+{
+  #keys: '3[415136.0.917964716][415136.0.917964715][415136.0.917964717]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Attribute_TotalRow.qbl b/_Main/BL/Type_InterfaceLoginfo/Attribute_TotalRow.qbl
new file mode 100644
index 0000000..96970b8
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Attribute_TotalRow.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalRow
+{
+  #keys: '3[415136.0.917964725][415136.0.917964724][415136.0.917964726]'
+  Description: '鎬昏鏁�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Message.qbl b/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Message.qbl
new file mode 100644
index 0000000..54c7886
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Message.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Message
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Name.qbl b/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Response.qbl b/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Response.qbl
new file mode 100644
index 0000000..daf5a1a
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/DefaultValue_Response.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Response
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/Method_UpdateLast.qbl b/_Main/BL/Type_InterfaceLoginfo/Method_UpdateLast.qbl
new file mode 100644
index 0000000..413a98d
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/Method_UpdateLast.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method UpdateLast
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-22-2024 (created)
+    if( this.Success() and this.ReturnSuccess() ){
+      traverse( this,InterfaceDataset.InterfaceLoginfo,item,item.Last() = true and item.Name() = this.Name()){
+        item.Last(false);
+      }
+      this.Last(true);
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl
new file mode 100644
index 0000000..56b7dcb
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl
@@ -0,0 +1,52 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CallInterface (
+  InterfaceDataset owner,
+  InterfaceLoginfo loginfo
+) as owning JSON
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� 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())
+        
+        httpinterface.Call( loginfo.RequestBody() );
+        
+        result := httpinterface.Result();
+        loginfo.Response( result );
+        loginfo.Success( true );
+      }onerror{
+        loginfo.ReturnMsg( e.GeneralInformation() );
+      }
+    }
+    //鍚庣画鍏叡澶勭悊
+    loginfo.FinishTime( DateTime::ActualTime() );
+    data             := JSON::Null().Build();
+    
+    if( loginfo.Success() ){
+      resultJson     := JSON::Parse( loginfo.Response() );
+      code           := resultJson.Get( "code" ).AsString();
+      msg            := resultJson.Get( "message" ).AsString();
+      data           := resultJson.Get( "data" );
+      
+      loginfo.ReturnMsg( msg );
+      if( code = "200" ){
+        total        := resultJson.Get( "dataSize" ).GetNumber();
+        loginfo.ReturnSuccess( true );
+        loginfo.TotalRow( total );
+        loginfo.UpdateLast();
+      }
+    }
+    
+    return &data;
+  *]
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl
new file mode 100644
index 0000000..864c257
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CallToken () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-22-2024 (created)
+    address       := Translations::InterfaceDataset_Address(); 
+    httpinterface := HTTPInterface::Create( address,80);
+    
+    httpinterface.URL( Translations::InterfaceDataset_Token_URL() );
+    httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
+    httpinterface.Call();
+    result := httpinterface.Result();
+    
+    resultJson     := JSON::Parse( result );
+    token          := resultJson.Get( "access_token" ).AsString();
+    
+    return token;
+  *]
+}
diff --git a/_Main/BL/Type_InterfaceLoginfo/_ROOT_Type_InterfaceLoginfo.qbl b/_Main/BL/Type_InterfaceLoginfo/_ROOT_Type_InterfaceLoginfo.qbl
new file mode 100644
index 0000000..6d85661
--- /dev/null
+++ b/_Main/BL/Type_InterfaceLoginfo/_ROOT_Type_InterfaceLoginfo.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InterfaceLoginfo
+{
+  #keys: '5[415136.0.917964684][415136.0.917964682][0.0.0][415136.0.917964683][415136.0.917964685]'
+  BaseType: Object
+  StructuredName: 'InterfaceLoginfos'
+}
diff --git a/_Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl b/_Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl
index 9358b75..12089d6 100644
--- a/_Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl
+++ b/_Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GenerateData (
-  InterfaceDataset owner,
+  InterfaceLoginfo owner,
   StringToDateTime cnv1,
   StringToDate cnv,
   JSON item
diff --git a/_Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl b/_Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl
index f528ecb..c26a9b3 100644
--- a/_Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl
+++ b/_Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl
@@ -1,65 +1,73 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Synchronize (
-  InterfaceDataset owner
+  InterfaceDataset owner,
+  String executor
 )
 {
   TextBody:
   [*
     //// 鐢勫叞楦� Jul-17-2024 (created)
-    column := owner.ShippingActualColumn( relnew, StartDate := Date::ActualDate(), Index := owner.ShippingActualColumn( relsize ) );
+    date    := Date::ActualDate();
+    loginfo := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
+                                       , Name := Translations::InterfaceDataset_ShippingActualData_Name()
+                                       , InterfaceDateTime := DateTime::ActualTime()
+                                       , Message := '鍙戣繍瀹為檯鏁版嵁'
+                                       , RequestBody := ShippingActualData::GetRequestBody( date ) );
     // vwedadmin Jul-18-2024 (created)
-    address := "ds-yunrong-gw.dmp.vwfawedl.mobi"; 
+    //address := "ds-yunrong-gw.dmp.vwfawedl.mobi"; 
+    //
+    //           /// http://ds-yunrong-gw.dmp.vwfawedl.mobi/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8 
+    //httpinterface := HTTPInterface::Create( address,80);
+    //                httpinterface.URL("/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8");
+    //httpinterface.MediaType("application/json");
+    ////httpinterface.SSL(true);
+    ////httpinterface.SSLKeystore("MyKeystore");
+    //httpinterface.PostMethod(true); 
+    ////str :='{
+    ////    "inParam":
+    ////        {
+    ////            "dday" : "2024-07-11"
+    ////        }
+    ////}'
+    //httpinterface.AddHeader("Authorization","MTlLeG94UEYyNWN5OTZLOFRMXzUyNzA4ODkwNzg1NTA2OTIxNV9wcml2YXRlS2V5XzE3MjEzMDM4Nzc0NTE=")
+    //httpinterface.Call( ShippingActualData::GetRequestBody( column.StartDate() ) ); //Sends request with the header Authorization: 538baa9045a84c0e889f 鍙互浼犻�掑姩鎬乼oken 鐨勫惂
+    //result := httpinterface.Result();
     
-               /// http://ds-yunrong-gw.dmp.vwfawedl.mobi/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8 
-    httpinterface := HTTPInterface::Create( address,80);
-                    httpinterface.URL("/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8");
-    httpinterface.MediaType("application/json");
-    //httpinterface.SSL(true);
-    //httpinterface.SSLKeystore("MyKeystore");
-    httpinterface.PostMethod(true); 
-    //str :='{
-    //    "inParam":
-    //        {
-    //            "dday" : "2024-07-11"
-    //        }
-    //}'
-    httpinterface.AddHeader("Authorization","MTlLeG94UEYyNWN5OTZLOFRMXzUyNzA4ODkwNzg1NTA2OTIxNV9wcml2YXRlS2V5XzE3MjEzMDM4Nzc0NTE=")
-    httpinterface.Call( ShippingActualData::GetRequestBody( column.StartDate() ) ); //Sends request with the header Authorization: 538baa9045a84c0e889f 鍙互浼犻�掑姩鎬乼oken 鐨勫惂
-    result := httpinterface.Result();
-    
-    cnv1 := StringToDateTime::StandardConverter();
-    cnv1.SetCustomConversion();
-    cnv1.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
-    
-    cnv2 := StringToDate::StandardConverter();
-    cnv2.SetCustomConversion();
-    cnv2.CustomFormatString( 'yyyy-MM-dd' );
-    
-    data := InterfaceDataset::GetResponseJsonData( result );
-    
-    sadatalist := construct( ShippingActualDatas );
-    for( seq := 0;seq < data.Size();seq++){
-      item := data.Get(seq);
-      sadata := ShippingActualData::GenerateData( owner, cnv1, cnv2, item );
-      sadatalist.Add( sadata );
-    }
-    beforerowsize := owner.ShippingActualRow( relsize );
-    traverse( sadatalist, Elements, e ){
-      row := selectobject( owner, ShippingActualRow, row, row.Name() = e.FourCode() );
-      if( isnull( row ) ){
-        owner.ShippingActualRow( relnew, Name := e.FourCode() );
-      }
+    data := InterfaceLoginfo::CallInterface( owner, loginfo );
+    if( not isnull( data ) ){
+      cnv1 := StringToDateTime::StandardConverter();
+      cnv1.SetCustomConversion();
+      cnv1.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
       
-      cell := row.ShippingActualCell( relnew, Quantity := e.Quantity() );
-      column.ShippingActualCell( relinsert, cell );
-    }
-    if( beforerowsize <> owner.ShippingActualRow( relsize ) ){
-      rows := selectsortedset( owner, ShippingActualRow, row, row.Name() );
-      nr    := 0;
-      traverse( rows, Elements, e ){
-        e.RowNr( nr );
-        nr := nr + 1;
+      cnv2 := StringToDate::StandardConverter();
+      cnv2.SetCustomConversion();
+      cnv2.CustomFormatString( 'yyyy-MM-dd' );
+      column  := owner.ShippingActualColumn( relnew, StartDate := date, Index := owner.ShippingActualColumn( relsize ) );
+      
+      sadatalist := construct( ShippingActualDatas );
+      for( seq := 0;seq < data.Size();seq++){
+        item := data.Get(seq);
+        sadata := ShippingActualData::GenerateData( loginfo, cnv1, cnv2, item );
+        sadatalist.Add( sadata );
+      }
+      beforerowsize := owner.ShippingActualRow( relsize );
+      traverse( sadatalist, Elements, e ){
+        row := selectobject( owner, ShippingActualRow, row, row.Name() = e.FourCode() );
+        if( isnull( row ) ){
+          owner.ShippingActualRow( relnew, Name := e.FourCode() );
+        }
+        
+        cell := row.ShippingActualCell( relnew, Quantity := e.Quantity() );
+        column.ShippingActualCell( relinsert, cell );
+      }
+      if( beforerowsize <> owner.ShippingActualRow( relsize ) ){
+        rows := selectsortedset( owner, ShippingActualRow, row, row.Name() );
+        nr    := 0;
+        traverse( rows, Elements, e ){
+          e.RowNr( nr );
+          nr := nr + 1;
+        }
       }
     }
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
index b212955..f978bc7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
@@ -29,8 +29,9 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":""}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Calendar.CalendarID","title":"CalendarID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Calendar.CalendarID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EventType.Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EventType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Subject","title":"Subject","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Subject"}},{"attribute":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.Start().Date()"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.StartTimeOfDay","title":"StartTimeOfDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.StartTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EndTimeOfDay","title":"EndTimeOfDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EndTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Description","title":"Description","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":"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"}}]'
         ContextMenu: 'listContextMenu967'
+        SortCriteria: 'desc:Start'
         Taborder: 2
       ]
     }
@@ -39,4 +40,22 @@
   [
     Taborder: 0
   ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListList_WebMenu_OnClick
+    {
+      #keys: '[415136.0.905460388]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[1197.0.10345066]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
index f3a5116..cdb645c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
@@ -3,6 +3,20 @@
 {
   #keys: '[415136.0.657740261]'
   BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuDelete
+    {
+      #keys: '[415136.0.905460274]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 3
+        Title: 'Delete'
+      ]
+    }
+  ]
   Properties:
   [
     Taborder: 0
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
new file mode 100644
index 0000000..2318948
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListList
+Response OnClick (
+  structured[ExplicitTimeInterval] selection
+) id:Response_ListList_MenuDelete_OnClick
+{
+  #keys: '[415136.0.905460576]'
+  CanBindMultiple: false
+  DefinitionID => /ListList/Responsedef_ListList_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection, Elements, e ){
+        e.Delete();
+      }
+    *]
+    GroupServerCalls: false
+  }
+}

--
Gitblit v1.9.3