Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Comparison ( 
 | 
  RecycleBin recycleBin, 
 | 
  const Archive archive 
 | 
) as LocalTable 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // rislai Jul-17-2024 (created) 
 | 
    macroPlan := this.MacroPlan(); 
 | 
    table := recycleBin.LocalTable( relnew,Name := LocalCell_ProductionComparison::GetTableName()); 
 | 
     
 | 
    actualDailyProductionDatas := selectset( archive,ActualDailyProductionData,data,true ); 
 | 
    actualDailyProductionDataIndexTree := NamedValueTree::Create(); 
 | 
    for( i := 0; i< actualDailyProductionDatas.Size(); i++ ){ 
 | 
      actualDailyProductionData := actualDailyProductionDatas.Element( i ); 
 | 
      actualDailyProductionDataKey := actualDailyProductionData.ProductNo() + actualDailyProductionData.ProductionDate().AsQUILL(); 
 | 
      actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey ); 
 | 
      actualDailyProductionDataIndexTree.Root().AddChild( actualDailyProductionDataHandle,i );  
 | 
    } 
 | 
     
 | 
    localColumns := construct( LocalColumns ); 
 | 
    localColumnIndexTree := NamedValueTree::Create(); 
 | 
    traverse( this,OfflinePlanColumn,column,column.ColumnDate() >=  macroPlan.StartOfPlanning().Date()){ 
 | 
      localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate()); 
 | 
      localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() ); 
 | 
      localColumns.Add( localColumn ); 
 | 
      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 ); 
 | 
    } 
 | 
     
 | 
    traverse( this,OfflinePlanRow,row,row.Type() = "1" ){ 
 | 
      productID := row.ProductID(); 
 | 
      // productLine := row.ProductionLine(); 
 | 
      localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID ); 
 | 
      traverse( row,OfflinePlanCell,cell,cell.OfflinePlanColumn().ColumnDate() >= macroPlan.StartOfPlanning().Date() ){ 
 | 
        localColumnHandle := localColumnIndexTree.GetHandle( cell.OfflinePlanColumn().ColumnDate().AsQUILL() ); 
 | 
        localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue )); 
 | 
        if( not isnull( localColumnIndex )){ 
 | 
          actualDailyProductionDataKey := productID + cell.OfflinePlanColumn().ColumnDate().AsQUILL(); 
 | 
          actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey ); 
 | 
          actualDailyProductionDataIndex := guard( actualDailyProductionDataIndexTree.Root().Child( actualDailyProductionDataHandle ),null( NamedValue )); 
 | 
           
 | 
          actualDailyProductionVolume := 0.0; 
 | 
          if( not isnull( actualDailyProductionDataIndex )){ 
 | 
            actualDailyProductionData := actualDailyProductionDatas.Element( actualDailyProductionDataIndex.GetValueAsNumber() ); 
 | 
            actualDailyProductionVolume := actualDailyProductionData.ActualOut(); 
 | 
          } 
 | 
          localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() ); 
 | 
          localRow.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := localColumn, 
 | 
                                           Plan := cell.Quantity(),Actual := actualDailyProductionVolume ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
    traverse( table,LocalColumn,column ){ 
 | 
      if( column.LocalCell( relsize ) = 0 ){ 
 | 
        column.Delete();  
 | 
      }  
 | 
    } 
 | 
    // maxCellCount := table.LocalRow( relsize );   
 | 
     
 | 
    //traverse( table,LocalColumn,column ){ 
 | 
    //  cellIndexTree := NamedValueTree::Create(); 
 | 
    //  columnKey := column.CustomDate().AsQUILL(); 
 | 
    //  count := 0; 
 | 
    //  traverse( column,LocalCell,cell ){ 
 | 
    //    rowKey := cell.LocalRow().CustomName(); 
 | 
    //    cellHandle := cellIndexTree.GetHandle( rowKey + columnKey ); 
 | 
    //    cellIndexTree.Root().AddChild( cellHandle,count ); 
 | 
    //    count++; 
 | 
    //  } 
 | 
    //  traverse( table,LocalRow,row ){ 
 | 
    //    rowKey := row.CustomName(); 
 | 
    //    cellHandle := cellIndexTree.GetHandle( rowKey + columnKey ); 
 | 
    //    cellCount := guard( cellIndexTree.Root().Child( cellHandle ),null( NamedValue )); 
 | 
    //    if( isnull( cellCount )){ 
 | 
    //      row.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := column, 
 | 
    //                     Plan := 0,Actual := 0 ); 
 | 
    //    } 
 | 
    //  } 
 | 
    //} 
 | 
     
 | 
    traverse( table,LocalRow,row ){ 
 | 
      cellCountTree := NamedValueTree::Create(); 
 | 
      traverse( row,LocalCell,cell ){ 
 | 
        cellHandle := cellCountTree.GetHandle( cell.LocalColumn().CustomDate().AsQUILL()); 
 | 
        cellCountTree.Root().AddChild( cellHandle,0 ); 
 | 
      } 
 | 
      traverse( table,LocalColumn,column ){ 
 | 
        cellHandle := cellCountTree.GetHandle( column.CustomDate().AsQUILL()); 
 | 
        cell := guard( cellCountTree.Root().Child( cellHandle ),null( NamedValue )); 
 | 
        if( isnull( cell )){ 
 | 
          row.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := column,Plan := 0,Actual := 0 ); 
 | 
        } 
 | 
      }  
 | 
    } 
 | 
     
 | 
    return table; 
 | 
  *] 
 | 
} 
 |