| Quintiq file version 2.0 | 
| #parent: #root | 
| Function CalcTotalSecondaryMaximumQuantity | 
| { | 
|   TextBody: | 
|   [* | 
|     value := 0.0; | 
|      | 
|     if( this.IsPlanning() or this.IsBase() ) | 
|     { | 
|       planningup := ifexpr( this.IsPlanning(),  | 
|                             this,                                                  // Case 1: planning UnitPeriod | 
|                             this.PlanningUP().astype( UnitPeriodTransportQuantity ) ); // Case 2: base, non planning UnitPeriod: disaggregate value from planning UnitPeriod | 
|       if( not isnull( planningup ) ) | 
|       { | 
|         planningvalue := 0.0; | 
|      | 
|         if( planningup.HasCapacityDefinition() | 
|             and planningup.TransportCapacity().HasSecondaryCapacity() ) | 
|         { | 
|           ratio := PeriodSpecification_MP::GetLengthOfTimeAndTimeUnitRatio( planningup.Period_MP().TimeUnit(), | 
|                                                                             planningup.TransportCapacity().TimeUnit(), | 
|                                                                             1 /*NrOfTimeUnit*/, | 
|                                                                             planningup.Start(), | 
|                                                                             planningup.Duration() ); | 
|                                                                              | 
|           planningvalue := planningup.TransportCapacity().SecondaryMaximumCapacity() * ratio; | 
|         } | 
|         else | 
|         { | 
|           planningvalue := planningup.MacroPlan().GlobalParameters_MP().DefaultMaxCapacityPerDayForUnit() * planningup.Duration().DaysAsReal();   | 
|         } | 
|          | 
|         value := this.PlanningSystemRatio() * planningvalue; | 
|       } | 
|     } | 
|     else | 
|     { | 
|       // Case 3: aggregated UnitPeriod: aggregate values from base   | 
|       value := sum( this.GetChildrenOfPeriodDimension(), Elements.astype( UnitPeriodTransportQuantity ), e, e.TotalSecondaryMaximumQuantity() );   | 
|     } | 
|      | 
|     this.TotalSecondaryMaximumQuantity( value ); | 
|   *] | 
| } |