From 8d37eebd5b4e52c12b25e90ca7ce59439798f14e Mon Sep 17 00:00:00 2001
From: limj <limj@taizhitech.com>
Date: 星期六, 07 十月 2023 16:27:50 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lmj

---
 _Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl                                                |    8 
 _Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType#367.def               |    3 
 _Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl                                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def         |   20 +
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def                        |   14 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def              |   35 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def          |   15 +
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def                          |   19 +
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def               |   10 
 _Main/BL/Type_MacroPlan/Method_MappingProductData.qbl                                                |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def                       |   26 +
 _Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl                                               |    8 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl                                           |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def                                |   17 +
 _Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def                                 |   15 +
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def                            |   62 ++++
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                     |    2 
 _Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl                                          |    7 
 _Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def       |   19 +
 _Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl                                            |    1 
 _Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl                                                   |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def                       |   40 ++
 _Main/BL/Type_BusinessType/Attribute_DisplayType.qbl                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw                                          |  351 +++++++++++++++++++++++
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def      |   15 +
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def            |   33 ++
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def |   20 +
 _Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl                        |   23 +
 _Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def                    |   27 +
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def           |   12 
 _Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl                                           |    5 
 _Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl                                              |    4 
 37 files changed, 861 insertions(+), 17 deletions(-)

diff --git a/_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl b/_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl
new file mode 100644
index 0000000..53c42ae
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OrganCode_BusinessType_BusinessType_OrganCode
+{
+  #keys: '1[412960.0.276650038]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide BusinessType
+  {
+    #keys: '3[412960.0.276650040][412960.0.276650039][412960.0.276650041]'
+    Cardinality: '0to1'
+    ObjectDefinition: OrganCode
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OrganCode
+  {
+    #keys: '3[412960.0.276650043][412960.0.276650042][412960.0.276650044]'
+    Cardinality: '1toN'
+    ObjectDefinition: BusinessType
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl b/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
index f2fb6a3..44f63a3 100644
--- a/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
+++ b/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
@@ -3,5 +3,6 @@
 Attribute BusinessTypeName
 {
   #keys: '3[414382.0.361554811][414382.0.361554810][414382.0.361554812]'
+  Description: '浜嬩笟閮ㄥ悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl b/_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl
new file mode 100644
index 0000000..72577fd
--- /dev/null
+++ b/_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DisplayType
+{
+  #keys: '3[412960.0.276650024][412960.0.276650023][412960.0.276650025]'
+  Description: '鏄剧ず绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl b/_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..bf93bb5
--- /dev/null
+++ b/_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[412960.0.276650011][412960.0.276650010][412960.0.276650012]'
+  Description: '鍦烘櫙鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
index c6520fb..a6f9a24 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -9,7 +9,12 @@
   TextBody:
   [*
     // renhao Aug-14-2023 (created)
-    listtodeal := selectset( globalOTDTable,Global_MappingActualProductInStockingPointInPeriod,actual,actual.ActualInventoryLevelEnd() > 0 );
+    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+    listtodeal := selectset( globalOTDTable,
+                             Global_MappingActualProductInStockingPointInPeriod,
+                             actual,
+                             ( actual.ActualInventoryLevelEnd() > 0 ) and 
+                             ( organcodelist.Find( actual.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     totalcount := listtodeal.Size();
     info( "ActualPISPIP has " + totalcount.AsQUILL() + " rows in total" );
     
@@ -24,7 +29,7 @@
       if( not isnull(businessTypes)){
       
         for( i :=0 ;i < businessTypes.Size();i++ ){
-          businessType := businessTypes.Element( i);
+          businessType := businessTypes.Element( i );
           if( product.BusinessType() = businessType and not product.IsCommon()){
             ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
                                                                   actual.ProductID(),
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
index 3a572dc..9d01ece 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -14,7 +14,12 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
     } else {
-        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, businessTypes.Find( item.BusinessType() ) <> -1 );
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingCustomOrder, 
+                                 item, 
+                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     }
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
index c6a2bcf..39675d3 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -11,7 +11,13 @@
     // renhao Aug-14-2023 (created)
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
-    listtodeal := selectset( globalOTDTable,Global_MappingInventorySupply,externalSupply, externalSupply.UserQuantity()>0 and externalSupply.Date() >= queryStartDate /*and externalSupply.Date() <= queryEndDate*/);
+    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+    listtodeal := selectset( globalOTDTable,
+                             Global_MappingInventorySupply,
+                             externalSupply, 
+                             ( externalSupply.UserQuantity()>0 ) and 
+                             ( externalSupply.Date() >= queryStartDate ) and 
+                             ( organcodelist.Find( externalSupply.StockingPointID().SubString( 0, 3 ) ) >= 0 )/*and externalSupply.Date() <= queryEndDate*/);
     totalcount := listtodeal.Size();
     description := "鍦ㄩ�斿湪鍒�";
     info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
@@ -32,7 +38,7 @@
         if( not isnull(businessTypes)){
         
           for( i :=0 ;i < businessTypes.Size();i++ ){
-            businessType := businessTypes.Element( i);
+            businessType := businessTypes.Element( i );
             if( product.BusinessType() = businessType and not product.IsCommon()){
               InventorySupply::CreateOrUpdate( externalSupply.ID(),
                                                productMP,
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
index 21b752b..5fbb66c 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -14,7 +14,13 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
     } else {
-        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 and item.Quantity()>0 );
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingForecast, 
+                                 item, 
+                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( item.Quantity()>0 ) and 
+                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     }
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index b716d4d..663464c 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -14,11 +14,13 @@
     if( isKeyProduct ) {
         keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
     }
+    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
                                  ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
                                          true, 
     //                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
-                                         businessTypes.Find( item.BusinessType() ) >= 0 )
+                                         ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
+                                         ( organcodelist.Find( item.OrganCode() ) >= 0 ) )
     //                             and ifexpr( isKeyProduct, 
     //                                         keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
     //                                         true )
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index 1e71d79..9a458dd 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method MappingOperationCostData (
+  GlobalOTDTable globalOTDTable,
   Strings businesstypes
 )
 {
@@ -14,7 +15,12 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( this, MappingOperation, item, true );
     } else {
-        listtodeal := selectset( this, MappingOperation, item, businesstypes.Find( item.BusinessType() ) <> -1 );
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+        listtodeal := selectset( this, 
+                                 MappingOperation, 
+                                 item, 
+                                 ( businesstypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 ) );
     }
     
     // Get the list to deal with max sequence number
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
index 29e7e21..b09ed68 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -11,8 +11,10 @@
     // 鑾峰彇鏈夊簭鐨勫緟澶勭悊璁板綍
     toDealList := construct( Global_MappingOperations ) ;
     if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item, 
-                                       businessTypes.Find( item.BusinessType() ) >= 0, 
+                                       ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
+                                       ( organcodelist.Find( item.OrganCode() ) >= 0 ), 
     //                                   businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
                                        item.SequenceNumber() );
     } else {
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
index ab7398e..1e0929e 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -23,10 +23,10 @@
           }
     } else {
         if( iskeyproduct = true ){
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find(  item.BusinessType()) >= 0 );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find( item.BusinessType() ) >= 0 );
          }
         else{
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find(  item.BusinessType()) >= 0 );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find( item.BusinessType() ) >= 0 );
         }
     }
     totalcount := listToDeal.Size();
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
index cf459b5..d7f21c2 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
@@ -14,7 +14,10 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, true );
     } else {
-        listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, businessTypes.Find( item.BusinessType() ) <> -1 );
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingSalesSegment_MP, 
+                                 item, 
+                                 businessTypes.Find( item.BusinessType() ) <> -1 );
     }
     //nameList := construct( structured[String] );
     //nameList := selectvalues( listToDeal, Elements, item, true, item.Name() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
index e826ddb..671fe30 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -15,9 +15,11 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, 
     //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
-                                 businesstypes.Find( item.BusinessType() ) >= 0
+                                 ( businesstypes.Find( item.BusinessType() ) >= 0 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 )
                                 );
     }
     
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index b4361d5..875645b 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -131,7 +131,7 @@
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
-    macroPlan.MappingOperationCostData( businessTypes );
+    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes );
     
     // 璁㈠崟棰勬祴-17
     Forecast::DoSync( macroPlan, businessTypes ,globalOTDTable);
diff --git a/_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl b/_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl
new file mode 100644
index 0000000..bdf1f0e
--- /dev/null
+++ b/_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganCodeName
+{
+  #keys: '3[412960.0.276650052][412960.0.276650051][412960.0.276650053]'
+  Description: '缁勭粐缂栫爜鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl b/_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl
new file mode 100644
index 0000000..3a16e43
--- /dev/null
+++ b/_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OrganCode
+{
+  #keys: '5[412960.0.276650035][412960.0.276650033][0.0.0][412960.0.276650034][412960.0.276650036]'
+  BaseType: Object
+  Description: '浜嬩笟閮ㄥ搴旂殑缁勭粐缂栫爜闆嗗悎'
+  StructuredName: 'OrganCodes'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
index b6cdcbb..07b8549 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
@@ -12,10 +12,35 @@
       Properties:
       [
         DataBinding: 'DataHolderBusinessType.Data.BusinessTypeName'
-        Label: 'Business Type Name'
+        Description: '浜嬩笟閮ㄥ悕绉拌緭鍏�'
+        Label: '浜嬩笟閮ㄥ悕绉�'
         Taborder: 0
       ]
     }
+    Component editScenarioName
+    {
+      #keys: '[412960.0.275480603]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderBusinessType.Data.ScenarioName'
+        Description: '鍦烘櫙鍚嶇О缂栬緫'
+        Label: '鍦烘櫙鍚嶇О'
+        Taborder: 1
+      ]
+    }
+    Component editDisplayType
+    {
+      #keys: '[412960.0.278321833]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderBusinessType.Data.DisplayType'
+        Description: '鏄剧ず绫诲瀷缂栬緫'
+        Label: '鏄剧ず绫诲瀷'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def
new file mode 100644
index 0000000..262d308
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.278371059]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412960.0.278371063]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.278371065]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def
new file mode 100644
index 0000000..459a754
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.278371057]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component editOrganCodeName
+    {
+      #keys: '[412960.0.280135212]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderOrganCode.Data.OrganCodeName'
+        Description: '缁勭粐缂栫爜鍚嶇О缂栬緫'
+        Label: '缁勭粐缂栫爜'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def
new file mode 100644
index 0000000..4e90d83
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOk () id:Method_DialogOrganCode_ClickBtnOk
+{
+  #keys: '[412960.0.279955432]'
+  Body:
+  [*
+    // Disabled button to prevent the possibility of multiple firing
+    
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    
+    DataHolderOrganCode.Data().Commit();
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def
new file mode 100644
index 0000000..299bad9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  OrganCode selection
+) id:Method_DialogOrganCode_Edit
+{
+  #keys: '[412960.0.279955433]'
+  Body:
+  [*
+    // Edits assumption
+    data := shadow( selection );
+    
+    DataHolderOrganCode.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def
new file mode 100644
index 0000000..b312c1c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  BusinessType owner
+) id:Method_DialogOrganCode_New
+{
+  #keys: '[412960.0.279955435]'
+  Body:
+  [*
+    data := owner.OrganCode(relshadow);
+    DataHolderOrganCode.Data( &data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..fb27680
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[412960.0.278371069]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..3ac7bbe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412960.0.278371068]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOk()
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def
new file mode 100644
index 0000000..c681a1b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogOrganCode
+{
+  #keys: '[412960.0.278371055]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderOrganCode
+    {
+      #keys: '[412960.0.279955517]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[OrganCode]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Description: '缁勭粐缂栫爜杈圭晫寮圭獥'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: '缁勭粐缂栫爜缂栬緫'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
index b0713d9..c7e5490 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessTypeName","title":"BusinessTypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessTypeName"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessTypeName","title":"BusinessTypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessTypeName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayType","title":"DisplayType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ScenarioName","title":"ScenarioName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ScenarioName"}}]'
         ContextMenu: 'listContextMenuBusinessType655'
         Taborder: 2
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def
new file mode 100644
index 0000000..055b426
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+Component ListOrganCode
+{
+  #keys: '[412960.0.278370451]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOrganCode
+    {
+      #keys: '[412960.0.278370452]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'BusinessType'
+        Description: '缁勭粐缂栫爜'
+        ExtractionMode: 'Selected'
+        Source: 'ListBusinessType'
+        Taborder: 0
+        Transformation: 'OrganCode'
+      ]
+    }
+    #child: listActionBarPageOrganCode
+    Component DataSetLevelOrganCode
+    {
+      #keys: '[412960.0.278370457]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuBusinessType
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCodeName","title":"OrganCodeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCodeName"}}]'
+        ContextMenu: 'listContextMenuBusinessType'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '缁勭粐缂栫爜'
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListOrganCode_WebMenu_OnClick
+    {
+      #keys: '[412960.0.280046014]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[507.0.16811226]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def
new file mode 100644
index 0000000..9e8ac81
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelBusinessType
+{
+  #keys: '[412960.0.278370440]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOrganCode
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def
new file mode 100644
index 0000000..cc122e0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOrganCode
+{
+  #keys: '[412960.0.278370454]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def
new file mode 100644
index 0000000..d8d6b3c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component listContextMenuBusinessType
+{
+  #keys: '[412960.0.278370459]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuEdit526
+    {
+      #keys: '[412960.0.278370780]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 3
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete267
+    {
+      #keys: '[412960.0.278370833]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 4
+        Title: 'Delete'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
index 30edf41..6d6b098 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
@@ -38,6 +38,18 @@
         Title: 'Delete'
       ]
     }
+    Component MenuNewOrganCode
+    {
+      #keys: '[412960.0.280077335]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: '鏂板缓缁勭粐缂栫爜'
+        Image: 'EARTH_ADD'
+        Taborder: 6
+        Title: 'Add Organ Code'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def
new file mode 100644
index 0000000..fbc8746
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListBusinessType
+Response OnClick (
+  BusinessType selection
+) id:Response_ListBusinessType_MenuNewOrganCode_OnClick
+{
+  #keys: '[412960.0.280105097]'
+  CanBindMultiple: false
+  DefinitionID => /ListBusinessType/Responsedef_ListBusinessType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNewOrganCode'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogOrganCode );
+      dlg.New( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def
new file mode 100644
index 0000000..cb47729
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListOrganCode
+Response OnClick (
+  OrganCode selection
+) id:Response_ListOrganCode_MenuDelete267_OnClick
+{
+  #keys: '[412960.0.280046423]'
+  CanBindMultiple: false
+  DefinitionID => /ListOrganCode/Responsedef_ListOrganCode_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete267'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def
new file mode 100644
index 0000000..1cbf4e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListOrganCode
+Response OnClick (
+  OrganCode selection
+) id:Response_ListOrganCode_MenuEdit526_OnClick
+{
+  #keys: '[412960.0.280046170]'
+  CanBindMultiple: false
+  DefinitionID => /ListOrganCode/Responsedef_ListOrganCode_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit526'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogOrganCode );
+      dlg.Edit(  selection );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def"
index e23342a..d9814cb 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def"
@@ -8,9 +8,10 @@
   Children:
   [
     #child: ListBusinessType
+    #child: PanelBusinessType
   ]
   Properties:
   [
-    Title: 'Business Type'
+    Title: '浜嬩笟閮�&缁勭粐缂栫爜缁存姢'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw b/_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw
new file mode 100644
index 0000000..7903c23
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 277
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 106
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    index: 3
+    image: 'ELEMENTS_TREE_EDIT'
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    description: ''
+  }
+  formatversion: 2
+  id: 'Business_Type_Maintain'
+  name: 'Business Type Maintain'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3