From 793923d88f0a0168b1e365e06202784b4089c717 Mon Sep 17 00:00:00 2001
From: yanweiyuan3 <yanweiyuan3@gmail.com>
Date: 星期三, 20 九月 2023 18:32:27 +0800
Subject: [PATCH] Order Lock frontend develop

---
 _Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl                                                                                   |    8 
 _Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def                                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def                                         |   39 
 _Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock#1.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning#679.def                                    |  210 ++++++++
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def                                             |   17 
 _Main/UI/MacroPlannerWebApp/Views/OrderLock.vw                                                                                       |  351 +++++++++++++
 _Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def                  |   43 +
 _Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader#545.def                                           |  125 ++++
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning#1.def                           |   57 ++
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def              |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def         |   20 
 _Main/BL/Type_OrderLockLog/Attribute_Price.qbl                                                                                       |    7 
 _Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl                                                                                   |    7 
 _Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl                                                                             |    7 
 _Main/BL/Type_OrderLockLog/Attribute_CustomerName#23.qbl                                                                             |    7 
 _Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def                                                |   55 ++
 _Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def              |   58 ++
 _Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl                                                                            |    7 
 _Main/BL/Type_OrderLockLog/Attribute_End.qbl                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def |   51 +
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock#844.def                                                  |   42 +
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def |   51 +
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def  |   69 ++
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def                  |   30 +
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning#1.def                         |   10 
 _Main/BL/Type_OrderLockLog/Attribute_IsFirmed#2.qbl                                                                                  |    7 
 _Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock#1.def                                         |   10 
 _Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl                                                                               |   10 
 _Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl                                                        |   23 
 _Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def                    |   34 +
 _Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix#780.def                                                    |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def                                                     |   16 
 42 files changed, 1,487 insertions(+), 25 deletions(-)

diff --git a/_Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl b/_Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl
new file mode 100644
index 0000000..cb254ef
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OrderLockLog_MacroPlan_MacroPlan_OrderLockLog
+{
+  #keys: '1[412960.0.217504333]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412960.0.217504335][412960.0.217504334][412960.0.217504336]'
+    Cardinality: '0to1'
+    ObjectDefinition: OrderLockLog
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OrderLockLog
+  {
+    #keys: '3[412960.0.217504338][412960.0.217504337][412960.0.217504339]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl b/_Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl
new file mode 100644
index 0000000..14a756a
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModify
+{
+  #keys: '3[412960.0.217504307][412960.0.217504306][412960.0.217504308]'
+  Description: '鏈�鍚庝慨鏀逛汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl b/_Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl
new file mode 100644
index 0000000..530eb19
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModifyTime
+{
+  #keys: '3[412960.0.217504317][412960.0.217504316][412960.0.217504318]'
+  Description: '鏈�鍚庢搷浣滄椂闂�'
+  ValueType: DateTime
+}
diff --git "a/_Main/BL/Type_OrderLockLog/Attribute_CustomerName\04323.qbl" "b/_Main/BL/Type_OrderLockLog/Attribute_CustomerName\04323.qbl"
new file mode 100644
index 0000000..77e60f5
--- /dev/null
+++ "b/_Main/BL/Type_OrderLockLog/Attribute_CustomerName\04323.qbl"
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerName
+{
+  #keys: '3[412960.0.217504426][412960.0.217504425][412960.0.217504427]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_End.qbl b/_Main/BL/Type_OrderLockLog/Attribute_End.qbl
new file mode 100644
index 0000000..bc7fd91
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_End.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute End
+{
+  #keys: '3[412960.0.217504488][412960.0.217504487][412960.0.217504489]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl b/_Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl
new file mode 100644
index 0000000..3f4c39b
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[412960.0.217504467][412960.0.217504466][412960.0.217504468]'
+  ValueType: Date
+}
diff --git "a/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl" "b/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl"
new file mode 100644
index 0000000..7594124
--- /dev/null
+++ "b/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl"
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[412960.0.217504477][412960.0.217504476][412960.0.217504478]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl b/_Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl
new file mode 100644
index 0000000..9e81f78
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModify
+{
+  #keys: '3[412960.0.217504501][412960.0.217504500][412960.0.217504502]'
+  Description: '鏈�鍚庝慨鏀逛汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl b/_Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl
new file mode 100644
index 0000000..8698211
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModifyTime
+{
+  #keys: '3[412960.0.217504498][412960.0.217504497][412960.0.217504499]'
+  Description: '鏈�鍚庢搷浣滄椂闂�'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl b/_Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl
new file mode 100644
index 0000000..fe37524
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[412960.0.217504386][412960.0.217504385][412960.0.217504387]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_Price.qbl b/_Main/BL/Type_OrderLockLog/Attribute_Price.qbl
new file mode 100644
index 0000000..b0c9e62
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[412960.0.217504457][412960.0.217504456][412960.0.217504458]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl b/_Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl
new file mode 100644
index 0000000..46b6f3b
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[412960.0.217504396][412960.0.217504395][412960.0.217504397]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl b/_Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl
new file mode 100644
index 0000000..5216b60
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[412960.0.217504437][412960.0.217504436][412960.0.217504438]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..8e484e2
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[412960.0.217504406][412960.0.217504405][412960.0.217504407]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl b/_Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..a344af9
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[412960.0.217504416][412960.0.217504415][412960.0.217504417]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..fccc2cb
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[412960.0.217504447][412960.0.217504446][412960.0.217504448]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl b/_Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl
new file mode 100644
index 0000000..6ef422d
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: LastModify
+}
diff --git a/_Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl b/_Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl
new file mode 100644
index 0000000..ac23238
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OrderLockLog
+{
+  #keys: '5[412960.0.217504330][412960.0.217504328][0.0.0][412960.0.217504329][412960.0.217504331]'
+  BaseType: Object
+  Description: '璁㈠崟閿佸畾鎿嶄綔鏃ュ織'
+  StructuredName: 'OrderLockLogs'
+}
diff --git a/_Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl b/_Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl
new file mode 100644
index 0000000..75d68aa
--- /dev/null
+++ b/_Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsOrderLocked
+{
+  #keys: '3[412960.0.212420059][412960.0.212420058][412960.0.212420060]'
+  Description: '璁㈠崟閿佸畾鐨勬槸鍚﹂攣瀹氱瓫閫夋潯浠�'
+  ValueType: String
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
new file mode 100644
index 0000000..17d2167
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListOrderLock id:ListOrderLock_844
+{
+  #keys: '[412960.0.217980651]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOrderLock743
+    {
+      #keys: '[412960.0.217980652]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[CustomerOrder]'
+        Description: '鑾峰彇璁㈠崟'
+        Source: 'DataHolderOrderLock'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageOrderLock_1
+    Component DataSetLevelOrderLock
+    {
+      #keys: '[412960.0.217980654]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuOrderLock_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsFirmed","title":"IsFirmed","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsFirmed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"First.AsPlanningBaseSalesDemandInPeriod.End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"First.AsPlanningBaseSalesDemandInPeriod.End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}}]'
+        ContextMenu: 'listContextMenuOrderLock'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
new file mode 100644
index 0000000..401adf5
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
@@ -0,0 +1,210 @@
+Quintiq file version 2.0
+Component MatrixEditorProductPlanning id:MatrixEditorProductPlanning_679
+{
+  #keys: '[412960.0.220270414]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellPISPIP
+    {
+      #keys: '[412960.0.220270415]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorPISPIP
+        {
+          #keys: '[412960.0.220270416]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[ProductInStockingPoint_MP]'
+            FixedFilter: 'not object.ProductInStockingPoint_MP().IsSystem() and object.ProductInStockingPoint_MP().IsLeaf()'
+            Source: 'ApplicationMacroPlanner.DataHolderPISP'
+            Taborder: 0
+            Transformation: 'Elements.ProductInStockingPointInPeriod'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'DisplaySupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
+        Column: 'Period_MP'
+        Row: 'ProductInStockingPoint_MP'
+        Taborder: 2
+      ]
+    }
+    Component MatrixEditorRowsPISP
+    {
+      #keys: '[412960.0.220270417]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorPISP
+        {
+          #keys: '[412960.0.220270418]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'CustomerOrder'
+            ExtractionMode: 'Selected'
+            FixedFilter: 'not object.IsSystem() and object.IsLeaf()'
+            Source: 'ListOrderLock'
+            Taborder: 0
+            Transformation: 'ProductInStockingPoint_MP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Product_MP.DisplayIndex;Name'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorColumnsPeriod
+    {
+      #keys: '[412960.0.220270419]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorPeriod
+        {
+          #keys: '[412960.0.220270420]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Period_MP]'
+            Source: 'ApplicationMacroPlanner.DataHolderPeriods'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Start'
+        SortCriteria: 'Start'
+        Taborder: 1
+      ]
+    }
+    Component UserConfigurableInformationMatrixEditorProductPlanning
+    {
+      #keys: '[412960.0.220270421]'
+      BaseType: 'WebUserConfigurableInformation'
+      Properties:
+      [
+        Identifier: 'Cell: PISPIP'
+        ObjectType: 'ProductInStockingPointInPeriod'
+        Taborder: 3
+        Text: 'Test text'
+        Tooltip: '<table><tr><td><b>SYNONYM(object.InventoryLevelEnd())</b></td><td>VALUE( MacroPlan::GetDisplayValue( object.InventoryLevelEnd() ) )</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td><b>Inventory holding cost </b></td><td>VALUE(object.TotalBaseInventoryHoldingCost())VALUE( \' \'+ object.ProductInStockingPoint_MP().StockingPoint_MP().Currency_MP().Symbol() )</td><td>VALUE( \'[\' + object.TotalBaseInventoryHoldingCostPerQuantity().Format(\'N(Dec(2))\') )</td><td>VALUE( object.ProductInStockingPoint_MP().StockingPoint_MP().Currency_MP().Symbol()  + \'/\' + object.ProductInStockingPoint_MP().UnitOfMeasure_MP().Name() + \']\' )  </td></tr><tr><td><b>SYNONYM(object.StockLevelInDays())</b></td><td>VALUE(object.StockLevelInDays)</td><td>day</td></tr><tr><td><b>Total supply </b></td><td>VALUE(object.SupplyQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Total demand </b></td><td>VALUE(object.GetDemandQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr><br><tr><td><b>Inventory start </b></td><td>VALUE( guard( MacroPlan::GetDisplayValue( object.InventoryLevelStartPISPIP().InventoryLevelEnd() ), 0.0 ) )</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Sales demand </b></td><td>VALUE(object.SalesDemandQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr><tr><td><b>New supply </b></td><td>VALUE(object.NewSupplyQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Dependent demand </b></td><td>VALUE(object.DependentDemandQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr><tr><td><b>Inventory supply </b></td><td>VALUE(object.InventorySupplyQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Fulfilled demand </b></td><td>VALUE(object.FulfilledDemandQuantity() )</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr></table><hr>VALUE( object.ImgHasFeedback() ) VALUE(  ifexpr( object.HasFeedback() , " Feedback message exist. Refer to Supply Planning matrix for details."  , "" )  )'
+      ]
+    }
+    #child: matrixEditorActionBarPageProductPlanning_1
+    #child: matrixeditorContextMenuProductPlanning_1
+  ]
+  Properties:
+  [
+    AllowAttributeConfiguration: true
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumnsPeriod'
+    ContextMenu: 'matrixeditorContextMenuProductPlanning'
+    Rows: 'MatrixEditorRowsPISP'
+    ShowEditability: true
+    ShowSingleAttribute: true
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick
+    {
+      #keys: '[412960.0.220270401]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[6763.0.7990336]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebButton_OnClick
+    {
+      #keys: '[412960.0.220270400]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[6763.0.7990409]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick_119
+    {
+      #keys: '[412960.0.220270399]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedrows
+        {
+          #keys: '[6763.0.7990482]'
+          Binding: 'this.SelectedRows()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebButton_OnClick_720
+    {
+      #keys: '[412960.0.220270398]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedrows
+        {
+          #keys: '[6763.0.7990555]'
+          Binding: 'this.SelectedRows()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick_640
+    {
+      #keys: '[412960.0.220270397]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedcolumns
+        {
+          #keys: '[6763.0.7990628]'
+          Binding: 'this.SelectedColumns()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebButton_OnClick_582
+    {
+      #keys: '[412960.0.220270396]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedcolumns
+        {
+          #keys: '[6763.0.7990701]'
+          Binding: 'this.SelectedColumns()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix\043780.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix\043780.def"
new file mode 100644
index 0000000..3aee833
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix\043780.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMatrix id:PanelMatrix_780
+{
+  #keys: '[412960.0.220270412]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DataHolderSelectedPISPIPsInProductPlanningMatrix
+    {
+      #keys: '[412960.0.220270413]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductInStockingPointInPeriod]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: MatrixEditorProductPlanning_679
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def
new file mode 100644
index 0000000..8565401
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelOrderLock
+{
+  #keys: '[412960.0.212571359]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelOrderLockHeader_545
+    #child: PanelOrderLockOrder
+    #child: PanelOrderLockPlanning
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader\043545.def"
new file mode 100644
index 0000000..4ff0600
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader\043545.def"
@@ -0,0 +1,125 @@
+Quintiq file version 2.0
+Component PanelOrderLockHeader id:PanelOrderLockHeader_545
+{
+  #keys: '[412960.0.212571440]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelOrderLockHeaderVersion
+    {
+      #keys: '[412960.0.212571441]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: 'MPS鐗堟湰鍚嶇О'
+        Label: 'MPS鐗堟湰锛�'
+        Taborder: 0
+      ]
+    }
+    Component EditFieldOrderLockHeader
+    {
+      #keys: '[412960.0.212571468]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Description: '妯$硦鎼滅储绛涢�夋'
+        PlaceHolder: '妯$硦鎼滅储'
+        Taborder: 1
+      ]
+    }
+    Component DateSelectorOrderLockHeaderCustomerOrder
+    {
+      #keys: '[412960.0.212571527]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 2023-01-01
+        Description: '瀹㈡埛闇�姹傛椂闂�'
+        Label: '瀹㈡埛闇�姹傛椂闂�'
+        Taborder: 3
+      ]
+    }
+    Component DateSelectorOrderLockHeaderPlanDeliver
+    {
+      #keys: '[412960.0.212571611]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 2023-01-01
+        Description: '璁″垝浜や粯鏃堕棿'
+        Label: '璁″垝浜や粯鏃堕棿'
+        Taborder: 4
+      ]
+    }
+    Component ButtonOrderLockHeader
+    {
+      #keys: '[412960.0.212571669]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '妯$硦鎼滅储鎸夐挳'
+        Label: '鎼滅储'
+        Taborder: 2
+      ]
+    }
+    Component RadioButtonGroupOrderLockHeader
+    {
+      #keys: '[412960.0.212571696]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        BoundValue: 'all'
+        ButtonLabels: '宸查攣瀹�;鏈攣瀹�;鍏ㄩ儴'
+        ButtonValues: 'locked;unlocked;all'
+        DataBinding: 'DataHolderOrderLockGlobal.Data.IsOrderLocked'
+        Description: '鏄惁閿佸畾鐨勭偣閫夋'
+        Orientation: 'horizontal'
+        Taborder: 5
+      ]
+    }
+    Component ButtonOrderLockHeaderLock
+    {
+      #keys: '[412960.0.221760476]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '璁㈠崟閿佸畾'
+        Label: '閿佸畾'
+        Taborder: 7
+      ]
+    }
+    Component ButtonOrderLockHeaderUnlock
+    {
+      #keys: '[412960.0.221760488]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '璁㈠崟瑙i攣'
+        Label: '瑙i攣'
+        Taborder: 8
+      ]
+    }
+    Component ButtonOrderLockHeaderClear
+    {
+      #keys: '[412960.0.223264324]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '娓呴櫎绛涢�夐」'
+        Label: '娓呴櫎绛涢��'
+        Taborder: 6
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '鏀剧疆lable锛屾寜閽瓑'
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def
new file mode 100644
index 0000000..3a8891a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelOrderLockOrder
+{
+  #keys: '[412960.0.217980613]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOrderLock_844
+  ]
+  Properties:
+  [
+    Description: '璁㈠崟淇℃伅灞曠ず'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def
new file mode 100644
index 0000000..e908a3c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+Component PanelOrderLockPlanning
+{
+  #keys: '[412960.0.220270252]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelMatrix_780
+  ]
+  Properties:
+  [
+    Border: true
+    Description: '璁㈠崟瀵瑰簲鐨勮鍒掓暟鎹�'
+    Taborder: 2
+    Title: '璁″垝璇︽儏'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock\0431.def"
new file mode 100644
index 0000000..a529251
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOrderLock id:listActionBarPageOrderLock_1
+{
+  #keys: '[412960.0.217980653]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock\0431.def"
new file mode 100644
index 0000000..bc2e00d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuOrderLock id:listContextMenuOrderLock_1
+{
+  #keys: '[412960.0.217980655]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning\0431.def"
new file mode 100644
index 0000000..4e41b90
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageProductPlanning id:matrixEditorActionBarPageProductPlanning_1
+{
+  #keys: '[412960.0.220270422]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 5
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning\0431.def"
new file mode 100644
index 0000000..79d4472
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning\0431.def"
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuProductPlanning id:matrixeditorContextMenuProductPlanning_1
+{
+  #keys: '[412960.0.220270423]'
+  BaseType: 'matrixeditorContextMenu'
+  Children:
+  [
+    Component MenuCopy
+    {
+      #keys: '[138034.3.1296123318]'
+      BaseType: 'MenuCopy'
+      IsDerived: true
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component MenuSeparator3
+    {
+      #keys: '[412960.0.220270424]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 1
+      ]
+    }
+    Component MenuLock
+    {
+      #keys: '[412960.0.220270427]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        DelegationID: 'ActionBarPlan_Lock'
+        Image: 'LOCK'
+        Taborder: 3
+        Title: 'Lock'
+      ]
+    }
+    Component MenuUnlock
+    {
+      #keys: '[412960.0.220270428]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        DelegationID: 'ActionBarPlan_Unlock'
+        Image: 'LOCK_OPEN'
+        Taborder: 4
+        Title: 'Unlock'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def
new file mode 100644
index 0000000..38cee0b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnClick (
+  structured[ProductInStockingPointInPeriod] selection
+) id:Response_MatrixEditorProductPlanning_679_MenuLock_OnClick
+{
+  #keys: '[412960.0.220270410]'
+  CanBindMultiple: false
+  DefinitionID => /MatrixEditorProductPlanning_679/Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick
+  Initiator: 'MenuLock'
+  Precondition:
+  [*
+    return ProductInStockingPointInPeriod::CanLockUnlock( selection, feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // Lock total supply quantity for PISPIPs
+      // This is a workaround, we supposedly set the bindingtype of selection as the subtype, but
+      // the response would have trouble handling multiple cell selection, so for now, we bind the base type
+      // then select the subtype
+      
+      
+      pispipLeafs := selectset( selection, 
+                                Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), 
+                                pispip, 
+                                true );
+      
+      ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, true, true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def
new file mode 100644
index 0000000..7615c08
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnClick (
+  structured[ProductInStockingPointInPeriod] selection
+) id:Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick
+{
+  #keys: '[412960.0.220270407]'
+  CanBindMultiple: false
+  DefinitionID => /MatrixEditorProductPlanning_679/Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick
+  Initiator: 'MenuUnlock'
+  Precondition:
+  [*
+    return ProductInStockingPointInPeriod::CanLockUnlock( selection, feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // Unlock the total supply quantity of pispips
+      // This is a workaround, we supposedly set the bindingtype of selection as the subtype, but
+      // the response would have trouble handling multiple cell selection, so for now, we bind the base type
+      // then select the subtype
+      
+      pispipLeafs := selectset( selection, Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispip, 
+                                true );
+      ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, false, true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def
new file mode 100644
index 0000000..2dea2ca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnCheckEditability (
+  structured[ProductInStockingPointInPeriodPlanning] cell,
+  Real value
+) id:Response_MatrixEditorProductPlanning_679_OnCheckEditability
+{
+  #keys: '[412960.0.220270404]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnCheckEditability'
+  QuillAction
+  {
+    Body:
+    [*
+      //Precondition
+      attributes := construct( Strings );
+      attributes.Add(focusedattribute);
+      isSupply_o := false;
+      feedback :="";
+      
+      cond := MacroPlan.CanPlan( feedback )
+              and ProductInStockingPointInPeriod::CanEnterSupplyQuantity( feedback,
+                                                                          cell,
+                                                                          attributes,
+                                                                          isSupply_o );
+      if( cond )
+      {
+        if( isSupply_o )
+        {
+          periods := selectset( cell, Elements.Period_MP, period, true );
+          cond := ScenarioManager::CanStartSmartPlan( ScenarioManager,
+                                                      DataHolderActiveScenario.Data(),
+                                                      true,
+                                                      periods,
+                                                      feedback );
+        }                                            
+      }
+      editinfo.CanEdit( cond );
+      editinfo.UserHint( feedback );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def
new file mode 100644
index 0000000..d90381f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnUserSelectionChanged (
+  structured[ProductInStockingPointInPeriod] selection
+) id:Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged
+{
+  #keys: '[412960.0.220270402]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //Assign selection to data holder
+      DataHolderSelectedPISPIPsInProductPlanningMatrix.Data( selection.Copy() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def
new file mode 100644
index 0000000..2adc0a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/ButtonOrderLockHeaderClear
+Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick
+{
+  #keys: '[412960.0.223264347]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      EditFieldOrderLockHeader.Text( "" );
+      DateSelectorOrderLockHeaderCustomerOrder.Date( Date::Construct(2023,1,1) );
+      DateSelectorOrderLockHeaderPlanDeliver.Date( Date::Construct(2023,1,1) );
+      RadioButtonGroupOrderLockHeader.BoundValue( "all" );
+      DataExtractorOrderLock.FixedFilter( "true" );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def
new file mode 100644
index 0000000..ddeca1c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/ButtonOrderLockHeader
+Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick
+{
+  #keys: '[412960.0.221841965]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      thisfilter := "( object.OrderID().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )"  
+      + " or " + "object.ProductID().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )"  
+      + " or " + "object.UnitOfMeasureName().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )" 
+      + " or " + "object.StockingPointID().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )" 
+      + " or " + "object.CustomerName().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )" 
+      + " or " + "object.SalesSegmentName().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " ) )" ;
+      
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "OrderID()", 0 ) >= 0 ){
+          if( newfilter = "" ){
+            newfilter := thisfilter;
+            }else{
+              newfilter := newfilter + " and " + thisfilter;
+              }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( newfilter = "" ){
+          newfilter := thisfilter;
+          }else{
+            newfilter := newfilter + " and " + thisfilter;
+            }
+        }
+      
+      info( newfilter );
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def
new file mode 100644
index 0000000..5fa0f71
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/DateSelectorOrderLockHeaderCustomerOrder
+Response OnChanged () id:Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_OnChanged
+{
+  #keys: '[412960.0.221842202]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "EndDate()", 0 ) >= 0 ){
+          if( newfilter = "" ){
+            newfilter := "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+            }else{
+              newfilter := newfilter + " and " + "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+              }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( newfilter = "" ){
+          newfilter := "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+          }else{
+            newfilter := newfilter + " and " + "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+            }
+        }
+      
+      info( newfilter );
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def
new file mode 100644
index 0000000..a5fda9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/DateSelectorOrderLockHeaderPlanDeliver
+Response OnChanged () id:Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnChanged
+{
+  #keys: '[412960.0.221842649]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "End()", 0 ) >= 0 and filter.FindString( "EndDate()", 0 ) < 0 ){
+          if( newfilter = "" ){
+            newfilter := "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+            }else{
+              newfilter := newfilter + " and " + "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+              }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( newfilter = "" ){
+          newfilter := "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+          }else{
+            newfilter := newfilter + " and " + "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+            }
+        }
+      
+      info( newfilter );
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
new file mode 100644
index 0000000..5e6da38
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
@@ -0,0 +1,69 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/RadioButtonGroupOrderLockHeader
+Response OnChanged () id:Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged
+{
+  #keys: '[412960.0.221843171]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "IsFirmed()", 0 ) >= 0 ){
+          if( this.BoundValue() = "locked" ){
+            if( newfilter = "" ){
+              newfilter := "( object.IsFirmed() = true )";
+              }else{
+                newfilter := newfilter + " and " + "( object.IsFirmed() = true )";
+                }
+            }else if( this.BoundValue() = "unlocked" ){
+              if( newfilter = "" ){
+                newfilter := "( object.IsFirmed() = false )";
+                }else{
+                  newfilter := newfilter + " and " + "( object.IsFirmed() = false )";
+                  }
+              }else if( this.BoundValue() = "all" ){
+                newfilter := newfilter + "";
+                }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( this.BoundValue() = "locked" ){
+          if( newfilter = "" ){
+            newfilter := "( object.IsFirmed() = true )";
+            }else{
+              newfilter := newfilter + " and " + "( object.IsFirmed() = true )";
+              }
+          }else if( this.BoundValue() = "unlocked" ){
+            if( newfilter = "" ){
+              newfilter := "( object.IsFirmed() = false )";
+              }else{
+                newfilter := newfilter + " and " + "( object.IsFirmed() = false )";
+                }
+            }else if( this.BoundValue() = "all" ){
+              newfilter := newfilter + "";
+              }
+        }
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
new file mode 100644
index 0000000..6834735
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
@@ -0,0 +1,55 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormOrderLock
+{
+  #keys: '[412960.0.212511678]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelOrderLock
+    Component DataHolderOrderLock
+    {
+      #keys: '[412960.0.212571799]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[CustomerOrder]*'
+      Children:
+      [
+        Component DataExtractorOrderLock
+        {
+          #keys: '[412960.0.212571816]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Description: '鎶藉彇璁㈠崟鏁版嵁'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'SalesDemand.astype(CustomerOrder)'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    Component DataHolderOrderLockGlobal
+    {
+      #keys: '[412960.0.212571897]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[Scenario]*'
+      Properties:
+      [
+        Description: '瀛樺偍鏄惁閿佸畾鐨勭瓫閫夋潯浠�'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '璁㈠崟閿佸畾瑙i攣鐣岄潰'
+    Image: 'DATA_LOCK'
+    Title: '璁㈠崟閿佸畾瑙i攣鐣岄潰'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
index 8fc6655..b99ab6c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
@@ -5,17 +5,6 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component LabelVersionOfSOPHeader
-    {
-      #keys: '[412960.0.138000861]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Description: '鐗堟湰鍙峰睍绀哄'
-        FixedSize: false
-        Taborder: 0
-      ]
-    }
     Component ButtonVersionOfSOPHeaderFresh
     {
       #keys: '[412960.0.138000879]'
@@ -25,7 +14,7 @@
         ButtonSize: 'compact'
         Description: '鐢ㄤ簬鍒锋柊鍚勪簨涓氶儴褰撳墠鐗堟湰鍙戝竷鐘舵�佺殑鎸夐挳'
         Label: '鍒锋柊'
-        Taborder: 2
+        Taborder: 1
       ]
     }
     Component ButtonVersionOfSOPHeaderCopy
@@ -37,18 +26,7 @@
         ButtonSize: 'compact'
         Description: '鐢ㄤ簬澶嶅埗閫変腑鐨勭増鏈叏閲忕増鏈彿鐨勬寜閽�'
         Label: '鍏ㄩ噺鐗堟湰鍙峰鍒�'
-        Taborder: 3
-      ]
-    }
-    Component LabelVersionOfSOPHeaderVersionID
-    {
-      #keys: '[412960.0.140790247]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Description: 'rootversionid'
-        Taborder: 1
-        Visible: false
+        Taborder: 2
       ]
     }
     Component ButtonVersionOfSOPHeaderRelease
@@ -60,10 +38,21 @@
         ButtonSize: 'compact'
         Description: '鍙戝竷涓�涓柊鐗堟湰'
         Label: '娴嬭瘯鐢ㄧ増鏈彂甯�'
-        Taborder: 4
+        Taborder: 3
         Visible: false
       ]
     }
+    Component LabelVersionOfSOPHeader
+    {
+      #keys: '[412960.0.138000861]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: '鐗堟湰鍙峰睍绀哄'
+        FixedSize: false
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw b/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
new file mode 100644
index 0000000..42bce1a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 277
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 106
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 2
+    image: 'DOCUMENT_LOCK'
+    description: ''
+  }
+  formatversion: 2
+  id: 'OrderLock'
+  name: 'OrderLock'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3