From 9c496f75e6562345abcb3e7f18dfa637bb46d3c6 Mon Sep 17 00:00:00 2001
From: limj <limj@taizhitech.com>
Date: 星期四, 21 九月 2023 20:15:59 +0800
Subject: [PATCH] merge

---
 _Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl                                                                     |    6 
 _Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl                                                                               |    7 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl                                                                         |   19 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def                           |   22 
 _Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def               |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def                          |   10 
 _Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl                                                                                   |    6 
 _Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl                                                                                 |   43 
 _Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl                                                                                 |    7 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def             |   22 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl                                                                                 |   25 
 _Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def                               |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def             |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def                           |   28 
 _Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl                                                                               |    7 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails#743.def                                 |   41 
 _Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl                                                                           |    6 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl                                                          |   20 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl                                                                       |    7 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl                                                                      |    7 
 _Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl                                                                            |    7 
 _Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def           |   21 
 _Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp                                                                           |    2 
 _Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl                                       |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def                              |   59 +
 _Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl                                                                            |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def  |   24 
 _Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl                                       |   23 
 _Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl                                                                        |    7 
 _Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl                                                                               |    7 
 _Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl                                                                    |    9 
 _Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def   |   21 
 _Main/BL/Type_PriorityResult/Attribute_Customer.qbl                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton#713.def                             |  107 +
 _Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw                                                                                      | 2258 ++++++++++++++++++++++++++++++++++++++
 _Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl                                                                                |    9 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl                                                                      |    6 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl                                                           |   14 
 _Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl                                                                         |   21 
 _Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl                                                                                    |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def                             |   10 
 _Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def                                                |   15 
 _Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl                                                                         |    7 
 _Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl                                                         |   23 
 _Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl                                                                                  |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def           |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def                                           |   33 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def                                                 |   41 
 _Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl                                                                                |    6 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl                                                                          |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def                                      |   10 
 _Main/BL/Type_PriorityResult/Attribute_ProductID.qbl                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def  |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails#633.def                                     |   46 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def    |   21 
 _Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl                                                                                 |    7 
 _Main/BL/Type_PriorityResult/Attribute_Quantity.qbl                                                                                       |    7 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl                                                                |    7 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl                                                                            |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def           |   22 
 _Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl                                                                                     |    7 
 _Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl                                                                                |    7 
 _Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl                                                                          |    7 
 77 files changed, 3,450 insertions(+), 1 deletions(-)

diff --git a/_Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl b/_Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl
new file mode 100644
index 0000000..a9e64fe
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_PriorityResultBusinessTypeDetail
+{
+  #keys: '1[414382.0.504275181]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PriorityResult
+  {
+    #keys: '3[414382.0.504275183][414382.0.504275182][414382.0.504275184]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityResultBusinessTypeDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityResultBusinessTypeDetail
+  {
+    #keys: '3[414382.0.504275186][414382.0.504275185][414382.0.504275187]'
+    Cardinality: '1toN'
+    ObjectDefinition: PriorityResult
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl b/_Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl
new file mode 100644
index 0000000..bdd10c4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityResultGroupDetail
+{
+  #keys: '1[414382.0.504275195]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PriorityResult
+  {
+    #keys: '3[414382.0.504275197][414382.0.504275196][414382.0.504275198]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityResultGroupDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityResultGroupDetail
+  {
+    #keys: '3[414382.0.504275200][414382.0.504275199][414382.0.504275201]'
+    Cardinality: '1toN'
+    ObjectDefinition: PriorityResult
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl b/_Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl
new file mode 100644
index 0000000..2a02cb7
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityResult_MacroPlan_MacroPlan_PriorityResult
+{
+  #keys: '1[414382.0.504275161]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414382.0.504275163][414382.0.504275162][414382.0.504275164]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityResult
+  {
+    #keys: '3[414382.0.504275166][414382.0.504275165][414382.0.504275167]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
new file mode 100644
index 0000000..9434404
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCoeffcientByName (
+  MacroPlan owner,
+  String businessType,
+  String name
+) as Real
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    
+    data := selectobject( owner,PriorityFactor,p,
+                          p.BusinessType() = businessType and p.Name() = name
+                          )
+    
+    return data.Coefficient();
+  *]
+}
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
new file mode 100644
index 0000000..98115c4
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNameList (
+  MacroPlan owner,
+  String businessType
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    value := "";
+    
+    strList := selectuniquevalues(  owner,PriorityFactor,p,
+                                   p.BusinessType() = businessType,
+                                    p.Name()
+                                   );
+    
+    if( not isnull( strList )  )
+    {
+       value := strList.Concatenate( ";" );
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
new file mode 100644
index 0000000..55e5bd0
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RollBackStr (
+  MacroPlan owner,
+  String businessType,
+  String stringData
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    value := stringData;
+    
+    symbolList := construct( structured[String]);
+    symbolList.Add( "+")
+    symbolList.Add( "-")
+    symbolList.Add( "x")
+    symbolList.Add( "/")
+    symbolList.Add( "(")
+    symbolList.Add( ")")
+    
+    traverse( symbolList,Elements,e)
+    {
+        if( stringData.EndsWith( e ))
+        {
+             end := stringData.Length() - e.Length();
+             value := stringData.SubString( 0,end);
+        } 
+    }
+    
+    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);       
+    traverse( nameList,Elements,e)
+    {
+        if( stringData.EndsWith( e.Name()))
+        {
+             end := stringData.Length() - e.Name().Length();
+             value := stringData.SubString( 0,end);
+        } 
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..16f7189
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414382.0.504275379][414382.0.504275378][414382.0.504275380]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl b/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
new file mode 100644
index 0000000..21774fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414382.0.504275376][414382.0.504275375][414382.0.504275377]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl b/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..afabecd
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414382.0.504275385][414382.0.504275384][414382.0.504275386]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl b/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
new file mode 100644
index 0000000..5088806
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DemandDate
+{
+  #keys: '3[414382.0.504275370][414382.0.504275369][414382.0.504275371]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl b/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
new file mode 100644
index 0000000..6f38dd5
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityResultScore
+{
+  #keys: '3[414382.0.504275396][414382.0.504275395][414382.0.504275397]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl b/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
new file mode 100644
index 0000000..b9b828f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414382.0.504275367][414382.0.504275366][414382.0.504275368]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl b/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
new file mode 100644
index 0000000..b18ef2c
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414382.0.504275361][414382.0.504275360][414382.0.504275362]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..1ade98f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414382.0.504275382][414382.0.504275381][414382.0.504275383]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl b/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..db04a7f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414382.0.504275364][414382.0.504275363][414382.0.504275365]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..8877500
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414382.0.504275373][414382.0.504275372][414382.0.504275374]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl
new file mode 100644
index 0000000..1672b03
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: BusinessType
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..fbb83fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..b2012de
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl b/_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl
new file mode 100644
index 0000000..cd7846f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcPriorityResultScore
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    
+    businessTypeScore := max( this,PriorityResultBusinessTypeDetail,p,
+                              p.PriorityTotalScore()
+                              );
+    
+    groupScore := max( this,PriorityResultGroupDetail,p,
+                       p.PriorityTotalScore()
+                       );
+    
+    value := maxvalue( businessTypeScore,groupScore);
+    
+    this.PriorityResultScore( value );
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl b/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
new file mode 100644
index 0000000..3d6983a
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PriorityResult
+{
+  #keys: '5[414382.0.504275125][414382.0.504275123][0.0.0][414382.0.504275124][414382.0.504275126]'
+  BaseType: Object
+  StructuredName: 'PriorityResults'
+}
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
new file mode 100644
index 0000000..5e14913
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CheckCanTopping (
+  PriorityResultBusinessTypeDetail businessTypeDetails
+) as Boolean
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    groupDetails := selectset( businessTypeDetails.PriorityResult(),PriorityResultGroupDetail,p,true);
+    
+    return isnull( groupDetails);
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
new file mode 100644
index 0000000..8030509
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod EmergencyTopping (
+  MacroPlan owner,
+  PriorityResultBusinessTypeDetail businessTypeDetails
+)
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    
+    
+    maxPriorityResult := max( owner,PriorityResult,p,
+                              p.PriorityResultScore()
+                              );
+    
+    topScore := maxPriorityResult + 1;
+    businessTypeDetails.PriorityTotalScore(topScore);
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl
new file mode 100644
index 0000000..77e783e
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization PriorityResultBusinessTypeDetail
+{
+  #keys: '2[414382.0.504275146][414382.0.504275145]'
+  Description: '浜嬩笟閮ㄤ紭鍏堢骇缁撴灉鏄庣粏'
+  Parent: PriorityResultDetail
+  StructuredName: 'PriorityResultBusinessTypeDetails'
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..0d853fd
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414382.0.504275420][414382.0.504275419][414382.0.504275421]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
new file mode 100644
index 0000000..e5c3e9e
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414382.0.504275411][414382.0.504275410][414382.0.504275412]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..3afa6f2
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414382.0.504275429][414382.0.504275428][414382.0.504275430]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
new file mode 100644
index 0000000..8218754
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DemandDate
+{
+  #keys: '3[414382.0.504275423][414382.0.504275422][414382.0.504275424]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
new file mode 100644
index 0000000..30c7925
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityFactorGradingName
+{
+  #keys: '3[414382.0.504275468][414382.0.504275467][414382.0.504275469]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
new file mode 100644
index 0000000..2941275
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityFactorName
+{
+  #keys: '3[414382.0.504275458][414382.0.504275457][414382.0.504275459]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
new file mode 100644
index 0000000..58f721a
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityPolicyName
+{
+  #keys: '3[414382.0.504275439][414382.0.504275438][414382.0.504275440]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
new file mode 100644
index 0000000..7ef6592
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityResultScore
+{
+  #keys: '3[414382.0.504275426][414382.0.504275425][414382.0.504275427]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl
new file mode 100644
index 0000000..6be72f0
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityTotalScore
+{
+  #keys: '3[414382.0.504275485][414382.0.504275484][414382.0.504275486]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
new file mode 100644
index 0000000..6da2ce3
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414382.0.504275414][414382.0.504275413][414382.0.504275415]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..96cedff
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414382.0.504275435][414382.0.504275434][414382.0.504275436]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..6f0a2fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414382.0.504275417][414382.0.504275416][414382.0.504275418]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7abadad
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414382.0.504275432][414382.0.504275431][414382.0.504275433]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl
new file mode 100644
index 0000000..1672b03
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: BusinessType
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..fbb83fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..b2012de
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl b/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
new file mode 100644
index 0000000..26b2f55
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PriorityResultDetail
+{
+  #keys: '5[414382.0.504275135][414382.0.504275133][0.0.0][414382.0.504275134][414382.0.504275136]'
+  BaseType: Object
+  StructuredName: 'PriorityResultDetails'
+}
diff --git a/_Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl b/_Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl
new file mode 100644
index 0000000..427aa63
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization PriorityResultGroupDetail
+{
+  #keys: '2[414382.0.504275155][414382.0.504275154]'
+  Description: '闆嗗洟浼樺厛绾х粨鏋滄槑缁�'
+  Parent: PriorityResultDetail
+  StructuredName: 'PriorityResultGroupDetails'
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton\043713.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton\043713.def"
new file mode 100644
index 0000000..9c91139
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton\043713.def"
@@ -0,0 +1,107 @@
+Quintiq file version 2.0
+Component PanelPriorityPolicyOperationButton
+{
+  #keys: '[414382.0.494931742]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonAddPriorityPolicy
+    {
+      #keys: '[414382.0.494931743]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '娣诲姞鍥犲瓙'
+        Taborder: 1
+      ]
+    }
+    Component Buttonplus
+    {
+      #keys: '[414382.0.494931744]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '+'
+        Taborder: 2
+      ]
+    }
+    Component ButtonSubtract
+    {
+      #keys: '[414382.0.494931745]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '*'
+        Taborder: 3
+      ]
+    }
+    Component ButtonMultiply
+    {
+      #keys: '[414382.0.494931747]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'x'
+        Taborder: 4
+      ]
+    }
+    Component ButtonDivide
+    {
+      #keys: '[414382.0.494931748]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '/'
+        Taborder: 5
+      ]
+    }
+    Component ButtonLeftParenthesis
+    {
+      #keys: '[414382.0.494931749]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '('
+        Taborder: 6
+      ]
+    }
+    Component ButtonRightParenthesis
+    {
+      #keys: '[414382.0.494931750]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: ')'
+        Taborder: 7
+      ]
+    }
+    Component ButtonRollBack
+    {
+      #keys: '[414382.0.494931751]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '<-'
+        Taborder: 8
+      ]
+    }
+    Component DropDownStringList
+    {
+      #keys: '[414382.0.501480353]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '浼樺厛绾у洜瀛�'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    MinimumColumns: 10
+    MinimumRows: 1
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def
new file mode 100644
index 0000000..e16df3d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: ListPriorityPolicy
+Response OnUserSelectionChanged (
+  PriorityPolicy selection
+) id:Response_ListPriorityPolicy_OnUserSelectionChanged
+{
+  #keys: '[414382.0.503822635]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelPriorityPolicyOperationName.Text(selection.Name());
+      
+      businessType := PriorityPolicyBusinessType.Text();
+      str := PriorityFactor::GetNameList( MacroPlan, businessType);
+      DropDownStringList.Strings(str);
+      
+      data := shadow( selection );
+      DataHolderEditPriorityPolicy.Data( &data );
+      
+      //coefficient := PriorityFactor::GetCoeffcientByName( MacroPlan,businessType,DropDownStringList.Text());
+      //LabelPriorityPolicyCoefficient.Text([String]coefficient);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
new file mode 100644
index 0000000..d645e29
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyCoefficient_902/ButtonCommit
+Response OnClick () id:Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick
+{
+  #keys: '[414382.0.506250033]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderEditPriorityPolicy.Data().Formula(LabelFormula.Text());
+      DataHolderEditPriorityPolicy.Data().CalculateValue(LabelCalculateValue.Text());
+      DataHolderEditPriorityPolicy.Data().Commit();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
new file mode 100644
index 0000000..3b56ae5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonAddPriorityPolicy
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick
+{
+  #keys: '[414382.0.502145449]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      coefficient := LabelPriorityPolicyCoefficient.Text();
+      text := DropDownStringList.Text();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      textCalculate := DropDownStringList.Text() + "[" + coefficient + "*L]";
+      calculateText := LabelCalculateValue.Text() + textCalculate;
+      LabelCalculateValue.Text(calculateText);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
new file mode 100644
index 0000000..11b1352
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonDivide
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick
+{
+  #keys: '[414382.0.500261587]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
new file mode 100644
index 0000000..f4eb5c3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonLeftParenthesis
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick
+{
+  #keys: '[414382.0.500261667]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
new file mode 100644
index 0000000..2f09779
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonMultiply
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick
+{
+  #keys: '[414382.0.500261507]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
new file mode 100644
index 0000000..292ba04
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonRightParenthesis
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick
+{
+  #keys: '[414382.0.500261748]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
new file mode 100644
index 0000000..f8952da
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonRollBack
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick
+{
+  #keys: '[414382.0.506055261]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      businessType := PriorityPolicyBusinessType.Text();
+      formulaText := PriorityPolicy::RollBackStr( MacroPlan,businessType,LabelFormula.Text());
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := PriorityPolicy::RollBackStr( MacroPlan,businessType,LabelCalculateValue.Text());
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
new file mode 100644
index 0000000..77d6f0a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonSubtract
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick
+{
+  #keys: '[414382.0.500261427]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
new file mode 100644
index 0000000..926a7be
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/Buttonplus
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick
+{
+  #keys: '[414382.0.500261347]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def
new file mode 100644
index 0000000..9debaba
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/DropDownStringList
+Response OnSelectionChanged () id:Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionChanged
+{
+  #keys: '[414382.0.507827790]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      info( "select changeed" );
+      businessType := PriorityPolicyBusinessType.Text();
+      coefficient := PriorityFactor::GetCoeffcientByName( MacroPlan,businessType,DropDownStringList.Text());
+      LabelPriorityPolicyCoefficient.Text([String]coefficient);
+      info("coefficient := " + [String]coefficient  );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def
new file mode 100644
index 0000000..cb600ee
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListPriorityResult
+{
+  #keys: '[414382.0.506312194]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityResult
+    {
+      #keys: '[414382.0.506312195]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'PriorityResult'
+      ]
+    }
+    #child: listActionBarPagePriorityResult
+    Component DataSetLevelPriorityResult
+    {
+      #keys: '[414382.0.506312200]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityResult
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"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":"DemandDate","title":"DemandDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityResultScore","title":"PriorityResultScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityResultScore"}}]'
+        ContextMenu: 'listContextMenuPriorityResult'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def
new file mode 100644
index 0000000..cb72c11
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPriorityResultBusinessTypeDetails
+{
+  #keys: '[414382.0.506313048]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityResultDetails
+    {
+      #keys: '[414382.0.506313049]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[PriorityResultBusinessTypeDetail]'
+        Source: 'DataHolderPriorityResultBusinessTypeDetails'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPagePriorityResultDetails
+    Component DataSetLevelPriorityResultDetails
+    {
+      #keys: '[414382.0.506313054]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityResultDetails
+      ]
+      Properties:
+      [
+        Columns: '[{"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":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"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":"DemandDate","title":"DemandDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityResultScore","title":"PriorityResultScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityResultScore"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityPolicyName","title":"PriorityPolicyName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityPolicyName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorName","title":"PriorityFactorName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorGradingName","title":"PriorityFactorGradingName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorGradingName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityTotalScore","title":"PriorityTotalScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityTotalScore"}}]'
+        ContextMenu: 'listContextMenuPriorityResultDetails'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPriorityResultBusinessTypeDetails_WebMenu_OnClick
+    {
+      #keys: '[414382.0.506320636]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[1275.0.8208190]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails\043743.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails\043743.def"
new file mode 100644
index 0000000..d589b28
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails\043743.def"
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListPriorityResultGroupDetails
+{
+  #keys: '[414382.0.506313387]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityResultDetails859
+    {
+      #keys: '[414382.0.506313388]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[PriorityResultGroupDetail]'
+        Source: 'DataHolderPriorityResultGroupDetails'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPagePriorityResultDetails642
+    Component DataSetLevelPriorityResultDetails872
+    {
+      #keys: '[414382.0.506313393]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityResultDetails590
+      ]
+      Properties:
+      [
+        Columns: '[{"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":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"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":"DemandDate","title":"DemandDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityResultScore","title":"PriorityResultScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityResultScore"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityPolicyName","title":"PriorityPolicyName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityPolicyName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorName","title":"PriorityFactorName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorGradingName","title":"PriorityFactorGradingName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorGradingName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityTotalScore","title":"PriorityTotalScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityTotalScore"}}]'
+        ContextMenu: 'listContextMenuPriorityResultDetails590'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def
new file mode 100644
index 0000000..842f6ec
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelPriorityResult
+{
+  #keys: '[414382.0.506311784]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPriorityResult
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '浼樺厛绾х粨鏋滃垪琛�'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails\043633.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails\043633.def"
new file mode 100644
index 0000000..d8d93f4
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails\043633.def"
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component PanelPriorityResultDetails
+{
+  #keys: '[414382.0.506311801]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelPriorityResultProductID
+    {
+      #keys: '[414382.0.506311846]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '浜у搧缂栫爜:'
+        Taborder: 0
+      ]
+    }
+    Component LabelPriorityResultBusinessTypeDetails
+    {
+      #keys: '[414382.0.506311875]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '浜嬩笟閮ㄤ紭鍏堢骇寰楀垎璇︽儏'
+        Taborder: 1
+      ]
+    }
+    Component LabelPriorityResultGroupDetails
+    {
+      #keys: '[414382.0.506311903]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '闆嗗洟浼樺厛绾у緱鍒嗚鎯�'
+        Taborder: 3
+      ]
+    }
+    #child: ListPriorityResultBusinessTypeDetails
+    #child: ListPriorityResultGroupDetails
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '浼樺厛绾х粨鏋滄槑缁�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def
new file mode 100644
index 0000000..4da1e32
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityResult
+{
+  #keys: '[414382.0.506312197]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def
new file mode 100644
index 0000000..4951c85
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityResultDetails
+{
+  #keys: '[414382.0.506313051]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def
new file mode 100644
index 0000000..2f67232
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityResultDetails642
+{
+  #keys: '[414382.0.506313390]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def
new file mode 100644
index 0000000..33df24f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityResult
+{
+  #keys: '[414382.0.506312202]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def
new file mode 100644
index 0000000..8a23813
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityResultDetails
+{
+  #keys: '[414382.0.506313056]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuEmergencyTopping
+    {
+      #keys: '[414382.0.506320730]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_TIME'
+        Taborder: 3
+        Title: 'Emergency Topping'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def
new file mode 100644
index 0000000..248d2aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityResultDetails590
+{
+  #keys: '[414382.0.506313395]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def
new file mode 100644
index 0000000..430d449
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: ListPriorityResultBusinessTypeDetails
+Response OnClick (
+  PriorityResultBusinessTypeDetail selection
+) id:Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick
+{
+  #keys: '[414382.0.507572437]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityResultBusinessTypeDetails/Responsedef_ListPriorityResultBusinessTypeDetails_WebMenu_OnClick
+  Initiator: 'MenuEmergencyTopping'
+  Precondition:
+  [*
+    return PriorityResultBusinessTypeDetail::CheckCanTopping(selection);
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // 绱ф�ョ疆椤�
+      PriorityResultBusinessTypeDetail::EmergencyTopping( MacroPlan,selection);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def
new file mode 100644
index 0000000..493baf0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ListPriorityResult
+Response OnUserSelectionChanged (
+  PriorityResult selection
+) id:Response_ListPriorityResult_OnUserSelectionChanged
+{
+  #keys: '[414382.0.506312631]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      businessTypeDetails := selectset( selection,PriorityResultBusinessTypeDetail,p,true);
+      DataHolderPriorityResultBusinessTypeDetails.Data(&businessTypeDetails);
+      
+      groupDetails := selectset( selection,PriorityResultGroupDetail,p,true);
+      DataHolderPriorityResultGroupDetails.Data( &groupDetails);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def
new file mode 100644
index 0000000..99f642d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPriorityResult
+{
+  #keys: '[414382.0.506311765]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelPriorityResultDetails
+    #child: PanelPriorityResult
+    Component DataHolderPriorityResultBusinessTypeDetails
+    {
+      #keys: '[414382.0.506312058]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityResultBusinessTypeDetail]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component DataHolderPriorityResultGroupDetails
+    {
+      #keys: '[414382.0.506312077]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityResultGroupDetail]*'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw b/_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw
new file mode 100644
index 0000000..3489b0c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw
@@ -0,0 +1,2258 @@
+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: 197
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 91
+            }
+            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: false
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_1
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 2
+        }
+        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_1
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 3
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_2
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 4
+        }
+        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_2
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 5
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_3
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 6
+        }
+        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_3
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 7
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_4
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 8
+        }
+        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_4
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 9
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_5
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 10
+        }
+        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_5
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 11
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_6
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 12
+        }
+        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_6
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 13
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_7
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 14
+        }
+        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_7
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 15
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormSanityCheck
+      {
+        title: 'Sanity Check'
+        shown: false
+        componentID: 'FormSanityCheck'
+        layout
+        {
+          mode: 'dockright'
+          index: 16
+        }
+        components
+        {
+          FormSanityCheck_PanelSanityCheckToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckContent
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckGroup
+          {
+            sizeRatio: 4
+          }
+          FormSanityCheck_ListSanityCheckGroup
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckGroup
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Group
+            {
+              columnId: 'Group'
+              dataPath: 'Group'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 270
+            }
+            column__Expr3
+            {
+              columnId: '_Expr3'
+              dataPath: '_Expr3'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 95
+            }
+          }
+          FormSanityCheck_PanelSanityCheckMessage
+          {
+            sizeRatio: 5
+          }
+          FormSanityCheck_ListSanityCheckMessage
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckMessage
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Messages
+            {
+              columnId: 'Messages'
+              dataPath: 'Messages'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 32
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 585
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_8
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 17
+        }
+        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_8
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 18
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_9
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 19
+        }
+        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_9
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 20
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_10
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 21
+        }
+        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_10
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 22
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_11
+      {
+        title: 'Optimizer Puzzles'
+        shown: true
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 23
+        }
+        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_11
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 24
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_12
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 25
+        }
+        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_12
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 26
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_13
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 27
+        }
+        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_13
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 28
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_14
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 29
+        }
+        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_14
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 30
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_15
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 31
+        }
+        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_15
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 32
+        }
+        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
+            }
+          }
+        }
+      }
+      form_FormSanityCheck_1
+      {
+        title: 'Sanity Check'
+        shown: false
+        componentID: 'FormSanityCheck'
+        layout
+        {
+          mode: 'dockright'
+          index: 33
+        }
+        components
+        {
+          FormSanityCheck_PanelSanityCheckToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckContent
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckGroup
+          {
+            sizeRatio: 4
+          }
+          FormSanityCheck_ListSanityCheckGroup
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckGroup
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Group
+            {
+              columnId: 'Group'
+              dataPath: 'Group'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 270
+            }
+            column__Expr3
+            {
+              columnId: '_Expr3'
+              dataPath: '_Expr3'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 95
+            }
+          }
+          FormSanityCheck_PanelSanityCheckMessage
+          {
+            sizeRatio: 5
+          }
+          FormSanityCheck_ListSanityCheckMessage
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckMessage
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Messages
+            {
+              columnId: 'Messages'
+              dataPath: 'Messages'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 32
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 585
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 15
+    image: ''
+    description: ''
+  }
+  formatversion: 2
+  id: 'PriorityResults'
+  name: 'PriorityResults'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
index cb94597..74c8fca 100644
--- a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
+++ b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
@@ -5,7 +5,7 @@
   ProjectProperties
   {
     ApplicationComponentName: 'ApplicationMacroPlanner'
-    BuildVersion: '2022.3.0.32'
+    BuildVersion: '2022.3.0.113'
     Description: 'Quintiq Macro Planner'
     ProjectKind: 'WebClient'
   }

--
Gitblit v1.9.3