From 1e51fbda78f4782a252c5ad187064e96934a1eca Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期五, 12 七月 2024 17:38:33 +0800
Subject: [PATCH] 机加件管线报表

---
 _Main/BL/Type_MachiningPipelineReport/Method_Generate.qbl                                                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelPeriod.def                                               |   35 +
 _Main/BL/Type_MachiningPipelineCell/Method_Add.qbl                                                                                        |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def                                                  |   24 +
 _Main/BL/Type_MachiningPipelineCell/Attribute_DLAssemblyPlanQty.qbl                                                                       |    8 
 _Main/BL/Type_MachiningPipelineCell/Attribute_CCAssemblyPlanQty.qbl                                                                       |    4 
 _Main/BL/Relations/Relation_MachiningPipelineCell_Row_MachiningPipelineRow_Cell.qbl                                                       |   23 +
 _Main/BL/Type_MachiningPipelineCell/Method_Copy.qbl                                                                                       |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTable#141.def                                            |   14 
 _Main/BL/Relations/Relation_MachiningPipelineCell_Column_MachiningPipelineColumn_Cell.qbl                                                 |   26 +
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl                                                         |   11 
 _Main/BL/Type_MachiningPipelineCell/Attribute_CCInventoryQty.qbl                                                                          |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixEditorActionBarPageTable#1.def                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelSearch#957.def                                           |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelHeader#832.def                                           |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                      |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def                                               |   24 +
 _Main/BL/Type_MachiningPipelineCell/Function_CalcTotalInventoryQty.qbl                                                                    |   13 
 _Main/BL/Type_MachiningPipelineSource0/StaticMethod_Download.qbl                                                                          |  118 ++++-
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl                                                         |   11 
 _Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw                                                                              |  246 +++++-----
 _Main/BL/Type_MachiningPipelineReport/Method_GetRow.qbl                                                                                   |    2 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl                                                                   |    4 
 _Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl                                             |   23 +
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl                                                                      |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTimeUnit#778.def                                         |   28 +
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl                                                                       |    9 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixeditorContextMenuTable#1.def                            |   10 
 _Main/BL/Relations/Relation_MachiningPipelineReport_Source_MachiningPipelineSource_Report.qbl                                             |   23 +
 _Main/BL/Type_MachiningPipelineRow/Method_InitializeCell.qbl                                                                              |    2 
 _Main/BL/Relations/Relation_MachiningPipelineSource_MacroPlan_MacroPlan_MachiningPipelineSource.qbl                                       |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def                         |   38 +
 _Main/BL/Type_MachiningPipelineCell/Attribute_CCTransferQty.qbl                                                                           |    8 
 _Main/BL/Type_MachiningPipelineCell/Attribute_TotalInventoryQty.qbl                                                                       |    8 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCAssemnlyUnit.qbl                                                           |   11 
 _Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl                                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSummaryExport_OnClick.def                    |   22 +
 _Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl                                                                        |   63 +-
 _Main/BL/Type_MachiningPipelineCell/Attribute_DLProductionQty.qbl                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnCreated.def |   16 
 _Main/BL/Type_MachiningPipelineCell/Attribute_DLTransferQty.qbl                                                                           |    8 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultName.qbl                                                                     |    2 
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl                                                                        |   20 
 _Main/BL/Relations/Relation_MachiningPipelineRow_Report_MachiningPipelineReport_Row.qbl                                                   |   23 +
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl                                                                   |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                    |   24 +
 _Main/BL/Type_MachiningPipelineCell/Attribute_DLInventoryQty.qbl                                                                          |    8 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLAssemnlyUnit.qbl                                                           |   11 
 /dev/null                                                                                                                                 |   22 -
 _Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl                                                                           |   21 
 _Main/BL/Type_MachiningPipelineRow/Method_Initialize.qbl                                                                                  |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_MatrixEditorTable#870.def                                     |   98 ++++
 _Main/BL/Type_MachiningPipelineCell/Attribute_CCProductionQty.qbl                                                                         |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def |   20 
 _Main/BL/Relations/Relation_MachiningPipelineColumn_Report_MachiningPipelineReport_Column.qbl                                             |   26 +
 56 files changed, 1,065 insertions(+), 231 deletions(-)

diff --git a/_Main/BL/Relations/Relation_MachiningPipelineCell_Column_MachiningPipelineColumn_Cell.qbl b/_Main/BL/Relations/Relation_MachiningPipelineCell_Column_MachiningPipelineColumn_Cell.qbl
new file mode 100644
index 0000000..1e560cf
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineCell_Column_MachiningPipelineColumn_Cell.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineCell_Column_MachiningPipelineColumn_Cell
+{
+  #keys: '1[415136.0.894469828]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.894469847][415136.0.894469841][415136.0.894469848][415136.0.894469842][415136.0.894469849][415136.0.894469843][415136.0.894469850][415136.0.894469844][415136.0.894469851][415136.0.894469845][415136.0.894469852][415136.0.894469846]'
+    SequenceElementSuffix: 'CellInColumn'
+    SequenceSuffix: 'CellInColumn'
+  }
+  RelationSide.LeftSide Column
+  {
+    #keys: '3[415136.0.894469830][415136.0.894469829][415136.0.894469831]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Cell
+  {
+    #keys: '3[415136.0.894469833][415136.0.894469832][415136.0.894469834]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachiningPipelineColumn
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineCell_Row_MachiningPipelineRow_Cell.qbl b/_Main/BL/Relations/Relation_MachiningPipelineCell_Row_MachiningPipelineRow_Cell.qbl
new file mode 100644
index 0000000..4c63725
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineCell_Row_MachiningPipelineRow_Cell.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineCell_Row_MachiningPipelineRow_Cell
+{
+  #keys: '1[415136.0.894469858]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Row
+  {
+    #keys: '3[415136.0.894469860][415136.0.894469859][415136.0.894469861]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Cell
+  {
+    #keys: '3[415136.0.894469863][415136.0.894469862][415136.0.894469864]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachiningPipelineRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineColumn_Report_MachiningPipelineReport_Column.qbl b/_Main/BL/Relations/Relation_MachiningPipelineColumn_Report_MachiningPipelineReport_Column.qbl
new file mode 100644
index 0000000..a228ebb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineColumn_Report_MachiningPipelineReport_Column.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineColumn_Report_MachiningPipelineReport_Column
+{
+  #keys: '1[415136.0.894481255]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.894481277][415136.0.894481271][415136.0.894481278][415136.0.894481272][415136.0.894481279][415136.0.894481273][415136.0.894481280][415136.0.894481274][415136.0.894481281][415136.0.894481275][415136.0.894481282][415136.0.894481276]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide Report
+  {
+    #keys: '3[415136.0.894481257][415136.0.894481256][415136.0.894481258]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Column
+  {
+    #keys: '3[415136.0.894481260][415136.0.894481259][415136.0.894481261]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachiningPipelineReport
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineReport_Source_MachiningPipelineSource_Report.qbl b/_Main/BL/Relations/Relation_MachiningPipelineReport_Source_MachiningPipelineSource_Report.qbl
new file mode 100644
index 0000000..718c40e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineReport_Source_MachiningPipelineSource_Report.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineReport_Source_MachiningPipelineSource_Report
+{
+  #keys: '1[415136.0.894481242]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Source
+  {
+    #keys: '3[415136.0.894481244][415136.0.894481243][415136.0.894481245]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineReport
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Report
+  {
+    #keys: '3[415136.0.894481247][415136.0.894481246][415136.0.894481248]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachiningPipelineSource
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineRow_Report_MachiningPipelineReport_Row.qbl b/_Main/BL/Relations/Relation_MachiningPipelineRow_Report_MachiningPipelineReport_Row.qbl
new file mode 100644
index 0000000..d5c63be
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineRow_Report_MachiningPipelineReport_Row.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineRow_Report_MachiningPipelineReport_Row
+{
+  #keys: '1[415136.0.894481229]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Report
+  {
+    #keys: '3[415136.0.894481231][415136.0.894481230][415136.0.894481232]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Row
+  {
+    #keys: '3[415136.0.894481234][415136.0.894481233][415136.0.894481235]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachiningPipelineReport
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl b/_Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl
new file mode 100644
index 0000000..08a3ddc
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineSearch_Source_MachiningPipelineSource_Search
+{
+  #keys: '1[415136.0.894481216]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Source
+  {
+    #keys: '3[415136.0.894481218][415136.0.894481217][415136.0.894481219]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Search
+  {
+    #keys: '3[415136.0.894481221][415136.0.894481220][415136.0.894481222]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineSource
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineSource_MacroPlan_MacroPlan_MachiningPipelineSource.qbl b/_Main/BL/Relations/Relation_MachiningPipelineSource_MacroPlan_MacroPlan_MachiningPipelineSource.qbl
new file mode 100644
index 0000000..5fe270c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineSource_MacroPlan_MacroPlan_MachiningPipelineSource.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineSource_MacroPlan_MacroPlan_MachiningPipelineSource
+{
+  #keys: '1[415136.0.894481203]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.894481205][415136.0.894481204][415136.0.894481206]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineSource
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MachiningPipelineSource
+  {
+    #keys: '3[415136.0.894481208][415136.0.894481207][415136.0.894481209]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl
index cc879a1..2948919 100644
--- a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl
@@ -5,6 +5,6 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return 'Engine pipelines';
+    return 'Machining pipelines';
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
index 1afd930..9d263fc 100644
--- a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
@@ -7,7 +7,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
-    owner.FinancialProductionSource( relflush );
+    owner.EnginePipelineSource( relflush );
     ccunit                    := EnginePipelineReport::GetDefaultCCUnit();
     dlunit                    := EnginePipelineReport::GetDefaultDLUnit();
     //allunit                   := EnginePipelineReport::GetDefaultAllUnit();
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_DemandQuantity.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCAssemblyPlanQty.qbl
similarity index 67%
rename from _Main/BL/Type_MachiningPipelineCell/Attribute_DemandQuantity.qbl
rename to _Main/BL/Type_MachiningPipelineCell/Attribute_CCAssemblyPlanQty.qbl
index ab40217..8630496 100644
--- a/_Main/BL/Type_MachiningPipelineCell/Attribute_DemandQuantity.qbl
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCAssemblyPlanQty.qbl
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute DemandQuantity
+Attribute CCAssemblyPlanQty
 {
   #keys: '3[415136.0.886711537][415136.0.886711536][415136.0.886711538]'
-  Description: '闇�姹�'
+  Description: '闀挎槬瑁呴厤璁″垝'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_InventoryQuantity.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCInventoryQty.qbl
similarity index 70%
rename from _Main/BL/Type_MachiningPipelineCell/Attribute_InventoryQuantity.qbl
rename to _Main/BL/Type_MachiningPipelineCell/Attribute_CCInventoryQty.qbl
index e1be197..71455dc 100644
--- a/_Main/BL/Type_MachiningPipelineCell/Attribute_InventoryQuantity.qbl
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCInventoryQty.qbl
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute InventoryQuantity
+Attribute CCInventoryQty
 {
   #keys: '3[415136.0.886711534][415136.0.886711533][415136.0.886711535]'
-  Description: '搴撳瓨'
+  Description: '闀挎槬搴撳瓨'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_ProductionQuantity.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCProductionQty.qbl
similarity index 68%
rename from _Main/BL/Type_MachiningPipelineCell/Attribute_ProductionQuantity.qbl
rename to _Main/BL/Type_MachiningPipelineCell/Attribute_CCProductionQty.qbl
index 7426e8f..5d55afc 100644
--- a/_Main/BL/Type_MachiningPipelineCell/Attribute_ProductionQuantity.qbl
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCProductionQty.qbl
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute ProductionQuantity
+Attribute CCProductionQty
 {
   #keys: '3[415136.0.886711531][415136.0.886711530][415136.0.886711532]'
-  Description: '鐢熶骇'
+  Description: '闀挎槬鐢熶骇璁″垝'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_CCTransferQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCTransferQty.qbl
new file mode 100644
index 0000000..e674522
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_CCTransferQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCTransferQty
+{
+  #keys: '3[415136.0.894481176][415136.0.894481175][415136.0.894481177]'
+  Description: '闀挎槬璋冩嫧璁″垝'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_DLAssemblyPlanQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLAssemblyPlanQty.qbl
new file mode 100644
index 0000000..c044a24
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLAssemblyPlanQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLAssemblyPlanQty
+{
+  #keys: '3[415136.0.894481139][415136.0.894481138][415136.0.894481140]'
+  Description: '澶ц繛瑁呴厤璁″垝'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_DLInventoryQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLInventoryQty.qbl
new file mode 100644
index 0000000..3e46b8e
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLInventoryQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLInventoryQty
+{
+  #keys: '3[415136.0.894481162][415136.0.894481161][415136.0.894481163]'
+  Description: '澶ц繛搴撳瓨'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_DLProductionQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLProductionQty.qbl
new file mode 100644
index 0000000..8656cb3
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLProductionQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLProductionQty
+{
+  #keys: '3[415136.0.894481152][415136.0.894481151][415136.0.894481153]'
+  Description: '澶ц繛鐢熶骇璁″垝'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_DLTransferQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLTransferQty.qbl
new file mode 100644
index 0000000..a0a5d52
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_DLTransferQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLTransferQty
+{
+  #keys: '3[415136.0.894481186][415136.0.894481185][415136.0.894481187]'
+  Description: '澶ц繛璋冩嫧璁″垝'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Attribute_TotalInventoryQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Attribute_TotalInventoryQty.qbl
new file mode 100644
index 0000000..a2361c6
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Attribute_TotalInventoryQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalInventoryQty
+{
+  #keys: '3[415136.0.894481169][415136.0.894481168][415136.0.894481170]'
+  Description: '闀挎槬 + 澶ц繛 搴撳瓨'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Function_CalcTotalInventoryQty.qbl b/_Main/BL/Type_MachiningPipelineCell/Function_CalcTotalInventoryQty.qbl
new file mode 100644
index 0000000..49e3496
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Function_CalcTotalInventoryQty.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcTotalInventoryQty
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-12-2024 (created)
+    
+    value := this.CCInventoryQty() + this.DLInventoryQty();
+    
+    this.TotalInventoryQty( value );
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Method_Add.qbl b/_Main/BL/Type_MachiningPipelineCell/Method_Add.qbl
new file mode 100644
index 0000000..d23330d
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Method_Add.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method Add (
+  MachiningPipelineCell cell
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-12-2024 (created)
+    this.CCAssemblyPlanQty( this.CCAssemblyPlanQty() + cell.CCAssemblyPlanQty() );
+    this.CCProductionQty( this.CCProductionQty() + cell.CCProductionQty() );
+    this.CCTransferQty( this.CCTransferQty() + cell.CCTransferQty() );
+    this.CCInventoryQty( this.CCInventoryQty() + cell.CCInventoryQty() );
+    this.DLAssemblyPlanQty( this.DLAssemblyPlanQty() + cell.DLAssemblyPlanQty() );
+    this.DLProductionQty( this.DLProductionQty() + cell.DLProductionQty() );
+    this.DLTransferQty( this.DLTransferQty() + cell.DLTransferQty() );
+    this.DLInventoryQty( this.DLInventoryQty() + cell.DLInventoryQty() );
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/Method_Copy.qbl b/_Main/BL/Type_MachiningPipelineCell/Method_Copy.qbl
new file mode 100644
index 0000000..603d348
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/Method_Copy.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method Copy (
+  MachiningPipelineColumn column
+) as MachiningPipelineCell
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-12-2024 (created)
+    cell := column.Cell( relnew, CCAssemblyPlanQty := this.CCAssemblyPlanQty(), 
+                         CCProductionQty := this.CCProductionQty(), 
+                         CCTransferQty := this.CCTransferQty(),
+                         CCInventoryQty := this.CCInventoryQty(), 
+                         DLAssemblyPlanQty := this.DLAssemblyPlanQty(), 
+                         DLProductionQty := this.DLProductionQty(), 
+                         DLTransferQty := this.DLTransferQty(), 
+                         DLInventoryQty := this.DLInventoryQty() );
+    
+    return cell;
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..ba284fe
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MachiningPipelineColumn column
+) as MachiningPipelineCell
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-12-2024 (created)
+    cell := column.Cell( relnew, CCAssemblyPlanQty := 0, 
+                         CCProductionQty := 0, 
+                         CCTransferQty := 0,
+                         CCInventoryQty := 0, 
+                         DLAssemblyPlanQty := 0, 
+                         DLProductionQty := 0, 
+                         DLTransferQty := 0,
+                         DLInventoryQty := 0 );
+    
+    return cell;
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_Generate.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_Generate.qbl
index 5d68879..d6715fd 100644
--- a/_Main/BL/Type_MachiningPipelineReport/Method_Generate.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_Generate.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method Generate (
-  EnginePipelineSearch search,
+  MachiningPipelineSearch search,
   Product_MPs products
 )
 {
@@ -23,22 +23,15 @@
         if( not isnull( column ) ){
           sumcell  := selectobject( column, Cell, c, c.Row() = sumrow );
           if( isnull( sumcell ) ){
-            sumcell := column.Cell( relnew, InventoryQuantity := 0 );
+            sumcell := MachiningPipelineCell::Initialize( column );
             sumrow.Cell( relinsert, sumcell );
           }
           
           showcell := cell.Copy( column );
           showrow.Cell( relinsert, showcell );
       
-          sumcell.InventoryQuantity( cell.InventoryQuantity() + sumcell.InventoryQuantity() );
-          
-          traverse( cell, Demand, demand ){
-            sumcell.Demand( relnew, EngineType := demand.EngineType(), Model := demand.Model(), Period := demand.Period(), Quantity := demand.Quantity() );
-          }
-          
-          traverse( cell, Production, production ){
-            sumcell.Production( relnew, EngineType := production.EngineType(), Period := production.Period(), DLProduction := production.DLProduction(), CCProduction := production.CCProduction() );
-          }
+          sumcell.Add( cell );
+    
         }
       }
     }
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GetRow.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GetRow.qbl
index e4936c2..c19b0a5 100644
--- a/_Main/BL/Type_MachiningPipelineReport/Method_GetRow.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GetRow.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method GetRow (
   String product
-) as EnginePipelineRow
+) as MachiningPipelineRow
 {
   TextBody:
   [*
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCAssemnlyUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCAssemnlyUnit.qbl
new file mode 100644
index 0000000..22667e7
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCAssemnlyUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCAssemnlyUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl
new file mode 100644
index 0000000..050172d
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCProductionUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬鏈哄姞浜х嚎';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
index 854cd00..77d1f16 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    //return '闀挎槬';
-    return 'Assembly Plant (France)';
+    return '闀挎槬';
+    //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLAssemnlyUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLAssemnlyUnit.qbl
new file mode 100644
index 0000000..a34d00c
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLAssemnlyUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLAssemnlyUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛瑁呴厤绾�';
+    //return 'Assembly Plant (Spain)';
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl
new file mode 100644
index 0000000..4056b04
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLProductionUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛鏈哄姞浜х嚎';
+    //return 'Assembly Plant (Spain)';
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
index 00cad20..4759121 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    //return '澶ц繛';
-    return 'Assembly Plant (Spain)';
+    return '澶ц繛';
+    //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultName.qbl
index cc879a1..2948919 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultName.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultName.qbl
@@ -5,6 +5,6 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return 'Engine pipelines';
+    return 'Machining pipelines';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_Initialize.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_Initialize.qbl
index d63c966..c0f341b 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_Initialize.qbl
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 Method Initialize (
-  EnginePipelineColumn column
+  MachiningPipelineColumn column
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
-    cell := column.Cell( relnew, InventoryQuantity := 0 );
+    cell := MachiningPipelineCell::Initialize( column );
     
     this.Cell( relinsert, cell );
   *]
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_InitializeCell.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_InitializeCell.qbl
index 78516db..bc90a14 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_InitializeCell.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_InitializeCell.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method InitializeCell (
-  EnginePipelineReport table
+  MachiningPipelineReport table
 )
 {
   TextBody:
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
new file mode 100644
index 0000000..00732ef
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCellAssemblyValue (
+  MachiningPipelineColumn column,
+  String unit,
+  Real quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+    
+    if( unit = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() ){
+      cell.CCAssemblyPlanQty( cell.CCAssemblyPlanQty() + quantity );
+    }else if( unit = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() ){
+      cell.DLAssemblyPlanQty( cell.DLAssemblyPlanQty() + quantity );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellDemandValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellDemandValue.qbl
deleted file mode 100644
index b1ce10b..0000000
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellDemandValue.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method SetCellDemandValue (
-  EnginePipelineColumn column,
-  String segment,
-  Real quantity
-)
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-24-2024 (created)
-    cell := selectobject( this, Cell, cell, cell.Column() = column );
-    
-    demand := selectobject( cell, Demand, demand, demand.EngineType() = cell.Row().Name() and demand.Model() = segment and demand.Period() = column.Period() );
-    
-    if( isnull( demand ) ){
-      demand := cell.Demand( relnew, EngineType := cell.Row().Name(), Period := column.Period(), Model := segment, Quantity := 0 );
-    }
-    
-    demand.Quantity( demand.Quantity() + quantity );
-  *]
-}
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
index d72aa93..568d35f 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 Method SetCellInventoryValue (
-  EnginePipelineColumn column,
+  MachiningPipelineColumn column,
+  String unit,
   Real quantity
 )
 {
@@ -10,6 +11,10 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    cell.InventoryQuantity( cell.InventoryQuantity() + quantity );
+    if( unit = MachiningPipelineReport::GetDefaultCCUnit() ){
+      cell.CCInventoryQty( cell.CCInventoryQty() + quantity );
+    }else if( unit = MachiningPipelineReport::GetDefaultDLUnit() ){
+      cell.DLInventoryQty( cell.DLInventoryQty() + quantity );
+    }
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
index 98a8272..cc60df0 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method SetCellProductionValue (
-  EnginePipelineColumn column,
+  MachiningPipelineColumn column,
   String unit,
   Real quantity
 )
@@ -11,16 +11,10 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    production := selectobject( cell, Production, production, production.EngineType() = cell.Row().Name() and production.Period() = column.Period() );
-    
-    if( isnull( production ) ){
-      production := cell.Production( relnew, EngineType := cell.Row().Name(), Period := column.Period(), DLProduction := 0, CCProduction := 0 );
-    }
-    
-    if( unit = EnginePipelineReport::GetDefaultCCUnit() ){
-      production.CCProduction( production.CCProduction() + quantity );
-    }else if( unit = EnginePipelineReport::GetDefaultDLUnit() ){
-      production.DLProduction( production.DLProduction() + quantity );
+    if( unit = MachiningPipelineReport::GetDefaultCCProductionUnit() ){
+      cell.CCProductionQty( cell.CCProductionQty() + quantity );
+    }else if( unit = MachiningPipelineReport::GetDefaultDLProductionUnit() ){
+      cell.DLProductionQty( cell.DLProductionQty() + quantity );
     }
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Download.qbl b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Download.qbl
index f7ed28d..62d0044 100644
--- a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Download.qbl
@@ -8,7 +8,7 @@
   TextBody:
   [*
     
-    table := selectobject( macroPlan, EnginePipelineSource.Report, table, table.IsShow() );
+    table := selectobject( macroPlan, MachiningPipelineSource.Report, table, table.IsShow() );
     
     xmlDOMI := XMLDOMImplementation::Create();
     xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
@@ -57,32 +57,98 @@
           productcellElement3 := xmlDOM.CreateElement( "cell" );
           productcellElement3.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement3 );
+          productcellElement4 := xmlDOM.CreateElement( "cell" );
+          productcellElement4.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement4 );
+          productcellElement5 := xmlDOM.CreateElement( "cell" );
+          productcellElement5.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement5 );
+          productcellElement6 := xmlDOM.CreateElement( "cell" );
+          productcellElement6.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement6 );
+          productcellElement7 := xmlDOM.CreateElement( "cell" );
+          productcellElement7.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement7 );
+          productcellElement8 := xmlDOM.CreateElement( "cell" );
+          productcellElement8.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement8 );
+          productcellElement9 := xmlDOM.CreateElement( "cell" );
+          productcellElement9.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement9 );
           //Attribute
-          //鐢熶骇
-          endcellElement := xmlDOM.CreateElement( "cell" );
-          endcellElement.SetAttribute( "value", 'ProductionQuantity' );
-          attricolumnelement.AppendChild( endcellElement );
-          //闇�姹�
-          mincellElement := xmlDOM.CreateElement( "cell" );
-          mincellElement.SetAttribute( "value", 'DemandQuantity' );
-          attricolumnelement.AppendChild( mincellElement );
-          //搴撳瓨
-          maxcellElement := xmlDOM.CreateElement( "cell" );
-          maxcellElement.SetAttribute( "value", 'InventoryQUantity' );
-          attricolumnelement.AppendChild( maxcellElement );
+          //闀挎槬瑁呴厤璁″垝
+          ccaqcellElement := xmlDOM.CreateElement( "cell" );
+          ccaqcellElement.SetAttribute( "value", 'CCAssemblyPlanQty' );
+          attricolumnelement.AppendChild( ccaqcellElement );
+          //闀挎槬鐢熶骇璁″垝
+          ccpqcellElement := xmlDOM.CreateElement( "cell" );
+          ccpqcellElement.SetAttribute( "value", 'CCProductionQty' );
+          attricolumnelement.AppendChild( ccpqcellElement );
+          //闀挎槬璋冩嫧璁″垝
+          cctqcellElement := xmlDOM.CreateElement( "cell" );
+          cctqcellElement.SetAttribute( "value", 'CCTransferQty' );
+          attricolumnelement.AppendChild( cctqcellElement );
+          //闀挎槬搴撳瓨
+          cciqcellElement := xmlDOM.CreateElement( "cell" );
+          cciqcellElement.SetAttribute( "value", 'CCInventoryQty' );
+          attricolumnelement.AppendChild( cciqcellElement );
+          //澶ц繛瑁呴厤璁″垝
+          dlaqcellElement := xmlDOM.CreateElement( "cell" );
+          dlaqcellElement.SetAttribute( "value", 'DLAssemblyPlanQty' );
+          attricolumnelement.AppendChild( dlaqcellElement );
+          //澶ц繛鐢熶骇璁″垝
+          dlpqcellElement := xmlDOM.CreateElement( "cell" );
+          dlpqcellElement.SetAttribute( "value", 'DLProductionQty' );
+          attricolumnelement.AppendChild( dlpqcellElement );
+          //澶ц繛璋冩嫧璁″垝
+          dltqcellElement := xmlDOM.CreateElement( "cell" );
+          dltqcellElement.SetAttribute( "value", 'DLTransferQty' );
+          attricolumnelement.AppendChild( dltqcellElement );
+          //澶ц繛搴撳瓨
+          dliqcellElement := xmlDOM.CreateElement( "cell" );
+          dliqcellElement.SetAttribute( "value", 'DLInventoryQty' );
+          attricolumnelement.AppendChild( dliqcellElement );
+          //闀挎槬 + 澶ц繛 搴撳瓨
+          tiqcellElement := xmlDOM.CreateElement( "cell" );
+          tiqcellElement.SetAttribute( "value", 'TotalInventoryQty' );
+          attricolumnelement.AppendChild( tiqcellElement );
         }
-        //鐢熶骇
-        endcellElement := xmlDOM.CreateElement( "cell" );
-        endcellElement.SetAttribute( "value", [String]c.ProductionQuantity() );
-        columnelement.AppendChild( endcellElement );
-        //闇�姹�
-        mincellElement := xmlDOM.CreateElement( "cell" );
-        mincellElement.SetAttribute( "value", [String]c.DemandQuantity() );
-        columnelement.AppendChild( mincellElement );
-        //搴撳瓨
-        maxcellElement := xmlDOM.CreateElement( "cell" );
-        maxcellElement.SetAttribute( "value", [String]c.InventoryQuantity() );
-        columnelement.AppendChild( maxcellElement );
+        //闀挎槬瑁呴厤璁″垝
+        ccaqcellElement := xmlDOM.CreateElement( "cell" );
+        ccaqcellElement.SetAttribute( "value", [String]c.CCAssemblyPlanQty() );
+        columnelement.AppendChild( ccaqcellElement );
+        //闀挎槬鐢熶骇璁″垝
+        ccpqcellElement := xmlDOM.CreateElement( "cell" );
+        ccpqcellElement.SetAttribute( "value", [String]c.CCProductionQty() );
+        columnelement.AppendChild( ccpqcellElement );
+        //闀挎槬璋冩嫧璁″垝
+        cctqcellElement := xmlDOM.CreateElement( "cell" );
+        cctqcellElement.SetAttribute( "value", [String]c.CCTransferQty() );
+        columnelement.AppendChild( cctqcellElement );
+        //闀挎槬搴撳瓨
+        cciqcellElement := xmlDOM.CreateElement( "cell" );
+        cciqcellElement.SetAttribute( "value", [String]c.CCInventoryQty() );
+        columnelement.AppendChild( cciqcellElement );
+        //澶ц繛瑁呴厤璁″垝
+        dlaqcellElement := xmlDOM.CreateElement( "cell" );
+        dlaqcellElement.SetAttribute( "value", [String]c.DLAssemblyPlanQty() );
+        columnelement.AppendChild( dlaqcellElement );
+        //澶ц繛鐢熶骇璁″垝
+        dlpqcellElement := xmlDOM.CreateElement( "cell" );
+        dlpqcellElement.SetAttribute( "value", [String]c.DLProductionQty() );
+        columnelement.AppendChild( dlpqcellElement );
+        //澶ц繛璋冩嫧璁″垝
+        dltqcellElement := xmlDOM.CreateElement( "cell" );
+        dltqcellElement.SetAttribute( "value", [String]c.DLTransferQty() );
+        columnelement.AppendChild( dltqcellElement );
+        //澶ц繛搴撳瓨
+        dliqcellElement := xmlDOM.CreateElement( "cell" );
+        dliqcellElement.SetAttribute( "value", [String]c.DLInventoryQty() );
+        columnelement.AppendChild( dliqcellElement );
+        //闀挎槬 + 澶ц繛 搴撳瓨
+        tiqcellElement := xmlDOM.CreateElement( "cell" );
+        tiqcellElement.SetAttribute( "value", [String]c.TotalInventoryQty() );
+        columnelement.AppendChild( tiqcellElement );
       }
       tableElement.AppendChild( columnelement );  
     }
@@ -91,7 +157,7 @@
     
     //info( xmlString );
     
-    tableGroupHandle := TableGroupHandle::Create( EnginePipelineReport::GetDefaultName() );
+    tableGroupHandle := TableGroupHandle::Create( MachiningPipelineReport::GetDefaultName() );
     tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
     
diff --git a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
index 0941931..bf09a16 100644
--- a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -8,10 +8,10 @@
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
     owner.FinancialProductionSource( relflush );
-    ccunit                    := EnginePipelineReport::GetDefaultCCUnit();
-    dlunit                    := EnginePipelineReport::GetDefaultDLUnit();
+    ccunit                    := MachiningPipelineReport::GetDefaultCCUnit();
+    dlunit                    := MachiningPipelineReport::GetDefaultDLUnit();
     //allunit                   := EnginePipelineReport::GetDefaultAllUnit();
-    source                    := owner.EnginePipelineSource( relnew, Name := FinancialProductionReport::GetDefaultName() );
+    source                    := owner.MachiningPipelineSource( relnew, Name := MachiningPipelineReport::GetDefaultName() );
     table                     := source.Report( relnew, ID := source.Name(), Name := source.Name() );
     showtable                 := source.Report( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsShow := true );
     
@@ -21,10 +21,9 @@
     //鍒濆鍖栧垪
     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() );
     
-    //鐢熸垚鐢熶骇鍜屽簱瀛樻暟鎹�
+    //鐢熸垚瑁呴厤銆佺敓浜у拰搴撳瓨鏁版嵁
     traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ){
       unit := pisp.StockingPoint_MP().UnitID();
-    //  info( unit, pisp.ProductID() );
       //鍒濆鍖栬
       row := table.GetRow( pisp.ProductID() );
       
@@ -33,35 +32,47 @@
                       or pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Week() ) ){
         periodtime := pispip.Period_MP().StartDate();
         periodname := periodtime.Format( "M2/D2/Y" );
-    //    info( '---------------------------------', periodtime, table.Column( relsize ), pispip.Period_MP().TimeUnit() );
         column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = pispip.Period_MP().TimeUnit() );
-    //    info( '---------------------------------', isnull( column ), isnull( row ) );
-    //    info( '---------------------------------', column.Name(), row.Name() );
-        if( unit = ccunit or unit = dlunit ){
+    
+        //瑁呴厤绾�
+        if( unit = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or unit = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() ){
+          row.SetCellAssemblyValue( column, unit, pispip.NewSupplyProductionQuantity() );
+        }
+        //鏈哄姞绾�
+        if( unit = MachiningPipelineReport::GetDefaultCCProductionUnit() or unit = MachiningPipelineReport::GetDefaultDLProductionUnit() ){
           row.SetCellProductionValue( column, unit, pispip.NewSupplyProductionQuantity() );
         }
-        row.SetCellInventoryValue( column, pispip.PlannedInventoryLevelEnd() );
+        if( unit = ccunit or unit = dlunit ){
+          row.SetCellInventoryValue( column, unit, pispip.PlannedInventoryLevelEnd() );
+        }
       }
     }
     
-    //鐢熸垚闇�姹傛暟鎹�
-    traverse( owner, SalesDemand.astype( Forecast ), forecast, ( forecast.EndDate() - forecast.StartDate() ) < 8){
-      row := table.GetRow( forecast.ProductID() );
-      weekdate   := ( forecast.StartDate() - Duration::Days( 7 ) ).Date();
-      periodtime := forecast.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
-      
-      column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = Translations::MP_GlobalParameters_Day() );
-      weekcolumn := minobject( table, Column, wcolumn, wcolumn.Period() <= weekdate and wcolumn.TimeUnit() = Translations::MP_GlobalParameters_Week(), wcolumn.Period() );
-      
-      if( not isnull( column ) ){
-        row.SetCellDemandValue( column, forecast.SalesSegmentName(), forecast.Quantity() );
-      }
-      
-      if( not isnull( weekcolumn ) ){
-        row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+    //鐢熸垚璋冩嫧鏁版嵁
+    traverse( owner, TransferPlanRow, tprow, ( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ) or ( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ) ){
+      row := selectobject( table, Row, row, row.Name() = tprow.Name() );
+      traverse( table, Column, column ){
+        cell := selectobject( row, Cell, cell, cell.Column() = column );
+        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
+          tpcell := selectobject( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() = column.Period() );
+          if( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ){
+            cell.CCTransferQty( [Real]tpcell.Value() );
+          }else if( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
+            cell.DLTransferQty( [Real]tpcell.Value() );
+          }
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){
+          period := column.Period() + Duration::Days( 6 );
+          tpcell := selectobject( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() = period.Date() );
+          
+          if( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ){
+            cell.CCTransferQty( [Real]tpcell.Value() );
+          }else if( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
+            cell.DLTransferQty( [Real]tpcell.Value() );
+          }
+        }
       }
     }
+    
     rows := selectsortedset( table, Row, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_MatrixEditorTable\043870.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_MatrixEditorTable\043870.def"
new file mode 100644
index 0000000..4b75459
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_MatrixEditorTable\043870.def"
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditorTable id:MatrixEditorTable_870
+{
+  #keys: '[415136.0.893820897]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.893820898]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCell
+        {
+          #keys: '[415136.0.893820899]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MachiningPipelineReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Column.Cell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'CCAssemblyPlanQty;CCProductionQty;CCTransferQty;CCInventoryQty;DLAssemblyPlanQty;DLProductionQty;DLTransferQty;DLInventoryQty;TotalInventoryQty'
+        Column: 'Column'
+        Row: 'Row'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.893820900]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.893820901]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MachiningPipelineReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Row'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.893820902]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.893820903]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MachiningPipelineReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Column'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable_1
+    #child: matrixeditorContextMenuTable_1
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
new file mode 100644
index 0000000..f599c42
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelExport
+{
+  #keys: '[415136.0.893820864]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonSummaryExport
+    {
+      #keys: '[415136.0.893820865]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelHeader\043832.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelHeader\043832.def"
new file mode 100644
index 0000000..0e5f9ac
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelHeader\043832.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelHeader id:PanelHeader_832
+{
+  #keys: '[415136.0.893820859]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelSearch_957
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelPeriod.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelPeriod.def
new file mode 100644
index 0000000..dae1858
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelPeriod.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelPeriod
+{
+  #keys: '[415136.0.893820861]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DateSelectorStart
+    {
+      #keys: '[415136.0.893820862]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start date'
+        Taborder: 0
+      ]
+    }
+    Component DateSelectorEnd
+    {
+      #keys: '[415136.0.893820863]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 9999-12-31
+        Label: 'End date'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelSearch\043957.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelSearch\043957.def"
new file mode 100644
index 0000000..c0e0948
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelSearch\043957.def"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component PanelSearch id:PanelSearch_957
+{
+  #keys: '[415136.0.893820860]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelPeriod
+    #child: PanelExport
+    #child: PanelTimeUnit_778
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTable\043141.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTable\043141.def"
new file mode 100644
index 0000000..7d91afa
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTable\043141.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable id:PanelTable_141
+{
+  #keys: '[415136.0.893820896]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable_870
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTimeUnit\043778.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTimeUnit\043778.def"
new file mode 100644
index 0000000..9d87c09
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelTimeUnit\043778.def"
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+Component PanelTimeUnit id:PanelTimeUnit_778
+{
+  #keys: '[415136.0.893820866]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component RadioButtonGroupUseForTimeUnit
+    {
+      #keys: '[415136.0.893820867]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        ButtonLabels: 'Day;Week'
+        ButtonValues: 'Day;Week'
+        Orientation: 'horizontal'
+        ShowTitle: false
+        Taborder: 0
+        Title: 'Periods'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixEditorActionBarPageTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixEditorActionBarPageTable\0431.def"
new file mode 100644
index 0000000..b7dcd53
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixEditorActionBarPageTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable id:matrixEditorActionBarPageTable_1
+{
+  #keys: '[415136.0.893820904]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixeditorContextMenuTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixeditorContextMenuTable\0431.def"
new file mode 100644
index 0000000..9826bd0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_matrixeditorContextMenuTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable id:matrixeditorContextMenuTable_1
+{
+  #keys: '[415136.0.893820905]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def
new file mode 100644
index 0000000..c07555d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormMachiningPipelineReport_OnCreated
+{
+  #keys: '[415136.0.897182652]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      //if( not isnull( MacroPlan.EnginePipelineSource() ) ){
+        MachiningPipelineSource::Initialize( MacroPlan );
+      //}
+      //info( '------------------1----------------' );
+      table := selectobject( MacroPlan, MachiningPipelineSource.Report, table, table.IsShow() );
+      //info( '------------------2----------------', table.IsShow() );
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( table.Source().Search() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSummaryExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSummaryExport_OnClick.def
new file mode 100644
index 0000000..d1bbc51
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSummaryExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSummaryExport
+Response OnClick () id:Response_PanelExport_ButtonSummaryExport_OnClick
+{
+  #keys: '[415136.0.893820856]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := MachiningPipelineSource::Download( MacroPlan );
+      
+      Application.Download( MachiningPipelineReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
new file mode 100644
index 0000000..89d54eb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod/DateSelectorEnd
+Response OnChanged () id:Response_PanelPeriod_DateSelectorEnd_OnChanged
+{
+  #keys: '[415136.0.893820857]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() < DateSelectorStart.Date() ){
+        this.HintError( 'The end date cannot be less than the start date!' );
+      }else{
+        if( dhSearch.Data().EndDate() <> this.Date() ){
+          dhSearch.Data().EndDate( this.Date() );
+          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
new file mode 100644
index 0000000..f1b84da
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod/DateSelectorStart
+Response OnChanged () id:Response_PanelPeriod_DateSelectorStart_OnChanged
+{
+  #keys: '[415136.0.893820858]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() > DateSelectorEnd.Date() ){
+        this.HintError( 'The start date cannot be later than the end date!' );
+      }else{
+        if( dhSearch.Data().StartDate() <> this.Date() ){
+          dhSearch.Data().StartDate( this.Date() );
+          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
new file mode 100644
index 0000000..983fe7e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelTimeUnit_778/RadioButtonGroupUseForTimeUnit
+Response OnChanged () id:Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged
+{
+  #keys: '[415136.0.893820855]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
+      if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
+        dhSearch.Data().TimeUnit( this.BoundValue() );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnCreated.def
new file mode 100644
index 0000000..3e62dba
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelTimeUnit_778/RadioButtonGroupUseForTimeUnit
+Response OnCreated () id:Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnCreated
+{
+  #keys: '[415136.0.893820854]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.ButtonValues( Translations::MP_GlobalParameters_Day() + ';' + Translations::MP_GlobalParameters_Week() + ';' + Translations::MP_GlobalParameters_Month() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
new file mode 100644
index 0000000..323e7bd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormMachiningPipelineReport
+{
+  #keys: '[415136.0.893820723]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component DataHolderTable
+    {
+      #keys: '[415136.0.893820797]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'MachiningPipelineReport'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component dhSearch
+    {
+      #keys: '[415136.0.893820823]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'MachiningPipelineSearch'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: PanelHeader_832
+    #child: PanelTable_141
+  ]
+  Properties:
+  [
+    Image: 'DOCUMENT_CONNECTION'
+    Title: 'Machining pipeline report'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw b/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
index c757468..0b36ffb 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
@@ -61,29 +61,13 @@
                 {
                   attributes
                   {
-                    attribute_ProductionQuantity
+                    attribute_Value
                     {
                       type: 'MatrixEditorWebApiCellDataModelInterest'
                       index: 0
                       rowsubtotal: ''
                       columnsubtotal: ''
-                      attribute: 'ProductionQuantity'
-                    }
-                    attribute_DemandQuantity
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 1
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DemandQuantity'
-                    }
-                    attribute_InventoryQuantity
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 2
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'InventoryQuantity'
+                      attribute: 'Value'
                     }
                   }
                 }
@@ -106,122 +90,152 @@
           }
         }
       }
-      form_FormEnginePipelineProduction
+      form_FormMachiningPipelineReport
       {
-        title: 'QMacroPlanner::FormEnginePipelineProduction'
+        title: 'QMacroPlanner::FormMachiningPipelineReport'
         shown: true
-        componentID: 'QMacroPlanner::FormEnginePipelineProduction'
+        componentID: 'QMacroPlanner::FormMachiningPipelineReport'
         layout
         {
           mode: 'open'
           rowPosition: 16
-          rowSpan: 6
+          rowSpan: 19
           columnPosition: 1
-          columnSpan: 6
+          columnSpan: 12
         }
         components
         {
-          FormEnginePipelineProduction_ListEnginePipelineProduction
+          FormMachiningPipelineReport_PanelHeader
           {
+            sizeRatio: 1
           }
-          FormEnginePipelineProduction_DataSetLevelEnginePipelineProduction
+          FormMachiningPipelineReport_PanelSearch
           {
-            groupDepth: -1
-            column_EngineType
-            {
-              columnId: 'EngineType'
-              dataPath: 'EngineType'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_Period
-            {
-              columnId: 'Period'
-              dataPath: 'Period'
-              dataType: 'date'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_DLProduction
-            {
-              columnId: 'DLProduction'
-              dataPath: 'DLProduction'
-              dataType: 'real'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_CCProduction
-            {
-              columnId: 'CCProduction'
-              dataPath: 'CCProduction'
-              dataType: 'real'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
+            sizeRatio: 1
           }
-        }
-      }
-      form_FormEnginePipelineDemand
-      {
-        title: 'QMacroPlanner::FormEnginePipelineDemand'
-        shown: true
-        componentID: 'QMacroPlanner::FormEnginePipelineDemand'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 16
-          rowSpan: 6
-          columnPosition: 7
-          columnSpan: 6
-        }
-        components
-        {
-          FormEnginePipelineDemand_ListEnginePipelineDemand
+          FormMachiningPipelineReport_PanelPeriod
           {
+            sizeRatio: 1
           }
-          FormEnginePipelineDemand_DataSetLevelEnginePipelineDemand
+          FormMachiningPipelineReport_PanelTimeUnit
           {
-            groupDepth: -1
-            column_EngineType
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
             {
-              columnId: 'EngineType'
-              dataPath: 'EngineType'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_Model
-            {
-              columnId: 'Model'
-              dataPath: 'Model'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_Period
-            {
-              columnId: 'Period'
-              dataPath: 'Period'
-              dataType: 'date'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_Quantity
-            {
-              columnId: 'Quantity'
-              dataPath: 'Quantity'
-              dataType: 'real'
-              index: 3
-              subtotals: ''
-              width: 150
+              componentId: 'QMacroPlanner::FormMachiningPipelineReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_CCAssemblyPlanQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCAssemblyPlanQty'
+                    }
+                    attribute_CCProductionQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCProductionQty'
+                    }
+                    attribute_CCTransferQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCTransferQty'
+                    }
+                    attribute_CCInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCInventoryQty'
+                    }
+                    attribute_DLAssemblyPlanQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 4
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLAssemblyPlanQty'
+                    }
+                    attribute_DLProductionQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 5
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLProductionQty'
+                    }
+                    attribute_DLTransferQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 6
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLTransferQty'
+                    }
+                    attribute_DLInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 7
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLInventoryQty'
+                    }
+                    attribute_TotalInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 8
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalInventoryQty'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
             }
           }
         }

--
Gitblit v1.9.3