| 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' } | 
| } |