Quintiq file version 2.0
|
#parent: #root
|
Method PreProcessCampaigns
|
{
|
Description: 'If the optimizer horizon starts in the middle of a campaign, we want to separate this campaign in two'
|
TextBody:
|
[*
|
startpuzzle := this.GetPuzzleStart();
|
unit := this.Unit()
|
startcampaign := null( Campaign_MP )
|
starttransition := null( Transition_MP )
|
|
startcampaign := select( unit, Campaign_MP, c, c.Start() < startpuzzle and c.End() >= startpuzzle )
|
starttransition := select( unit, Transition_MP, t, t.Start() < startpuzzle and t.End() >= startpuzzle )
|
//update the campaign to keep only the part before puzzle start
|
if( not isnull( startcampaign ) and not startcampaign.End() = startpuzzle )
|
{
|
newduration := startcampaign.Duration() - ( startcampaign.End() - startpuzzle )
|
startcampaign.Update( unit,
|
startcampaign.EarliestStart(),
|
newduration,
|
startcampaign.SequenceNumberForExcel(),
|
startcampaign.MinQuantity(),
|
startcampaign.MaxQuantity(),
|
startcampaign.MinDuration(),
|
startcampaign.MaxDuration(),
|
startcampaign.CampaignTypeName(),
|
startcampaign.CampaignID(),
|
startcampaign.Comment(),
|
startcampaign.HasInputMaxQuantity(),
|
startcampaign.HasInputMaxDuration(),
|
not startcampaign.IsManuallyConfigured()
|
)
|
startcampaign.SynchronizePeriodTaskInCampaignQuantities();
|
startcampaign.CampaignOptimizerPreProcessDuration( newduration ); // for use in meta optimizer because we need to be able to initialize back to this state, but also need to add to the duration
|
}
|
this.LastCampaignBeforeOptHorizon( relset, startcampaign )
|
this.LastTransitionBeforeOptHorizon( relset, starttransition )
|
*]
|
}
|