| 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; | 
|   *] | 
| } |