summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2022-06-10 09:17:21 +0000
committerGo MAEDA <maeda@farend.jp>2022-06-10 09:17:21 +0000
commit2fe3c7a27414d714d7247098b9a98b4bb7162b03 (patch)
treefc938fb9d194df98eefb76575c3858c93262797e
parentdd8bef1b07579dc9c76911de580e7286b122dbfa (diff)
downloadredmine-2fe3c7a27414d714d7247098b9a98b4bb7162b03.tar.gz
redmine-2fe3c7a27414d714d7247098b9a98b4bb7162b03.zip
Merged r21626 from the trunk to 5.0-stable (#37151).
git-svn-id: https://svn.redmine.org/redmine/branches/5.0-stable@21628 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/issue.rb13
-rw-r--r--test/unit/issue_subtasking_test.rb15
2 files changed, 18 insertions, 10 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 73fd3f8cd..1ad09e0aa 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -1838,19 +1838,20 @@ class Issue < ActiveRecord::Base
if children.any?
child_with_total_estimated_hours = children.select {|c| c.total_estimated_hours.to_f > 0.0}
if child_with_total_estimated_hours.any?
- average =
- child_with_total_estimated_hours.sum(&:total_estimated_hours).to_d /
- child_with_total_estimated_hours.count
+ average = Rational(
+ child_with_total_estimated_hours.sum(&:total_estimated_hours).to_s,
+ child_with_total_estimated_hours.count
+ )
else
- average = BigDecimal('1.0')
+ average = Rational(1)
end
done = children.sum do |c|
- estimated = (c.total_estimated_hours || 0.0).to_d
+ estimated = Rational(c.total_estimated_hours.to_f.to_s)
estimated = average unless estimated > 0.0
ratio = c.closed? ? 100 : (c.done_ratio || 0)
estimated * ratio
end
- progress = done / (average * children.count)
+ progress = Rational(done, average * children.count)
p.done_ratio = progress.floor
end
end
diff --git a/test/unit/issue_subtasking_test.rb b/test/unit/issue_subtasking_test.rb
index 0c2ffaa4d..0710190fd 100644
--- a/test/unit/issue_subtasking_test.rb
+++ b/test/unit/issue_subtasking_test.rb
@@ -243,11 +243,18 @@ class IssueSubtaskingTest < ActiveSupport::TestCase
def test_done_ratio_of_parent_with_completed_children_should_not_be_99
with_settings :parent_issue_done_ratio => 'derived' do
- parent = Issue.generate!
- parent.generate_child!(:estimated_hours => 8.0, :done_ratio => 100)
- parent.generate_child!(:estimated_hours => 8.1, :done_ratio => 100)
+ parent1 = Issue.generate!
+ parent1.generate_child!(:estimated_hours => 8.0, :done_ratio => 100)
+ parent1.generate_child!(:estimated_hours => 8.1, :done_ratio => 100)
# (8.0 * 100 + 8.1 * 100) / (8.0 + 8.1) => 99.99999999999999
- assert_equal 100, parent.reload.done_ratio
+ assert_equal 100, parent1.reload.done_ratio
+
+ parent2 = Issue.generate!
+ parent2.generate_child!(:estimated_hours => 9.0, :done_ratio => 100)
+ 10.times do
+ parent2.generate_child!(:estimated_hours => 10.0, :done_ratio => 100)
+ end
+ assert_equal 100, parent2.reload.done_ratio
end
end