From 92bc4919eb1b74a6a993b08c4715e7c7bba48b18 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 10 Jun 2018 06:00:18 +0000 Subject: [PATCH] Merged r17373 to 3.4-stable (#28649). git-svn-id: http://svn.redmine.org/redmine/branches/3.4-stable@17374 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue.rb | 7 +++++-- app/models/issue_relation.rb | 4 ++-- test/unit/issue_test.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index 038a6accd..1f2f39fa8 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1301,7 +1301,7 @@ class Issue < ActiveRecord::Base # Reschedules the issue on the given date or the next working day and saves the record. # If the issue is a parent task, this is done by rescheduling its subtasks. - def reschedule_on!(date) + def reschedule_on!(date, journal=nil) return if date.nil? if leaf? || !dates_derived? if start_date.nil? || start_date != date @@ -1309,6 +1309,9 @@ class Issue < ActiveRecord::Base # Issue can not be moved earlier than its soonest start date date = [soonest_start(true), date].compact.max end + if journal + init_journal(journal.user) + end reschedule_on(date) begin save @@ -1791,7 +1794,7 @@ class Issue < ActiveRecord::Base def reschedule_following_issues if start_date_changed? || due_date_changed? relations_from.each do |relation| - relation.set_issue_to_dates + relation.set_issue_to_dates(@current_journal) end end end diff --git a/app/models/issue_relation.rb b/app/models/issue_relation.rb index d38825ea6..f23f74478 100644 --- a/app/models/issue_relation.rb +++ b/app/models/issue_relation.rb @@ -176,10 +176,10 @@ class IssueRelation < ActiveRecord::Base set_issue_to_dates end - def set_issue_to_dates + def set_issue_to_dates(journal=nil) soonest_start = self.successor_soonest_start if soonest_start && issue_to - issue_to.reschedule_on!(soonest_start) + issue_to.reschedule_on!(soonest_start, journal) end end diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 7dcc7b838..0144cfb0e 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -2127,6 +2127,32 @@ class IssueTest < ActiveSupport::TestCase assert_equal Date.parse('2012-09-21'), issue2.due_date end + def test_rescheduling_an_issue_to_a_different_due_date_should_add_journal_to_following_issue + with_settings :non_working_week_days => [] do + issue1 = Issue.generate!(:start_date => '2012-10-15', :due_date => '2012-10-17') + issue2 = Issue.generate!(:start_date => '2012-10-18', :due_date => '2012-10-20') + IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, + :relation_type => IssueRelation::TYPE_PRECEDES) + + assert_difference 'issue2.journals.count' do + issue1.reload + issue1.init_journal(User.find(3)) + issue1.due_date = '2012-10-23' + issue1.save! + end + journal = issue2.journals.order(:id).last + + start_date_detail = journal.details.find_by(:prop_key => 'start_date') + assert_equal '2012-10-18', start_date_detail.old_value + assert_equal '2012-10-24', start_date_detail.value + + due_date_detail = journal.details.find_by(:prop_key => 'due_date') + assert_equal '2012-10-20', due_date_detail.old_value + assert_equal '2012-10-26', due_date_detail.value + end + end + + def test_rescheduling_reschedule_following_issue_earlier_should_consider_other_preceding_issues issue1 = Issue.generate!(:start_date => '2012-10-15', :due_date => '2012-10-17') issue2 = Issue.generate!(:start_date => '2012-10-15', :due_date => '2012-10-17') -- 2.39.5