From 77c6188ec27288470d5270213aa0aef3be0eb655 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 21 Nov 2010 13:54:26 +0000 Subject: [PATCH] Fixed: gantt displays issues by date of creation. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4421 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue.rb | 3 +-- lib/redmine/helpers/gantt.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index 8fdf4b39c..0b08f0c16 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -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] } } diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb index ea7f1417a..ac8f80d0f 100644 --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -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 = {}) -- 2.39.5