| Quintiq file version 2.0 | 
| #parent: #root | 
| Method CapacityPlanningAlgorithmHandleFeasibleOperationPeriodTask_SetPT ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   const RunContextForCapacityPlanning runcontext, | 
|   PeriodTaskOperation pt, | 
|   Real quantity | 
| ) | 
| { | 
|   Description: 'Assign the optimal quantity from optimizer for period task planned quantity' | 
|   TextBody: | 
|   [* | 
|     operation := pt.Operation( );  | 
|     period := pt.UnitPeriod().Period_MP();  | 
|     campaignSequencingEnabled := runcontext.UseCampaignSequenceOptimizer() | 
|      | 
|     if( not pt.HasUserQuantity() )        // has user flag will retain, while has feedback flag will be reset to optimizer flag. | 
|     { | 
|       pt.SetOptimizerQuantity( quantity );      | 
|     } | 
|      | 
|     // Assign optimizer fulfillment for dependent demand in input group. | 
|     // The dependent demand not in group will be fulfilled by greedy after the optimizer run, by setting SystemFulfilledQuantity. | 
|     this.CapacityPlanningAlgorithmHandleFeasibleOperationDependentDemandInputGroup( program, pt, runcontext ); | 
|        | 
|     // Assign period task in campaign type quantity. | 
|     // Period task in campaign type fulfillment | 
|     if( runcontext.UseCampaign() | 
|         and not campaignSequencingEnabled // for campaign sequencing already created the periodtask and their quantity | 
|         and period.GetIsInCampaignTypeHorizonUnit( operation.Unit() ) ) | 
|     { | 
|       if( operation.OperationInCampaignType( relsize ) > 0 ) | 
|       { | 
|         pt.CreatePeriodTaskInCampaigns();  | 
|          | 
|         traverse( pt, PeriodTaskInCampaign, ptct ) | 
|         { | 
|           if ( exists( ptct,  | 
|                        OperationInCampaign.Campaign_MP.PlanningCampaignPeriod,  | 
|                        cperiod, | 
|                        cperiod.UnitPeriod().Period_MP() = period ) ) | 
|           {                          | 
|             ptct.Quantity( this.GetOptimalValue( program.PTCampaignQtyVariables().Get( ptct.OperationInCampaign(), period ) ) );  | 
|           } | 
|         } | 
|       }  | 
|      | 
|       if( operation.OperationInTransitionType( relsize ) > 0 and not campaignSequencingEnabled )  | 
|       { | 
|         pt.CreatePeriodTaskInTransitions();  | 
|          | 
|         traverse( pt, PeriodTaskInTransition, ptt ) | 
|         { | 
|           ptt.Quantity( this.GetOptimalValue( program.PTTransitionQtyVariables().Get( ptt.OperationInTransition(), period ) ) ); | 
|         } | 
|       } | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |