diff --git a/app/models/version.rb b/app/models/version.rb index bc71b72..28f63b6 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -274,9 +274,11 @@ class Version < ActiveRecord::Base # Used to weight unestimated issues in progress calculation def estimated_average if @estimated_average.nil? - average = fixed_issues.average(:estimated_hours).to_f - if average == 0 - average = 1 + issues_with_total_estimated_hours = fixed_issues.select {|c| c.total_estimated_hours.to_f > 0.0} + if issues_with_total_estimated_hours.any? + average = issues_with_total_estimated_hours.map(&:total_estimated_hours).sum.to_f / issues_with_total_estimated_hours.count + else + average = 1.0 end @estimated_average = average end @@ -294,9 +296,13 @@ class Version < ActiveRecord::Base @issues_progress[open] ||= begin progress = 0 if issues_count > 0 - ratio = open ? 'done_ratio' : 100 + done = fixed_issues.open(open).map {|c| + estimated = c.total_estimated_hours.to_f + estimated = estimated_average unless estimated > 0.0 + ratio = c.closed? ? 100 : (c.done_ratio || 0) + estimated * ratio + }.sum - done = fixed_issues.open(open).sum("COALESCE(estimated_hours, #{estimated_average}) * #{ratio}").to_f progress = done / (estimated_average * issues_count) end progress