admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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_DELETED_Q320, campaignperiod,
              campaignperiod.UnitPeriod().IsPlanning() )
    {
      // 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 );
          }
        }
      }
    }
  *]
}