Quintiq file version 2.0
|
#parent: #root
|
Method SynchronizePeriodTaskInCampaignQuantity (
|
DateTime start,
|
DateTime end,
|
SupplyBase supply
|
)
|
{
|
Description: 'Distribute periodtask quantity to periodtaskincampaign'
|
TextBody:
|
[*
|
if ( not this.MacroPlan().IsOptimizerRunning() )
|
{
|
if ( not isnull( supply ) and supply.istype( NewSupply ) )
|
{
|
periodtask := supply.astype( NewSupply ).GetPeriodTaskOperation();
|
// Synchornize number of PeriodTaskInCampaign and PeriodTaskInTransition
|
if ( periodtask.UnitPeriod().CampaignPeriod_MP( relsize ) > periodtask.PeriodTaskInCampaign( relsize ) )
|
{
|
periodtask.CreatePeriodTaskInCampaigns();
|
Transaction::Transaction().Propagate( relation( CampaignPeriod_MP, PeriodTaskInCampaign ) );
|
}
|
|
if ( periodtask.UnitPeriod().TransitionPeriod_MP( relsize ) > periodtask.PeriodTaskInTransition( relsize ) )
|
{
|
periodtask.CreatePeriodTaskInTransitions();
|
Transaction::Transaction().Propagate( relation( TransitionPeriod_MP, PeriodTaskInTransition ) );
|
}
|
|
// Reset as there might be part of the period task is planned to the transition, if the periodtask replan should replan transition
|
periodtask.ResetPeriodTaskInTransition();
|
|
periodtaskincampaigns := selectsortedset( periodtask, PeriodTaskInCampaign, ptc, ptc.CampaignPeriod_MP().Start() );
|
totalduration := sum( periodtaskincampaigns, Elements.CampaignPeriod_MP, duration, true, duration.Duration() ).HoursAsReal();
|
|
remainingqty := periodtask.UserQuantity();
|
|
traverse( periodtaskincampaigns, Elements, ptc )
|
{
|
ptcampaigncapacity := ptc.CampaignPeriod_MP().Duration().HoursAsReal()/ totalduration;
|
ptcampaigncapacity := maxvalue( ptcampaigncapacity, 0.0 );
|
ptcqty := minvalue( ptcampaigncapacity * periodtask.UserQuantity(), remainingqty );
|
ptc.Update( ptcqty, false, false );
|
remainingqty := maxvalue( remainingqty - ptcqty, 0.0 );
|
}
|
|
this.SynchronizePeriodTaskInTransitionQuantity( periodtaskincampaigns );
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|