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 } }