hongji.li
2023-10-07 15bca552940ac3967dd7efd4fe28b14c4a8689db
Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lhj
已添加29个文件
已修改36个文件
1290 ■■■■■ 文件已修改
_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews#633.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonPriority_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType#367.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw 351 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_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'
  }
}
_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
}
_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
}
_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
}
_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(),
_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() );
_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,
_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() );
_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 )
_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
_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 {
_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();
_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() );
_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 )
                                );
    }
    
_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);
_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
}
_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'
}
_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
@@ -11,7 +11,7 @@
    // NBoTk Sep-21-2023 (created)
    
    data := selectobject( owner,PriorityFactor,p,
                          p.BusinessType() = businessType and p.Name() = name
                           p.Name() = name
                          )
    
    return data.Coefficient();
_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
@@ -11,7 +11,6 @@
    value := "";
    
    strList := selectuniquevalues(  owner,PriorityFactor,p,
                                   p.BusinessType() = businessType,
                                    p.Name()
                                   );
    
_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -1,8 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitData (
  MacroPlan owner,
  String businessType
  MacroPlan owner
)
{
  TextBody:
@@ -10,25 +9,35 @@
    // NBoTk Sep-15-2023 (created)
    // businessType
    // result := "集团面板;专业显示事业部;外卖CELL;非显;运动健康;运动健康事业部;手机事业部;特种显示;汽车电子事业部;车载显示事业部;IT事业部";
    // æ·»åŠ äº‹ä¸šéƒ¨å¯¹åº”çš„é¢„åˆ¶ä¼˜å…ˆçº§å› å­æ•°æ®
    owner.PriorityFactor(relnew,Name := "客户策略" ,Desc := "将事业部计算的优先级,按该细分项比例阶梯确定该项得分。如:81%≤X≤100% 5分,61%≤X≤80% 4分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "客户等级" ,Desc := "根据需求数据中客户,匹配客户等级",BusinessType := businessType);
    owner.PriorityFactor(relnew,Name := "大张盈利水平" ,Desc := "1、获取客户*SKU大张盈利数 2、定义客户*SKU大张盈利数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "细分市场等级" ,Desc := "1、获取客户*SKU对应细分市场等级 2、匹配需求数据中客户及SKU对应细分市场评分等级,得到对应阶梯得分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "需求类型" ,Desc := "匹配不同需求种类,得到对应得分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "订单下单时间" ,Desc := "根据需求订单中下单时间与需求时间差值,匹配阶梯得分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "产品等级" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
    owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
    
    // ä¼˜å…ˆçº§å› å­ç»†åˆ†
    priorityFactorList := selectset( owner,PriorityFactor,p,
                                     p.BusinessType() = businessType
                                     );
    businessType := "";
    
    traverse( priorityFactorList,Elements,e)
    // å¦‚果已经存在优先级数据 åˆ™ä¸åšå¤„理
    list := selectset( owner,PriorityFactor,p,true);
    if( list.Size() = 0 )
    {
        PriorityFactorDetails::InitData( owner,e);
          // æ·»åŠ äº‹ä¸šéƒ¨å¯¹åº”çš„é¢„åˆ¶ä¼˜å…ˆçº§å› å­æ•°æ®
          owner.PriorityFactor(relnew,Name := "客户策略" ,Desc := "将事业部计算的优先级,按该细分项比例阶梯确定该项得分。如:81%≤X≤100% 5分,61%≤X≤80% 4分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "客户等级" ,Desc := "根据需求数据中客户,匹配客户等级",BusinessType := businessType);
          owner.PriorityFactor(relnew,Name := "大张盈利水平" ,Desc := "1、获取客户*SKU大张盈利数 2、定义客户*SKU大张盈利数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "细分市场等级" ,Desc := "1、获取客户*SKU对应细分市场等级 2、匹配需求数据中客户及SKU对应细分市场评分等级,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "需求类型" ,Desc := "匹配不同需求种类,得到对应得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "订单下单时间" ,Desc := "根据需求订单中下单时间与需求时间差值,匹配阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "产品等级" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          // ä¼˜å…ˆçº§å› å­ç»†åˆ†
          priorityFactorList := selectset( owner,PriorityFactor,p,
                                           p.BusinessType() = businessType
                                           );
          traverse( priorityFactorList,Elements,e)
          {
              PriorityFactorDetails::InitData( owner,e);
          }
    }
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetCalcFormula (
  MacroPlan macroPlan,
  String formula
) as String
{
  TextBody:
  [*
    // NBoTk Oct-7-2023 (created)
    priorityFactor := null( PriorityFactor);
    traverse( macroPlan,PriorityFactor,p)
    {
         if( formula.StartsWith( p.Name()) )
         {
            priorityFactor := p;
         }
    }
    value := priorityFactor.Name() + "[" + [String]priorityFactor.Coefficient() +"*L]";
    return value;
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetCalcStr (
  MacroPlan macroPlan,
  String formula,
  String lastCalcStr
) as String
{
  TextBody:
  [*
    // NBoTk Oct-7-2023 (created)
    calcStr := "";
    remindFormula := formula;
    // éåŽ†ä¼˜å…ˆçº§å› å­é…ç½®
    if( not remindFormula = '' )
    {
                  // ä»Žèµ·å§‹ä½ç½®å¼€å§‹åŒ¹é…
            if(remindFormula.StartsWith( "+" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "+" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "-" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "-" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "*" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "*" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "/" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "/" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "(" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "{" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( ")" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + ")" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else
            {
                // ä¸æ˜¯ç¬¦å· ç›´æŽ¥èŽ·å–è®¡ç®—åŽçš„æ•°å€¼
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
    }
    return calcStr;
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
@@ -28,7 +28,7 @@
        } 
    }
    
    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);
    nameList := PriorityFactor::GetDataByBusinessType(  owner,"");
    traverse( nameList,Elements,e)
    {
        nameText := e.Name() + "[" + [String]e.Coefficient() + "*L]"
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
@@ -10,7 +10,6 @@
  [*
    // NBoTk Sep-21-2023 (created)
    value := stringData;
    symbolList := construct( structured[String]);
    symbolList.Add( "+")
    symbolList.Add( "-")
@@ -28,7 +27,7 @@
        } 
    }
    
    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);
    nameList := PriorityFactor::GetDataByBusinessType(  owner,"");
    traverse( nameList,Elements,e)
    {
        if( stringData.EndsWith( e.Name()))
@@ -37,7 +36,6 @@
             value := stringData.SubString( 0,end);
        } 
    }
    return value;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
@@ -17,7 +17,6 @@
    remindFormula := formula;
    
    // éåŽ†ä¼˜å…ˆçº§å› å­é…ç½®
    if( not remindFormula = '' )
    {
            // ä»Žèµ·å§‹ä½ç½®å¼€å§‹åŒ¹é… 
@@ -70,7 +69,7 @@
                PriorityResult::CalculateBracketScore(calcStr,customerOrder,businessType,macroPlan,globalOTDTable);
                
                // æˆªå– ) åŽçš„字符继续进行计算
                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length());
                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length()-1);
            }
            else
            {
@@ -83,6 +82,6 @@
    }
    
    // æ²¡æœ‰åŒ¹é… å…¬å¼è®¡ç®—完成
    return lastScore;
    return score;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
@@ -27,7 +27,6 @@
         }
    }
    
    info( "remindStr = " + str );
    return str;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
@@ -16,7 +16,6 @@
    {
         // äº‹ä¸šéƒ¨ä¿¡æ¯
         businessType := e.BusinessType();
         //businessType :=  "手机事业部";
         
         // èŽ·å–å¯¹åº”äº‹ä¸šéƒ¨è®¡ç®—å…¬å¼
         priorityPolicys := selectobject( macroPlan,PriorityPolicy,p,p.BusinessType() = businessType and p.Name() = priorityPolicyName);
@@ -24,7 +23,6 @@
         
         // é€’归处理计算公式 èŽ·å–å½“å‰è®¢å•çš„å¾—åˆ†
         value := PriorityResult::CalculateScore( formula,e,businessType,macroPlan,0.0,globalOTDTable);
         // ç”Ÿæˆä¼˜å…ˆçº§å› å­è·‘分结果
         priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                     DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),
@@ -56,6 +54,10 @@
                                   result.PriorityResultScore()
                                   )
    
    // Quintiq优先级分10级 éœ€è¦åˆ†æ®µè®¡ç®—
    subLevel := resultList.Size() div 10;
    subLevelCount := 0;
    priorityValue := 1;
    traverse( resultList,Elements,e)
    {
@@ -70,15 +72,24 @@
              
              // åˆ›å»ºä¼˜å…ˆçº§æ•°æ® éœ€è¦å…ˆæ¸…除上一次的计算结果
              // åˆ¤æ–­å½“前customerOrder是否存在
              oldPriority := selectobject( macroPlan,Priority,p,p.Name() = obj.OrderID());
              if(not isnull( oldPriority ) )
              oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
              if(isnull( oldPriority ) )
              {
                    macroPlan.Priority(reldelete, oldPriority);
              }
              macroPlan.Priority(relnew,Weight := priorityValue,Name := obj.OrderID());
              priorityValue := priorityValue + 1;
                    macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
              }
        }
    
        // åˆ¤æ–­è®¡ç®—分段数量与Quintiq原始优先级
        subLevelCount := subLevelCount + 1;
        if( subLevelCount = subLevel )
        {
            // å½“到达分段数量后 ä¼˜å…ˆçº§+1 åˆ†æ®µè®¡æ•°ä»Ž0开始
            if( priorityValue < 10 )
            {
                  priorityValue := priorityValue + 1;
            }
            subLevelCount := 0;
        }
    }
  *]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews#633.def
@@ -18,5 +18,16 @@
        Taborder: 3
      ]
    }
    Component ButtonPriority
    {
      #keys: '[414382.0.587601840]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'QUEUE'
        Label: '优先级因子'
        Taborder: 4
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonPriority_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ActionBarGroupSalesViews/ButtonPriority
Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonPriority_OnClick
{
  #keys: '[414382.0.587601951]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "PriorityTest",true);
    *]
    GroupServerCalls: false
  }
}
_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:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def
@@ -11,12 +11,10 @@
    
    // OnOk
    this.ApplyChanges();
    businessType := DataHolderBusinessType.Data().BusinessTypeName();
    DataHolderBusinessType.Data().Commit();
    
     
    PriorityFactor::InitData( MacroPlan,businessType);
    PriorityFactor::InitData( MacroPlan);
    
    this.Close();
  *]
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method New (
  MacroPlan owner,
  String businessType
) id:Method_DialogEditPriorityFactor_New
{
  #keys: '[414382.0.593002251]'
  Body:
  [*
    data := owner.PriorityFactor(relshadow);
    data.BusinessType(businessType);
    DataHolderEditPriorityFactor.Data(&data);
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_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
  ]
}
_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
  ]
}
_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();
  *]
}
_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 );
  *]
}
_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 );
  *]
}
_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();
    *]
  }
}
_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()
    *]
  }
}
_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: '组织编码编辑'
  ]
}
_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
      ]
_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()'
        }
      ]
    }
  ]
}
_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
  ]
}
_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
  ]
}
_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
  ]
}
_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:
  [
_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 );
    *]
  }
}
_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();
    *]
  }
}
_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 );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType#367.def
@@ -8,9 +8,10 @@
  Children:
  [
    #child: ListBusinessType
    #child: PanelBusinessType
  ]
  Properties:
  [
    Title: 'Business Type'
    Title: '事业部&组织编码维护'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -12,10 +12,32 @@
      Properties:
      [
        Image: 'GEAR_EDIT'
        Taborder: 3
        Taborder: 4
        Title: '编辑'
      ]
    }
    Component MenuNew
    {
      #keys: '[414382.0.593001800]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_ADD'
        Taborder: 3
        Title: '新增'
      ]
    }
    Component MenuDel
    {
      #keys: '[414382.0.593001811]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_DELETE'
        Taborder: 5
        Title: '删除'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: DataHolderPriorityFactorSelect
Response OnDataChanged () id:Response_FormPriorityFactor_DataHolderPriorityFactorSelect_OnDataChanged
{
  #keys: '[414382.0.593010798]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      data := selectset( MacroPlan,PriorityFactor,p,true);
      this.Data(&data);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
@@ -9,8 +9,9 @@
  {
    Body:
    [*
      //strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
      //this.Strings(strings);
      info( "create" + DropDownStringListBusinessType.Text());
      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
      DataHolderPriorityFactorSelect.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
@@ -9,7 +9,7 @@
  {
    Body:
    [*
      info( "selection" );
      info( "selection" + DropDownStringListBusinessType.Text());
      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
      DataHolderPriorityFactorSelect.Data(&list);
    *]
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnClick (
  PriorityFactor selection
) id:Response_ListPriorityFactor_MenuDel_OnClick
{
  #keys: '[414382.0.593002800]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
  Initiator: 'MenuDel'
  QuillAction
  {
    Body:
    [*
      selection.Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnClick () id:Response_ListPriorityFactor_MenuNew_OnClick
{
  #keys: '[414382.0.593002709]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
  Initiator: 'MenuNew'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactor );
      businessType := DropDownStringListBusinessType.Text();
      dlg.New( MacroPlan, businessType);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -25,6 +25,7 @@
      [
        Label: '事业部:'
        Taborder: 0
        Visible: false
      ]
    }
    #child: ListPriorityFactor
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
@@ -12,7 +12,7 @@
      Properties:
      [
        DataType: 'structured[PriorityPolicy]'
        Source: 'DataHolderPriorityPolicy'
        Source: 'DataHolderPriorityPolicyShowList'
        Taborder: 0
        Transformation: 'Elements'
      ]
@@ -36,7 +36,7 @@
  ]
  Properties:
  [
    Taborder: 2
    Taborder: 3
  ]
  ResponseDefinitions:
  [
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
@@ -40,7 +40,7 @@
  ]
  Properties:
  [
    Taborder: 3
    Taborder: 4
    Title: '优先级策略配置'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: DataHolderPriorityPolicy
Response OnCreated () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnCreated
{
  #keys: '[414382.0.594152096]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      data := this.Data();
      businessType := PriorityPolicyBusinessType.Text();
      list := selectset( data,Elements,e,e.BusinessType() = businessType);
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
@@ -2,15 +2,17 @@
#parent: DataHolderPriorityPolicy
Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnDataChanged
{
  #keys: '[414382.0.502145694]'
  #keys: '[414382.0.595379026]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      this.Data(&list);
      data := this.Data();
      businessType := PriorityPolicyBusinessType.Text();
      list := selectset( data,Elements,e,e.BusinessType() = businessType);
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
@@ -11,6 +11,9 @@
    [*
      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
      this.Strings(strings);
      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
@@ -9,8 +9,8 @@
  {
    Body:
    [*
      //list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      //DataHolderPriorityPolicy.Data(&list);
      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
@@ -22,9 +22,24 @@
      #keys: '[414382.0.487792124]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityPolicy]*'
      Children:
      [
        Component DataExtractorPriorityPolicy216
        {
          #keys: '[414382.0.593061574]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'PriorityPolicy'
          ]
        }
      ]
      Properties:
      [
        Taborder: 1
        Taborder: 2
      ]
    }
    #child: ListPriorityPolicy
@@ -36,7 +51,7 @@
      Databinding: 'shadow[PriorityPolicy]*'
      Properties:
      [
        Taborder: 4
        Taborder: 5
      ]
    }
    Component DataHolderPriorityPolicyBusinessType
@@ -61,7 +76,7 @@
      ]
      Properties:
      [
        Taborder: 5
        Taborder: 6
      ]
    }
    Component DataHolderPriorityPolicyFactor
@@ -86,7 +101,17 @@
      ]
      Properties:
      [
        Taborder: 6
        Taborder: 7
      ]
    }
    Component DataHolderPriorityPolicyShowList
    {
      #keys: '[414382.0.593062135]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityPolicy]*'
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
_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
}