Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method ResequenceCampaign ( 
 | 
  Campaign_MP sourcecampaign, 
 | 
  Campaign_MP targetcampaign, 
 | 
  Transition_MP transition, 
 | 
  DateTime droptime 
 | 
) 
 | 
{ 
 | 
  Description: 'Resequence selected campaign.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    campaigns := construct( Campaign_MPs ); 
 | 
    campaigns.Add(  sourcecampaign ); 
 | 
    beforesource := sourcecampaign.PreviousCampaign();  
 | 
     
 | 
    if( isnull( targetcampaign ) and isnull( transition ) ) 
 | 
    { 
 | 
      targetcampaign := maxselect( this, Campaign_MP, cpg, cpg.End() <= droptime and cpg <> sourcecampaign, cpg.End() ); 
 | 
      this.MoveAfterCampaign( sourcecampaign, targetcampaign );  
 | 
      campaigns.Add( targetcampaign ); 
 | 
    } 
 | 
    else if( not isnull( transition ) ) 
 | 
    { 
 | 
      targetcampaign := transition.FromCampaign(); 
 | 
      this.MoveAfterCampaign( sourcecampaign, targetcampaign ); 
 | 
      campaigns.Add( targetcampaign );    
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      this.MoveBeforeCampaign( sourcecampaign, targetcampaign );  
 | 
      campaigns.Add( targetcampaign ); 
 | 
    } 
 | 
     
 | 
    // Reset and delete related period tasks 
 | 
    Unit::ResetAndDeletePeriodTasks( campaigns ); 
 | 
     
 | 
    // replan the next transition duration to be declarative (not optimizer determined anymore) 
 | 
    campaigns.Add( beforesource );  
 | 
    traverse( campaigns, Elements, campaign )  
 | 
    { 
 | 
      campaign.HasNextTransitionDurationByOpt( false );  
 | 
    } 
 | 
  *] 
 | 
} 
 |