# HG changeset patch # User Toshi MARUYAMA # Date 1366345466 -32400 # Node ID 8cc8a36cc68bf32faf49c75ac62571c0d943f03c # Parent 49ab2264e23cf55731d84655e3ae7abf679013f5 gantt issues sort (#7335) http://d.hatena.ne.jp/itto100pen/20121202 diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -675,18 +675,23 @@ module Redmine start_date + (end_date - start_date + 1) * (progress / 100.0) end - # TODO: Sorts a collection of issues by start_date, due_date, id for gantt rendering def sort_issues!(issues) issues.sort! { |a, b| gantt_issue_compare(a, b) } end - # TODO: top level issues should be sorted by start date def gantt_issue_compare(x, y) - if x.root_id == y.root_id - x.lft <=> y.lft - else - x.root_id <=> y.root_id + get_compare_params(x) <=> get_compare_params(y) + end + + def get_compare_params(issue) + julian_date = Date.new() + ancesters_start_date = [] + while (parent = issue.parent) + ancesters_start_date.unshift(issue.start_date || julian_date) + issue = parent end + ancesters_start_date.unshift(issue.id) + ancesters_start_date end def current_limit # HG changeset patch # User Toshi MARUYAMA # Date 1366731275 -32400 # Node ID a4d7bfda867d7b9ba63ea28d25c23cd2fc42dc30 # Parent 8cc8a36cc68bf32faf49c75ac62571c0d943f03c gantt issues sort (#7335) diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -687,7 +687,7 @@ module Redmine julian_date = Date.new() ancesters_start_date = [] while (parent = issue.parent) - ancesters_start_date.unshift(issue.start_date || julian_date) + ancesters_start_date.unshift([issue.start_date || julian_date, issue.id]) issue = parent end ancesters_start_date.unshift(issue.id) # HG changeset patch # User Toshi MARUYAMA # Date 1366731275 -32400 # Node ID 5e78641dfdc102d105bb280315abc5f3974b60b3 # Parent a4d7bfda867d7b9ba63ea28d25c23cd2fc42dc30 gantt issues sort (#7335) diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -686,11 +686,11 @@ module Redmine def get_compare_params(issue) julian_date = Date.new() ancesters_start_date = [] - while (parent = issue.parent) - ancesters_start_date.unshift([issue.start_date || julian_date, issue.id]) - issue = parent - end - ancesters_start_date.unshift(issue.id) + current_issue = issue + begin + ancesters_start_date.unshift([current_issue.start_date || julian_date, current_issue.id]) + current_issue = current_issue.parent + end while (current_issue) ancesters_start_date end # HG changeset patch # User Toshi MARUYAMA # Date 1364721366 -32400 # Node ID 3b4a5d3c5996f1850f7f8f37c34f24384f54d5c8 # Parent 5e78641dfdc102d105bb280315abc5f3974b60b3 gantt versions sort (#7335) diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -220,6 +220,7 @@ module Redmine return if abort? end versions = project_versions(project) + sort_versions!(versions) versions.each do |version| render_version(project, version, options) end @@ -694,6 +695,16 @@ module Redmine ancesters_start_date end + def sort_versions!(versions) + versions.sort! {|a, b| gantt_version_compare(a, b)} + end + + def gantt_version_compare(x, y) + sort_dates_x = [(x.due_date or Date.new()), x.id] + sort_dates_y = [(y.due_date or Date.new()), y.id] + sort_dates_x <=> sort_dates_y + end + def current_limit if @max_rows @max_rows - @number_of_rows