@@ -1529,16 +1529,16 class Issue < ActiveRecord::Base | |||||
1529 | if p.done_ratio_derived? |
|
1529 | if p.done_ratio_derived? | |
1530 | # done ratio = weighted average ratio of leaves |
|
1530 | # done ratio = weighted average ratio of leaves | |
1531 | unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio |
|
1531 | unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio | |
1532 |
|
|
1532 | child_count = p.children.count | |
1533 |
if |
|
1533 | if child_count > 0 | |
1534 |
average = p. |
|
1534 | average = p.children.where("estimated_hours > 0").average(:estimated_hours).to_f | |
1535 | if average == 0 |
|
1535 | if average == 0 | |
1536 | average = 1 |
|
1536 | average = 1 | |
1537 | end |
|
1537 | end | |
1538 |
done = p. |
|
1538 | done = p.children.joins(:status). | |
1539 | sum("COALESCE(CASE WHEN estimated_hours > 0 THEN estimated_hours ELSE NULL END, #{average}) " + |
|
1539 | sum("COALESCE(CASE WHEN estimated_hours > 0 THEN estimated_hours ELSE NULL END, #{average}) " + | |
1540 | "* (CASE WHEN is_closed = #{self.class.connection.quoted_true} THEN 100 ELSE COALESCE(done_ratio, 0) END)").to_f |
|
1540 | "* (CASE WHEN is_closed = #{self.class.connection.quoted_true} THEN 100 ELSE COALESCE(done_ratio, 0) END)").to_f | |
1541 |
progress = done / (average * |
|
1541 | progress = done / (average * child_count) | |
1542 | p.done_ratio = progress.round |
|
1542 | p.done_ratio = progress.round | |
1543 | end |
|
1543 | end | |
1544 | end |
|
1544 | end |
@@ -185,6 +185,26 class IssueSubtaskingTest < ActiveSupport::TestCase | |||||
185 | end |
|
185 | end | |
186 | end |
|
186 | end | |
187 |
|
187 | |||
|
188 | def test_done_ratio_of_parent_should_reflect_children | |||
|
189 | root = Issue.generate! | |||
|
190 | child1 = root.generate_child! | |||
|
191 | child2 = child1.generate_child! | |||
|
192 | ||||
|
193 | assert_equal 0, root.done_ratio | |||
|
194 | assert_equal 0, child1.done_ratio | |||
|
195 | assert_equal 0, child2.done_ratio | |||
|
196 | ||||
|
197 | with_settings :issue_done_ratio => 'issue_status' do | |||
|
198 | status = IssueStatus.find(4) | |||
|
199 | status.update_attribute :default_done_ratio, 50 | |||
|
200 | child1.update_attribute :status, status | |||
|
201 | ||||
|
202 | assert_equal 50, child1.done_ratio | |||
|
203 | root.reload | |||
|
204 | assert_equal 50, root.done_ratio | |||
|
205 | end | |||
|
206 | end | |||
|
207 | ||||
188 | def test_parent_dates_should_be_editable_with_parent_issue_dates_set_to_independent |
|
208 | def test_parent_dates_should_be_editable_with_parent_issue_dates_set_to_independent | |
189 | with_settings :parent_issue_dates => 'independent' do |
|
209 | with_settings :parent_issue_dates => 'independent' do | |
190 | issue = Issue.generate_with_child! |
|
210 | issue = Issue.generate_with_child! |
General Comments 0
You need to be logged in to leave comments.
Login now