| Quintiq file version 2.0 | 
| #parent: #root | 
| Method AutoAdjustPeriodTaskInCampaignQuantities | 
| { | 
|   TextBody: | 
|   [* | 
|     // Automatically adjust quantity of all period tasks of this campaign | 
|     // Traverse all campaign periods that is within a planning period | 
|     traverse( this, CampaignPeriod_MP, campaignperiod, | 
|               campaignperiod.UnitPeriod().IsPlanning() and not campaignperiod.UnitPeriod().IsPeriodFrozen() ) | 
|     { | 
|       // Check if UnitPeriod is type of UnitPeriodTime | 
|       if( campaignperiod.UnitPeriod().istype( UnitPeriodTime ) ) | 
|       { | 
|         // Get the capacity that this period is available for | 
|         unitperiodcapacity := campaignperiod.UnitPeriod().astype( UnitPeriodTime ).TotalAvailableCapacity(); | 
|         campaignperiodcapacity := campaignperiod.AvailableCapacityRatio() * unitperiodcapacity; | 
|      | 
|         // Select a set of all period tasks of this campaign | 
|         periodtasks := selectset( campaignperiod, PeriodTaskInCampaign, ptic, true ); | 
|      | 
|         // Check if this campaign has any period tasks | 
|         if( periodtasks.Size() > 0 ) | 
|         { | 
|           // TMP (todo oceaned) - For now capacity will be equally split among operations on the period | 
|           // Traverse all selected period tasks and update each task's quantity | 
|           traverse( periodtasks, Elements, periodtask ) | 
|           { | 
|             ptcampaigncapacity := campaignperiodcapacity; // * periodtask.OperationInCampaign().Ratio(); | 
|             operation := periodtask.PeriodTaskOperation().Operation(); | 
|             requiredcapacity := operation.GetCapacityUsagePerQuantity( periodtask.PeriodTaskOperation().UnitPeriod() ); | 
|             quantity := ptcampaigncapacity.HoursAsReal() * requiredcapacity; | 
|      | 
|             periodtask.Update( quantity, false, true ); | 
|           } | 
|         } | 
|       } | 
|     } | 
|   *] | 
| } |