From 695020008dc1ee576c928f9c2152fbb63fcdd83f Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期二, 27 八月 2024 13:07:05 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def                                                                 |   41 --
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_New.def                                                                          |   14 
 _Main/BL/InfoMessages.qbl                                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_abpRight.def                                                                  |   10 
 _Main/BL/Relations/Relation_AOnlineAndMOfflinePlanMS64_InterfaceLoginfo_InterfaceLoginfo_AOnlin.qbl                                            |   23 +
 _Main/BL/Relations/Relation_AOnlineAndMOfflinePlanPIR_InterfaceLoginfo_InterfaceLoginfo_AOnline.qbl                                            |   23 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuAOnlineAndMOfflinePlanMS64_On.def |   21 +
 _Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl                                                                                        |  123 ++++++
 _Main/UI/MacroPlannerWebApp/Component_DialogCustomerDemandPPAIDS/Method_OnOK.def                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlContent.def                                                                |   90 ----
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def                                               |   36 +
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlLeft#88.def                                                                |  142 +++++++
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def                                             |   22 +
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_lstRight.def                                                                  |   57 +++
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlActions_btnOk_OnClick.def                                                    |    5 
 _Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_IsActive.qbl                                                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlActions.def                                                                |   14 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAssemblyOnlinePlanPPPS_OnCli.def |   22 +
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_cmRight.def                                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlDialog.def                                                                 |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_New.def                                                                           |   14 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlRight.def                                                                  |   25 +
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged.def                                                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_OnOk.def                                                                          |   17 
 _Main/BL/Type_AOnlineAndMOfflinePlanMS64/StaticMethod_GenerateData.qbl                                                                         |   48 ++
 /dev/null                                                                                                                                      |   19 -
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged#648.def                                              |   19 +
 _Main/BL/Type_AOnlineAndMOfflinePlanPIR/Attribute_ZPPPSCode.qbl                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_OnOk.def                                                                         |   24 +
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlLeft.def                                                                    |   82 ++++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAOnlineAndMOfflinePlanPIR_On.def |   23 +
 _Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl                                                                          |   72 +++
 _Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnOk_OnClick.def                                                   |    5 
 34 files changed, 890 insertions(+), 180 deletions(-)

diff --git a/_Main/BL/InfoMessages.qbl b/_Main/BL/InfoMessages.qbl
index ea643a4..8ea9b48 100644
--- a/_Main/BL/InfoMessages.qbl
+++ b/_Main/BL/InfoMessages.qbl
@@ -86,6 +86,14 @@
   {
     DefaultText: 'There are duplicate three digit codes present'
   }
+  InfoMessage InterfaceDataset_AOnlineAndMOfflinePlanMS64_Name
+  {
+    DefaultText: 'Assembly online plan + Machine offline plan - MS64'
+  }
+  InfoMessage InterfaceDataset_AOnlineAndMOfflinePlanPIR_Name
+  {
+    DefaultText: 'Assembly online plan + Machine offline plan - PIR'
+  }
   InfoMessage InterfaceDataset_ActualDailyProductionData_Name
   {
     DefaultText: 'Actual daily production data'
diff --git a/_Main/BL/Relations/Relation_AOnlineAndMOfflinePlanMS64_InterfaceLoginfo_InterfaceLoginfo_AOnlin.qbl b/_Main/BL/Relations/Relation_AOnlineAndMOfflinePlanMS64_InterfaceLoginfo_InterfaceLoginfo_AOnlin.qbl
new file mode 100644
index 0000000..4874a37
--- /dev/null
+++ b/_Main/BL/Relations/Relation_AOnlineAndMOfflinePlanMS64_InterfaceLoginfo_InterfaceLoginfo_AOnlin.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation AOnlineAndMOfflinePlanMS64_InterfaceLoginfo_InterfaceLoginfo_AOnlineAndMOfflinePlanMS64
+{
+  #keys: '1[415136.0.1044616285]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceLoginfo
+  {
+    #keys: '3[415136.0.1044616287][415136.0.1044616286][415136.0.1044616288]'
+    Cardinality: '0to1'
+    ObjectDefinition: AOnlineAndMOfflinePlanMS64
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AOnlineAndMOfflinePlanMS64
+  {
+    #keys: '3[415136.0.1044616290][415136.0.1044616289][415136.0.1044616291]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_AOnlineAndMOfflinePlanPIR_InterfaceLoginfo_InterfaceLoginfo_AOnline.qbl b/_Main/BL/Relations/Relation_AOnlineAndMOfflinePlanPIR_InterfaceLoginfo_InterfaceLoginfo_AOnline.qbl
new file mode 100644
index 0000000..01c90eb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_AOnlineAndMOfflinePlanPIR_InterfaceLoginfo_InterfaceLoginfo_AOnline.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation AOnlineAndMOfflinePlanPIR_InterfaceLoginfo_InterfaceLoginfo_AOnlineAndMOfflinePlanPIR
+{
+  #keys: '1[415136.0.1044616244]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceLoginfo
+  {
+    #keys: '3[415136.0.1044616246][415136.0.1044616245][415136.0.1044616247]'
+    Cardinality: '0to1'
+    ObjectDefinition: AOnlineAndMOfflinePlanPIR
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AOnlineAndMOfflinePlanPIR
+  {
+    #keys: '3[415136.0.1044616249][415136.0.1044616248][415136.0.1044616250]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_IsActive.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_IsActive.qbl
index 3e4245e..29b1752 100644
--- a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_IsActive.qbl
+++ b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_IsActive.qbl
@@ -4,5 +4,5 @@
 {
   #keys: '3[415136.0.1039640227][415136.0.1039640226][415136.0.1039640228]'
   Description: '鏄惁婵�娲�'
-  ValueType: Number
+  ValueType: Boolean
 }
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_Product.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_Product.qbl
deleted file mode 100644
index 775fd68..0000000
--- a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_Product.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Product
-{
-  #keys: '3[415136.0.1039640197][415136.0.1039640196][415136.0.1039640198]'
-  Description: '鐗╂枡鍙�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_Version.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_Version.qbl
deleted file mode 100644
index 52108f8..0000000
--- a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/Attribute_Version.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Version
-{
-  #keys: '3[415136.0.1039640134][415136.0.1039640133][415136.0.1039640135]'
-  Description: '鐗堟湰'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/DefaultValue_Version.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/DefaultValue_Version.qbl
deleted file mode 100644
index 1605a4b..0000000
--- a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/DefaultValue_Version.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: Version
-}
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/StaticMethod_GenerateData.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/StaticMethod_GenerateData.qbl
new file mode 100644
index 0000000..8c5280d
--- /dev/null
+++ b/_Main/BL/Type_AOnlineAndMOfflinePlanMS64/StaticMethod_GenerateData.qbl
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateData (
+  InterfaceDataset owner,
+  String werk,
+  Date startdate,
+  Date enddate,
+  String versionfrom,
+  String versionto,
+  Boolean versionflag,
+  const Product_MPs products,
+  String executor
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-23-2024 (created)
+    cdlast                 := maxobject( owner, AOnlineAndMOfflinePlanMS64, cd, cd.StartDate(), cd.EndDate(), cd.Werk() );
+    if( not isnull( cdlast ) ){
+      loginfo              := cdlast.InterfaceLoginfo();
+      if( not loginfo.IsShow() ){
+        loginfo.Delete();
+      }else{
+        loginfo.Last( false );
+      }
+      owner.AOnlineAndMOfflinePlanMS64( relflush );
+    }
+    nowdate                := DateTime::ActualTime();
+    loginfo                := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
+                                                      , Name := Translations::InterfaceDataset_AOnlineAndMOfflinePlanMS64_Name()
+                                                      , InterfaceDateTime := nowdate
+                                                      , Message := '瑁呴厤涓婄嚎璁″垝 + 鏈哄姞涓嬬嚎璁″垝 - MS64'
+                                                      , IsShow := false
+                                                      , Last := true
+                                                      , ReturnSuccess := true
+                                                      , ReturnMsg := 'Success'
+                                                      , Success := true
+                                                      );
+    ms64                   := owner.AOnlineAndMOfflinePlanMS64( relnew, Werk := werk, StartDate := startdate, EndDate := enddate
+                                                                , VersionFrom := versionfrom
+                                                                , VersionTo := versionto, IsActive := versionflag );
+    loginfo.AOnlineAndMOfflinePlanMS64( relinsert, ms64 );
+    traverse( products, Elements, product, product.IsLeaf() ){
+      ms64.MS64Data( relnew, Product := product.ID() );
+    }
+    loginfo.TotalRow( ms64.MS64Data( relsize ) );
+  *]
+}
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/Attribute_ZPPPSCode.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/Attribute_ZPPPSCode.qbl
new file mode 100644
index 0000000..3f24b51
--- /dev/null
+++ b/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/Attribute_ZPPPSCode.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ZPPPSCode
+{
+  #keys: '3[415136.0.1046220023][415136.0.1046220022][415136.0.1046220024]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
index 73c5697..7a835d1 100644
--- a/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
+++ b/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
@@ -5,26 +5,78 @@
   String werk,
   const MacroPlan macroplan,
   Date startdate,
-  Date enddate
+  Date enddate,
+  String executor
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Aug-23-2024 (created)
-    owner.AOnlineAndMOfflinePlanPIR( relflush );
-    pir                    := owner.AOnlineAndMOfflinePlanPIR( relnew, Werk := werk, Version := macroplan.ScenarioName(), StartDate := startdate, EndDate := enddate );
-    totalrows              := 0;
-    traverse( macroplan, AssemblyOnlinePlanColumn, column ){
-      traverse( column, AssemblyOnlinePlanCell, cell, cell.Value() <> '' and cell.AssemblyOnlinePlanRow().RowNr() = '1' ){
+    cdlast                 := maxobject( owner, AOnlineAndMOfflinePlanPIR, cd, cd.StartDate(), cd.EndDate(), cd.Werk() );
+    if( not isnull( cdlast ) ){
+      loginfo              := cdlast.InterfaceLoginfo();
+      if( not loginfo.IsShow() ){
+        loginfo.Delete();
+      }else{
+        loginfo.Last( false );
+      }
+      owner.AOnlineAndMOfflinePlanPIR( relflush );
+    }
+    nowdate                := DateTime::ActualTime();
+    productids             := construct( Strings );
+    loginfo                := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
+                                                      , Name := Translations::InterfaceDataset_AOnlineAndMOfflinePlanPIR_Name()
+                                                      , InterfaceDateTime := nowdate
+                                                      , Message := '瑁呴厤涓婄嚎璁″垝 + 鏈哄姞涓嬬嚎璁″垝 - PIR'
+                                                      , IsShow := false
+                                                      , Last := true
+                                                      , ReturnSuccess := true
+                                                      , ReturnMsg := 'Success'
+                                                      , Success := true
+                                                      );
+    pir                    := owner.AOnlineAndMOfflinePlanPIR( relnew, ZPPPSCode := OS::GenerateGUIDAsString(), Werk := werk, Version := macroplan.ScenarioName(), StartDate := startdate, EndDate := enddate );
+    loginfo.AOnlineAndMOfflinePlanPIR( relinsert, pir );
+    traverse( macroplan, AssemblyOnlinePlanColumn, column, column.ColumnDate() >= startdate and column.ColumnDate() <= enddate ){
+      traverse( column, AssemblyOnlinePlanCell, cell, ( werk = 'All' or cell.AssemblyOnlinePlanRow().ProductionLine().FindString( werk, 0 ) > -1 )
+                and cell.AssemblyOnlinePlanRow().RowNr() = '1' ){
         quantityrow        := cell.AssemblyOnlinePlanRow();
+        if( not exists( productids, Elements, e, e = quantityrow.ProductID() ) ){
+          productids.Add( quantityrow.ProductID() );
+        }
     
         pir.PIRData( relnew, Product           := quantityrow.ProductID()
-                                           , PlanningDate            := column.ColumnDate()
-                                           , PlanningQty             := [Number]cell.Value());
+                     , PlanningDate            := column.ColumnDate()
+                     , PlanningQty             := [Number]cell.Value());
       }
     }
-    totalrows              := totalrows + pir.PIRData( relsize );
     
-    //traverse( macroplan, OfflinePlanTable
+    traverse( macroplan, OfflinePlanTable, table ){
+      traverse( table, OfflinePlanColumn, column, column.ColumnDate() >= startdate and column.ColumnDate() <= enddate ){
+        traverse( column, OfflinePlanCell, cell, ( werk = 'All' or cell.OfflinePlanRow().ProductionLine().FindString( werk, 0 ) > -1 )
+                  and ( cell.OfflinePlanRow().ProductionLine() <> 'DL_MOMO' or cell.OfflinePlanRow().ProductionLine() <> 'CC_MOMO' ) ){
+          row              := cell.OfflinePlanRow();
+          if( not exists( productids, Elements, e, e = row.ProductID() ) ){
+            productids.Add( row.ProductID() );
+          }
+          pirdata          := selectobject(  pir, PIRData, pirdata, pirdata.Product() = row.ProductID() and pirdata.PlanningDate() = column.ColumnDate() );
+          if( isnull( pir ) ){
+            pirdata          := pir.PIRData( relnew, Product         := row.ProductID()
+                                             , PlanningDate            := column.ColumnDate()
+                                             , PlanningQty             := 0 );
+          }
+          pirdata.PlanningQty( pirdata.PlanningQty() + [Number]cell.Value() );
+        }
+      }
+    }
+    traverse( productids, Elements, e ){
+      for( date := startdate.StartOfWeek(); date <= enddate; date := ( date + Duration::Days( 1 ) ).Date() ){
+        if( not exists( pir, PIRData, pirdata, pirdata.Product() = e and pirdata.PlanningDate() = date ) ){
+          pir.PIRData( relnew, Product         := e
+                     , PlanningDate            := date
+                     , PlanningQty             := 0 );
+        }
+      }
+    }
+    loginfo.TotalRow( pir.PIRData( relsize ) );
   *]
 }
diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
new file mode 100644
index 0000000..1f82c2f
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
@@ -0,0 +1,123 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  TextBody:
+  [*
+    xmlDOMI      := XMLDOMImplementation::Create();
+    xmlDOM       := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name></table>' );
+    
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    // 绗竴鍒楋紙鍚嶇О锛�
+    cerrs       := selectsortedset( macroPlan, CC_EngineRackRow, tempCERR, true, tempCERR.Name() );
+    firstColumn := xmlDOM.CreateElement( "column" );
+    firstName   := xmlDOM.CreateElement( "name" );
+    firstType   := xmlDOM.CreateElement( "type" );
+    firstName.TextContent( "" );
+    firstType.TextContent( "String" );
+    firstColumn.AppendChild( firstName );
+    firstColumn.AppendChild( firstType );
+    traverse ( cerrs, Elements, cerr ) {
+      firstCell := xmlDOM.CreateElement( "cell" );
+      firstCell.SetAttribute( "value", cerr.Name() );
+      firstColumn.AppendChild( firstCell );
+      
+      for ( i := 0; i < 9; i++ ) {
+        firstCell := xmlDOM.CreateElement( "cell" );
+        firstCell.SetAttribute( "value", "" );
+        firstColumn.AppendChild( firstCell );
+      }
+    }
+    tableElement.AppendChild( firstColumn );
+    
+    
+    // 绗簩鍒�
+    attrs        := construct( Strings ); attrs.Add( "鏂欐灦绌烘暟閲�" ); attrs.Add( "绌烘枡鏋舵暟閲�" ); attrs.Add( "澶栫搴撳叆搴撹垂鐢�" ); attrs.Add( "澶栫搴撳嚭搴撹垂鐢�" ); attrs.Add( "澶栫搴撹繍杈撹垂鐢�" );
+                                          attrs.Add( "澶栫搴撲粨鍌ㄨ垂鐢�" ); attrs.Add( "娓呮礂璐圭敤" ); attrs.Add( "棰勮鎬昏垂鐢�" ); attrs.Add( "绯绘暟" ); attrs.Add( "鎬昏垂鐢�" );
+    secondColumn := xmlDOM.CreateElement( "column" );
+    secondName   := xmlDOM.CreateElement( "name" );
+    secondType   := xmlDOM.CreateElement( "type" );
+    secondName.TextContent( "" );
+    secondType.TextContent( "String" );
+    secondColumn.AppendChild( secondName );
+    secondColumn.AppendChild( secondType );
+    for ( i := 0; i < cerrs.Size(); i++ ) {
+      traverse ( attrs, Elements, attr ) {
+        secondCell := xmlDOM.CreateElement( "cell" );
+        secondCell.SetAttribute( "value", attr );
+        secondColumn.AppendChild( secondCell );
+      }
+    }
+    tableElement.AppendChild( secondColumn );
+    
+    // 鏃堕棿鍒�
+    cercs := selectsortedset( macroPlan, CC_EngineRackColumn, tempCERC, true, tempCERC.StartDate() );
+    traverse ( cercs, Elements, cerc ) {
+      cellColumn := xmlDOM.CreateElement( "column" );
+      cellName   := xmlDOM.CreateElement( "name" );
+      cellType   := xmlDOM.CreateElement( "type" );
+      cellName.TextContent( cerc.StartDate().Format( "M2/D2/Y" ) );
+      cellType.TextContent( "Number" );
+      cellColumn.AppendChild( cellName );
+      cellColumn.AppendChild( cellType );
+      cells := selectsortedset( cerc, CC_EngineRackCell, tempCELL, true, tempCELL.CC_EngineRackRow().Name() );
+      traverse ( cells, Elements, c ) {
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.TotalQuantityOfMaterialRacks() ); // 鏂欐灦鎬绘暟閲�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.NumberOfEmptyShelves() ); // 绌烘枡鏋舵暟閲�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.StorageFeesForRentedWarehouses() ); // 澶栫搴撳叆搴撹垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.OutboundExpensesForRentedWarehouses() ); // 澶栫搴撳嚭搴撹垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.ExternalRentalWarehouseTransportationCosts() ); // 澶栫搴撹繍杈撹垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.RentalWarehouseStorageFees() ); // 澶栫搴撲粨鍌ㄨ垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.CleaningCost() ); // 娓呮礂璐圭敤
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.EstimatedTotalCost() ); // 棰勮鎬昏垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.Coefficient() ); // 绯绘暟
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.TotalCost() ); // 鎬昏垂鐢�
+        cellColumn.AppendChild( cell );
+      }
+      tableElement.AppendChild( cellColumn );
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( "Sheet1" );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
index dcad4a7..da19376 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
@@ -64,9 +64,10 @@
       BaseType: 'WebMenu'
       Properties:
       [
+        Description: 'Customer demand(PPA + IDS)'
         Image: 'FLAG_AMBER'
         Taborder: 6
-        Title: 'Customer demand(PPA + IDS)'
+        Title: '瀹㈡埛闇�姹傦紙PPA+IDS锛�-PPPS'
       ]
     }
     Component mInterfaceProductionSchedulingPlanPush
@@ -79,6 +80,39 @@
         Title: '鐢熶骇鎺掔▼璁″垝鏁版嵁鎺ㄩ�佹帴鍙f祴璇�'
       ]
     }
+    Component MenuIAssemblyOnlinePlanPPPS
+    {
+      #keys: '[415136.0.1044250211]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELIVERY_AMBER'
+        Taborder: 7
+        Title: '瑁呴厤涓婄嚎璁″垝-PPPS'
+      ]
+    }
+    Component MenuIAOnlineAndMOfflinePlanPIR
+    {
+      #keys: '[415136.0.1044250378]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELIVERY_BLUE'
+        Taborder: 8
+        Title: '瑁呴厤涓婄嚎璁″垝+鏈哄姞涓嬬嚎璁″垝-PIR'
+      ]
+    }
+    Component MenuAOnlineAndMOfflinePlanMS64
+    {
+      #keys: '[415136.0.1044210780]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELIVERY_CYAN'
+        Taborder: 9
+        Title: '瑁呴厤涓婄嚎璁″垝+鏈哄姞涓嬬嚎璁″垝-MS64'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuAOnlineAndMOfflinePlanMS64_On.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuAOnlineAndMOfflinePlanMS64_On.def
new file mode 100644
index 0000000..da07b97
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuAOnlineAndMOfflinePlanMS64_On.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/MenuAOnlineAndMOfflinePlanMS64
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuAOnlineAndMOfflinePlanMS64_OnClick
+{
+  #keys: '[415136.0.1044250720]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogZEDPPSMS64 );
+      dlg.New();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAOnlineAndMOfflinePlanPIR_On.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAOnlineAndMOfflinePlanPIR_On.def
new file mode 100644
index 0000000..e9ee4cf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAOnlineAndMOfflinePlanPIR_On.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/MenuIAOnlineAndMOfflinePlanPIR
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuIAOnlineAndMOfflinePlanPIR_OnClick
+{
+  #keys: '[415136.0.1044210948]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogZEDPPSPIR );
+      //dlg.Title( Translations::InterfaceDataset_AssemblyOnlinePlanPPPSPush_Name() );
+      dlg.New();
+      //dlg.New( Translations::InterfaceDataset_AssemblyOnlinePlanPPPSPush_Name() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAssemblyOnlinePlanPPPS_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAssemblyOnlinePlanPPPS_OnCli.def
new file mode 100644
index 0000000..33cf492
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuIAssemblyOnlinePlanPPPS_OnCli.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/MenuIAssemblyOnlinePlanPPPS
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuIAssemblyOnlinePlanPPPS_OnClick
+{
+  #keys: '[415136.0.1044210507]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCustomerDemandPPAIDS );
+      dlg.Title( Translations::InterfaceDataset_AssemblyOnlinePlanPPPSPush_Name() );
+      dlg.New( Translations::InterfaceDataset_AssemblyOnlinePlanPPPSPush_Name() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCustomerDemandPPAIDS/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCustomerDemandPPAIDS/Method_OnOK.def
index 4cbb8f8..f3e8113 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCustomerDemandPPAIDS/Method_OnOK.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCustomerDemandPPAIDS/Method_OnOK.def
@@ -8,9 +8,15 @@
     // On ok
     Form.ApplyChanges();
     
-    if( efInterfacename.Text() = Translations::InterfaceDataset_CustomerDemandPPAIDS_Name() ){
-      CustomerDemandPPAIDS::GenerateData( MacroPlan, InterfaceDataset, QuintiqUser::CurrentUser().DisplayName(), ifexpr( rbgVersionFlag.BoundValue() = "true", true, false ) );
+    currentuser  := QuintiqUser::CurrentUser().DisplayName();
+    isactive     := ifexpr( rbgVersionFlag.BoundValue() = "true", true, false );
+    if( efInterfacename.Text() = Translations::InterfaceDataset_CustomerDemandPPAIDS_Name() ){//瀹㈡埛闇�姹�
+      CustomerDemandPPAIDS::GenerateData( MacroPlan, InterfaceDataset, currentuser, isactive );
     }
+    if( efInterfacename.Text() = Translations::InterfaceDataset_AssemblyOnlinePlanPPPSPush_Name()){//瑁呴厤涓婄嚎
+      AssemblyOnlinePlanPPPSPush::GenerateData( MacroPlan, InterfaceDataset, currentuser, isactive );
+    }
+    
     
     Form.Close();
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_abpRight.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_abpRight.def
new file mode 100644
index 0000000..af60a1d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_abpRight.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component abpRight
+{
+  #keys: '[415136.0.1044211333]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_cmRight.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_cmRight.def
new file mode 100644
index 0000000..d51521e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_cmRight.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component cmRight
+{
+  #keys: '[415136.0.1044211335]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_lstRight.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_lstRight.def
new file mode 100644
index 0000000..934b96b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_lstRight.def
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+Component lstRight
+{
+  #keys: '[415136.0.1044211331]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component deRight
+    {
+      #keys: '[415136.0.1044211332]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'Product_MP'
+      ]
+    }
+    #child: abpRight
+    Component dslRight
+    {
+      #keys: '[415136.0.1044211334]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: cmRight
+        Component dslRightChild
+        {
+          #keys: '[415136.0.1044211336]'
+          BaseType: 'WebDataSetLevel'
+          Properties:
+          [
+            Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}}]'
+            ContextMenu: 'cmRight'
+            RelationFromParent: 'Child'
+            RelationRepeating: 'Child'
+            Taborder: 1
+          ]
+        }
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}}]'
+        ContextMenu: 'cmRight'
+        SortCriteria: 'ID'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    CheckboxBehavior: 'include children'
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlActions.def
index 1733369..dddb4a1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlActions.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlActions.def
@@ -5,16 +5,6 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component btnApply
-    {
-      #keys: '[415136.0.1033612184]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Label: 'Apply'
-        Taborder: 0
-      ]
-    }
     Component btnOk
     {
       #keys: '[415136.0.1033612186]'
@@ -22,7 +12,7 @@
       Properties:
       [
         Label: 'OK'
-        Taborder: 1
+        Taborder: 0
       ]
     }
     Component btnCancel
@@ -32,7 +22,7 @@
       Properties:
       [
         Label: 'Cancel'
-        Taborder: 2
+        Taborder: 1
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlContent.def
index d7da3c3..afc3f5b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlContent.def
@@ -5,95 +5,7 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component efFactory id:efFactory_891
-    {
-      #keys: '[415136.0.1033612218]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '宸ュ巶浠g爜'
-        Taborder: 0
-      ]
-    }
-    Component dsStartDate id:dsStartDate_57
-    {
-      #keys: '[415136.0.1033612231]'
-      BaseType: 'WebDateSelector'
-      Properties:
-      [
-        Label: '寮�濮嬫棩鏈�'
-        Taborder: 1
-      ]
-    }
-    Component dsEndDate id:dsEndDate_963
-    {
-      #keys: '[415136.0.1033612244]'
-      BaseType: 'WebDateSelector'
-      Properties:
-      [
-        Label: '缁撴潫鏃ユ湡'
-        Taborder: 2
-      ]
-    }
-    Component efOriginMacroPlan
-    {
-      #keys: '[415136.0.1033612274]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '浠庣増鏈�'
-        Taborder: 3
-      ]
-    }
-    Component efDestinationMacroPlan
-    {
-      #keys: '[415136.0.1033612302]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '鍒扮増鏈�'
-        Taborder: 4
-      ]
-    }
-    Component cbActiveVersion
-    {
-      #keys: '[415136.0.1033612322]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Checked: true
-        Label: '鏄惁婵�娲荤増鏈�'
-        Taborder: 5
-      ]
-    }
-    Component ddlProduct
-    {
-      #keys: '[415136.0.1034848130]'
-      BaseType: 'WebDropDownList'
-      Databinding: 'Product_MP'
-      Children:
-      [
-        Component deContent
-        {
-          #keys: '[415136.0.1034848132]'
-          BaseType: 'WebDataExtractor'
-          Properties:
-          [
-            DataType: 'MacroPlan'
-            FixedFilter: 'object.IsLeaf()'
-            Source: 'MacroPlan'
-            Taborder: 0
-            Transformation: 'Product_MP'
-          ]
-        }
-      ]
-      Properties:
-      [
-        DisplayField: 'Name'
-        Label: '鐗╂枡鍙�'
-        Taborder: 6
-      ]
-    }
+    #child: pnlDialog
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlDialog.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlDialog.def
new file mode 100644
index 0000000..a3b52d5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlDialog.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component pnlDialog
+{
+  #keys: '[415136.0.1044211250]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: pnlLeft_88
+    #child: pnlRight
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlLeft\04388.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlLeft\04388.def"
new file mode 100644
index 0000000..48c5652
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlLeft\04388.def"
@@ -0,0 +1,142 @@
+Quintiq file version 2.0
+Component pnlLeft id:pnlLeft_88
+{
+  #keys: '[415136.0.1044211286]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efFactory
+    {
+      #keys: '[415136.0.1044211287]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: '宸ュ巶浠g爜'
+        Taborder: 0
+        Visible: false
+      ]
+    }
+    Component dsStartDate
+    {
+      #keys: '[415136.0.1044211288]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '寮�濮嬫棩鏈�'
+        Taborder: 2
+      ]
+    }
+    Component dsEndDate
+    {
+      #keys: '[415136.0.1044211289]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '缁撴潫鏃ユ湡'
+        Taborder: 3
+      ]
+    }
+    Component cbActiveVersion
+    {
+      #keys: '[415136.0.1044211292]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Checked: true
+        Label: '鏄惁婵�娲荤増鏈�'
+        Taborder: 8
+      ]
+    }
+    Component ddlOriginMacroPlan
+    {
+      #keys: '[415136.0.1043064647]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'ScenarioMP'
+      Children:
+      [
+        Component deMacroPlan id:deMacroPlan_640
+        {
+          #keys: '[415136.0.1043064648]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'ScenarioManager'
+            Source: 'ScenarioManager'
+            Taborder: 0
+            Transformation: 'ScenarioMP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '浠庣増鏈�'
+        Taborder: 4
+        Visible: false
+      ]
+    }
+    Component ddlDestinationMacroPlan
+    {
+      #keys: '[415136.0.1043064790]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'ScenarioMP'
+      Children:
+      [
+        Component deMacroPlan950
+        {
+          #keys: '[415136.0.1043064791]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'ScenarioManager'
+            Source: 'ScenarioManager'
+            Taborder: 0
+            Transformation: 'ScenarioMP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '鍒扮増鏈�'
+        Taborder: 6
+        Visible: false
+      ]
+    }
+    Component efVersionFrom
+    {
+      #keys: '[415136.0.1047640864]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: '浠庣増鏈�'
+        Taborder: 5
+      ]
+    }
+    Component efVersionTo
+    {
+      #keys: '[415136.0.1047640919]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: '鍒扮増鏈�'
+        Taborder: 7
+      ]
+    }
+    Component ddslFactory
+    {
+      #keys: '[415136.0.1047641023]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '宸ュ巶浠g爜'
+        Strings: 'All;DL;CC'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlRight.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlRight.def
new file mode 100644
index 0000000..9d1a1aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_pnlRight.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component pnlRight
+{
+  #keys: '[415136.0.1044211330]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhProducts
+    {
+      #keys: '[415136.0.1044211337]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Product_MP]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: lstRight
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '浜у搧'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_New.def
new file mode 100644
index 0000000..95934c9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_New.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method New () id:Method_DialogZEDPPSMS64_New
+{
+  #keys: '[415136.0.1047779759]'
+  Body:
+  [*
+    // To create a new product
+    dsStartDate.Date( Date::ActualDate() );
+    dsEndDate.Date( Date::ActualDate() );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_OnOk.def
new file mode 100644
index 0000000..17d686c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_OnOk.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOk () id:Method_DialogZEDPPSMS64_OnOk
+{
+  #keys: '[415136.0.1043064582]'
+  Body:
+  [*
+    Form.ApplyChanges();
+    //componentmds    := ApplicationScope.ComponentMDS();
+    //mdsinstanceF    := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = ddlOriginMacroPlan.Data().DatasetMDSID() );
+    //handleF         := mdsinstanceF.GetMDSHandle()
+    //macroplanF      := handleF.AsMacroPlan();
+    //
+    //mdsinstanceT    := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = ddlDestinationMacroPlan.Data().DatasetMDSID() );
+    //handleT         := mdsinstanceT.GetMDSHandle()
+    //macroplanT      := handleT.AsMacroPlan();
+    
+    currentuser     := QuintiqUser::CurrentUser().DisplayName();
+    
+    AOnlineAndMOfflinePlanMS64::GenerateData( InterfaceDataset, efFactory.Text(), dsStartDate.Date(), dsEndDate.Date(), efVersionFrom.Text(), efVersionTo.Text(), cbActiveVersion.Checked(), dhProducts.Data(), currentuser );
+    
+    Form.Close();
+  *]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged\043648.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged\043648.def"
new file mode 100644
index 0000000..ca0de5a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged\043648.def"
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: lstRight
+Response OnCheckedChanged (
+  structured[Product_MP] checkeditems
+) id:Response_lstRight_OnCheckedChanged_648
+{
+  #keys: '[415136.0.1044211326]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      products := checkeditems.Copy();
+      dhProducts.Data( &products );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged.def
new file mode 100644
index 0000000..8133035
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight_OnCheckedChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: lstRight
+Response OnCheckedChanged () id:Response_lstRight_OnCheckedChanged
+{
+  #keys: '[415136.0.1044211327]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      dhProducts.Data().Flush();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnApply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnApply_OnClick.def
deleted file mode 100644
index b44ee8d..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnApply_OnClick.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: pnlActions/btnApply
-Response OnClick () id:Response_pnlActions_btnApply_OnClick
-{
-  #keys: '[415136.0.1033612190]'
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
-  Precondition:
-  [*
-    return Form.HasChanges();
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      Form.ApplyChanges();
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnOk_OnClick.def
index 074b6bc..858f6bc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlActions_btnOk_OnClick.def
@@ -4,13 +4,12 @@
 {
   #keys: '[415136.0.1033612191]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      Form.ApplyChanges();
-      Form.Close();
+      Form.OnOk();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def
index 2be7df6..f1a2cd6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def
@@ -5,46 +5,7 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component efFactory
-    {
-      #keys: '[415136.0.1033611885]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '宸ュ巶浠g爜'
-        Taborder: 0
-      ]
-    }
-    Component efMacroPlan
-    {
-      #keys: '[415136.0.1033611906]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '鐗堟湰'
-        Taborder: 1
-      ]
-    }
-    Component dsStartDate
-    {
-      #keys: '[415136.0.1033611945]'
-      BaseType: 'WebDateSelector'
-      Properties:
-      [
-        Label: '璁″垝寮�濮嬫椂闂�'
-        Taborder: 2
-      ]
-    }
-    Component dsEndDate
-    {
-      #keys: '[415136.0.1033611978]'
-      BaseType: 'WebDateSelector'
-      Properties:
-      [
-        Label: '璁″垝缁撴潫鏃堕棿'
-        Taborder: 3
-      ]
-    }
+    #child: pnlLeft
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlLeft.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlLeft.def
new file mode 100644
index 0000000..8940313
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlLeft.def
@@ -0,0 +1,82 @@
+Quintiq file version 2.0
+Component pnlLeft
+{
+  #keys: '[415136.0.1043000500]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efFactory id:efFactory_672
+    {
+      #keys: '[415136.0.1043000546]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: '宸ュ巶浠g爜'
+        Taborder: 0
+        Visible: false
+      ]
+    }
+    Component dsStartDate id:dsStartDate_60
+    {
+      #keys: '[415136.0.1043000586]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '璁″垝寮�濮嬫椂闂�'
+        Taborder: 3
+      ]
+    }
+    Component dsEndDate id:dsEndDate_236
+    {
+      #keys: '[415136.0.1043000606]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '璁″垝缁撴潫鏃堕棿'
+        Taborder: 4
+      ]
+    }
+    Component ddlMacroPlan
+    {
+      #keys: '[415136.0.1043063334]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'ScenarioMP'
+      Children:
+      [
+        Component deMacroPlan
+        {
+          #keys: '[415136.0.1043063336]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'ScenarioManager'
+            Source: 'ScenarioManager'
+            Taborder: 0
+            Transformation: 'ScenarioMP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '鐗堟湰'
+        Taborder: 2
+      ]
+    }
+    Component ddslFactory id:ddslFactory_424
+    {
+      #keys: '[415136.0.1047641312]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '宸ュ巶浠g爜'
+        Strings: 'All;DL;CC'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_New.def
new file mode 100644
index 0000000..d283c1c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_New.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method New () id:Method_DialogZEDPPSPIR_New
+{
+  #keys: '[415136.0.1047779645]'
+  Body:
+  [*
+    // To create a new product
+    dsStartDate.Date( Date::ActualDate() );
+    dsEndDate.Date( Date::ActualDate() );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_OnOk.def
new file mode 100644
index 0000000..9287f6e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_OnOk.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOk () id:Method_DialogZEDPPSPIR_OnOk
+{
+  #keys: '[415136.0.1044120442]'
+  Body:
+  [*
+    Form.ApplyChanges();
+    componentmds    := ApplicationScope.ComponentMDS();
+    mdsinstance     := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = ddlMacroPlan.Data().DatasetMDSID() );
+    handle          := mdsinstance.GetMDSHandle()
+    macroplan       := handle.AsMacroPlan();
+    AOnlineAndMOfflinePlanPIR::GenerateData( InterfaceDataset, efFactory.Text(), macroplan, dsStartDate.Date(), dsEndDate.Date(), QuintiqUser::CurrentUser().DisplayName() );
+    
+    Form.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlActions_btnOk_OnClick.def
index 63e94cb..716b4d9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlActions_btnOk_OnClick.def
@@ -4,13 +4,12 @@
 {
   #keys: '[415136.0.1033611826]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      Form.ApplyChanges();
-      Form.Close();
+      Form.OnOk()
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
index 67e1268..633af51 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
@@ -15,6 +15,16 @@
         Taborder: 0
       ]
     }
+    Component bExport
+    {
+      #keys: '[415754.0.151340681]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def
new file mode 100644
index 0000000..e3be1bf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pHeader/bExport
+Response OnClick () id:Response_pHeader_bExport_OnClick
+{
+  #keys: '[415754.0.151312042]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := CC_EngineRackCell::Export( MacroPlan );
+      
+      Application.Download( "闀挎槬鍙戝姩鏈烘枡鏋舵姤琛�.xlsx", binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}

--
Gitblit v1.9.3