| 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() ); | 
|   *] | 
| } |