Skip to content

Commit

Permalink
Always show ideal in burndown
Browse files Browse the repository at this point in the history
  • Loading branch information
friflaj committed Jan 6, 2012
1 parent df84a04 commit 56789e7
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 24 deletions.
18 changes: 2 additions & 16 deletions app/models/rb_sprint.rb
Expand Up @@ -36,11 +36,7 @@ def initialize(sprint, direction)
@data[:points_to_resolve] = series.collect{|s| s.to_resolve }
@data[:points_to_accept] = series.collect{|s| s.to_accept }

if series[0].hours
@data[:hours_ideal] = (0 .. @days.size).collect{|i| (series[0].hours / @days.size) * i }.reverse
else
@data[:hours_ideal] = [nil] * @days.size
end
@data[:ideal] = (0..@days.size).to_a.reverse

@data[:points_required_burn_rate] = series.collect{|r| r.to_resolve ? Float(r.to_resolve) / (r.days_left == 0 ? 1 : r.days_left) : nil }
@data[:hours_required_burn_rate] = series.collect{|r| r.hours ? Float(r.hours) / (r.days_left == 0 ? 1 : r.days_left) : nil }
Expand All @@ -55,16 +51,6 @@ def initialize(sprint, direction)
else
raise "Unexpected burn direction #{direction.inspect}"
end

max = {'hours' => nil, 'points' => nil}
@data.keys.each{|series|
units = series.to_s.gsub(/_.*/, '')
next unless ['points', 'hours'].include?(units)
max[units] = ([max[units]] + @data[series]).compact.max
}

@data[:max_points] = max['points']
@data[:max_hours] = max['hours']
end

def [](i)
Expand All @@ -77,7 +63,7 @@ def series(remove_empty = true)
@series ||= {}
return @series[remove_empty] if @series[remove_empty]

@series[remove_empty] = @data.keys.collect{|k| k.to_s}.select{|k| k =~ /^(points|hours)_/}.sort
@series[remove_empty] = @data.keys.collect{|k| k.to_s}.sort
return @series[remove_empty] unless remove_empty

# delete :points_committed if flatline
Expand Down
25 changes: 18 additions & 7 deletions app/views/rb_burndown_charts/_burndown.html.erb
Expand Up @@ -14,27 +14,38 @@
:series => series.collect{|s| burndown[s].enum_for(:each_with_index).collect{|d,i| [i*2, d]}},
:position => Hash[*(0.upto(series.size - 1).collect{|i| [series[i], i]}.flatten)],
:options => {
:series => series.collect{|s| {:label => l("label_#{s}"), :yaxis => (s.to_s =~ /^points/ ? 'y2axis' : 'yaxis')}},
:series => series.collect{|s|
axis = s.to_s.split('_')[0]
{
:label => l("label_#{s}"),
:yaxis => {'hours' => 'yaxis', 'points' => 'y2axis', 'ideal' => 'y3axis'}[axis],
:showHighlight => (axis != 'ideal'),
:markerOptions => {:style => {'hours' => 'filledSquare', 'points' => 'filledCircle', 'ideal' => 'filledDiamond'}[axis]}
}
},
:legend => {:show => (mode == :full), :location => 'sw'},
:grid => {:shadow => false},
:seriesDefaults => {:showMarker => (mode == :full), :shadow => false},
:axesDefaults => {:showTick => (mode == :full)},
:axesDefaults => {:pad => 1.05, :showTick => (mode == :full)},
:axes => {
:xaxis => {
:min => 0,
:max => dates.size * 2,
:ticks => ticks,
:tickOptions => {:angle => -90, :fontSize => '8pt'}
},
:yaxis => {:min => 0, :max => burndown[:max_hours], :tickOptions => {:formatString => '%d'}},
:y2axis => {:min => 0, :max => burndown[:max_points], :tickOptions => {:formatString => '%d'}}
:yaxis => {:label => l("label_hours"), :min => 0, :autoscale => true, :tickOptions => {:formatString => '%d'}},
:y2axis => {:label => l("label_points"), :min => 0, :autoscale => true, :tickOptions => {:formatString => '%d'}},
:y3axis => {:min => 0, :autoscale => true, :showTicks => false, :showTickMarks => false, :tickOptions => {:showGridline => false, :show => false}}
},
:highlighter => { :tooltipAxes => 'y', :formatString => '%s', :show => true }
:highlighter => { :bringSeriesToFront => true, :tooltipAxes => 'y', :formatString => '%s', :show => true }
}
}
%>
RB.burndown.charts[<%= sprint.id %>] = <%= chart.to_json %>;
RB.burndown.charts[<%= sprint.id %>].options.axesDefaults.tickRenderer = RB.$.jqplot.CanvasAxisTickRenderer;
RB.burndown.charts[<%= sprint.id %>].options.axes.xaxis.rendererOptions = {tickRenderer: RB.$.jqplot.CanvasAxisTickRenderer};
// RB.burndown.charts[<%= sprint.id %>].options.axesDefaults.tickRenderer = RB.$.jqplot.CanvasAxisTickRenderer;
// RB.burndown.charts[<%= sprint.id %>].options.axes.xaxis.tickRenderer: RB.$.jqplot.CanvasAxisTickRenderer;
RB.burndown.charts[<%= sprint.id %>].options.axes.yaxis.labelRenderer = RB.$.jqplot.CanvasAxisLabelRenderer;
RB.burndown.charts[<%= sprint.id %>].options.axes.y2axis.labelRenderer = RB.$.jqplot.CanvasAxisLabelRenderer;
RB.burndown.initialize();
</script>
2 changes: 1 addition & 1 deletion config/locales/en.yml
Expand Up @@ -73,7 +73,7 @@ en:
label_burndown: Burndown
label_chart_options: Chart Options
label_hours: hours
label_hours_ideal: ideal
label_ideal: ideal
label_hours_remaining: remaining hours
label_hours_required_burn_rate: required burn rate (hours)
label_impediments: Impediments
Expand Down

0 comments on commit 56789e7

Please sign in to comment.