Permalink
Browse files

Recalculate inherited attributes on parents when a child is moved und…

…er a new parent. #5524

Contributed by Jean-Baptiste Barth.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3821 e93f8b46-1217-0410-a6f0-8f06a7374b81
  • Loading branch information...
edavis10 committed Jun 30, 2010
1 parent 305cab1 commit c6201ae15b4fcb8ca17dbe39636e6efa626d7a03
Showing with 17 additions and 1 deletion.
  1. +8 −1 app/models/issue.rb
  2. +9 −0 test/unit/issue_nested_set_test.rb
View
@@ -629,6 +629,7 @@ def update_nested_set_attributes
end
reload
elsif parent_issue_id != parent_id
+ former_parent_id = parent_id
# moving an existing issue
if @parent_issue && @parent_issue.root_id == root_id
# inside the same tree
@@ -658,12 +659,18 @@ def update_nested_set_attributes
relation.destroy unless relation.valid?
end
end
+ # update former parent
+ recalculate_attributes_for(former_parent_id) if former_parent_id
end
remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue)
end
def update_parent_attributes
- if parent_id && p = Issue.find_by_id(parent_id)
+ recalculate_attributes_for(parent_id) if parent_id
+ end
+
+ def recalculate_attributes_for(issue_id)
+ if issue_id && p = Issue.find_by_id(issue_id)
# priority = highest priority of children
if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority)
p.priority = IssuePriority.find_by_position(priority_position)
@@ -273,6 +273,15 @@ def test_parent_estimate_should_be_sum_of_leaves
assert_equal 12, parent.reload.estimated_hours
end
+ def test_move_parent_updates_old_parent_attributes
+ first_parent = create_issue!
+ second_parent = create_issue!
+ child = create_issue!(:estimated_hours => 5, :parent_issue_id => first_parent.id)
+ assert_equal 5, first_parent.reload.estimated_hours
+ child.update_attributes(:estimated_hours => 7, :parent_issue_id => second_parent.id)
+ assert_equal 7, second_parent.reload.estimated_hours
+ assert_nil first_parent.reload.estimated_hours
+ end
def test_reschuling_a_parent_should_reschedule_subtasks
parent = create_issue!

0 comments on commit c6201ae

Please sign in to comment.