| Quintiq file version 2.0 | 
| #parent: #root | 
| Method DrawNode ( | 
|   UnitPeriod element, | 
|   internal[WebDrawNodeInfo] drawinfo | 
| ) id:Method_BaseFormCapacityPlanning_DrawNode | 
| { | 
|   #keys: '[145730.1.1000510444]' | 
|   Body: | 
|   [* | 
|     // Determine colors for unit period gantt chart nodes | 
|     macroplan := element.MacroPlan(); | 
|     nr := macroplan.GlobalParameters_MP().NumberOfDecimals(); | 
|     below := element.BottleneckThreshold(); | 
|     above := element.OverloadThreshold(); | 
|     textcolour := ColorScheme.CapacityGanttChart_DefaultText(); | 
|     changeoverratio := Duration::Zero(); | 
|      | 
|     if( element.istype( UnitPeriodTimeBase ) ) | 
|     { | 
|       changeoverratio := element.astype( UnitPeriodTimeBase ).ChangeoverDurationRatio(); | 
|     } | 
|      | 
|     if ( element.Duration() > Duration::Zero() ) | 
|     { | 
|       // Quantity aggregated unit without child, show as irrelevant | 
|       if( element.Unit().CapacityType() = GlobalParameters_MP::GetCapacityTypeQuantityAggregation() | 
|           and element.ChildOfUnitDimension( relsize ) = 0 ) | 
|       { | 
|         color := ifexpr( element.HasConstraintViolations(), ColorScheme.CapacityGanttChart_Error(), ColorScheme.CapacityGanttChart_Irrelevant() ); | 
|         drawinfo.AddCompartment( color , element.FreeCapacityRatio() ); | 
|       } | 
|       //infinte and no child, show purple | 
|       else if ( not element.Unit().IsPotentialBottleneck() ) | 
|       { | 
|         color := ifexpr( element.HasConstraintViolations(), ColorScheme.CapacityGanttChart_Error(), ColorScheme.CapacityGanttChart_Infinite() ); | 
|         drawinfo.AddCompartment( color, element.Duration() ); | 
|       } | 
|       //infinite but with child, show constraint violation if its children is overloaded | 
|       else if ( element.Unit().HasCapacityTypeInfinite() and element.Unit().IsPotentialBottleneck() ) | 
|       { | 
|         color := ifexpr( element.HasConstraintViolations(), ColorScheme.CapacityGanttChart_Error(), ColorScheme.CapacityGanttChart_Infinite() ); | 
|         drawinfo.AddCompartment( color, element.UsedCapacityRatio() ); | 
|         drawinfo.AddCompartment( ColorScheme.CapacityGanttChart_Free(), element.FreeCapacityRatio() ); | 
|       } | 
|       //units which are part of an aggregation | 
|       else if ( element.Unit().IsForCapacityAggregation() ) | 
|       { | 
|         color := ifexpr( element.HasConstraintViolations(), ColorScheme.CapacityGanttChart_Error(), ColorScheme.CapacityGanttChart_Aggregation() ); | 
|         drawinfo.AddCompartment( color, element.UsedCapacityRatio() ); | 
|         drawinfo.AddCompartment( ColorScheme.CapacityGanttChart_Changeover(), changeoverratio ); | 
|         drawinfo.AddCompartment( ColorScheme.CapacityGanttChart_Free(), element.FreeCapacityRatio() ); | 
|         textcolour :=  ColorScheme.CapacityGanttChart_TextGood(); | 
|       } | 
|       // IsPlannedInfinite, show purple | 
|       else if ( element.IsPlannedInfinite() ) | 
|       { | 
|         color := ifexpr( element.HasConstraintViolations(), ColorScheme.CapacityGanttChart_Error(), ColorScheme.CapacityGanttChart_Infinite() ); | 
|         drawinfo.AddCompartment( color, element.Duration() ); | 
|         textcolour := ColorScheme.CapacityGanttChart_Infinite(); | 
|       } | 
|       else | 
|       { | 
|         displayutilizationpercentage := element.DisplayUtilizationPercentageWithMaxLoadRatio(); | 
|         loadpercentage := displayutilizationpercentage.Round( nr ); | 
|      | 
|         color :=  ColorScheme.CapacityGanttChart_Good(); | 
|         textcolour := ColorScheme.CapacityGanttChart_TextGood(); | 
|          | 
|         if ( element.HasConstraintViolations() ) | 
|         { | 
|           color := ColorScheme.CapacityGanttChart_Error(); | 
|         } | 
|          | 
|         else if ( below > 0 and above > 0 ) | 
|         { | 
|           if ( loadpercentage > below and loadpercentage <= above and element.Period_MP().IsWithinBottleneckWindow() ) | 
|           { | 
|             color := ColorScheme.CapacityGanttChart_WarningMid(); | 
|             textcolour := ColorScheme.CapacityGanttChart_WarningText(); | 
|           } | 
|           else if ( loadpercentage > above ) | 
|           { | 
|             color := ColorScheme.CapacityGanttChart_WarningHigh(); | 
|             textcolour := ColorScheme.CapacityGanttChart_WarningText(); | 
|           } | 
|         } | 
|      | 
|         usedCapacityRatio := ifexpr( element.Unit().CapacityType() = GlobalParameters_MP::GetCapacityTypeTransportQuantity() | 
|                                     ,element.astype( UnitPeriodTransportQuantity).DisplayUsedCapacityRatio() | 
|                                     ,element.UsedCapacityRatio() ); | 
|      | 
|         freeCapacityRatio := ifexpr( element.Unit().CapacityType() = GlobalParameters_MP::GetCapacityTypeTransportQuantity() | 
|                                     ,element.astype( UnitPeriodTransportQuantity).DisplayFreeCapacityRatio() | 
|                                     ,element.FreeCapacityRatio() ); | 
|      | 
|         drawinfo.AddCompartment( color, usedCapacityRatio ); | 
|         drawinfo.AddCompartment( ColorScheme.CapacityGanttChart_Changeover(), changeoverratio ); | 
|         drawinfo.AddCompartment( ColorScheme.CapacityGanttChart_Free(), freeCapacityRatio ); | 
|       } | 
|       // in case no available duration | 
|       color := ifexpr( not element.HasOpenUnit(), ColorScheme.CapacityGanttChart_Error(), ColorScheme.CapacityGanttChart_Irrelevant() ); | 
|       drawinfo.AddCompartment( color, element.TotalUnavailableCapacityRatio() ); | 
|     } | 
|      | 
|     if ( element.HasConstraintViolations() ) | 
|     { | 
|       textcolour := ColorScheme.CapacityGanttChart_WarningText(); | 
|     } | 
|     drawinfo.TextColor( textcolour ); | 
|   *] | 
|   Declarative: true | 
| } |