yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Quintiq file version 2.0
#parent: #root
Function CalcMaxDurationCombi
{
  TextBody:
  [*
    value := guard( this.FirstCombiElement().OptCampaignElementType().MaxDurationCombi(),  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.MaxDurationCombi( value );
  *]
}