]> source.dussan.org Git - redmine.git/commitdiff
Merged r17373 to 3.3-stable (#28649).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 10 Jun 2018 06:01:36 +0000 (06:01 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 10 Jun 2018 06:01:36 +0000 (06:01 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/3.3-stable@17375 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
app/models/issue_relation.rb
test/unit/issue_test.rb

index a7af6c61c2fb1a6a7bcdb6369ab84e8adc62b904..3eb06b6459802ec78fdde84e1cc63332cbf33dc1 100644 (file)
@@ -1186,7 +1186,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
@@ -1194,6 +1194,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
@@ -1658,7 +1661,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
index 51d97f6a0c93141ba804b557611d87f86117a500..7e92712ed37cdaf47478c477da1b5f5db0da1753 100644 (file)
@@ -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
 
index 027e9fd9a50273e44dc58c77b2f10521d3b735b5..db84b1311d27f09b8a2f4f46563c88c22869a484 100644 (file)
@@ -2054,6 +2054,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')