Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SetShiftPatterns ( 
 | 
  MacroPlan macroplan 
 | 
) 
 | 
{ 
 | 
  Description: 'We set a temporary shift pattern during meta optimizer processing for efficiency. Then in post-processing transfer the value over to regular planning using unit availability' 
 | 
  TextBody: 
 | 
  [* 
 | 
    updatedunits := construct( Units ); 
 | 
    traverse( macroplan, Unit, unit, unit.IsInOptimizerPuzzle() )  
 | 
    { 
 | 
      sortedups := selectsortedset( unit, UnitPeriod.astype( UnitPeriodTime ), up, true, up.Start() );  
 | 
      traverse( sortedups, Elements, up )  
 | 
      { 
 | 
        if ( up.HasTemporaryOptimizerShiftPattern() )  
 | 
        { 
 | 
          up.SetShift( up.ShiftPattern() ); // derived from TemporaryOptimizerShiftPattern 
 | 
          up.ClearTemporaryOptimizerShiftPattern();  
 | 
          updatedunits.Add( up.Unit() ); 
 | 
        } 
 | 
      }   
 | 
    } 
 | 
     
 | 
    // Clean up identical unit availabilities. 
 | 
    traverse( updatedunits.Unique(), Elements, unit ) 
 | 
    { 
 | 
      unit.CleanUpUnitAvailability(); 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |