Quintiq file version 2.0
|
#parent: #root
|
StaticMethod Compared (
|
RecycleBin recycleBin,
|
const OfflinePlanTable baseOfflinePlan,
|
const OfflinePlanTable compareOfflinePlan
|
) as LocalTable
|
{
|
TextBody:
|
[*
|
// rislai Jun-20-2024 (created)
|
table := recycleBin.LocalTable( relnew,Name := LocalCell_OfflinePlanComparison::GetTableName());
|
|
localColumns := construct( LocalColumns );
|
localColumnIndexTree := NamedValueTree::Create();
|
traverse( baseOfflinePlan,OfflinePlanColumn,column,column.ColumnDate() >= baseOfflinePlan.MacroPlan().StartOfPlanning().Date()){
|
localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() );
|
localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
|
if( isnull( localColumnIndex )){
|
localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate());
|
localColumns.Add( localColumn );
|
localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
|
}
|
}
|
traverse( compareOfflinePlan,OfflinePlanColumn,column,column.ColumnDate() >= compareOfflinePlan.MacroPlan().StartOfPlanning().Date()){
|
localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() );
|
localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
|
if( isnull( localColumnIndex )){
|
localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate());
|
localColumns.Add( localColumn );
|
localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
|
}
|
}
|
|
baseOfflinePlanCells := construct( OfflinePlanCells, constcontent );
|
baseOfflinePlanCellIndexTree := NamedValueTree::Create();
|
compareOfflinePlanCells := construct( OfflinePlanCells, constcontent );
|
compareOfflinePlanCellIndexTree := NamedValueTree::Create();
|
|
localRows := construct( LocalRows );
|
localRowIndexTree := NamedValueTree::Create();
|
|
traverse( baseOfflinePlan,OfflinePlanRow,row,row.Type() = "1" ){
|
rowKey := row.ProductID() + "@$#" + row.ProductionLine()+ "@$#";
|
localRowHandle := localRowIndexTree.GetHandle( rowKey );
|
localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
|
if( isnull( localRowIndex )){
|
localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := row.ProductID(),Remark := rowKey );
|
localRows.Add( localRow );
|
localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
|
}
|
traverse( row,OfflinePlanCell,cell ){
|
columnKey := cell.OfflinePlanColumn().ColumnDate().AsQUILL();
|
cellKey := rowKey + columnKey;
|
cellHandle := baseOfflinePlanCellIndexTree.GetHandle( cellKey );
|
baseOfflinePlanCells.Add( cell );
|
baseOfflinePlanCellIndexTree.Root().AddChild( cellHandle,baseOfflinePlanCells.Size() - 1 );
|
}
|
}
|
traverse( compareOfflinePlan,OfflinePlanRow,row,row.Type() = "1" ){
|
rowKey := row.ProductID() + "@$#" + row.ProductionLine()+ "@$#";
|
localRowHandle := localRowIndexTree.GetHandle( rowKey );
|
localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
|
if( isnull( localRowIndex )){
|
localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := row.ProductID(),Remark := rowKey );
|
localRows.Add( localRow );
|
localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
|
}
|
traverse( row,OfflinePlanCell,cell ){
|
columnKey := cell.OfflinePlanColumn().ColumnDate().AsQUILL();
|
cellHandle := compareOfflinePlanCellIndexTree.GetHandle( rowKey + columnKey );
|
compareOfflinePlanCells.Add( cell );
|
compareOfflinePlanCellIndexTree.Root().AddChild( cellHandle,compareOfflinePlanCells.Size() - 1 );
|
}
|
}
|
|
traverse( localRows,Elements,localRow ){
|
rowKey := localRow.Remark();
|
traverse( localColumns,Elements,localColumn ){
|
columnKey := localColumn.CustomDate().AsQUILL();
|
cellKey := rowKey + columnKey;
|
|
baseOfflinePlanCell := constnull( OfflinePlanCell );
|
compareOfflinePlanCell := constnull( OfflinePlanCell );
|
baseOfflinePlanCellIndex := guard( baseOfflinePlanCellIndexTree.Root().Child( baseOfflinePlanCellIndexTree.GetHandle( cellKey ) ),null( NamedValue ));
|
compareOfflinePlanCellIndex := guard( compareOfflinePlanCellIndexTree.Root().Child( compareOfflinePlanCellIndexTree.GetHandle( cellKey ) ),null( NamedValue ));
|
if( not isnull( baseOfflinePlanCellIndex )){
|
baseOfflinePlanCell := baseOfflinePlanCells.Element( baseOfflinePlanCellIndex.GetValueAsNumber() );
|
}
|
if( not isnull( compareOfflinePlanCellIndex )){
|
compareOfflinePlanCell := compareOfflinePlanCells.Element( compareOfflinePlanCellIndex.GetValueAsNumber() );
|
}
|
|
localRow.LocalCell( relnew,LocalCell_OfflinePlanComparison,LocalColumn := localColumn,
|
BaseVersion := ifexpr( isnull( baseOfflinePlanCell),0.0,baseOfflinePlanCell.Quantity()),
|
CompareVersion := ifexpr( isnull( compareOfflinePlanCell),0.0,compareOfflinePlanCell.Quantity()));
|
}
|
}
|
traverse( table,LocalColumn,column ){
|
if( column.LocalCell( relsize ) = 0 ){
|
column.Delete();
|
}
|
}
|
|
return table;
|
*]
|
}
|