Recalculate inherited attributes on parents when a child is moved under 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
This commit is contained in:
parent
305cab100f
commit
c6201ae15b
|
@ -629,6 +629,7 @@ class Issue < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
reload
|
reload
|
||||||
elsif parent_issue_id != parent_id
|
elsif parent_issue_id != parent_id
|
||||||
|
former_parent_id = parent_id
|
||||||
# moving an existing issue
|
# moving an existing issue
|
||||||
if @parent_issue && @parent_issue.root_id == root_id
|
if @parent_issue && @parent_issue.root_id == root_id
|
||||||
# inside the same tree
|
# inside the same tree
|
||||||
|
@ -658,12 +659,18 @@ class Issue < ActiveRecord::Base
|
||||||
relation.destroy unless relation.valid?
|
relation.destroy unless relation.valid?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
# update former parent
|
||||||
|
recalculate_attributes_for(former_parent_id) if former_parent_id
|
||||||
end
|
end
|
||||||
remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue)
|
remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue)
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_parent_attributes
|
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
|
# priority = highest priority of children
|
||||||
if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority)
|
if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority)
|
||||||
p.priority = IssuePriority.find_by_position(priority_position)
|
p.priority = IssuePriority.find_by_position(priority_position)
|
||||||
|
|
|
@ -273,6 +273,15 @@ class IssueNestedSetTest < ActiveSupport::TestCase
|
||||||
assert_equal 12, parent.reload.estimated_hours
|
assert_equal 12, parent.reload.estimated_hours
|
||||||
end
|
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
|
def test_reschuling_a_parent_should_reschedule_subtasks
|
||||||
parent = create_issue!
|
parent = create_issue!
|
||||||
|
|
Loading…
Reference in New Issue