lazhen
2024-08-16 be10d38e5c56c0070d6acfd344ebfae30ee5b0ac
Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg
已添加49个文件
已修改9个文件
1649 ■■■■■ 文件已修改
_Main/BL/Type_ExportXMLData/Method_CalculatePriority.qbl 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_AsyncExport.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GetColumnXML.qbl 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Attribute_TimeUnit.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalRow/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalRow/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalRow/DefaultValue_ProductID.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalRow/DefaultValue_StockingPointID.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Cell_AnnualPlanReport/Attribute_NewSupply.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Cell_AnnualPlanReport/StaticMethod_Create.qbl 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Cell_AnnualPlanReport/StaticMethod_CreateFullTable.qbl 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Cell_AnnualPlanReport/StaticMethod_GetTableName.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Cell_AnnualPlanReport/_ROOT_Type_MP_Cell_AnnualPlanReport.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Row/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MP_Row/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonAnnualPlanReport_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnOk_OnClick.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_MatrixEditor.def 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_MatrixEditor510#127.def 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_PanelAnnualPlan.def 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_PanelRibbon#805.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_PanelRibbon322.def 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixEditorActionBarPageDemandComparison.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixEditorActionBarPageDemandComparison234#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixeditorContextMenuDemandComparison.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixeditorContextMenuDemandComparison527#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_pExport.def 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhCheckedProduct_OnDataChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhCheckedStockingPoint_OnDataChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhComparisonData854_OnCreated.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhComparisonData854_OnDataChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhComparisonData_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhFinelProduct_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhFinelStockingPoint_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_ButtonRibbon682_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_ButtonRibbon_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dhEndDate_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dhStartDate_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dhTimeUnit_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dsEndDate_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dsStartDate_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_rbgTimeUnit_OnUserChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pExport_bDownload_OnClick.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pExport_bExport_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/_ROOT_Component_FormAnnualPlanReport.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pHeader.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_MatrixEditor859.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_Panel743.def 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction#633.def 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_Panel743_dhCheckedEntity_OnDataChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_Panel743_dhFinelEntity_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bDownload_OnClick.def 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bExport_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/AnnualPlanReport.vw 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLData/Method_CalculatePriority.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
Quintiq file version 2.0
#parent: #root
Method CalculatePriority () as Number
{
  TextBody:
  [*
    // rislai Aug-13-2024 (created)
    priority := 0;
    element := this.XML();
    if( element.LikeUserLocale( "<name>Product ID</name>" )){
      priority := 1 ;
    }else if( element.LikeUserLocale( "<name>产线</name>" )){
      priority := 2 ;
    }else if( element.LikeUserLocale( "<name>Attribute</name>" )){
      priority := 3 ;
    }else if( element.LikeUserLocale( "<name>产地</name>" )){
      priority := 4 ;
    }else if( element.LikeUserLocale( "<name>车型</name>" )){
      priority := 5 ;
    }else if( element.LikeUserLocale( "<name>发动机零件号</name>" )){
      priority := 6 ;
    }else if( element.LikeUserLocale( "<name>发动机四位码</name>" )){
      priority := 7 ;
    }else if( element.LikeUserLocale( "<name>生产天数</name>" )){
      priority := 8 ;
    }else if( element.LikeUserLocale( "<name>加班/欠工时长</name>" )){
      priority := 9 ;
    }else if( element.LikeUserLocale( "<name>平日加班时长</name>" )){
      priority := 10 ;
    }else if( element.LikeUserLocale( "<name>休息日加班时长</name>" )){
      priority := 11 ;
    }else if( element.LikeUserLocale( "<name>节假日加班时长</name>" )){
      priority := 12 ;
    }else if( element.LikeUserLocale( "<name>欠工时长</name>" )){
      priority := 13 ;
    }else if( element.LikeUserLocale( "<name>加班/欠工费</name>" )){
      priority := 14 ;
    }else if( element.LikeUserLocale( "<name>平日加班费</name>" )){
      priority := 15 ;
    }else if( element.LikeUserLocale( "<name>休息日加班费</name>" )){
      priority := 16 ;
    }else if( element.LikeUserLocale( "<name>节假日加班费</name>" )){
      priority := 17 ;
    }else if( element.LikeUserLocale( "<name>欠工费</name>" )){
      priority := 18 ;
    }else{
      //  <column><name>2020/04/01</name>
      priority := [Number]element.SubString( 14,10 ).ReplaceAll( "/","") ;
    }
    return priority;
  *]
}
_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
@@ -17,25 +17,7 @@
    }
    traverse( columnXMLData,Elements,element,element.TrimBoth() <> "" ){
       data := manager.ExportXMLData( relnew, XML := element);
       if( element.LikeUserLocale( "Product ID" )){
         data.Priority( 1 );
       }else if( element.LikeUserLocale( "产线" )){
         data.Priority( 1 );
       }else if( element.LikeUserLocale( "Attribute" )){
         data.Priority( 2 );
       }else if( element.LikeUserLocale( "产地" )){
         data.Priority( 3 );
       }else if( element.LikeUserLocale( "车型" )){
         data.Priority( 4 );
       }else if( element.LikeUserLocale( "发动机零件号" )){
         data.Priority( 5 );
       }else if( element.LikeUserLocale( "发动机四位码" )){
         data.Priority( 6 );
       }else{
         info( element );
         //  <column><name>2020/04/01</name>
         data.Priority( [Number]element.SubString( 14,10 ).ReplaceAll( "/","") );
       }
       data.Priority( data.CalculatePriority( ));
    }
  *]
}
_Main/BL/Type_LocalCell_Default/StaticMethod_AsyncExport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: #root
StaticMethod AsyncExport (
  RecycleBin recycleBin,
  const constcontent LocalRows rows,
  const constcontent LocalColumns columns
)
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
    columnstring := emit( "" );
    flag := true;
    traverse( sortColumns,Elements,sortColumn ){
      if( flag ){
        flag := false;
        attributeXML := rows -> LocalCell_Default::GetColumnXML( sortColumn,"attribute" );
        columnstring := columnstring.Merge( attributeXML )
      }
      cellxml := rows -> LocalCell_Default::GetColumnXML( sortColumn ,"data" );
      columnstring := columnstring.Merge( cellxml);
    }
    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),MP_Cell_AnnualPlanReport::GetTableName()) );
  *]
}
_Main/BL/Type_LocalCell_Default/StaticMethod_GetColumnXML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetColumnXML (
  const constcontent LocalRows rows,
  const LocalColumn column,
  String type
) const as String
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    columnXML := "";
    cells := selectsortedset( column, LocalCell.astype( LocalCell_Default ), cell,
                                  exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
    if( type = "data" ){
      columnXML := "<column><name>" + column.Name() + "</name><type>String</type>";
      traverse ( cells, Elements, cell ) {
        cellXML := '<cell value="' + cell.RealValue().Format( "N(Dec)" ) + '"/>'
        columnXML := columnXML + cellXML;
      }
      columnXML := columnXML + "</column>";
    }
    if( type = "attribute" ){
      columnXML1 := "<column><name>产线</name><type>String</type>";
      traverse ( cells, Elements, cell ) {
        cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
        columnXML1 := columnXML1 + cellXML;
      }
      columnXML := columnXML1 + "</column>";
    }
    return columnXML;
  *]
}
_Main/BL/Type_LocalColumn/Attribute_TimeUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TimeUnit
{
  #keys: '3[412672.1.108145936][412672.1.108145935][412672.1.108145937]'
  ValueType: String
}
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
@@ -13,9 +13,13 @@
      index := [String]year;
      if( month < 10 ){
        index := index + "0" + [String]month; 
      }else{
        index := index + [String]month;
      }
      if( day < 10 ){
        index := index + "0" + [String]day; 
      }else{
        index := index + [String]day;
      }
      value := [Number]index;
    }else{
_Main/BL/Type_LocalRow/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[412672.1.107689520][412672.1.107689519][412672.1.107689521]'
  ValueType: String
}
_Main/BL/Type_LocalRow/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[412672.1.107689523][412672.1.107689522][412672.1.107689524]'
  ValueType: String
}
_Main/BL/Type_LocalRow/DefaultValue_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: ProductID
}
_Main/BL/Type_LocalRow/DefaultValue_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: StockingPointID
}
_Main/BL/Type_MP_Cell_AnnualPlanReport/Attribute_NewSupply.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute NewSupply
{
  #keys: '3[412672.1.107664674][412672.1.107664673][412672.1.107664675]'
  ValueType: Real
}
_Main/BL/Type_MP_Cell_AnnualPlanReport/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  MacroPlan owner
) as MP_Table
{
  TextBody:
  [*
    // rislai Aug-6-2024 (created)
    table := select( owner,MP_Table,table,table.Name() = MP_Cell_AnnualPlanReport::GetTableName() );
    if( not isnull( table )){
      table.Delete();
    }
    table := owner.MP_Table( relnew,Name := MP_Cell_AnnualPlanReport::GetTableName());
    startDate := owner.StartOfPlanning().Date();
    endDate := startDate + 7;
    columns := construct( MP_Columns );
    columnIndexTree := NamedValueTree::Create();
    for( i := startDate;i < endDate; i := i + 1){
      column := table.MP_Column( relnew,CustomDate := i );
      columnHandle := columnIndexTree.GetHandle( i.AsQUILL() );
      columns.Add( column );
      columnIndexTree.Root().AddChild( columnHandle,columns.Size() - 1 );
    }
    traverse( owner,Product_MP.ProductInStockingPoint_MP,pisp_mp ){
      // unit.AsEntity().DisplayNameForSelection()
      pispippls := selectset( pisp_mp,ProductInStockingPointInPeriod.astype( ProductInStockingPointInPeriodPlanningLeaf ),pispippl,
                                        pispippl.Period_MP().StartDate() >= startDate
                                    and pispippl.Period_MP().EndDate() <= endDate
                                    and pispippl.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day());
      if( pispippls.Size() <> 0 ){
        row := table.MP_Row( relnew,ProductID := pisp_mp.ProductID(),StockingPointID := pisp_mp.StockingPointID(), CustomName := pisp_mp.Name() ,Index := table.GetRowIndexCache() );
        traverse( pispippls,Elements,pispippl ){
          columnHandle := columnIndexTree.GetHandle( pispippl.Period_MP().StartDate().AsQUILL() );
          columnIndex := guard( columnIndexTree.Root().Child( columnHandle ),null( NamedValue ));
          if( not isnull( columnIndex )){
            column := columns.Element( columnIndex.GetValueAsNumber() );
            row.MP_Cell( relnew,MP_Cell_AnnualPlanReport,MP_Column := column ,NewSupply := pispippl.NewSupplyQuantity());
          }
        }
      }
    }
    return table;
  *]
}
_Main/BL/Type_MP_Cell_AnnualPlanReport/StaticMethod_CreateFullTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateFullTable (
  const MacroPlans owners,
  RecycleBin recycleBin
) as LocalTable
{
  TextBody:
  [*
    // rislai Aug-7-2024 (created)
    tables := construct( MP_Tables );
    traverse( owners,Elements,owner ){
      table := select( owner,MP_Table,table,table.Name() = MP_Cell_AnnualPlanReport::GetTableName() );
      if( isnull( table )){
        table :=  MP_Cell_AnnualPlanReport::Create( owner );
      }
      tables.Add( table );
    }
    localTable := recycleBin.LocalTable( relnew,Name := MP_Cell_AnnualPlanReport::GetTableName() );
    startDate := minselect( tables,Elements.MP_Column,column,column.CustomDate() ).CustomDate();
    endDate := maxselect( tables,Elements.MP_Column,column,column.CustomDate() ).CustomDate();
    localColumns := construct( LocalColumns );
    localColumnIndexTree := NamedValueTree::Create();
    for( i := startDate; i <= endDate; i := i + 1 ){
       localColumn := localTable.LocalColumn( relnew,CustomDate := i ,TimeUnit := "Day");
       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL());
       localColumns.Add( localColumn );
       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
    }
    for( i := startDate.StartOfWeek(); i <= endDate.StartOfNextWeek(); i := i.StartOfNextWeek() ){
       localColumn := localTable.LocalColumn( relnew,CustomDate := i ,TimeUnit := "Week");
       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() + "Week" );
       localColumns.Add( localColumn );
       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
    }
    for( i := startDate.StartOfMonth(); i <= endDate.StartOfNextMonth(); i := i.StartOfNextMonth() ){
       localColumn := localTable.LocalColumn( relnew,CustomDate := i ,TimeUnit := "Month");
       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() + "Month" );
       localColumns.Add( localColumn );
       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
    }
    traverse( tables,Elements.MP_Row,row ){
       localRow := localTable.LocalRow( relnew,CustomName := row.Name(),ProductID := row.ProductID(),StockingPointID := row.StockingPointID(),Index := localTable.GetRowIndexCache() );
       traverse( row,MP_Cell.astype( MP_Cell_AnnualPlanReport ),cell ){
         localColumnHandle := localColumnIndexTree.GetHandle( cell.MP_Column().Date().AsQUILL() );
         localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
         if( not isnull( localColumnIndex )){
           localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
           localCell := localRow.LocalCell( relnew,LocalCell_Default,LocalColumn := localColumn );
           localCell.RealValue( cell.NewSupply() );
         }
       }
    }
    traverse( localTable,LocalRow,row ){
      traverse( localTable,LocalColumn,column,column.TimeUnit() = "Week" ){
        value := sum( row,LocalCell.astype( LocalCell_Default ),cell,
                      cell.LocalColumn().TimeUnit() = "Day" and
                      cell.LocalColumn().CustomDate() >= column.CustomDate() and
                      cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(),cell.RealValue());
        row.LocalCell( relnew,LocalCell_Default,LocalColumn := column,RealValue := value );
      }
      traverse( localTable,LocalColumn,column,column.TimeUnit() = "Month" ){
        value := sum( row,LocalCell.astype( LocalCell_Default ),cell,
                      cell.LocalColumn().TimeUnit() = "Day" and
                      cell.LocalColumn().CustomDate() >= column.CustomDate() and
                      cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(),cell.RealValue());
        row.LocalCell( relnew,LocalCell_Default,LocalColumn := column,RealValue := value );
      }
    }
    return localTable;
  *]
}
_Main/BL/Type_MP_Cell_AnnualPlanReport/StaticMethod_GetTableName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetTableName () const declarative remote as owning String
{
  TextBody:
  [*
    // rislai Aug-7-2024 (created)
    return "全年计划报表";
  *]
}
_Main/BL/Type_MP_Cell_AnnualPlanReport/_ROOT_Type_MP_Cell_AnnualPlanReport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization MP_Cell_AnnualPlanReport
{
  #keys: '2[412672.1.107700065][412672.1.107700060]'
  Parent: MP_Cell
  StructuredName: 'MP_Cell_AnnualPlanReports'
}
_Main/BL/Type_MP_Row/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[412672.1.107684682][412672.1.107684681][412672.1.107684683]'
  ValueType: String
}
_Main/BL/Type_MP_Row/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[412672.1.107684692][412672.1.107684691][412672.1.107684693]'
  ValueType: String
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -172,6 +172,17 @@
        Taborder: 12
      ]
    }
    Component ButtonAnnualPlanReport
    {
      #keys: '[412672.1.111811769]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOCUMENT_HEART'
        Label: '全年计划报表'
        Taborder: 13
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonAnnualPlanReport_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ActionBarGroupReport/ButtonAnnualPlanReport
Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonAnnualPlanReport_OnClick
{
  #keys: '[412672.1.111811838]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      // Open view
      ApplicationMacroPlanner.OpenView( 'AnnualPlanReport', this );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnOk_OnClick.def
@@ -4,6 +4,14 @@
{
  #keys: '[414996.0.415672898]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    flag := efBESI.Text().ToUpper() ~ "BESI";
    if( not flag ){
      feedback := "文件名中需要包含BESI";
    }
    return flag;
  *]
  QuillAction
  {
    Body:
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def
@@ -45,7 +45,7 @@
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanComparison701.dhFinelProduct'
            FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanChanges.dhFinelProduct'
            FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
            Source: 'dhComparisonData'
            Taborder: 0
@@ -73,7 +73,7 @@
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison701.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison701.dhEndDate'
            FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanChanges.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanChanges.dhEndDate'
            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() '
            Source: 'dhComparisonData'
            Taborder: 0
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_MatrixEditor.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
Quintiq file version 2.0
Component MatrixEditor
{
  #keys: '[412672.1.106503687]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCell
    {
      #keys: '[412672.1.106503688]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCells
        {
          #keys: '[412672.1.106503689]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MP_Table'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'MP_Row.MP_Cell.astype(MP_Cell_AnnualPlanReport)'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'NewSupply'
        Column: 'MP_Column'
        Row: 'MP_Row'
        Taborder: 0
      ]
    }
    Component MatrixEditorRows
    {
      #keys: '[412672.1.106503690]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRows
        {
          #keys: '[412672.1.106503691]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MP_Table'
            FilterArguments: 'checkedProduct:QMacroPlanner::FormAnnualPlanReport.dhFinelProduct;checkedStockingPoint:QMacroPlanner::FormAnnualPlanReport.dhFinelStockingPoint'
            FixedFilter: 'exists( checkedProduct,Elements,entity,entity.ID() = object.ProductID()) and exists( checkedStockingPoint,Elements,entity,entity.DisplayName() = object.StockingPointID())'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'MP_Row'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumns
    {
      #keys: '[412672.1.106503692]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumns
        {
          #keys: '[412672.1.106503693]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MP_Table'
            FilterArguments: 'startDate:QMacroPlanner::FormAnnualPlanReport.dhStartDate;endDate:QMacroPlanner::FormAnnualPlanReport.dhEndDate'
            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() '
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'MP_Column'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Date'
        SortCriteria: 'Index'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageDemandComparison
    #child: matrixeditorContextMenuDemandComparison
  ]
  Properties:
  [
    AllowMultipleAttributes: true
    Columns: 'MatrixEditorColumns'
    ContextMenu: 'matrixeditorContextMenuDemandComparison'
    Rows: 'MatrixEditorRows'
    Taborder: 0
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_MatrixEditor510#127.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
Quintiq file version 2.0
Component MatrixEditor510 id:MatrixEditor510_127
{
  #keys: '[412672.1.106503696]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCell294
    {
      #keys: '[412672.1.106503697]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCells611
        {
          #keys: '[412672.1.106503698]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            Source: 'dhComparisonData854'
            Taborder: 0
            Transformation: 'LocalRow.LocalCell.astype(LocalCell_Default)'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'RealValue'
        Column: 'LocalColumn'
        Row: 'LocalRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRows221
    {
      #keys: '[412672.1.106503699]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRows116
        {
          #keys: '[412672.1.106503700]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'checkedProduct:QMacroPlanner::FormAnnualPlanReport.dhFinelProduct;checkedStockingPoint:QMacroPlanner::FormAnnualPlanReport.dhFinelStockingPoint'
            FixedFilter: 'exists( checkedProduct,Elements,entity,entity.ID() = object.ProductID()) and exists( checkedStockingPoint,Elements,entity,entity.DisplayName() = object.StockingPointID())'
            Source: 'dhComparisonData854'
            Taborder: 0
            Transformation: 'LocalRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumns391
    {
      #keys: '[412672.1.106503701]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumns655
        {
          #keys: '[412672.1.106503702]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'startDate:QMacroPlanner::FormAnnualPlanReport.dhStartDate;endDate:QMacroPlanner::FormAnnualPlanReport.dhEndDate;timeUnit:QMacroPlanner::FormAnnualPlanReport.dhTimeUnit'
            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() and object.TimeUnit() = timeUnit'
            Source: 'dhComparisonData854'
            Taborder: 0
            Transformation: 'LocalColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Date'
        SortCriteria: 'Index'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageDemandComparison234_1
    #child: matrixeditorContextMenuDemandComparison527_1
  ]
  Properties:
  [
    AllowMultipleAttributes: true
    Columns: 'MatrixEditorColumns391'
    ContextMenu: 'matrixeditorContextMenuDemandComparison527'
    Rows: 'MatrixEditorRows221'
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_PanelAnnualPlan.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
Quintiq file version 2.0
Component PanelAnnualPlan
{
  #keys: '[412672.1.106503682]'
  BaseType: 'WebPanel'
  Children:
  [
    Component dhComparisonData
    {
      #keys: '[412672.1.106503683]'
      BaseType: 'WebDataHolder'
      Databinding: 'MP_Table'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component dhCheckedProduct
    {
      #keys: '[412672.1.106503684]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Children:
      [
        Component deCheckedProduct
        {
          #keys: '[412672.1.106503685]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Product_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedProduct'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 5
      ]
    }
    Component dhFinelProduct
    {
      #keys: '[412672.1.106503686]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhComparisonData854
    {
      #keys: '[412672.1.106503705]'
      BaseType: 'WebDataHolder'
      Databinding: 'LocalTable'
      Properties:
      [
        Taborder: 3
      ]
    }
    #child: MatrixEditor
    #child: MatrixEditor510_127
    Component dhCheckedStockingPoint
    {
      #keys: '[412672.1.107978890]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Entity]*'
      Children:
      [
        Component deCheckedStockingPoint
        {
          #keys: '[412672.1.107978891]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Entity]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedEntities'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 7
      ]
    }
    Component dhFinelStockingPoint
    {
      #keys: '[412672.1.107978915]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Entity]*'
      Properties:
      [
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_PanelRibbon#805.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
Component PanelRibbon id:PanelRibbon_805
{
  #keys: '[412672.1.106503600]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelRibbon322
  ]
  Properties:
  [
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_PanelRibbon322.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
Quintiq file version 2.0
Component PanelRibbon322
{
  #keys: '[412672.1.106503607]'
  BaseType: 'WebPanel'
  Children:
  [
    Component dsStartDate
    {
      #keys: '[412672.1.106503612]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        Label: 'Start Date'
        Taborder: 4
      ]
    }
    Component dhStartDate
    {
      #keys: '[412672.1.106503613]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date*'
      Properties:
      [
        Taborder: 5
      ]
    }
    Component dsEndDate
    {
      #keys: '[412672.1.106503614]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        Date: 9999-12-31
        Label: 'End Date'
        Taborder: 6
      ]
    }
    Component dhEndDate
    {
      #keys: '[412672.1.106503615]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date*'
      Properties:
      [
        Taborder: 7
      ]
    }
    Component ButtonRibbon
    {
      #keys: '[412672.1.106504238]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'C_CLAMP'
        Label: 'Create'
        Taborder: 0
        Visible: false
      ]
    }
    Component ButtonRibbon682
    {
      #keys: '[412672.1.108512062]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'C_CLAMP'
        Label: 'Create full table'
        Taborder: 1
      ]
    }
    Component rbgTimeUnit
    {
      #keys: '[412672.1.108680900]'
      BaseType: 'WebRadioButtonGroup'
      Properties:
      [
        BoundValue: 'Day'
        ButtonLabels: 'Day;Week;Month'
        ButtonValues: 'Day;Week;Month'
        Taborder: 2
      ]
    }
    Component dhTimeUnit
    {
      #keys: '[412672.1.111067302]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 3
      ]
    }
    #child: pExport
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixEditorActionBarPageDemandComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageDemandComparison
{
  #keys: '[412672.1.106503694]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixEditorActionBarPageDemandComparison234#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageDemandComparison234 id:matrixEditorActionBarPageDemandComparison234_1
{
  #keys: '[412672.1.106503703]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixeditorContextMenuDemandComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuDemandComparison
{
  #keys: '[412672.1.106503695]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_matrixeditorContextMenuDemandComparison527#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuDemandComparison527 id:matrixeditorContextMenuDemandComparison527_1
{
  #keys: '[412672.1.106503704]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Component_pExport.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
Quintiq file version 2.0
Component pExport
{
  #keys: '[412672.1.111157999]'
  BaseType: 'WebPanel'
  Children:
  [
    Component bExport id:bExport_474
    {
      #keys: '[412672.1.111158037]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 0
      ]
    }
    Component dhXMLDataListener id:dhXMLDataListener_801
    {
      #keys: '[412672.1.111158064]'
      BaseType: 'WebDataHolder'
      Databinding: 'ExportXMLManager'
      Children:
      [
        Component DataExtractorRibbon id:DataExtractorRibbon_462
        {
          #keys: '[412672.1.111158065]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            FixedFilter: 'object.Name() = MP_Cell_ScheduleSummary::GetTableName()'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'ExportXMLManager'
          ]
        }
      ]
      Properties:
      [
        Taborder: 1
      ]
    }
    Component bDownload id:bDownload_520
    {
      #keys: '[412672.1.111158091]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOWNLOAD'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Taborder: 8
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhCheckedProduct_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhCheckedProduct
Response OnDataChanged () id:Response_PanelAnnualPlan_dhCheckedProduct_OnDataChanged
{
  #keys: '[412672.1.106503680]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        dhFinelProduct.Data( this.Data().Copy() );
      }else{
        dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhCheckedStockingPoint_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhCheckedStockingPoint
Response OnDataChanged () id:Response_PanelAnnualPlan_dhCheckedStockingPoint_OnDataChanged
{
  #keys: '[412672.1.107978888]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        dhFinelStockingPoint.Data( this.Data().Copy() );
      }else{
        dhFinelStockingPoint.Data( DataHolderEntities.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhComparisonData854_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhComparisonData854
Response OnCreated () id:Response_PanelAnnualPlan_dhComparisonData854_OnCreated
{
  #keys: '[412672.1.106503674]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhComparisonData854_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhComparisonData854
Response OnDataChanged () id:Response_PanelAnnualPlan_dhComparisonData854_OnDataChanged
{
  #keys: '[412672.1.106503673]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      PanelAnnualPlan.Title( this.Data().Name() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhComparisonData_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhComparisonData
Response OnCreated () id:Response_PanelAnnualPlan_dhComparisonData_OnCreated
{
  #keys: '[412672.1.106503681]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      table := select( MacroPlan,MP_Table,table,table.Name() = MP_Cell_AnnualPlanReport::GetTableName() );
      dhComparisonData.Data( table );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhFinelProduct_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhFinelProduct
Response OnCreated () id:Response_PanelAnnualPlan_dhFinelProduct_OnCreated
{
  #keys: '[412672.1.106503679]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( DataHolderProduct.Data().Copy() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelAnnualPlan_dhFinelStockingPoint_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelAnnualPlan/dhFinelStockingPoint
Response OnCreated () id:Response_PanelAnnualPlan_dhFinelStockingPoint_OnCreated
{
  #keys: '[412672.1.107978913]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( DataHolderEntities.Data().Copy() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_ButtonRibbon682_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: PanelRibbon322/ButtonRibbon682
Response OnClick () id:Response_PanelRibbon322_ButtonRibbon682_OnClick
{
  #keys: '[412672.1.108512122]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      table := MP_Cell_AnnualPlanReport::CreateFullTable( ApplicationMacroPlanner.GetMacroPlans(),RecycleBin );
      dhComparisonData854.Data( table );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_ButtonRibbon_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelRibbon322/ButtonRibbon
Response OnClick () id:Response_PanelRibbon322_ButtonRibbon_OnClick
{
  #keys: '[412672.1.106504261]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      table := MP_Cell_AnnualPlanReport::Create( MacroPlan );
      dhComparisonData.Data( table );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dhEndDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon322/dhEndDate
Response OnCreated () id:Response_PanelRibbon322_dhEndDate_OnCreated
{
  #keys: '[412672.1.106503587]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( Date::MaxDate() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dhStartDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon322/dhStartDate
Response OnCreated () id:Response_PanelRibbon322_dhStartDate_OnCreated
{
  #keys: '[412672.1.106503589]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( Date::MinDate() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dhTimeUnit_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon322/dhTimeUnit
Response OnCreated () id:Response_PanelRibbon322_dhTimeUnit_OnCreated
{
  #keys: '[412672.1.111098277]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( "Day" );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dsEndDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon322/dsEndDate
Response OnChanged () id:Response_PanelRibbon322_dsEndDate_OnChanged
{
  #keys: '[412672.1.106503588]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhEndDate.Data( this.Date() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_dsStartDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon322/dsStartDate
Response OnChanged () id:Response_PanelRibbon322_dsStartDate_OnChanged
{
  #keys: '[412672.1.106503590]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhStartDate.Data( this.Date() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_PanelRibbon322_rbgTimeUnit_OnUserChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon322/rbgTimeUnit
Response OnUserChanged () id:Response_PanelRibbon322_rbgTimeUnit_OnUserChanged
{
  #keys: '[412672.1.111001324]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnUserChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhTimeUnit.Data( this.BoundValue() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pExport_bDownload_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: pExport/bDownload_520
Response OnClick () id:Response_pExport_bDownload_OnClick
{
  #keys: '[412672.1.111158090]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    flag := true;
    feedback := "";
    if( isnull( dhXMLDataListener.Data() )){
      flag := false;
      feedback := "当前无下载数据,点击导出创建下载数据。"
    }
    return flag;
  *]
  QuillAction
  {
    Body:
    [*
      binaryValue := dhXMLDataListener.Data( ).Export();
      Application.Download( MP_Cell_ScheduleSummary::GetTableName() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
      dhXMLDataListener.Data( ).Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pExport_bExport_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: pExport/bExport_474
Response OnClick () id:Response_pExport_bExport_OnClick
{
  #keys: '[412672.1.111158036]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      rows := selectset( dhComparisonData854.Data(),LocalRow,row,exists( dhFinelProduct.Data(),Elements,entity,entity.ID() = row.ProductID()) and exists( dhFinelStockingPoint.Data(),Elements,entity,entity.DisplayName() = row.StockingPointID()));
      columns := selectset( dhComparisonData854.Data(),LocalColumn,column,dhStartDate.Data() <= column.Date() and dhEndDate.Data() > column.Date() );
      LocalCell_ScheduleSummary::AsyncExport( RecycleBin,rows,columns );
      //Application.Download( "产出导入模板.xlsx",data.AsBinaryData() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/_ROOT_Component_FormAnnualPlanReport.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormAnnualPlanReport
{
  #keys: '[412672.1.106503510]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelRibbon_805
    #child: PanelAnnualPlan
  ]
  Properties:
  [
    Image: 'DOCUMENT_HEART'
    Title: '全年计划报表'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pHeader.def
@@ -32,6 +32,8 @@
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'PIG'
        Label: 'Button655'
        Taborder: 2
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_MatrixEditor859.def
@@ -45,6 +45,8 @@
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'checkedEntity:QMacroPlanner::FormComprehensiveStandardHoursReport.dhFinelEntity'
            FixedFilter: 'exists( checkedEntity,Elements,entity,entity.DisplayName() = object.Name())'
            Source: 'dhTable'
            Taborder: 0
            Transformation: 'LocalRow'
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_Panel743.def
@@ -16,6 +16,41 @@
        Taborder: 1
      ]
    }
    Component dhFinelEntity
    {
      #keys: '[412672.1.111002548]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Entity]*'
      Properties:
      [
        Taborder: 2
      ]
    }
    Component dhCheckedEntity
    {
      #keys: '[412672.1.111002571]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Entity]*'
      Children:
      [
        Component deCheckedStockingPoint id:deCheckedStockingPoint_217
        {
          #keys: '[412672.1.111002572]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Entity]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedEntities'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction#633.def
@@ -52,10 +52,57 @@
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'CALCULATOR'
        Label: 'Calculating'
        Taborder: 4
      ]
    }
    Component bExport
    {
      #keys: '[412672.1.106501907]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 5
      ]
    }
    Component bDownload
    {
      #keys: '[412672.1.106502003]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOWNLOAD'
        Taborder: 6
      ]
    }
    Component dhXMLDataListener
    {
      #keys: '[412672.1.106502023]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[ExportXMLManager]*'
      Children:
      [
        Component DataExtractor510
        {
          #keys: '[412672.1.106502024]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            FixedFilter: 'object.Name() = "综合工时制报表" or object.Name() = "标准工时制报表"'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'ExportXMLManager'
          ]
        }
      ]
      Properties:
      [
        Taborder: 7
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_Panel743_dhCheckedEntity_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: Panel743/dhCheckedEntity
Response OnDataChanged () id:Response_Panel743_dhCheckedEntity_OnDataChanged
{
  #keys: '[412672.1.111002569]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        dhFinelEntity.Data( this.Data().Copy() );
      }else{
        dhFinelEntity.Data( DataHolderEntities.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_Panel743_dhFinelEntity_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: Panel743/dhFinelEntity
Response OnCreated () id:Response_Panel743_dhFinelEntity_OnCreated
{
  #keys: '[412672.1.111002546]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( DataHolderEntities.Data().Copy() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bDownload_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#parent: pOperaction/bDownload
Response OnClick () id:Response_PanelOperation_568_bDownload_OnClick
{
  #keys: '[412672.1.106502002]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    flag := true;
    feedback := "";
    if( dhXMLDataListener.Data().Size() = 0 ){
      flag := false;
      feedback := "当前无下载数据,点击导出创建下载数据。"
    }
    return flag;
  *]
  QuillAction
  {
    Body:
    [*
      traverse( dhXMLDataListener.Data(),Elements,element ){
        binaryValue := element.Export();
        Application.Download( element.Name() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
        element.Delete();
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bExport_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pOperaction/bExport
Response OnClick () id:Response_pOperaction_bExport_OnClick
{
  #keys: '[412672.1.106502326]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      rows := selectset( dhTable.Data(),LocalRow,row,true );
      columns := selectset( dhTable.Data( ),LocalColumn,column,true );
      LocalCell_Default::AsyncExport( RecycleBin, rows, columns );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Views/AnnualPlanReport.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,255 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormAnnualPlanReport
      {
        title: 'QMacroPlanner::FormAnnualPlanReport'
        shown: true
        componentID: 'QMacroPlanner::FormAnnualPlanReport'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 20
          columnPosition: 1
          columnSpan: 9
        }
        components
        {
          FormAnnualPlanReport_PanelRibbon
          {
            sizeRatio: 1
          }
          FormAnnualPlanReport_PanelRibbon322
          {
            sizeRatio: 1
          }
          FormAnnualPlanReport_pExport
          {
            sizeRatio: 1
          }
          FormAnnualPlanReport_PanelAnnualPlan
          {
            sizeRatio: 1
          }
          FormAnnualPlanReport_MatrixEditor
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 341
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QMacroPlanner::FormAnnualPlanReport.MatrixEditor'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_NewSupply
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'NewSupply'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'Index'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'Index'"
                  }
                }
              }
            }
          }
          FormAnnualPlanReport_MatrixEditor510
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QMacroPlanner::FormAnnualPlanReport.MatrixEditor510'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_RealValue
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'RealValue'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'Index'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'Index'"
                  }
                }
              }
            }
          }
        }
      }
      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: 'Name'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: 'Description'
              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'
              CarCo_KPISetting: 'Blending'
            }
          }
          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: 'Name'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 26
    image: 'DOCUMENT_HEART'
    description: ''
  }
  formatversion: 2
  id: 'AnnualPlanReport'
  name: 'AnnualPlanReport'
  isglobal: false
  isroot: true
}