commit fc05bbeaacae7d06b6446044faa64f8d1ca98a3a Author: Felix Schäfer Date: Mon Mar 10 23:11:22 2014 +0100 Honor working days when calculating start date of following issues #14846 diff --git a/app/models/issue_relation.rb b/app/models/issue_relation.rb index 1ba50ed..d21cd44 100644 --- a/app/models/issue_relation.rb +++ b/app/models/issue_relation.rb @@ -30,6 +30,8 @@ class IssueRelation < ActiveRecord::Base end end + include Redmine::Utils::DateCalculation + belongs_to :issue_from, :class_name => 'Issue', :foreign_key => 'issue_from_id' belongs_to :issue_to, :class_name => 'Issue', :foreign_key => 'issue_to_id' @@ -159,7 +161,7 @@ class IssueRelation < ActiveRecord::Base def successor_soonest_start if (TYPE_PRECEDES == self.relation_type) && delay && issue_from && (issue_from.start_date || issue_from.due_date) - (issue_from.due_date || issue_from.start_date) + 1 + delay + add_working_days((issue_from.due_date || issue_from.start_date), (1 + delay)) end end diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 35409d8..ffa2c97 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -1514,18 +1514,30 @@ class IssueTest < ActiveSupport::TestCase end def test_rescheduling_an_issue_to_a_later_due_date_should_reschedule_following_issue - 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') - IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, - :relation_type => IssueRelation::TYPE_PRECEDES) - assert_equal Date.parse('2012-10-18'), issue2.reload.start_date + 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-15', :due_date => '2012-10-17') + IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, + :relation_type => IssueRelation::TYPE_PRECEDES) + assert_equal Date.parse('2012-10-18'), issue2.reload.start_date + + issue1.reload + issue1.due_date = '2012-10-23' + issue1.save! + issue2.reload + assert_equal Date.parse('2012-10-24'), issue2.start_date + assert_equal Date.parse('2012-10-26'), issue2.due_date + end - issue1.reload - issue1.due_date = '2012-10-23' - issue1.save! - issue2.reload - assert_equal Date.parse('2012-10-24'), issue2.start_date - assert_equal Date.parse('2012-10-26'), issue2.due_date + # The delay should honor non-working week days + with_settings :non_working_week_days => %w(6 7) do + issue1 = Issue.generate!(:start_date => '2014-03-10', :due_date => '2014-03-12') + issue2 = Issue.generate!(:start_date => '2014-03-10', :due_date => '2014-03-12') + IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, + :relation_type => IssueRelation::TYPE_PRECEDES, + :delay => 8) + assert_equal Date.parse('2014-03-25'), issue2.reload.start_date + end end def test_rescheduling_an_issue_to_an_earlier_due_date_should_reschedule_following_issue