chenqinghong
2024-05-07 3ec06a830367465068963156dcc1d8e522571c13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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' }
}