1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-10 01:21:32 +00:00

Fixed that subtasks lose their custom fields when copying an issue to a different project (#22342).

git-svn-id: http://svn.redmine.org/redmine/trunk@15318 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2016-04-11 17:11:59 +00:00
parent bf60f4def0
commit bb2c6f6076
3 changed files with 32 additions and 3 deletions

View File

@ -302,16 +302,19 @@ class Issue < ActiveRecord::Base
# * or if the status was not part of the new tracker statuses
# * or the status was nil
def tracker=(tracker)
if tracker != self.tracker
tracker_was = self.tracker
if tracker != tracker_was
if status == default_status
self.status = nil
elsif status && tracker && !tracker.issue_status_ids.include?(status.id)
self.status = nil
end
@custom_field_values = nil
@workflow_rule_by_attribute = nil
end
association(:tracker).writer(tracker)
if tracker != tracker_was
reassign_custom_field_values
end
self.status ||= default_status
self.tracker
end
@ -355,7 +358,7 @@ class Issue < ActiveRecord::Base
unless valid_parent_project?
self.parent_issue_id = nil
end
@custom_field_values = nil
reassign_custom_field_values
@workflow_rule_by_attribute = nil
end
# Set fixed_version to the project default version if it's valid

View File

@ -151,6 +151,14 @@ module Redmine
true
end
def reassign_custom_field_values
if @custom_field_values
values = @custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h}
@custom_field_values = nil
self.custom_field_values = values
end
end
def reset_custom_values!
@custom_field_values = nil
@custom_field_values_changed = true

View File

@ -3001,6 +3001,24 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal issue.descendants.map(&:subject).sort, copy.descendants.map(&:subject).sort
end
def test_create_as_copy_to_a_different_project_should_copy_subtask_custom_fields
issue = Issue.generate! {|i| i.custom_field_values = {'2' => 'Foo'}}
child = Issue.generate!(:parent_issue_id => issue.id) {|i| i.custom_field_values = {'2' => 'Bar'}}
@request.session[:user_id] = 1
assert_difference 'Issue.count', 2 do
post :create, :project_id => 'ecookbook', :copy_from => issue.id,
:issue => {:project_id => '2', :tracker_id => 1, :status_id => '1',
:subject => 'Copy with subtasks', :custom_field_values => {'2' => 'Foo'}},
:copy_subtasks => '1'
end
child_copy, issue_copy = Issue.order(:id => :desc).limit(2).to_a
assert_equal 2, issue_copy.project_id
assert_equal 'Foo', issue_copy.custom_field_value(2)
assert_equal 'Bar', child_copy.custom_field_value(2)
end
def test_create_as_copy_without_copy_subtasks_option_should_not_copy_subtasks
@request.session[:user_id] = 2
issue = Issue.generate_with_descendants!