Quintiq file version 2.0 
 | 
#parent: #root 
 | 
MethodOverride SyncSubsetProduct ( 
 | 
  OptimizerPuzzleBase target 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Copy subset product from WIP to OP 
 | 
    optimizerpuzzle := target.astype( OptimizerPuzzle ); 
 | 
    isfromdb := false; 
 | 
     
 | 
    currentList := selectset( optimizerpuzzle, SubsetProductInOptimizerPuzzle, sub , true ); 
 | 
    newList := construct( SubsetProductInOptimizerPuzzles ); 
 | 
     
 | 
    // Copy or update isuserAction and GetIsSystem subsets 
 | 
    // Not taking into consideration Product without Parent if Include because of default behaviour 
 | 
    traverse( this, SubsetProductInOptimizerPuzzleWip, subsource, subsource.IsUserAction() ) 
 | 
    { 
 | 
      targetSubset := SubsetProductInOptimizerPuzzle::FindSubsetProductOptimizerPuzzleTypeIndices( optimizerpuzzle.Name(), subsource.ProductID() ); 
 | 
      // Case create a new OptimizerPuzzle 
 | 
      if( isnull( targetSubset ) ) 
 | 
      { 
 | 
        // Create a SubsetProduct for OptimizerPuzzle.  
 | 
        targetSubset := SubsetProductInOptimizerPuzzle::Create( optimizerpuzzle, subsource.Product_MP(), isfromdb ); 
 | 
      } 
 | 
      // Case edit 
 | 
      else 
 | 
      { 
 | 
        if( targetSubset.OptimizerPuzzleName() <> this.Name() ) 
 | 
        { 
 | 
          // Update OptimizerPuzzleID and ProductID 
 | 
          SubsetProductInOptimizerPuzzle::ChangeKeySubsetProductOptimizerPuzzleTypeIndices( targetSubset, this.Name(), targetSubset.ProductID() ); 
 | 
        } 
 | 
      } 
 | 
       
 | 
      // Update IsInclude and IsUserAction 
 | 
      targetSubset.IsIncluded( subsource.IsIncluded() ); 
 | 
      targetSubset.IsUserAction( subsource.IsUserAction() ); 
 | 
      newList.Add( targetSubset ); 
 | 
    } 
 | 
     
 | 
    toBeDeleted := currentList.Difference( newList );  
 | 
    SubsetProductInOptimizerPuzzle::Delete( toBeDeleted ); 
 | 
  *] 
 | 
} 
 |