| Quintiq file version 2.0 | 
| #parent: #root | 
| Function CalcMinDurationCombi | 
| { | 
|   TextBody: | 
|   [* | 
|     value := guard( this.FirstCombiElement().OptCampaignElementType().MinDurationCombi(),  Duration::Zero() ); | 
|     prevocusp := this.OptCampaignUnitSubPeriod().PreviousSubPeriod(); | 
|     optunit := this.OptCampaignUnitSubPeriod().OptCampaignUnit(); | 
|      | 
|     if( guard( prevocusp.IsFixed(), true ) ) | 
|     { | 
|       //if this is start of horizon and we have an existing campaign/transition planned | 
|       //we want to take its duration in account in the calculation | 
|       lastcampaign := optunit.LastCampaignBeforeOptHorizon(); | 
|       lasttransition := optunit.LastTransitionBeforeOptHorizon(); | 
|       if( not isnull( lastcampaign ) ) | 
|       { | 
|         value := maxvalue( value - lastcampaign.Duration(), Duration::Zero() ); | 
|       } | 
|       else if ( not isnull( lasttransition ) ) | 
|       { | 
|         duration := this.OptCampaignUnitSubPeriod().StartTime() - lasttransition.Start();  | 
|         value := maxvalue( value - duration, Duration::Zero() ); | 
|       } | 
|     } | 
|      | 
|     this.MinDurationCombi( value ); | 
|   *] | 
| } |