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
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)
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!