Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method UpdateScalingFactors ( 
 | 
  MacroPlan macroplan 
 | 
) 
 | 
{ 
 | 
  Description: 'Updates the scaling factors based on the results of the automatic scaling algorithm' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Select the active strategy 
 | 
    strategy := macroplan.StrategyMacroPlan().GetStrategy( this );  
 | 
     
 | 
    // Update the scaling factors 
 | 
    if( not isnull( strategy ) ) 
 | 
    { 
 | 
      if ( macroplan.StrategyMacroPlan().UseMetaOptimizer() )  
 | 
      { 
 | 
        // for the meta optimizer we compute level specific scaling factor 
 | 
        traverse( macroplan, StrategyMacroPlan.StrategyLevelMacroPlan, slm )  
 | 
        { 
 | 
         samplesuggestion := macroplan.Optimization().AlgorithmScaling().GetMajoritySuggestionForMetaIteration( slm.Level() );  
 | 
           
 | 
          if ( not isnull( samplesuggestion ) )  
 | 
          { 
 | 
            slm.MetaScalingFactorInventoryHolding( samplesuggestion.ScalingFactorInventoryHolding() );  
 | 
            slm.MetaScalingFactorMass( samplesuggestion.ScalingFactorMass() );  
 | 
            slm.MetaScalingFactorMonetary( samplesuggestion.ScalingFactorMonetary() );  
 | 
            slm.MetaScalingFactorTime( samplesuggestion.ScalingFactorTime() );  
 | 
            slm.MetaScalingFactorTimeAccount( samplesuggestion.ScalingFactorTimeAccount() );  
 | 
            slm.MetaLastAutoScalingRun( DateTime::ActualTime() );  
 | 
           
 | 
            if ( macroplan.StrategyMacroPlan().MetaOptimizerRunFullPlanPriorToFocus()           // if we run the full plan optimizer prior to focus level 
 | 
                 and macroplan.StrategyMacroPlan().MetaOptimizerFirstLevelHasOverride()         // put those scaling factors at the global level  
 | 
                 and macroplan.StrategyMacroPlan().MetaOptimizerFirstLevel() = slm.Level() + 1 )  
 | 
            { 
 | 
              strategy.InventoryHoldingScalingFactor( slm.MetaScalingFactorInventoryHolding() );  
 | 
              strategy.MassScalingFactor( slm.MetaScalingFactorMass() );  
 | 
              strategy.MonetaryScalingFactor( slm.MetaScalingFactorMonetary() );  
 | 
              strategy.TimeScalingFactor( slm.MetaScalingFactorTime() );  
 | 
              strategy.TimeAccountScalingFactor( slm.MetaScalingFactorTimeAccount() ); 
 | 
              strategy.LastAutoScalingRun( slm.MetaLastAutoScalingRun() );   
 | 
               
 | 
              // also update on mp copy  
 | 
              macroplan.StrategyMacroPlan().LastAutoScalingRun( strategy.LastAutoScalingRun() );  
 | 
              macroplan.StrategyMacroPlan().MassScalingFactor( strategy.MassScalingFactor() );  
 | 
              macroplan.StrategyMacroPlan().MonetaryScalingFactor( strategy.MonetaryScalingFactor() );  
 | 
              macroplan.StrategyMacroPlan().TimeScalingFactor( strategy.TimeScalingFactor() );  
 | 
              macroplan.StrategyMacroPlan().TimeAccountScalingFactor( strategy.TimeAccountScalingFactor() );  
 | 
              macroplan.StrategyMacroPlan().InventoryHoldingScalingFactor( strategy.InventoryHoldingScalingFactor() );  
 | 
            } 
 | 
            else 
 | 
            { 
 | 
              slevel := select(  strategy, StrategyLevel, lvl, true, lvl.Level() = slm.Level() );  
 | 
               
 | 
              slevel.MetaScalingFactorInventoryHolding( slm.MetaScalingFactorInventoryHolding() );  
 | 
              slevel.MetaScalingFactorMass( slm.MetaScalingFactorMass() );  
 | 
              slevel.MetaScalingFactorMonetary( slm.MetaScalingFactorMonetary() );  
 | 
              slevel.MetaScalingFactorTime( slm.MetaScalingFactorTime() );  
 | 
              slevel.MetaScalingFactorTimeAccount( slm.MetaScalingFactorTimeAccount() ); 
 | 
              slevel.MetaLastAutoScalingRun( slm.MetaLastAutoScalingRun() );   
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        run := macroplan.GetLastAlgorithmRun(); 
 | 
        strategy.MassScalingFactor( guard( select( run, ScalingType_Lib, st, st.Name() = Optimization::ScalingTypeNameMass() ).SuggestedScalingFactor(), 
 | 
                                           strategy.MassScalingFactor() )); 
 | 
        strategy.MonetaryScalingFactor( guard( select( run, ScalingType_Lib, st, st.Name() = Optimization::ScalingTypeNameMonetary() ).SuggestedScalingFactor(), 
 | 
                                               strategy.MonetaryScalingFactor() )); 
 | 
        strategy.TimeScalingFactor( guard( select( run, ScalingType_Lib, st, st.Name() = Optimization::ScalingTypeNameTime() ).SuggestedScalingFactor(), 
 | 
                                           strategy.TimeScalingFactor() )); 
 | 
        strategy.TimeAccountScalingFactor( guard( select( run, ScalingType_Lib, st, st.Name() = Optimization::ScalingTypeNameTimeAccount() ).SuggestedScalingFactor(), 
 | 
                                                  strategy.TimeAccountScalingFactor() )); 
 | 
        strategy.InventoryHoldingScalingFactor( guard( select( run, ScalingType_Lib, st, st.Name() = Optimization::ScalingTypeNameInventoryHolding() ).SuggestedScalingFactor(), 
 | 
                                                       strategy.InventoryHoldingScalingFactor() )); 
 | 
         
 | 
        // Update the date when the autoscaling was last run for macroplan strategy 
 | 
        strategy.LastAutoScalingRun( DateTime::ActualTime() ); 
 | 
         
 | 
        // also update on mp copy  
 | 
        macroplan.StrategyMacroPlan().LastAutoScalingRun( strategy.LastAutoScalingRun() );  
 | 
        macroplan.StrategyMacroPlan().MassScalingFactor( strategy.MassScalingFactor() );  
 | 
        macroplan.StrategyMacroPlan().MonetaryScalingFactor( strategy.MonetaryScalingFactor() );  
 | 
        macroplan.StrategyMacroPlan().TimeScalingFactor( strategy.TimeScalingFactor() );  
 | 
        macroplan.StrategyMacroPlan().TimeAccountScalingFactor( strategy.TimeAccountScalingFactor() );  
 | 
        macroplan.StrategyMacroPlan().InventoryHoldingScalingFactor( strategy.InventoryHoldingScalingFactor() );  
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |