| Quintiq file version 2.0 | 
| #parent: #root | 
| Function CalcTotalCapacity | 
| { | 
|   Description: 'Total capacity' | 
|   TextBody: | 
|   [* | 
|     value := Duration::Zero(); | 
|      | 
|     if( this.IsPlanning() or this.IsBase() ) | 
|     { | 
|       planningup := ifexpr( this.IsPlanning(),  | 
|                             this,                                             // Case 1: planning UnitPeriod: aggregate values from associated period tasks  | 
|                             this.PlanningUP().astype( UnitPeriodTimeBase ) ); // Case 2: base, non planning UnitPeriod: disaggregate value from planning UnitPeriod | 
|       if( not isnull( planningup ) ) | 
|       { | 
|         if( not isnull( planningup.Period_MP() ) ) | 
|         { | 
|           load := maxvalue( planningup.MaximumLoadPercentage() / 100, 1.0 ); | 
|           efficiency := maxvalue( planningup.Efficiency(), 1 ); | 
|           allocation := maxvalue( planningup.Allocation(), 1 ); | 
|        | 
|           planningvalue := planningup.Period_MP().Duration() * planningup.NrOfOpen() * load * efficiency * allocation; | 
|           value := this.PlanningSystemRatio() * planningvalue; | 
|         } | 
|       } | 
|     }                      | 
|     else | 
|     { | 
|       // Case 3: aggregated UnitPeriod: aggregate values from base | 
|       value := sum( this.GetChildrenOfPeriodDimension(), Elements.astype( UnitPeriodTimeBase ), e, e.TotalCapacity() ); | 
|     } | 
|      | 
|     this.TotalCapacity( value ); | 
|   *] | 
| } |