From 21b1d88e5f7f751297b74ef19e49f787cacddcd5 Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期二, 25 六月 2024 09:34:13 +0800
Subject: [PATCH] 调拨计划

---
 _Main/BL/Type_TransferPlanColumn/_ROOT_Type_TransferPlanColumn.qbl                                                                     |    9 
 _Main/BL/Type_TransferPlanRow/_ROOT_Type_TransferPlanRow.qbl                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def                                          |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnOk_OnClick.def                         |   16 +
 _Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityKW.qbl                                                                   |    7 
 _Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKM.qbl                                                                  |    7 
 _Main/BL/Relations/Relation_TransferPlanCell_TransferPlanColumn_TransferPlanColumn_TransferPlan.qbl                                    |   23 +
 _Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl                                                                         |   71 ++++
 _Main/BL/Type_TransferPlanRow/Attribute_Name.qbl                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def                                   |   34 ++
 _Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKG.qbl                                                                  |    7 
 _Main/BL/Type_TransferPlanColumn/Attribute_ColumnDate.qbl                                                                              |    8 
 _Main/BL/Type_TransferPlanColumn/TypeIndex_TransferPlanColumnTypeIndex.qbl                                                             |   12 
 _Main/UI/MacroPlannerWebApp/Views/TransferPlan.vw                                                                                      |  146 +++++++++
 _Main/BL/Relations/Relation_TransferPlanCell_TransferPlanRow_TransferPlanRow_TransferPlanCell.qbl                                      |   23 +
 _Main/BL/Type_TransferPlanColumn/Attribute_ColumnIndex.qbl                                                                             |    7 
 _Main/BL/Type_TransferPlanRow/Function_CalcName.qbl                                                                                    |   13 
 _Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnCancel_OnClick.def                     |   15 
 _Main/BL/Relations/Relation_TransferPlanRow_MacroPlan_MacroPlan_TransferPlanRow.qbl                                                    |   23 +
 _Main/BL/Type_TransferPlanRow/Attribute_RowNr.qbl                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bDownload_OnClick.def                                          |   12 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bTransferPlan_OnClick.def |   16 +
 _Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/_ROOT_Component_DialogUpperLimitOfTransferCapacity.def        |   21 +
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bGenerateReport_OnClick.def                                    |   22 +
 _Main/BL/Relations/Relation_TransferPlanColumn_MacroPlan_MacroPlan_TransferPlanColumn.qbl                                              |   23 +
 _Main/BL/Type_TransferPlanRow/TypeIndex_TransferPlanRowTypeIndex.qbl                                                                   |   20 +
 _Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityPL.qbl                                                                   |    7 
 _Main/BL/Type_TransferPlanCell/Attribute_Value.qbl                                                                                     |    7 
 _Main/BL/Type_TransferPlanRow/Attribute_ProductID.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pHeader.def                                                           |   46 ++
 _Main/BL/Type_TransferPlanCell/_ROOT_Type_TransferPlanCell.qbl                                                                         |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixeditorContextMenu367.def                                        |   10 
 _Main/BL/Type_TransferPlanRow/Attribute_SourceStockpoingPointID.qbl                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlActions.def                                      |   40 ++
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixEditorActionBarPage493.def                                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/_ROOT_Component_FormTransferPlan.def                                            |   18 +
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pContent.def                                                          |   14 
 _Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityAGW.qbl                                                                  |    7 
 _Main/BL/Type_TransferPlanColumn/Attribute_ColumnName.qbl                                                                              |    7 
 _Main/BL/Type_TransferPlanColumn/Function_CalcColumnName.qbl                                                                           |   13 
 _Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def                                      |   64 ++++
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_MatrixEditor872.def                                                   |   97 ++++++
 _Main/BL/Type_TransferPlanRow/Attribute_TargetStockpoingPointID.qbl                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def                      |   12 
 44 files changed, 944 insertions(+), 0 deletions(-)

diff --git a/_Main/BL/Relations/Relation_TransferPlanCell_TransferPlanColumn_TransferPlanColumn_TransferPlan.qbl b/_Main/BL/Relations/Relation_TransferPlanCell_TransferPlanColumn_TransferPlanColumn_TransferPlan.qbl
new file mode 100644
index 0000000..67fa6b9
--- /dev/null
+++ b/_Main/BL/Relations/Relation_TransferPlanCell_TransferPlanColumn_TransferPlanColumn_TransferPlan.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation TransferPlanCell_TransferPlanColumn_TransferPlanColumn_TransferPlanCell
+{
+  #keys: '1[413988.0.1292031952]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide TransferPlanColumn
+  {
+    #keys: '3[413988.0.1292031954][413988.0.1292031953][413988.0.1292031955]'
+    Cardinality: '0to1'
+    ObjectDefinition: TransferPlanCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide TransferPlanCell
+  {
+    #keys: '3[413988.0.1292031957][413988.0.1292031956][413988.0.1292031958]'
+    Cardinality: '1toN'
+    ObjectDefinition: TransferPlanColumn
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_TransferPlanCell_TransferPlanRow_TransferPlanRow_TransferPlanCell.qbl b/_Main/BL/Relations/Relation_TransferPlanCell_TransferPlanRow_TransferPlanRow_TransferPlanCell.qbl
new file mode 100644
index 0000000..a49adaa
--- /dev/null
+++ b/_Main/BL/Relations/Relation_TransferPlanCell_TransferPlanRow_TransferPlanRow_TransferPlanCell.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation TransferPlanCell_TransferPlanRow_TransferPlanRow_TransferPlanCell
+{
+  #keys: '1[413988.0.1292031965]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide TransferPlanRow
+  {
+    #keys: '3[413988.0.1292031967][413988.0.1292031966][413988.0.1292031968]'
+    Cardinality: '0to1'
+    ObjectDefinition: TransferPlanCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide TransferPlanCell
+  {
+    #keys: '3[413988.0.1292031970][413988.0.1292031969][413988.0.1292031971]'
+    Cardinality: '1toN'
+    ObjectDefinition: TransferPlanRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_TransferPlanColumn_MacroPlan_MacroPlan_TransferPlanColumn.qbl b/_Main/BL/Relations/Relation_TransferPlanColumn_MacroPlan_MacroPlan_TransferPlanColumn.qbl
new file mode 100644
index 0000000..7d3b50b
--- /dev/null
+++ b/_Main/BL/Relations/Relation_TransferPlanColumn_MacroPlan_MacroPlan_TransferPlanColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation TransferPlanColumn_MacroPlan_MacroPlan_TransferPlanColumn
+{
+  #keys: '1[413988.0.1292031939]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1292031941][413988.0.1292031940][413988.0.1292031942]'
+    Cardinality: '0to1'
+    ObjectDefinition: TransferPlanColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide TransferPlanColumn
+  {
+    #keys: '3[413988.0.1292031944][413988.0.1292031943][413988.0.1292031945]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_TransferPlanRow_MacroPlan_MacroPlan_TransferPlanRow.qbl b/_Main/BL/Relations/Relation_TransferPlanRow_MacroPlan_MacroPlan_TransferPlanRow.qbl
new file mode 100644
index 0000000..047b702
--- /dev/null
+++ b/_Main/BL/Relations/Relation_TransferPlanRow_MacroPlan_MacroPlan_TransferPlanRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation TransferPlanRow_MacroPlan_MacroPlan_TransferPlanRow
+{
+  #keys: '1[413988.0.1292031926]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1292031928][413988.0.1292031927][413988.0.1292031929]'
+    Cardinality: '0to1'
+    ObjectDefinition: TransferPlanRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide TransferPlanRow
+  {
+    #keys: '3[413988.0.1292031931][413988.0.1292031930][413988.0.1292031932]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityAGW.qbl b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityAGW.qbl
new file mode 100644
index 0000000..786db90
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityAGW.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpperLimitOfTransferCapacityAGW
+{
+  #keys: '3[413988.0.1291510952][413988.0.1291510951][413988.0.1291510953]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityKW.qbl b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityKW.qbl
new file mode 100644
index 0000000..01784de
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityKW.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpperLimitOfTransferCapacityKW
+{
+  #keys: '3[413988.0.1291510942][413988.0.1291510941][413988.0.1291510943]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityPL.qbl b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityPL.qbl
new file mode 100644
index 0000000..66d7b43
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityPL.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpperLimitOfTransferCapacityPL
+{
+  #keys: '3[413988.0.1291510932][413988.0.1291510931][413988.0.1291510933]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKG.qbl b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKG.qbl
new file mode 100644
index 0000000..4154a27
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKG.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpperLimitOfTransferCapacityZKG
+{
+  #keys: '3[413988.0.1291510909][413988.0.1291510908][413988.0.1291510910]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKM.qbl b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKM.qbl
new file mode 100644
index 0000000..1f5e8a7
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_UpperLimitOfTransferCapacityZKM.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpperLimitOfTransferCapacityZKM
+{
+  #keys: '3[413988.0.1291510922][413988.0.1291510921][413988.0.1291510923]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_TransferPlanCell/Attribute_Value.qbl b/_Main/BL/Type_TransferPlanCell/Attribute_Value.qbl
new file mode 100644
index 0000000..d398224
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanCell/Attribute_Value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Value
+{
+  #keys: '3[413988.0.1292032065][413988.0.1292032064][413988.0.1292032066]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl b/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl
new file mode 100644
index 0000000..3fa0a72
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl
@@ -0,0 +1,71 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateReport (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    macroPlan.TransferPlanRow( relflush );
+    macroPlan.TransferPlanColumn( relflush );
+    
+    rowNr := 0;
+    
+    // 鐢熸垚璋冩嫧璁″垝
+    traverse ( macroPlan, Unit, u, u.HasCapacityTypeTransportQuantity() ) {
+      traverse ( u, Lane.LaneLeg.Trip, t ) {
+        traverse ( t, ProductInTrip, pit, pit.Quantity() > 0.0 ) {
+          // 鎵捐
+          tpr := TransferPlanRow::FindTransferPlanRowTypeIndex( t.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().Name(),
+                                                                t.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().Name(),
+                                                                pit.Product_MP().ID() );
+          if ( isnull( tpr ) ) {
+            tpr := macroPlan.TransferPlanRow( relnew, 
+                                              RowNr                   := rowNr,
+                                              SourceStockpoingPointID := t.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().Name(),
+                                              TargetStockpoingPointID := t.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().Name(),
+                                              ProductID               := pit.Product_MP().ID() );     
+          }
+          
+          // 鎵惧垪
+          tpc := TransferPlanColumn::FindTransferPlanColumnTypeIndex( t.Departure().Date() );
+          if ( isnull( tpc ) ) {
+            tpc := macroPlan.TransferPlanColumn( relnew,
+                                                 ColumnDate := t.Departure().Date() );
+          }
+          
+          // 璧嬪�煎崟鍏冩牸
+          cell := select( tpc, TransferPlanCell, tempTPC, tempTPC.TransferPlanRow() = tpr );
+          if ( isnull( cell ) ) {
+            cell := tpc.TransferPlanCell( relnew, Value := [String]pit.Quantity().Round( 0 ) );
+            cell.TransferPlanRow( relset, tpr );
+          } else {
+            cell.Value( [String] ( [Number]cell.Value() + pit.Quantity().Round( 0 ) ) );
+          }
+        }
+      }
+    }
+    
+    // 琛ラ綈绌哄垪
+    indexDate := minselect( macroPlan, TransferPlanColumn, tempTPC, true, tempTPC.ColumnDate() ).ColumnDate();
+    endDate   := maxselect( macroPlan, TransferPlanColumn, tempTPC, true, tempTPC.ColumnDate() ).ColumnDate();
+    while ( indexDate <= endDate ) {
+      if ( isnull( TransferPlanColumn::FindTransferPlanColumnTypeIndex( indexDate ) ) ) {
+        macroPlan.TransferPlanColumn( relnew,
+                                      ColumnDate := indexDate );
+      }
+      indexDate := indexDate + 1;
+    }
+    
+    
+    // 鐢熸垚浜у搧鍒�
+    minDateTPC := macroPlan.TransferPlanColumn( relnew,
+                                                ColumnDate := Date::MinDate() );
+    traverse ( macroPlan, TransferPlanRow, tpr ) {
+      productCell := minDateTPC.TransferPlanCell( relnew, Value := tpr.ProductID() );
+      productCell.TransferPlanRow( relset, tpr );
+    }
+    
+    // 璋冩嫧鏁伴噺璋冩暣
+  *]
+}
diff --git a/_Main/BL/Type_TransferPlanCell/_ROOT_Type_TransferPlanCell.qbl b/_Main/BL/Type_TransferPlanCell/_ROOT_Type_TransferPlanCell.qbl
new file mode 100644
index 0000000..9aff6e7
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanCell/_ROOT_Type_TransferPlanCell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type TransferPlanCell
+{
+  #keys: '5[413988.0.1292031923][413988.0.1292031921][0.0.0][413988.0.1292031922][413988.0.1292031924]'
+  BaseType: Object
+  StructuredName: 'TransferPlanCells'
+}
diff --git a/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnDate.qbl b/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnDate.qbl
new file mode 100644
index 0000000..86ce75b
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnDate
+{
+  #keys: '3[413988.0.1292032055][413988.0.1292032054][413988.0.1292032056]'
+  IsReadOnly: true
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnIndex.qbl b/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnIndex.qbl
new file mode 100644
index 0000000..7b327f5
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnIndex
+{
+  #keys: '3[413988.0.1292032025][413988.0.1292032024][413988.0.1292032026]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnName.qbl b/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnName.qbl
new file mode 100644
index 0000000..a664e11
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanColumn/Attribute_ColumnName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnName
+{
+  #keys: '3[413988.0.1292032045][413988.0.1292032044][413988.0.1292032046]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TransferPlanColumn/Function_CalcColumnName.qbl b/_Main/BL/Type_TransferPlanColumn/Function_CalcColumnName.qbl
new file mode 100644
index 0000000..61e2036
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanColumn/Function_CalcColumnName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcColumnName
+{
+  TextBody:
+  [*
+    // lihongji Jun-24-2024 (created)
+    
+    value := ifexpr( this.ColumnDate().IsMinInfinity(), "", this.ColumnDate().Format( "Y/M2/D2" ) );
+    
+    this.ColumnName( value );
+  *]
+}
diff --git a/_Main/BL/Type_TransferPlanColumn/TypeIndex_TransferPlanColumnTypeIndex.qbl b/_Main/BL/Type_TransferPlanColumn/TypeIndex_TransferPlanColumnTypeIndex.qbl
new file mode 100644
index 0000000..eb1cf36
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanColumn/TypeIndex_TransferPlanColumnTypeIndex.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TransferPlanColumnTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ColumnDate
+    }
+  ]
+}
diff --git a/_Main/BL/Type_TransferPlanColumn/_ROOT_Type_TransferPlanColumn.qbl b/_Main/BL/Type_TransferPlanColumn/_ROOT_Type_TransferPlanColumn.qbl
new file mode 100644
index 0000000..49de9fe
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanColumn/_ROOT_Type_TransferPlanColumn.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type TransferPlanColumn
+{
+  #keys: '5[413988.0.1292031918][413988.0.1292031916][0.0.0][413988.0.1292031917][413988.0.1292031919]'
+  BaseType: Object
+  StructuredName: 'TransferPlanColumns'
+}
diff --git a/_Main/BL/Type_TransferPlanRow/Attribute_Name.qbl b/_Main/BL/Type_TransferPlanRow/Attribute_Name.qbl
new file mode 100644
index 0000000..e0be8b2
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1292032011][413988.0.1292032010][413988.0.1292032012]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TransferPlanRow/Attribute_ProductID.qbl b/_Main/BL/Type_TransferPlanRow/Attribute_ProductID.qbl
new file mode 100644
index 0000000..6135603
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[413988.0.1292031981][413988.0.1292031980][413988.0.1292031982]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TransferPlanRow/Attribute_RowNr.qbl b/_Main/BL/Type_TransferPlanRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..be1fa8f
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[413988.0.1292032032][413988.0.1292032031][413988.0.1292032033]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_TransferPlanRow/Attribute_SourceStockpoingPointID.qbl b/_Main/BL/Type_TransferPlanRow/Attribute_SourceStockpoingPointID.qbl
new file mode 100644
index 0000000..63873ca
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Attribute_SourceStockpoingPointID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SourceStockpoingPointID
+{
+  #keys: '3[413988.0.1292031991][413988.0.1292031990][413988.0.1292031992]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TransferPlanRow/Attribute_TargetStockpoingPointID.qbl b/_Main/BL/Type_TransferPlanRow/Attribute_TargetStockpoingPointID.qbl
new file mode 100644
index 0000000..dfec058
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Attribute_TargetStockpoingPointID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TargetStockpoingPointID
+{
+  #keys: '3[413988.0.1292032001][413988.0.1292032000][413988.0.1292032002]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TransferPlanRow/Function_CalcName.qbl b/_Main/BL/Type_TransferPlanRow/Function_CalcName.qbl
new file mode 100644
index 0000000..30e44df
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Function_CalcName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcName
+{
+  TextBody:
+  [*
+    // lihongji Jun-24-2024 (created)
+    
+    value := this.SourceStockpoingPointID() + " to " + this.TargetStockpoingPointID();
+    
+    this.Name( value );
+  *]
+}
diff --git a/_Main/BL/Type_TransferPlanRow/TypeIndex_TransferPlanRowTypeIndex.qbl b/_Main/BL/Type_TransferPlanRow/TypeIndex_TransferPlanRowTypeIndex.qbl
new file mode 100644
index 0000000..9ac1725
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/TypeIndex_TransferPlanRowTypeIndex.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TransferPlanRowTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: SourceStockpoingPointID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: TargetStockpoingPointID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: ProductID
+    }
+  ]
+}
diff --git a/_Main/BL/Type_TransferPlanRow/_ROOT_Type_TransferPlanRow.qbl b/_Main/BL/Type_TransferPlanRow/_ROOT_Type_TransferPlanRow.qbl
new file mode 100644
index 0000000..68692d7
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/_ROOT_Type_TransferPlanRow.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type TransferPlanRow
+{
+  #keys: '5[413988.0.1292031913][413988.0.1292031911][0.0.0][413988.0.1292031912][413988.0.1292031914]'
+  BaseType: Object
+  StructuredName: 'TransferPlanRows'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def
index cde4c13..456f8a2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def
@@ -4,5 +4,6 @@
   Children:
   [
     #child: ActionBarGroupPlanViews
+    #child: abgSecondDevelopmentPlan
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
new file mode 100644
index 0000000..c40d27d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component abgSecondDevelopmentPlan
+{
+  #keys: '[413988.0.1290310419]'
+  BaseType: 'WebActionBarGroup'
+  Children:
+  [
+    Component bTransferPlan
+    {
+      #keys: '[413988.0.1290300652]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'HAND_TRUCK_BOX'
+        Label: 'Transfer plan'
+        Taborder: 0
+      ]
+    }
+    Component bBlank
+    {
+      #keys: '[413988.0.1291640400]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Category: 'Actions-2'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bTransferPlan_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bTransferPlan_OnClick.def
new file mode 100644
index 0000000..af99f70
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bTransferPlan_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: abgSecondDevelopmentPlan/bTransferPlan
+Response OnClick () id:Response_MacroPlanner_abgSecondDevelopmentPlan_bTransferPlan_OnClick
+{
+  #keys: '[413988.0.1290322113]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "TransferPlan", true);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlActions.def
new file mode 100644
index 0000000..7ac917e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[413988.0.1292313213]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[413988.0.1292313217]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[413988.0.1292313219]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def
new file mode 100644
index 0000000..d0331a8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def
@@ -0,0 +1,64 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[413988.0.1292313211]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component npUpperLimitOfTransferCapacityZKG
+    {
+      #keys: '[413988.0.1292313261]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        Label: 'ZKG(pcs)'
+        Taborder: 0
+      ]
+    }
+    Component npUpperLimitOfTransferCapacityZKM
+    {
+      #keys: '[413988.0.1292313339]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        Label: 'ZKM(pcs)'
+        Taborder: 1
+      ]
+    }
+    Component npUpperLimitOfTransferCapacityPL
+    {
+      #keys: '[413988.0.1292313341]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        Label: 'PL(pcs)'
+        Taborder: 2
+      ]
+    }
+    Component npUpperLimitOfTransferCapacityKW
+    {
+      #keys: '[413988.0.1292313343]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        Label: 'KW(pcs)'
+        Taborder: 3
+      ]
+    }
+    Component npUpperLimitOfTransferCapacityAGW
+    {
+      #keys: '[413988.0.1292313345]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        Label: 'AGW(pcs)'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..2917a99
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[413988.0.1292313223]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..14ca6da
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[413988.0.1292313222]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/_ROOT_Component_DialogUpperLimitOfTransferCapacity.def b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/_ROOT_Component_DialogUpperLimitOfTransferCapacity.def
new file mode 100644
index 0000000..338e32f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/_ROOT_Component_DialogUpperLimitOfTransferCapacity.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogUpperLimitOfTransferCapacity
+{
+  #keys: '[413988.0.1292313209]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_MatrixEditor872.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_MatrixEditor872.def
new file mode 100644
index 0000000..7db9d74
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_MatrixEditor872.def
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+Component MatrixEditor872
+{
+  #keys: '[413988.0.1290322866]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell590
+    {
+      #keys: '[413988.0.1290322867]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor862
+        {
+          #keys: '[413988.0.1290322868]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'TransferPlanColumn.TransferPlanCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Value'
+        Column: 'TransferPlanColumn'
+        Row: 'TransferPlanRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows481
+    {
+      #keys: '[413988.0.1290322871]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor661
+        {
+          #keys: '[413988.0.1290322872]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'TransferPlanRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'SourceStockpoingPointID;TargetStockpoingPointID;ProductID'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns681
+    {
+      #keys: '[413988.0.1290322875]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor445
+        {
+          #keys: '[413988.0.1290322876]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'TransferPlanColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'ColumnName'
+        SortCriteria: 'ColumnDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage493
+    #child: matrixeditorContextMenu367
+  ]
+  Properties:
+  [
+    Columns: 'MatrixEditorColumns681'
+    ContextMenu: 'matrixeditorContextMenu367'
+    Rows: 'MatrixEditorRows481'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixEditorActionBarPage493.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixEditorActionBarPage493.def
new file mode 100644
index 0000000..8117f9f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixEditorActionBarPage493.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage493
+{
+  #keys: '[413988.0.1290322879]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixeditorContextMenu367.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixeditorContextMenu367.def
new file mode 100644
index 0000000..263a486
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_matrixeditorContextMenu367.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu367
+{
+  #keys: '[413988.0.1290322882]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pContent.def
new file mode 100644
index 0000000..957b4ac
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pContent.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pContent
+{
+  #keys: '[413988.0.1290370837]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor872
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pHeader.def
new file mode 100644
index 0000000..74595a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pHeader.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.0.1290370823]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bDownload
+    {
+      #keys: '[413988.0.1290361218]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Download'
+        Taborder: 0
+      ]
+    }
+    Component bMaximumDailyTransferCapacity
+    {
+      #keys: '[413988.0.1290361230]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Maximum daily transfer capacity'
+        Taborder: 1
+      ]
+    }
+    Component bGenerateReport
+    {
+      #keys: '[413988.0.1292223250]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Generate report'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bDownload_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bDownload_OnClick.def
new file mode 100644
index 0000000..17323ed
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bDownload_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bDownload
+Response OnClick () id:Response_pHeader_bDownload_OnClick
+{
+  #keys: '[413988.0.1292330526]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bGenerateReport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bGenerateReport_OnClick.def
new file mode 100644
index 0000000..2465dff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bGenerateReport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pHeader/bGenerateReport
+Response OnClick () id:Response_pHeader_bGenerateReport_OnClick
+{
+  #keys: '[413988.0.1292330696]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      TransferPlanCell::GenerateReport( MacroPlan );
+      
+      WebMessageBox::Success( Translations::A_VWED_Success() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def
new file mode 100644
index 0000000..fd89de9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bMaximumDailyTransferCapacity
+Response OnClick () id:Response_pHeader_bMaximumDailyTransferCapacity_OnClick
+{
+  #keys: '[413988.0.1292330611]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/_ROOT_Component_FormTransferPlan.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/_ROOT_Component_FormTransferPlan.def
new file mode 100644
index 0000000..dd8a2b6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/_ROOT_Component_FormTransferPlan.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormTransferPlan
+{
+  #keys: '[413988.0.1290321873]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pContent
+    #child: pHeader
+  ]
+  Properties:
+  [
+    Image: 'HAND_TRUCK_BOX'
+    Title: 'Transfer plan'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/TransferPlan.vw b/_Main/UI/MacroPlannerWebApp/Views/TransferPlan.vw
new file mode 100644
index 0000000..0cda1ef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/TransferPlan.vw
@@ -0,0 +1,146 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormTransferPlan
+      {
+        title: 'QMacroPlanner::FormTransferPlan'
+        shown: true
+        componentID: 'QMacroPlanner::FormTransferPlan'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components: null
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: 'Description'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'WALLET_OPEN'
+    description: ''
+  }
+  formatversion: 2
+  id: 'TransferPlan'
+  name: 'TransferPlan'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3