From 315c0f4db2e89a9a3e31461abc06c08317d48f8b Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期五, 21 六月 2024 16:12:09 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/BL/Type_Feedback/_ROOT_Type_Feedback.qbl                                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationFixedPageActionBarPageDef.def                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def                                |   18 
 _Main/BL/Type_FinancialProductionColumn/Attribute_Index.qbl                                                                                          |    7 
 _Main/BL/Type_FinancialProductionSource/DefaultValue_UploadUser.qbl                                                                                  |    6 
 _Main/BL/Type_FinancialProductionSource/Attribute_IsXLSX.qbl                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelPower.def                                                               |   36 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def                                                        |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def |   38 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportTable.def                                |   10 
 _Main/BL/Type_FinancialProductionReport/Attribute_ID.qbl                                                                                             |    8 
 _Main/BL/Type_FinancialProductionRow/Attribute_Name.qbl                                                                                              |    7 
 _Main/BL/Relations/Relation_FinancialProductionColumn_FinancialProductionCell_FinancialProducti.qbl                                                  |   26 
 _Main/BL/Type_FinancialProductionSource/DefaultValue_Name.qbl                                                                                        |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def                                                         |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def                               |   15 
 _Main/UI/MacroPlannerWebApp/Views/Financial_production_report_view.vw                                                                                |   75 ++
 _Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionColumn_FinancialProduc.qbl                                                  |   26 
 _Main/BL/Type_Product_MP/Attribute_Generation.qbl                                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneral.def                                                             |   10 
 _Main/BL/Relations/Relation_FinancialProductionSource_MacroPlan_MacroPlan_FinancialProductionSo.qbl                                                  |   23 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/_ROOT_XML_FinancialProductionReportXML.qbl                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelMQBMLB.def                                                              |   36 +
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_cell.qbl                                                      |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def                                    |   23 
 _Main/BL/Type_FinancialProductionRow/_ROOT_Type_FinancialProductionRow.qbl                                                                           |   10 
 _Main/BL/Type_FinancialProductionSource/Method_ReadStructure.qbl                                                                                     |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def                                                                           |    8 
 _Main/BL/Type_FinancialProductionSource/_ROOT_Type_FinancialProductionSource.qbl                                                                     |   10 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_Key.qbl                                                 |    7 
 _Main/BL/Type_FinancialProductionSource/Attribute_FileBinaryValue.qbl                                                                                |    7 
 _Main/BL/Type_FinancialProductionRow/Attribute_RowNr.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                                     |   24 
 _Main/BL/Type_FinancialProductionReport/Attribute_IsImport.qbl                                                                                       |    7 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_column.qbl                                             |   17 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_UIShowHideComponentForBatchEdit.def                                             |  114 +++
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def                                    |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def |   22 
 _Main/BL/Type_FinancialProductionSource/Attribute_Name.qbl                                                                                           |    7 
 _Main/BL/Type_Product_MP/StaticMethod_Update.qbl                                                                                                     |  156 +++++
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def                                                                  |   10 
 _Main/BL/Type_FinancialProductionSource/DefaultValue_UploadDateTime.qbl                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def                               |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/_ROOT_Component_DialogCreateEditProduct.def                                            |   10 
 _Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionRow_FinancialProductio.qbl                                                  |   23 
 _Main/BL/Type_Product_MP/Attribute_Power.qbl                                                                                                         |    8 
 _Main/BL/Type_FinancialProductionReport/Method_SyncRows.qbl                                                                                          |   39 +
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_QuintiqType.qbl                                         |    7 
 _Main/BL/Type_FinancialProductionCell/_ROOT_Type_FinancialProductionCell.qbl                                                                         |   10 
 _Main/BL/Type_FinancialProductionColumn/Attribute_Name.qbl                                                                                           |    7 
 _Main/BL/Type_FinancialProductionColumn/Attribute_Period.qbl                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                            |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_pnlContent.def                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def                            |   46 +
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl                                                                                    |   47 +
 _Main/BL/Type_Product_MP/Method_Update#587.qbl                                                                                                       |   63 ++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def                                                      |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct#844.def                                                                     |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def                                      |   23 
 _Main/BL/Type_FinancialProductionCell/Attribute_Value.qbl                                                                                            |    7 
 _Main/BL/Type_Product_MP/Method_Update.qbl                                                                                                           |   79 ++
 _Main/BL/Type_Product_MP/Attribute_MQBMLB.qbl                                                                                                        |    8 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_column.qbl                                                    |   27 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/_ROOT_XML_FinancialProductionReportXMLHeaders.qbl                    |    8 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_table.qbl                                                     |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def                                                    |   24 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Upload.qbl                                                                                      |   21 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneration.def                                                          |   36 +
 LibMacroPlanner/BL/Type_Product_MP/Method_SetDefaultManufacturedDateActualForShelfLife.qbl                                                           |    1 
 _Main/BL/Relations/Relation_FinancialProductionRow_FinancialProductionCell_FinancialProductionC.qbl                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_OnOK.def                                                                        |   58 +
 _Main/BL/Type_FinancialProductionSource/Attribute_UploadDateTime.qbl                                                                                 |    7 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_DownloadTemplate.qbl                                                                            |   40 +
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_QuintiqType.qbl                                                |    7 
 _Main/BL/Type_FinancialProductionSource/Attribute_UploadUser.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialProductionReport_O.def       |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def                                                          |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def                            |   23 
 _Main/BL/Relations/Relation_FinancialProductionSource_FinancialProductionReport_FinancialProduc.qbl                                                  |   23 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_table.qbl                                              |   27 
 _Main/BL/Type_FinancialProductionColumn/_ROOT_Type_FinancialProductionColumn.qbl                                                                     |   10 
 _Main/BL/Type_FinancialProductionReport/Attribute_Name.qbl                                                                                           |    8 
 _Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_Key.qbl                                                        |    7 
 _Main/BL/Type_FinancialProductionReport/_ROOT_Type_FinancialProductionReport.qbl                                                                     |   10 
 _Main/BL/Type_FinancialProductionColumn/Function_CalcIndex.qbl                                                                                       |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def                                                        |   24 
 87 files changed, 1,849 insertions(+), 3 deletions(-)

diff --git a/LibMacroPlanner/BL/Type_Product_MP/Method_SetDefaultManufacturedDateActualForShelfLife.qbl b/LibMacroPlanner/BL/Type_Product_MP/Method_SetDefaultManufacturedDateActualForShelfLife.qbl
index 6b77fd5..c9a492f 100644
--- a/LibMacroPlanner/BL/Type_Product_MP/Method_SetDefaultManufacturedDateActualForShelfLife.qbl
+++ b/LibMacroPlanner/BL/Type_Product_MP/Method_SetDefaultManufacturedDateActualForShelfLife.qbl
@@ -15,5 +15,4 @@
       }
     }
   *]
-  InterfaceProperties { Accessibility: 'Module' }
 }
diff --git a/_Main/BL/Relations/Relation_FinancialProductionColumn_FinancialProductionCell_FinancialProducti.qbl b/_Main/BL/Relations/Relation_FinancialProductionColumn_FinancialProductionCell_FinancialProducti.qbl
new file mode 100644
index 0000000..854fb3d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionColumn_FinancialProductionCell_FinancialProducti.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionColumn_FinancialProductionCell_FinancialProductionCell_FinancialProductionColumn
+{
+  #keys: '1[415136.0.834715204]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.834715223][415136.0.834715217][415136.0.834715224][415136.0.834715218][415136.0.834715225][415136.0.834715219][415136.0.834715226][415136.0.834715220][415136.0.834715227][415136.0.834715221][415136.0.834715228][415136.0.834715222]'
+    SequenceElementSuffix: 'CellInColumn'
+    SequenceSuffix: 'CellInColumn'
+  }
+  RelationSide.LeftSide FinancialProductionCell
+  {
+    #keys: '3[415136.0.834715206][415136.0.834715205][415136.0.834715207]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialProductionColumn
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialProductionColumn
+  {
+    #keys: '3[415136.0.834715209][415136.0.834715208][415136.0.834715210]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionColumn_FinancialProduc.qbl b/_Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionColumn_FinancialProduc.qbl
new file mode 100644
index 0000000..9c3803f
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionColumn_FinancialProduc.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionReport_FinancialProductionColumn_FinancialProductionColumn_FinancialProductionReport
+{
+  #keys: '1[415136.0.834715133]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.834715155][415136.0.834715149][415136.0.834715156][415136.0.834715150][415136.0.834715157][415136.0.834715151][415136.0.834715158][415136.0.834715152][415136.0.834715159][415136.0.834715153][415136.0.834715160][415136.0.834715154]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide FinancialProductionColumn
+  {
+    #keys: '3[415136.0.834715135][415136.0.834715134][415136.0.834715136]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialProductionReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialProductionReport
+  {
+    #keys: '3[415136.0.834715138][415136.0.834715137][415136.0.834715139]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionRow_FinancialProductio.qbl b/_Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionRow_FinancialProductio.qbl
new file mode 100644
index 0000000..1a65dd4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionReport_FinancialProductionRow_FinancialProductio.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionReport_FinancialProductionRow_FinancialProductionRow_FinancialProductionReport
+{
+  #keys: '1[415136.0.834715120]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialProductionRow
+  {
+    #keys: '3[415136.0.834715122][415136.0.834715121][415136.0.834715123]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialProductionReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialProductionReport
+  {
+    #keys: '3[415136.0.834715125][415136.0.834715124][415136.0.834715126]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionRow_FinancialProductionCell_FinancialProductionC.qbl b/_Main/BL/Relations/Relation_FinancialProductionRow_FinancialProductionCell_FinancialProductionC.qbl
new file mode 100644
index 0000000..5ab5973
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionRow_FinancialProductionCell_FinancialProductionC.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionRow_FinancialProductionCell_FinancialProductionCell_FinancialProductionRow
+{
+  #keys: '1[415136.0.834715244]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialProductionCell
+  {
+    #keys: '3[415136.0.834715246][415136.0.834715245][415136.0.834715247]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialProductionRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialProductionRow
+  {
+    #keys: '3[415136.0.834715249][415136.0.834715248][415136.0.834715250]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionSource_FinancialProductionReport_FinancialProduc.qbl b/_Main/BL/Relations/Relation_FinancialProductionSource_FinancialProductionReport_FinancialProduc.qbl
new file mode 100644
index 0000000..faba766
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionSource_FinancialProductionReport_FinancialProduc.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionSource_FinancialProductionReport_FinancialProductionReport_FinancialProductionSource
+{
+  #keys: '1[415136.0.833840404]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialProductionReport
+  {
+    #keys: '3[415136.0.833840406][415136.0.833840405][415136.0.833840407]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialProductionSource
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialProductionSource
+  {
+    #keys: '3[415136.0.833840409][415136.0.833840408][415136.0.833840410]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionReport
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionSource_MacroPlan_MacroPlan_FinancialProductionSo.qbl b/_Main/BL/Relations/Relation_FinancialProductionSource_MacroPlan_MacroPlan_FinancialProductionSo.qbl
new file mode 100644
index 0000000..3708e6b
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionSource_MacroPlan_MacroPlan_FinancialProductionSo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionSource_MacroPlan_MacroPlan_FinancialProductionSource
+{
+  #keys: '1[415136.0.834715355]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.834715357][415136.0.834715356][415136.0.834715358]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionSource
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialProductionSource
+  {
+    #keys: '3[415136.0.834715360][415136.0.834715359][415136.0.834715361]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_Feedback/_ROOT_Type_Feedback.qbl b/_Main/BL/Type_Feedback/_ROOT_Type_Feedback.qbl
new file mode 100644
index 0000000..c7e5aea
--- /dev/null
+++ b/_Main/BL/Type_Feedback/_ROOT_Type_Feedback.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Feedback #extension
+{
+}
diff --git a/_Main/BL/Type_FinancialProductionCell/Attribute_Value.qbl b/_Main/BL/Type_FinancialProductionCell/Attribute_Value.qbl
new file mode 100644
index 0000000..2c929d9
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionCell/Attribute_Value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Value
+{
+  #keys: '3[415136.0.834715167][415136.0.834715166][415136.0.834715168]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionCell/_ROOT_Type_FinancialProductionCell.qbl b/_Main/BL/Type_FinancialProductionCell/_ROOT_Type_FinancialProductionCell.qbl
new file mode 100644
index 0000000..e744c58
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionCell/_ROOT_Type_FinancialProductionCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialProductionCell
+{
+  #keys: '5[415136.0.834715104][415136.0.834715102][0.0.0][415136.0.834715103][415136.0.834715105]'
+  BaseType: Object
+  Description: '璐㈠姟浜ч噺鎶ヨ〃鍗曞厓鏍�'
+  StructuredName: 'FinancialProductionCells'
+}
diff --git a/_Main/BL/Type_FinancialProductionColumn/Attribute_Index.qbl b/_Main/BL/Type_FinancialProductionColumn/Attribute_Index.qbl
new file mode 100644
index 0000000..d5412ea
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionColumn/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[415136.0.834715088][415136.0.834715087][415136.0.834715089]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialProductionColumn/Attribute_Name.qbl b/_Main/BL/Type_FinancialProductionColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..49515c7
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionColumn/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.834715282][415136.0.834715281][415136.0.834715283]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionColumn/Attribute_Period.qbl b/_Main/BL/Type_FinancialProductionColumn/Attribute_Period.qbl
new file mode 100644
index 0000000..63abfa2
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionColumn/Attribute_Period.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Period
+{
+  #keys: '3[415136.0.834715078][415136.0.834715077][415136.0.834715079]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_FinancialProductionColumn/Function_CalcIndex.qbl b/_Main/BL/Type_FinancialProductionColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..56bbf20
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionColumn/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-21-2024 (created)
+    
+    value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+    
+    this.Index( value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionColumn/_ROOT_Type_FinancialProductionColumn.qbl b/_Main/BL/Type_FinancialProductionColumn/_ROOT_Type_FinancialProductionColumn.qbl
new file mode 100644
index 0000000..512c40f
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionColumn/_ROOT_Type_FinancialProductionColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialProductionColumn
+{
+  #keys: '5[415136.0.834715074][415136.0.834715072][0.0.0][415136.0.834715073][415136.0.834715075]'
+  BaseType: Object
+  Description: '璐㈠姟浜ч噺鍒�'
+  StructuredName: 'FinancialProductionColumns'
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/Attribute_ID.qbl b/_Main/BL/Type_FinancialProductionReport/Attribute_ID.qbl
new file mode 100644
index 0000000..8822a7c
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.834715053][415136.0.834715052][415136.0.834715054]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/Attribute_IsImport.qbl b/_Main/BL/Type_FinancialProductionReport/Attribute_IsImport.qbl
new file mode 100644
index 0000000..c8eb836
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/Attribute_IsImport.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsImport
+{
+  #keys: '3[415136.0.834715063][415136.0.834715062][415136.0.834715064]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/Attribute_Name.qbl b/_Main/BL/Type_FinancialProductionReport/Attribute_Name.qbl
new file mode 100644
index 0000000..be6b0eb
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.834715043][415136.0.834715042][415136.0.834715044]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_SyncRows.qbl b/_Main/BL/Type_FinancialProductionReport/Method_SyncRows.qbl
new file mode 100644
index 0000000..fb4bb8b
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/Method_SyncRows.qbl
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#parent: #root
+Method SyncRows
+{
+  TextBody:
+  [*
+    totalRows := 0;
+    totalColumns := this.FinancialProductionColumn( relsize );
+    
+    if ( totalColumns > 0 ) {
+      randomCol := select( this, FinancialProductionColumn, tempFPC, true );
+      totalRows := randomCol.FinancialProductionCell( relsize );
+      
+      this.FinancialProductionRow( relflush );
+      
+      cells := construct( FinancialProductionCells );
+      traverse ( this, FinancialProductionColumn, fpc ) {
+        cells.Add( fpc.FirstCellInColumn() );
+      }
+      
+      for ( i := 0; i < totalRows; i++ ) {
+        assert( selectvalues( cells, Elements, c, true, c.FinancialProductionColumn().Index() ).ToString( "" ) = 
+                selectvalues( selectsortedset( cells, Elements, c, true, c.FinancialProductionColumn().Index() ), Elements, c, true, c.FinancialProductionColumn().Index() ).ToString( "" ),
+                "Assertion error in FrockDataTable::syncRows: Cells not sorted by column index" );
+        row := this.FinancialProductionRow( relnew, RowNr := i );
+        
+        newCells := construct( FinancialProductionCells );
+        
+        traverse ( cells, Elements, c ) {
+          row.FinancialProductionCell( relinsert, c );
+          
+          newCells.Add( c.NextCellInColumn() );
+        }
+        
+        cells := &newCells;
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_Key.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLAddressType { }
+  XMLID Key { }
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLID QuintiqType { }
+  XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_cell.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_cell.qbl
new file mode 100644
index 0000000..9211937
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_cell.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialProductionCell
+  XMLID cell { }
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Value
+      XMLID value { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_column.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..5c07ac7
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_column.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialProductionColumn
+  XMLID column { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: cell
+      GenerateOutput: false
+      Relation: FinancialProductionCell
+      XMLID FinancialProductionCell { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_table.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..19c27cc
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialProductionReport
+  XMLID table { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: column
+      GenerateOutput: false
+      Relation: FinancialProductionColumn
+      XMLID FinancialProductionColumn { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/_ROOT_XML_FinancialProductionReportXML.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/_ROOT_XML_FinancialProductionReportXML.qbl
new file mode 100644
index 0000000..b473540
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXML/_ROOT_XML_FinancialProductionReportXML.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML FinancialProductionReportXML
+{
+  Direction: 'ImportExport'
+  Root: table
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_Key.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLAddressType { }
+  XMLID Key { }
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLID QuintiqType { }
+  XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_column.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..8e3c600
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_column.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialProductionColumn
+  XMLID column { }
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_table.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..19c27cc
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialProductionReport
+  XMLID table { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: column
+      GenerateOutput: false
+      Relation: FinancialProductionColumn
+      XMLID FinancialProductionColumn { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/_ROOT_XML_FinancialProductionReportXMLHeaders.qbl b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/_ROOT_XML_FinancialProductionReportXMLHeaders.qbl
new file mode 100644
index 0000000..f925fee
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/XML_FinancialProductionReportXMLHeaders/_ROOT_XML_FinancialProductionReportXMLHeaders.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML FinancialProductionReportXMLHeaders
+{
+  Direction: 'ImportExport'
+  Root: table
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/_ROOT_Type_FinancialProductionReport.qbl b/_Main/BL/Type_FinancialProductionReport/_ROOT_Type_FinancialProductionReport.qbl
new file mode 100644
index 0000000..161f736
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/_ROOT_Type_FinancialProductionReport.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialProductionReport
+{
+  #keys: '5[415136.0.834715039][415136.0.834715037][0.0.0][415136.0.834715038][415136.0.834715040]'
+  BaseType: Object
+  Description: '璐㈠姟浜ч噺鎶ヨ〃'
+  StructuredName: 'FinancialProductionReports'
+}
diff --git a/_Main/BL/Type_FinancialProductionRow/Attribute_Name.qbl b/_Main/BL/Type_FinancialProductionRow/Attribute_Name.qbl
new file mode 100644
index 0000000..4b1cfbc
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.834715259][415136.0.834715258][415136.0.834715260]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionRow/Attribute_RowNr.qbl b/_Main/BL/Type_FinancialProductionRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..89743f1
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[415136.0.834200012][415136.0.834200011][415136.0.834200013]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialProductionRow/_ROOT_Type_FinancialProductionRow.qbl b/_Main/BL/Type_FinancialProductionRow/_ROOT_Type_FinancialProductionRow.qbl
new file mode 100644
index 0000000..8e7dddc
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionRow/_ROOT_Type_FinancialProductionRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialProductionRow
+{
+  #keys: '5[415136.0.834715099][415136.0.834715097][0.0.0][415136.0.834715098][415136.0.834715100]'
+  BaseType: Object
+  Description: '璐㈠姟浜ч噺琛�'
+  StructuredName: 'FinancialProductionRows'
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Attribute_FileBinaryValue.qbl b/_Main/BL/Type_FinancialProductionSource/Attribute_FileBinaryValue.qbl
new file mode 100644
index 0000000..a11347e
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/Attribute_FileBinaryValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FileBinaryValue
+{
+  #keys: '3[415136.0.833840427][415136.0.833840426][415136.0.833840428]'
+  ValueType: BinaryValue
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Attribute_IsXLSX.qbl b/_Main/BL/Type_FinancialProductionSource/Attribute_IsXLSX.qbl
new file mode 100644
index 0000000..e0649ba
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/Attribute_IsXLSX.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsXLSX
+{
+  #keys: '3[415136.0.833840418][415136.0.833840417][415136.0.833840419]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Attribute_Name.qbl b/_Main/BL/Type_FinancialProductionSource/Attribute_Name.qbl
new file mode 100644
index 0000000..6ec84a9
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.833840430][415136.0.833840429][415136.0.833840431]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Attribute_UploadDateTime.qbl b/_Main/BL/Type_FinancialProductionSource/Attribute_UploadDateTime.qbl
new file mode 100644
index 0000000..5e189a8
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/Attribute_UploadDateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UploadDateTime
+{
+  #keys: '3[415136.0.833840421][415136.0.833840420][415136.0.833840422]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Attribute_UploadUser.qbl b/_Main/BL/Type_FinancialProductionSource/Attribute_UploadUser.qbl
new file mode 100644
index 0000000..cde8728
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/Attribute_UploadUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UploadUser
+{
+  #keys: '3[415136.0.833840424][415136.0.833840423][415136.0.833840425]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialProductionSource/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/DefaultValue_UploadDateTime.qbl b/_Main/BL/Type_FinancialProductionSource/DefaultValue_UploadDateTime.qbl
new file mode 100644
index 0000000..8dde94e
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/DefaultValue_UploadDateTime.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UploadDateTime
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/DefaultValue_UploadUser.qbl b/_Main/BL/Type_FinancialProductionSource/DefaultValue_UploadUser.qbl
new file mode 100644
index 0000000..3dbb1dc
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/DefaultValue_UploadUser.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UploadUser
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Method_ReadStructure.qbl b/_Main/BL/Type_FinancialProductionSource/Method_ReadStructure.qbl
new file mode 100644
index 0000000..23e15cb
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/Method_ReadStructure.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Method ReadStructure
+{
+  TextBody:
+  [*
+    tableGroupHandle := TableGroupHandle::Create( this.Name() );
+    tableGroupHandle := XLS::LoadTableGroupFromBinaryData( this.FileBinaryValue().AsBinaryData(), tableGroupHandle, true, this.IsXLSX() );
+    sheets := tableGroupHandle.TableNames();
+    
+    traverse ( sheets, Elements, sheetName ) {
+      tableHandle := tableGroupHandle.Table( sheetName );
+      tableXML := TableHandle::ExportXML( tableHandle );
+      
+    //  info( tableXML.AsQUILL() );
+      
+      FinancialProductionReport::XMLImportFinancialProductionReportXMLHeaders( tableXML );
+      xlstable := FinancialProductionReport::XMLImportFinancialProductionReportXML( tableXML );
+      
+      xlstable.SyncRows();
+      
+      xlstable.Name( sheetName );
+      this.FinancialProductionReport( relinsert, &xlstable ); 
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
new file mode 100644
index 0000000..5d56a54
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  TextBody:
+  [*
+    table := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() );
+    
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+    
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    traverse ( table, FinancialProductionColumn, column ) {
+      columnelement := xmlDOM.CreateElement( "column" );
+      nameelement   := xmlDOM.CreateElement( "name" );
+      typeelement   := xmlDOM.CreateElement( "type" );
+      nameelement.TextContent( column.Name() );
+      typeelement.TextContent( "String" );
+      columnelement.AppendChild( nameelement );
+      columnelement.AppendChild( typeelement );
+      
+      cells := selectsortedset( column, FinancialProductionCell, cell, true, cell.FinancialProductionRow().RowNr() );
+      traverse ( cells, Elements, c ) {
+        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement.SetAttribute( "value", c.Value() );
+        columnelement.AppendChild( cellElement );
+      }
+      
+      tableElement.AppendChild( columnelement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( "Financial productions" );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_DownloadTemplate.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_DownloadTemplate.qbl
new file mode 100644
index 0000000..4e29ea7
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_DownloadTemplate.qbl
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DownloadTemplate (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  TextBody:
+  [*
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name><column><name>Product</name><type>String</type></column><column><name>Unit</name><type>String</type></column></table>' );
+    
+    tableElement              := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    startofyear               := macroPlan.StartOfPlanning().StartOfYear();
+    startofnextyear           := macroPlan.StartOfPlanning().StartOfNextYear();
+    
+    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+      columnElement := xmlDOM.CreateElement( "column" );
+      nameElement   := xmlDOM.CreateElement( "name" );
+      typeElement   := xmlDOM.CreateElement( "type" );
+      nameElement.TextContent( start.Format( "M2/D2/Y" ) );
+      typeElement.TextContent( "String" );
+      columnElement.AppendChild( nameElement );
+      columnElement.AppendChild( typeElement );
+      tableElement.AppendChild( columnElement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( "Financial productions" );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Upload.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Upload.qbl
new file mode 100644
index 0000000..9ffca0d
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Upload.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Upload (
+  MacroPlan owner,
+  BinaryValue binaryValue,
+  String filePath
+) as FinancialProductionSource
+{
+  TextBody:
+  [*
+    fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
+    
+    source := owner.FinancialProductionSource( relnew, FileBinaryValue := binaryValue,
+                                               Name                    := fileName,
+                                               IsXLSX                  := fileName.EndsWith( "xlsx" ),
+                                               UploadDateTime          := DateTime::ActualTime().Format( "Y-M2-D2 H:m:s" ),
+                                               UploadUser              := guard( QuintiqUser::CurrentUser().Username(), "" ) );
+    
+    return source;
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/_ROOT_Type_FinancialProductionSource.qbl b/_Main/BL/Type_FinancialProductionSource/_ROOT_Type_FinancialProductionSource.qbl
new file mode 100644
index 0000000..808d43c
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionSource/_ROOT_Type_FinancialProductionSource.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialProductionSource
+{
+  #keys: '5[415136.0.834715352][415136.0.834715350][0.0.0][415136.0.834715351][415136.0.834715353]'
+  BaseType: Object
+  Description: '璐㈠姟浜ч噺鎶ヨ〃'
+  StructuredName: 'FinancialProductionSources'
+}
diff --git a/_Main/BL/Type_Product_MP/Attribute_Generation.qbl b/_Main/BL/Type_Product_MP/Attribute_Generation.qbl
new file mode 100644
index 0000000..556db90
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Attribute_Generation.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.823981334][415136.0.823981333][415136.0.823981335]'
+  Description: '浠�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Product_MP/Attribute_MQBMLB.qbl b/_Main/BL/Type_Product_MP/Attribute_MQBMLB.qbl
new file mode 100644
index 0000000..63d0c61
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Attribute_MQBMLB.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MQBMLB
+{
+  #keys: '3[415136.0.823981341][415136.0.823981340][415136.0.823981342]'
+  Description: 'MQB/MLB'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Product_MP/Attribute_Power.qbl b/_Main/BL/Type_Product_MP/Attribute_Power.qbl
new file mode 100644
index 0000000..afbff25
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Attribute_Power.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.823981348][415136.0.823981347][415136.0.823981349]'
+  Description: '鍔熺巼'
+  ValueType: String
+}
diff --git "a/_Main/BL/Type_Product_MP/Method_Update\043587.qbl" "b/_Main/BL/Type_Product_MP/Method_Update\043587.qbl"
new file mode 100644
index 0000000..8e532b1
--- /dev/null
+++ "b/_Main/BL/Type_Product_MP/Method_Update\043587.qbl"
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+#parent: #root
+Method Update (
+  String id,
+  String name,
+  Product_MP parent,
+  String unitofmeasurename,
+  String generation,
+  String mqbmlb,
+  String power,
+  Boolean isbyproduct,
+  Number gridx,
+  Number gridy,
+  String iconname,
+  Boolean isuservisible,
+  String namedisplaybehavior,
+  String textcolor,
+  ViewBase view,
+  String notes,
+  Boolean hasshelflife,
+  Real shelflife,
+  Boolean hasmaturation,
+  Real maturationdays,
+  Boolean isexcludedfromoptimization,
+  Boolean isplannedafteroptimization,
+  Boolean isexcludedfromfulfilmentkpis,
+  Boolean isfromdb
+)
+{
+  Description: 'Update product and node'
+  TextBody:
+  [*
+    //Update product
+    parentproductid := guard( parent.ID(), '' );
+    
+    this.Update( id,
+                 name,
+                 parentproductid,
+                 unitofmeasurename,
+                 generation,
+                 mqbmlb,
+                 power,
+                 isbyproduct,
+                 iconname,
+                 notes,
+                 hasshelflife,
+                 shelflife,
+                 hasmaturation,
+                 maturationdays,
+                 isexcludedfromoptimization,
+                 isplannedafteroptimization,
+                 isexcludedfromfulfilmentkpis,
+                 isfromdb);
+    
+    //Update product node
+    node := select( this, ProductNode, n, n.ViewBase() = view );
+    
+    if( not isnull( node ) )
+    {
+      node.Update( gridx, gridy, isuservisible, namedisplaybehavior, textcolor, iconname );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Product_MP/Method_Update.qbl b/_Main/BL/Type_Product_MP/Method_Update.qbl
new file mode 100644
index 0000000..f93b554
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Method_Update.qbl
@@ -0,0 +1,79 @@
+Quintiq file version 2.0
+#parent: #root
+Method Update (
+  String id,
+  String name,
+  String parentid,
+  String unitofmeasurename,
+  String generation,
+  String mqbmlb,
+  String power,
+  Boolean isbyproduct,
+  String iconname,
+  String notes,
+  Boolean hasshelflife,
+  Real shelflife,
+  Boolean hasmaturation,
+  Real maturationdays,
+  Boolean isexcludedfromoptimization,
+  Boolean isplannedafteroptimization,
+  Boolean isexcludedfromfulfilmentkpis,
+  Boolean isfromdb
+)
+{
+  Description: 'This update method is used to update product parameters that takes only non object arguments'
+  TextBody:
+  [*
+    // Store the previous parent for recreating pispips
+    oldParent := this.Parent();
+    
+    hasnewparent := guard( this.Parent().ID(),'' ) <> parentid;
+    
+    parent := Product_MP::FindProductTypeIndex( parentid );
+    isroot := isnull( parent );
+    
+    this.UpdateTypeIndex( id );
+    this.Name( name );
+    this.Generation( generation );
+    this.MQBMLB( mqbmlb );
+    this.Power( power );
+    this.UnitOfMeasureName( unitofmeasurename );
+    this.IsByProduct( isbyproduct );
+    this.IconName( iconname );
+    this.Notes( notes );
+    this.IsManuallyConfigured( not isfromdb );
+    
+    this.HasShelfLife( hasshelflife );
+    if( not hasshelflife )
+    {
+      shelflife := 0.0;
+    }
+    this.ShelfLife( shelflife );
+    this.SetDefaultManufacturedDateActualForShelfLife( hasshelflife );
+    
+    this.HasMaturation( hasmaturation );
+    if( not hasmaturation ) 
+    {
+      maturationdays := 0.0;
+    }  
+    this.MaturationDays( maturationdays );
+    
+    this.IsExcludedFromOptimization( isexcludedfromoptimization );
+    this.IsPlannedAfterOptimization( isplannedafteroptimization );
+    this.IsExcludedFromFulfillmentKPI( isexcludedfromfulfilmentkpis );
+    
+    
+    //Update the parent relations
+    if( hasnewparent )
+    {
+      this.AssignParent( parent );
+    }
+    else if( isroot )
+    {
+      this.SetRootProduct();
+    }
+    
+    // Resync pispips
+    this.RecreatePISPIPs( oldParent );
+  *]
+}
diff --git a/_Main/BL/Type_Product_MP/StaticMethod_Update.qbl b/_Main/BL/Type_Product_MP/StaticMethod_Update.qbl
new file mode 100644
index 0000000..d745013
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/StaticMethod_Update.qbl
@@ -0,0 +1,156 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Update (
+  Product_MPs products_i,
+  Boolean isBatchEditParent,
+  Boolean isBatchEditUOM,
+  Boolean isBatchEditShelfLife,
+  Boolean isBatchEditMaturation,
+  Boolean isBatchEditByProduct,
+  Boolean isBatchEditOptimization,
+  Boolean isbatcheditExcludeFulfillmentKPI,
+  Boolean isBatchEditNote,
+  String id,
+  String name,
+  Product_MP parent,
+  UnitOfMeasure_MP unitOfMeasure,
+  String generation,
+  String mqbmlb,
+  String power,
+  Boolean hasShelfLife,
+  Real shelfLife,
+  Boolean hasMaturation,
+  Real maturationdays,
+  Boolean isByProduct,
+  Boolean isExcludedFromOptimization,
+  Boolean isPlannedAfterOptimization,
+  Boolean isExcludedFromFulfillmentKPI,
+  String notes,
+  ViewBase scView
+)
+{
+  Description:
+  [*
+    This is meant for webclient
+    Combined (1)edit + (2)batch edit for product(s), for web client product dialog.
+  *]
+  TextBody:
+  [*
+    // Traverse the selected set of Product_MPs for batch update
+    
+    gridx               := Number::MinNumber();
+    gridy               := Number::MinNumber();
+    iconname            := "";
+    isuservisible       := false;
+    namedisplaybehavior := "";
+    textcolor           := "";
+    
+    traverse( products_i, Elements, product )
+    { 
+      if( products_i.Size() > 1 ) //isBatch
+      {
+        // attributes that has no change on batch editing
+        id        := product.ID();
+        name      := product.Name();
+    //    generation:= product.Generation();
+    //    mqbmlb    := product.MQBMLB();
+    //    power     := product.Power();
+    
+        
+        //if no batch edit, set it with original unit's value, else, follow the screen value
+        if( not isBatchEditParent )
+        {
+          parent := product.Parent();
+        }
+        
+        if(  not isBatchEditUOM )
+        {
+          unitOfMeasure := product.UnitOfMeasure_MP();
+        }
+        
+        if(  not isBatchEditShelfLife )
+        {
+          hasShelfLife  := product.HasShelfLife();
+          shelfLife     := product.ShelfLife();
+        }
+        
+        if(  not isBatchEditMaturation )
+        {
+          hasMaturation  := product.HasMaturation();
+          maturationdays := product.MaturationDays();
+        }  
+        
+      
+        if(  not isBatchEditByProduct )
+        {
+          isByProduct   := product.IsByProduct();
+        }
+        
+        if(  not isBatchEditOptimization )
+        {
+          isExcludedFromOptimization := product.IsExcludedFromOptimization();
+          isPlannedAfterOptimization := product.IsPlannedAfterOptimization();
+        }
+        
+        if(  not isbatcheditExcludeFulfillmentKPI )
+        {
+          isExcludedFromFulfillmentKPI := product.IsExcludedFromFulfillmentKPI();
+        }
+        
+        if(  not isBatchEditNote )
+        {
+          notes := product.Notes();
+        }
+      }
+      
+      // Populate variables with default values
+      gridx               := GlobalParameters_MP::GetDefaultGridX();
+      gridy               := GlobalParameters_MP::GetDefaultGridY();
+      isuservisible       := true;
+      namedisplaybehavior := '';
+      textcolor           := 'Black';
+      iconname            := GlobalParameters_MP::GetDefaultProductIcon();
+    
+      // Get ProductNode
+      productnode := select( product, ProductNode, n, n.ViewBase() = scView );
+    
+      // If ProductNode is found, update the variables with data in the ProductNode
+      if( not isnull( productnode ) )
+      {
+        gridx               := productnode.GridX();
+        gridy               := productnode.GridY();
+        iconname            := productnode.IconName();
+        isuservisible       := productnode.IsUserVisible();
+        namedisplaybehavior := productnode.NameDisplayBehavior();
+        textcolor           := productnode.TextColor();
+      }
+      
+      // Update current Product_MP
+      product.Update( id,
+                      name,
+                      parent,
+                      guard( unitOfMeasure.Name(), "" ),
+                      generation,
+                      mqbmlb,
+                      power,
+                      isByProduct,
+                      gridx,
+                      gridy,
+                      iconname,
+                      isuservisible,
+                      namedisplaybehavior,
+                      textcolor,
+                      scView,
+                      notes,
+                      hasShelfLife, 
+                      shelfLife,
+                      hasMaturation,
+                      maturationdays,                  
+                      isExcludedFromOptimization,
+                      isPlannedAfterOptimization,
+                      isExcludedFromFulfillmentKPI,
+                      false 
+                     );
+    }
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
new file mode 100644
index 0000000..10df23f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component ActionBarGroupReport
+{
+  #keys: '[415136.0.834352165]'
+  BaseType: 'WebActionBarGroup'
+  Children:
+  [
+    Component ButtonFinancialProductionReport
+    {
+      #keys: '[415136.0.834352212]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOCUMENT_REFRESH'
+        Label: 'Financial production report'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def
new file mode 100644
index 0000000..747c7e2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component ActionBarPageReport
+{
+  #keys: '[415136.0.834352164]'
+  BaseType: 'WebActionBarPage'
+  Children:
+  [
+    #child: ActionBarGroupReport
+  ]
+  Properties:
+  [
+    Taborder: 21
+    Title: 'Report'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def
index 534bb0b..024119c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def
@@ -3,6 +3,6 @@
 {
   Properties:
   [
-    Taborder: 21
+    Taborder: 22
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationFixedPageActionBarPageDef.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationFixedPageActionBarPageDef.def
index 85ceb93..389ee08 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationFixedPageActionBarPageDef.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationFixedPageActionBarPageDef.def
@@ -3,6 +3,6 @@
 {
   Properties:
   [
-    Taborder: 22
+    Taborder: 23
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialProductionReport_O.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialProductionReport_O.def
new file mode 100644
index 0000000..3348f76
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialProductionReport_O.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonFinancialProductionReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialProductionReport_OnClick
+{
+  #keys: '[415136.0.836061956]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Financial_production_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index 77bc80f..86f5b1a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -19,6 +19,7 @@
         #child: applicationDevelopmentActionBarPageDef_1
         #child: abpAlgorithmPostProcessing
         #child: ActionBarPagePlan
+        #child: ActionBarPageReport
       ]
     }
     Component dhBinaryDataPR id:dhBinaryDataPR_688
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneral.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneral.def
new file mode 100644
index 0000000..dabff29
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneral.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component PanelGeneral #extension
+{
+  Children:
+  [
+    #child: PanelGeneration
+    #child: PanelMQBMLB
+    #child: PanelPower
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneration.def
new file mode 100644
index 0000000..3f2910e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelGeneration.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component PanelGeneration
+{
+  #keys: '[415136.0.825312166]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelBatchEditSpacerGeneration
+    {
+      #keys: '[415136.0.825312187]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        NumberOfColumns: 4
+        Taborder: 0
+      ]
+    }
+    Component EditFieldGeneration
+    {
+      #keys: '[415136.0.825312322]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Generation'
+        FixedSize: false
+        Label: '聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Generation'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelMQBMLB.def
new file mode 100644
index 0000000..7ef4ce3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelMQBMLB.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component PanelMQBMLB
+{
+  #keys: '[415136.0.827111683]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelBatchEditSpacerMQBMLB
+    {
+      #keys: '[415136.0.827111733]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        NumberOfColumns: 4
+        Taborder: 0
+      ]
+    }
+    Component EditFieldMQBMLB
+    {
+      #keys: '[415136.0.827111803]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MQBMLB'
+        FixedSize: false
+        Label: '聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽MQB/MLB'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 5
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelPower.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelPower.def
new file mode 100644
index 0000000..78a8831
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_PanelPower.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component PanelPower
+{
+  #keys: '[415136.0.827111860]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelBatchEditSpacerPower
+    {
+      #keys: '[415136.0.827111909]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        NumberOfColumns: 4
+        Taborder: 0
+      ]
+    }
+    Component EditFieldPower
+    {
+      #keys: '[415136.0.827111928]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Power'
+        FixedSize: false
+        Label: '聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Power'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 6
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_pnlContent.def
new file mode 100644
index 0000000..92726f6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Component_pnlContent.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component pnlContent #extension
+{
+  Children:
+  [
+    #child: PanelGeneral
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_OnOK.def
new file mode 100644
index 0000000..3e4e74a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_OnOK.def
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_DialogCreateEditProduct_OnOK #extension
+{
+  Body:
+  [*
+    // onOK for ProductDialog
+    // When the user clicks ok,       
+    // we either create or edit the data
+    this.ApplyChanges();
+    this.SetAttributeAfterApplyData();
+    
+    data := DataHolderDialogData.Data();
+    
+    if( isnull( data.WrappedInstance() ) ) // New
+    {
+      // When create product, parent relation must be null (as server method has logic to detect parent change using this relation)
+      data.Parent( relflush );
+      data.Commit();
+      DataHolderForm.Data().ListProduct().SelectByKey( data.WrappedInstance().Key() );
+    } 
+    else
+    { 
+      supplyChainView := select( MacroPlan, ViewBase.astype( SupplyChainView ), scv, true );  //TODO!! handling of current SupplyChainView
+      
+      Product_MP::Update(  DataHolderDialogDatas.Data()
+                          ,CheckBoxBatchEditParent.Checked()
+                          ,CheckBoxBatchEditUOM.Checked()
+                          ,CheckBoxBatchEditShelfLife.Checked()
+                          ,CheckBoxBatchEditMaturation.Checked() 
+                          ,CheckBoxBatchEditByProduct.Checked()
+                          ,CheckBoxBatchEditExcludeFromOptimizer.Checked()
+                          ,CheckboxBatchEditExcludeFromFulfillmentKPI.Checked()
+                          ,CheckBoxBatchEditNote.Checked()
+                          ,EditFieldID.Text()
+                          ,EditFieldName.Text()
+                          ,guard( selParentProduct.Data(), null(  Product_MP ) )
+                          ,guard( DropDownListUOM.Data(), null( UnitOfMeasure_MP ) )
+                          ,EditFieldGeneration.Text()
+                          ,EditFieldMQBMLB.Text()
+                          ,EditFieldPower.Text()
+                          ,data.HasShelfLife()
+                          ,data.ShelfLife()
+                          ,data.HasMaturation()
+                          ,data.MaturationDays()  
+                          ,data.IsByProduct()
+                          ,data.IsExcludedFromOptimization()
+                          ,data.IsPlannedAfterOptimization()
+                          ,ifexpr( CheckboxIsExcludedFromFulfillmentKPI.Enabled(), 
+                                   data.IsDerivedExcludeFromFulfillmentKPI(), 
+                                   data.IsExcludedFromFulfillmentKPI() )
+                          ,data.Notes()
+                          ,supplyChainView );
+    }
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_UIShowHideComponentForBatchEdit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_UIShowHideComponentForBatchEdit.def
new file mode 100644
index 0000000..26d41c1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/Method_UIShowHideComponentForBatchEdit.def
@@ -0,0 +1,114 @@
+Quintiq file version 2.0
+#parent: #root
+Method UIShowHideComponentForBatchEdit (
+  Boolean isInit,
+  Boolean isBatchEdit
+) id:Method_DialogCreateEditProduct_UIShowHideComponentForBatchEdit #extension
+{
+  Body:
+  [*
+    // Handles the toggling of the batch related component
+    if(  isInit )
+    {
+      //for initialize, control batch checkboxes visibility
+      
+      CheckBoxBatchEditParent.Visible( isBatchEdit );  
+      CheckBoxBatchEditUOM.Visible( isBatchEdit );  
+        
+      CheckBoxBatchEditShelfLife.Visible( isBatchEdit );  
+      CheckBoxBatchEditMaturation.Visible( isBatchEdit );
+      CheckBoxBatchEditByProduct.Visible( isBatchEdit );  
+      CheckBoxBatchEditExcludeFromOptimizer.Visible( isBatchEdit );  
+      CheckboxBatchEditExcludeFromFulfillmentKPI.Visible( isBatchEdit );
+      
+      CheckBoxBatchEditNote.Visible( isBatchEdit );  
+      
+      LabelBatchEditSpacerName.Visible( isBatchEdit );  
+      LabelBatchEditSpacerID.Visible( isBatchEdit );  
+      LabelBatchEditSpacerGeneration.Visible( isBatchEdit );  
+      LabelBatchEditSpacerMQBMLB.Visible( isBatchEdit );  
+      LabelBatchEditSpacerPower.Visible( isBatchEdit );  
+      
+      //disable all other component  
+      if( isBatchEdit )
+      {
+        disableText := Translations::MP_Product_DialogCreateEdit_DisableForBatchEdit();
+        disableFlag := false;
+        
+        selParentProduct.Enabled( disableFlag, disableText );
+        EditFieldID.Enabled( disableFlag, disableText );
+        EditFieldName.Enabled( disableFlag, disableText );
+        EditFieldGeneration.Enabled( disableFlag, disableText );
+        EditFieldMQBMLB.Enabled( disableFlag, disableText );
+        EditFieldPower.Enabled( disableFlag, disableText );
+      }
+    }
+    
+    //batch parent
+    batchParentActive := ifexpr( isInit
+                                 ,not isBatchEdit //when isBatchEdit,default=disable all
+                                 ,CheckBoxBatchEditParent.Checked() 
+                                ); 
+    selParentProduct.Enabled( batchParentActive, "" );
+    
+    //batch UOM
+    batchUOMActive := ifexpr(  isInit
+                              ,not isBatchEdit //when isBatchEdit,default=disable all
+                              ,CheckBoxBatchEditUOM.Checked() 
+                             ); 
+    DropDownListUOM.Enabled( batchUOMActive, "" );
+    
+    //batch shelf life
+    batchShelfLifeActive := ifexpr( isInit
+                                   ,not isBatchEdit //when isBatchEdit,default=disable all
+                                   ,CheckBoxBatchEditShelfLife.Checked() 
+                                  );
+    CheckBoxHasShelfLife.Enabled( batchShelfLifeActive, "" );
+    EditFieldShelfLife.Enabled( batchShelfLifeActive
+                                and CheckBoxHasShelfLife.Checked()
+                                , "" );
+    //batch maturation
+    batchMaturationActive := ifexpr( isInit
+                                   ,not isBatchEdit //when isBatchEdit,default=disable all
+                                   ,CheckBoxBatchEditMaturation.Checked() 
+                                  );
+    CheckBoxHasMaturation.Enabled( batchMaturationActive, "" );
+    EditFieldMaturation.Enabled( batchMaturationActive
+                                and CheckBoxHasMaturation.Checked()
+                                , "" );
+    
+    //batch by-product
+    batchByProductActive := ifexpr( isInit
+                                   ,not isBatchEdit //when isBatchEdit,default=disable all
+                                   ,CheckBoxBatchEditByProduct.Checked() 
+                                  );
+    CheckBoxIsByProduct.Enabled( batchByProductActive, "" );
+    
+    
+    //batch exclude optimizer
+    batchExcludeOptiActive := ifexpr( isInit
+                                     ,not isBatchEdit //when isBatchEdit,default=disable all
+                                     ,CheckBoxBatchEditExcludeFromOptimizer.Checked() 
+                                    );
+    CheckBoxExcludeFromOptimizer.Enabled( batchExcludeOptiActive
+                                          and not CheckBoxIsPlannedAfterOptimization.Checked()
+                                          , "" );
+    CheckBoxIsPlannedAfterOptimization.Enabled( batchExcludeOptiActive
+                                                and CheckBoxExcludeFromOptimizer.Checked()
+                                                , "" );
+    
+    //batch isexcludedfromfulfillmentkpi
+    batchByIsExcludedFulfillmentKPIActive := ifexpr( isInit
+                                                     ,not isBatchEdit //when isBatchEdit,default=disable all
+                                                     ,CheckboxBatchEditExcludeFromFulfillmentKPI.Checked() 
+                                                    );
+    CheckboxIsExcludedFromFulfillmentKPI.Enabled( batchByIsExcludedFulfillmentKPIActive, "" );
+    
+    //batch Note
+    batchNoteActive:= ifexpr( isInit
+                              ,not isBatchEdit //when sBatchEdit,default=disable all
+                              ,CheckBoxBatchEditNote.Checked() 
+                            ); 
+    EditFieldNotes.Enabled( batchNoteActive, "" );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/_ROOT_Component_DialogCreateEditProduct.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/_ROOT_Component_DialogCreateEditProduct.def
new file mode 100644
index 0000000..2ffb3c6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditProduct/_ROOT_Component_DialogCreateEditProduct.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: LibMacroPlannerWebUI
+OrphanComponent DialogCreateEditProduct #extension
+{
+  Children:
+  [
+    #child: pnlContent
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
new file mode 100644
index 0000000..2752b5b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelExport
+{
+  #keys: '[415136.0.834352718]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonExport
+    {
+      #keys: '[415136.0.834352737]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def
new file mode 100644
index 0000000..5779852
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelFinancialProductionReportHeader
+{
+  #keys: '[415136.0.834352344]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelFinancialProductionReportSearch
+    #child: PanelFinancialProductionReportOperation
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def
new file mode 100644
index 0000000..7d1a944
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component PanelFinancialProductionReportOperation
+{
+  #keys: '[415136.0.834352420]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelFinancialProductionReportOperation
+    {
+      #keys: '[415136.0.834352468]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        NumberOfColumns: 15
+        Taborder: 0
+        Text: 'Production import'
+      ]
+    }
+    Component ButtonProductionImport
+    {
+      #keys: '[415136.0.834352491]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonProductionExport
+    {
+      #keys: '[415136.0.834352534]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def
new file mode 100644
index 0000000..9acdc9a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component PanelFinancialProductionReportSearch
+{
+  #keys: '[415136.0.834352398]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelUnit
+    #child: PanelGeneration
+    #child: PanelMQBMLB
+    #child: PanelPower
+    #child: PanelExport
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportTable.def
new file mode 100644
index 0000000..19a477e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component PanelFinancialProductionReportTable
+{
+  #keys: '[415136.0.834352365]'
+  BaseType: 'WebPanel'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def
new file mode 100644
index 0000000..3161a19
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelGeneration
+{
+  #keys: '[415136.0.834352628]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[415136.0.834850709]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def
new file mode 100644
index 0000000..8bdd3ca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMQBMLB
+{
+  #keys: '[415136.0.834352657]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.834850906]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def
new file mode 100644
index 0000000..d027e3a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelPower
+{
+  #keys: '[415136.0.834352679]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslPower
+    {
+      #keys: '[415136.0.834851149]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Power'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def
new file mode 100644
index 0000000..451f699
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelUnit
+{
+  #keys: '[415136.0.834352594]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslUnit
+    {
+      #keys: '[415136.0.834851281]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Unit'
+        Strings: '<All>;闀挎槬;澶ц繛'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
new file mode 100644
index 0000000..13d7fd4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonExport
+Response OnClick () id:Response_PanelExport_ButtonExport_OnClick
+{
+  #keys: '[415136.0.834850599]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialProductionSource::Download( MacroPlan );
+      
+      Application.Download( "Financial productions.xlsx", binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
new file mode 100644
index 0000000..176b03b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelFinancialProductionReportOperation/ButtonProductionExport
+Response OnClick () id:Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnClick
+{
+  #keys: '[415136.0.834850519]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialProductionSource::DownloadTemplate( MacroPlan );
+      
+      Application.Download( "Financial productions.xlsx", binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def
new file mode 100644
index 0000000..03863b1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: PanelFinancialProductionReportOperation/ButtonProductionImport
+Response OnClick () id:Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnClick
+{
+  #keys: '[415136.0.836011369]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          source := FinancialProductionSource::Upload( MacroPlan, webFileBinaryData, fileName );
+          source.ReadStructure();
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..f0a61ca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelGeneration/ddslGeneration
+Response OnCreated () id:Response_PanelGeneration_ddslGeneration_OnCreated
+{
+  #keys: '[415136.0.834850727]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..69c8279
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB/ddslMQBMLB
+Response OnCreated () id:Response_PanelMQBMLB_ddslMQBMLB_OnCreated
+{
+  #keys: '[415136.0.834851070]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.MQBMLB() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def
new file mode 100644
index 0000000..08abda9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelPower/ddslPower
+Response OnCreated () id:Response_PanelPower_ddslPower_OnCreated
+{
+  #keys: '[415136.0.834851166]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Power() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
new file mode 100644
index 0000000..aee99fe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormFinancialProductionReport
+{
+  #keys: '[415136.0.834352278]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelFinancialProductionReportHeader
+    #child: PanelFinancialProductionReportTable
+  ]
+  Properties:
+  [
+    Image: 'DOCUMENT_REFRESH'
+    Title: 'Financial production report'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def"
new file mode 100644
index 0000000..5cb823f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component ListProduct id:ListProduct_844 #extension
+{
+  Children:
+  [
+    Component DataSetLevelRootProduct #extension
+    {
+      Children:
+      [
+        Component DataSetLevelChildProduct #extension
+        {
+          Properties:
+          [
+            Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Generation","title":"Generation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Generation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MQBMLB","title":"MQBMLB","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MQBMLB"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Power","title":"Power","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Power"}}]'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Generation","title":"Generation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Generation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MQBMLB","title":"MQBMLB","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MQBMLB"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Power","title":"Power","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Power"}}]'
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def
new file mode 100644
index 0000000..907c5e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component PanelList #extension
+{
+  Children:
+  [
+    #child: ListProduct_844
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def
new file mode 100644
index 0000000..c44a756
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: LibMacroPlannerWebUI
+OrphanComponent FormProducts #extension
+{
+  Children:
+  [
+    #child: PanelList
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Financial_production_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Financial_production_report_view.vw
new file mode 100644
index 0000000..520b3cf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Financial_production_report_view.vw
@@ -0,0 +1,75 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormFinancialProductionReport
+      {
+        title: 'QMacroPlanner::FormFinancialProductionReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormFinancialProductionReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormFinancialProductionReport_PanelFinancialProductionReportHeader
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelFinancialProductionReportSearch
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelUnit
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelGeneration
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelMQBMLB
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelPower
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelFinancialProductionReportOperation
+          {
+            sizeRatio: 1
+          }
+          FormFinancialProductionReport_PanelFinancialProductionReportTable
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 16
+    image: 'DOCUMENT_REFRESH'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Financial_production_report_view'
+  name: 'Financial production report view'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3