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