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