Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method DrawNode ( 
 | 
  internal[DrawNodeInfo] drawinfo, 
 | 
  UnitPeriod element 
 | 
) id:Method_FormCapacityPlanning_DrawNode 
 | 
{ 
 | 
  #keys: '[145730.1.1156292293]' 
 | 
  Body: 
 | 
  [* 
 | 
    // Determine colors for gantt chart nodes 
 | 
    nr := MacroPlan.GlobalParameters_MP().NumberOfDecimals(); 
 | 
    below := element.BottleneckThreshold(); 
 | 
    above := element.OverloadThreshold(); 
 | 
     
 | 
    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.GanttChart_Error(),ColorScheme.GanttChart_Irrelevant() ); 
 | 
        drawinfo.AddCompartment( color, element.FreeCapacityRatio() ); 
 | 
      } 
 | 
      //infinte and no child, show purple 
 | 
      else if ( not element.Unit().IsPotentialBottleneck() ) 
 | 
      { 
 | 
        color := ifexpr( element.HasConstraintViolations(), ColorScheme.GanttChart_Error(), ColorScheme.GanttChart_Neutral1() ); 
 | 
        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.GanttChart_Error(), ColorScheme.GanttChart_Neutral1() ); 
 | 
        drawinfo.AddCompartment( color, element.UsedCapacityRatio() ); 
 | 
        drawinfo.AddCompartment( ColorScheme.GanttChart_Free(), element.FreeCapacityRatio() ); 
 | 
      } 
 | 
      //units which are part of an aggregation 
 | 
      else if ( element.Unit().IsForCapacityAggregation() ) 
 | 
      { 
 | 
        color := ifexpr( element.HasConstraintViolations(), ColorScheme.GanttChart_Error(), ColorScheme.GanttChart_Custom2() );  
 | 
        drawinfo.AddCompartment( color, element.UsedCapacityRatio() ); 
 | 
        drawinfo.AddCompartment( ColorScheme.GanttChart_Changeover(), changeoverratio ); 
 | 
        drawinfo.AddCompartment( ColorScheme.GanttChart_Free(), element.FreeCapacityRatio() ); 
 | 
        //drawinfo.AddCompartment( ColorScheme.GanttChart_Irrelevant(), element.TotalUnavailableCapacityRatio() ); 
 | 
      } 
 | 
      // IsPlannedInfinite, show purple 
 | 
      else if ( element.IsPlannedInfinite() ) 
 | 
      { 
 | 
        color := ifexpr( element.HasConstraintViolations(), ColorScheme.GanttChart_Error(), ColorScheme.GanttChart_Neutral1() );  
 | 
        drawinfo.AddCompartment( color, element.Duration() ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
       
 | 
        displayutilizationpercentage := element.DisplayUtilizationPercentageWithMaxLoadRatio(); 
 | 
        loadpercentage := displayutilizationpercentage.Round( nr ); 
 | 
     
 | 
        color :=  ColorScheme.GanttChart_Good(); 
 | 
        if ( element.HasConstraintViolations() ) 
 | 
        { 
 | 
          color := ColorScheme.GanttChart_Error(); 
 | 
        } 
 | 
        else if ( below > 0 and above > 0 ) 
 | 
        { 
 | 
          if ( loadpercentage > below and loadpercentage <= above and element.Period_MP().IsWithinBottleneckWindow() ) 
 | 
          { 
 | 
            color := ColorScheme.GanttChart_Warning2(); 
 | 
          } 
 | 
          else if ( loadpercentage > above ) 
 | 
          { 
 | 
            color := ColorScheme.GanttChart_Warning1(); 
 | 
          } 
 | 
        } 
 | 
         
 | 
        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.GanttChart_Changeover(), changeoverratio ); 
 | 
        drawinfo.AddCompartment( ColorScheme.GanttChart_Free(), freeCapacityRatio ); 
 | 
      } 
 | 
     
 | 
      color := ifexpr( not element.HasOpenUnit(), ColorScheme.GanttChart_Error(), ColorScheme.GanttChart_Irrelevant() ); 
 | 
      drawinfo.AddCompartment( color, element.TotalUnavailableCapacityRatio() ); 
 | 
    } 
 | 
     
 | 
    if ( drawinfo.BackgroundColor().IsDark() ) 
 | 
    { 
 | 
      drawinfo.TextColor( Color::White() ); 
 | 
    } 
 | 
  *] 
 | 
  Declarative: true 
 | 
} 
 |