]> source.dussan.org Git - redmine.git/commitdiff
Fixed: gantt displays issues by date of creation.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 21 Nov 2010 13:54:26 +0000 (13:54 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 21 Nov 2010 13:54:26 +0000 (13:54 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4421 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
lib/redmine/helpers/gantt.rb

index 8fdf4b39c049aa41e99a429f6736683cb7c1e980..0b08f0c16e392401d7ffa606b4639be371786d01 100644 (file)
@@ -68,8 +68,7 @@ class Issue < ActiveRecord::Base
                                   :conditions => ["#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"]
   named_scope :for_gantt, lambda {
     {
-      :include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version],
-      :order => "#{Issue.table_name}.due_date ASC, #{Issue.table_name}.start_date ASC, #{Issue.table_name}.id ASC"
+      :include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version]
     }
   }
 
index ea7f1417a9935ac3db9d8669ee2f1403ba3bf4f6..ac8f80d0f22d62bfd7cbf652f56f416108896556 100644 (file)
@@ -178,6 +178,7 @@ module Redmine
         
         # Second, Issues without a version
         issues = project.issues.for_gantt.without_version.with_query(@query)
+        sort_issues!(issues)
         if issues
           issue_rendering = render_issues(issues, options)
           output << issue_rendering if options[:format] == :html
@@ -237,6 +238,7 @@ module Redmine
         
         issues = version.fixed_issues.for_gantt.with_query(@query)
         if issues
+          sort_issues!(issues)
           # Indent issues
           options[:indent] += options[:indent_increment]
           output << render_issues(issues, options)
@@ -952,6 +954,17 @@ module Redmine
       
       private
 
+      # Sorts a collection of issues by start_date, due_date, id for gantt rendering
+      def sort_issues!(issues)
+        issues.sort! do |a, b|
+          cmp = 0
+          cmp = (a.start_date <=> b.start_date) if a.start_date? && b.start_date?
+          cmp = (a.due_date <=> b.due_date) if cmp == 0 && a.due_date? && b.due_date?
+          cmp = (a.id <=> b.id) if cmp == 0
+          cmp
+        end
+      end
+      
       # Renders both the subjects and lines of the Gantt chart for the
       # PDF format
       def pdf_subjects_and_lines(pdf, options = {})