Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method RunSmartPlan ( 
 | 
  Boolean issmartplan, 
 | 
  Boolean issmartplanforperiodtask, 
 | 
  ProductInStockingPointInPeriodPlannings smartplanpispips, 
 | 
  Boolean hastotalsupplyuser, 
 | 
  Real totalsupplyuser, 
 | 
  Boolean isupstreamsmartplan, 
 | 
  Boolean ismiddleoutsmartplan, 
 | 
  Boolean isonlyplanonestepupstream, 
 | 
  Strategy strategy, 
 | 
  Boolean isoverridemanualplanning, 
 | 
  Period_MP periodstart, 
 | 
  Period_MP periodend, 
 | 
  Boolean isusingselectedunits, 
 | 
  Units units, 
 | 
  Process_MP process, 
 | 
  Boolean reusestrategymacroplan 
 | 
) 
 | 
{ 
 | 
  Description: 'Save the Smart plan settings and run the optimizer' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // The first step in a middle-out smart plan is a downstream smart plan  
 | 
     
 | 
    isupstreamsmartplan := isupstreamsmartplan and not ismiddleoutsmartplan; 
 | 
     
 | 
    // Update the smartplan information 
 | 
    if( isoverridemanualplanning ) 
 | 
    { 
 | 
      ProductInStockingPointInPeriod::ResetSupplies( smartplanpispips, true, false ); 
 | 
    } 
 | 
     
 | 
    if( smartplanpispips.Size() = 1 ) 
 | 
    { 
 | 
      // Set pispip hastotalsupplyuser and totalsupplyuser at the beginning of the smartplan run 
 | 
      // Be aware that this.HasTotalSupplyUser is set to true on OptimizerPostProcesssing method for the future optimizer runs 
 | 
      // If this is an upstream smart plan, set the total required user supply 
 | 
      // Otherwise set the total available user supply. 
 | 
      pispip := smartplanpispips.Element( 0 ); 
 | 
      if( isupstreamsmartplan ) 
 | 
      { 
 | 
        pispip.UpdateTotalSupplyUser( hastotalsupplyuser, totalsupplyuser ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        pispip.UpdateTotalAvailableSupplyUser( hastotalsupplyuser, totalsupplyuser ); 
 | 
      } 
 | 
    } 
 | 
     
 | 
     
 | 
    ispostprocessing := false; 
 | 
    forcenoautoscaling := false;  
 | 
     
 | 
    this.RunOptimizer( issmartplan,  
 | 
                       issmartplanforperiodtask,  
 | 
                       hastotalsupplyuser,  
 | 
                       totalsupplyuser,  
 | 
                       smartplanpispips, 
 | 
                       isupstreamsmartplan,  
 | 
                       ismiddleoutsmartplan,  
 | 
                       isonlyplanonestepupstream, 
 | 
                       ispostprocessing, 
 | 
                       forcenoautoscaling,  
 | 
                       strategy, 
 | 
                       isoverridemanualplanning, 
 | 
                       periodstart, periodend, 
 | 
                       false, // isinventoryoptimizationrun 
 | 
                       isusingselectedunits, 
 | 
                       units, 
 | 
                       process,  
 | 
                       this.OptimizerPuzzleWorld() ); 
 | 
  *] 
 | 
} 
 |