mirror of
https://github.com/meineerde/redmine.git
synced 2026-01-10 17:41:31 +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:
parent
bf60f4def0
commit
bb2c6f6076
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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!
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user