]> source.dussan.org Git - redmine.git/commitdiff
gantt: sort versions by start date (#7335)
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Tue, 21 May 2013 13:42:34 +0000 (13:42 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Tue, 21 May 2013 13:42:34 +0000 (13:42 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11898 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/helpers/gantt.rb
test/unit/lib/redmine/helpers/gantt_test.rb

index e8e7ac45874aa01d096eca8f816908a835f3a518..1625801f9befc5e609b76fa6ef12bef0b290da47 100644 (file)
@@ -220,6 +220,7 @@ module Redmine
           return if abort?
         end
         versions = project_versions(project)
+        self.class.sort_versions!(versions)
         versions.each do |version|
           render_version(project, version, options)
         end
@@ -690,6 +691,14 @@ module Redmine
         ancesters_start_date
       end
 
+      def self.sort_versions!(versions)
+        versions.sort! {|a, b| sort_version_logic(a) <=> sort_version_logic(b)}
+      end
+
+      def self.sort_version_logic(version)
+        [(version.start_date || Date.new()), version.id]
+      end
+
       def current_limit
         if @max_rows
           @max_rows - @number_of_rows
index d427ce707ab2af25c7bc6b78ccf41f06a8276b18..1c46c6098169306281abf1f18a47369320fb3190 100644 (file)
@@ -828,4 +828,29 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
                   issue1_child1_child2.id, issue1_child1_child1.id, issue2.id],
                  issues.map{|v| v.id}
   end
+
+  def test_sort_versions
+    project = Project.generate!
+    version1 = Version.create!(:project => project, :name => 'test1')
+    version2 = Version.create!(:project => project, :name => 'test2')
+    version3 = Version.create!(:project => project, :name => 'test3')
+    version4 = Version.create!(:project => project, :name => 'test4')
+    issue1 = Issue.generate!(:subject => "test", :project => project,
+                             :fixed_version => version1)
+    issue2 = Issue.generate!(:subject => "test", :project => project,
+                             :fixed_version => version2)
+    issue3 = Issue.generate!(:subject => "test", :project => project,
+                             :fixed_version => version3, :start_date => (today - 1))
+    issue4 = Issue.generate!(:subject => "test", :project => project,
+                             :fixed_version => version4, :start_date => (today - 2))
+    assert_nil version1.start_date
+    assert_nil version2.start_date
+    assert version1.id < version2.id
+    assert_equal today - 1, version3.start_date
+    assert_equal today - 2, version4.start_date
+    versions = [version4, version3, version2, version1]
+    Redmine::Helpers::Gantt.sort_versions!(versions)
+    assert_equal [version1.id, version2.id, version4.id, version3.id],
+                  versions.map{|v| v.id}
+  end
 end