Quintiq file version 2.0 
 | 
#parent: DataHolderPeriods 
 | 
Response OnDataChanged () id:Response_BaseFormCapacityPlanning_DataHolderPeriods_OnDataChanged 
 | 
{ 
 | 
  #keys: '[136682.2.891024112]' 
 | 
  CanBindMultiple: false 
 | 
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged' 
 | 
  QuillAction 
 | 
  { 
 | 
    Body: 
 | 
    [* 
 | 
      //Zoom based on selected granularity in navigation panel 
 | 
      data :=  ApplicationMacroPlanner.DataHolderPeriods().Data().Copy(); // refer to global dataholder as this.Data seems referring to old data  
 | 
      totalfutureperiods := counter( data, Elements, period, true, not period.IsHistorical() );  
 | 
      level :=1; 
 | 
      // when total period more than 10, zoomlevel will be 10% of the total future periods bucket  
 | 
      if ( totalfutureperiods > 10 ) 
 | 
      { 
 | 
        level := floor( 0.1 * totalfutureperiods ) ;   
 | 
      } 
 | 
      // sort by time unit level, 1-Hour, 2-Day, 3-Week, 4-Month, 5-Quarter, 6-Year 
 | 
      timeunits := selectuniquevalues( data, Elements, period, true, [String]period.TimeUnitLevel() + "-" + period.TimeUnit() );  
 | 
      timeunits := selectsortedset( timeunits, Elements, e, true, e.Tokenize( "-" ).Element( 0 ) );// tokenized to sort by time unit level from Day->Week->Month->Quarter->Year   
 | 
      customzoomrange := JSON::Array(); 
 | 
       
 | 
      traverse( timeunits, Elements, element ) 
 | 
      { 
 | 
        timeunit := element.Tokenize( "-" ).Element( 1 ); 
 | 
           
 | 
        isquarter := timeunit = Translations::MP_GlobalParameters_Quarter(); 
 | 
        size := counter( data, Elements, period, true, not period.IsHistorical() and period.TimeUnit() = timeunit ); 
 | 
        maxloop := size/ level; 
 | 
        unit := ifexpr( isquarter, Translations::MP_GlobalParameters_Month(), timeunit ) ; //Quarter is not supported, replace with month 
 | 
        //minimum keep 2 buckets - if zoom in 
 | 
        for ( i := 2; i <= maxloop; i++ ) 
 | 
        { 
 | 
          loop := i; 
 | 
           
 | 
          if ( i > 2 ) 
 | 
          { 
 | 
             loop := loop * level; 
 | 
          } 
 | 
           
 | 
          loop := loop * ifexpr( isquarter, 3, 1 ) // time 3 if is in quarter, default * 1; 
 | 
          // Core Tech granularity is plural thus we add "s" to it 
 | 
          zoomLevel := unit + "s"; 
 | 
          zoom1 := JSON::Object(); 
 | 
          zoom1.Add( 'unit', zoomLevel ); 
 | 
          zoom1.Add( 'count', loop ); 
 | 
          customzoomrange.Add( zoom1); 
 | 
        } 
 | 
      } 
 | 
       
 | 
      GanttChartCapacityPlanning.NavigationRange( customzoomrange.Build() ); 
 | 
       
 | 
      //Snap to gantt chart 
 | 
      Form.SnapToGanttChart(); 
 | 
    *] 
 | 
    GroupServerCalls: false 
 | 
  } 
 | 
} 
 |