# HG changeset patch # User Toshi MARUYAMA # Date 1366345466 -32400 # Node ID 26ed1aaee5a2584612f1e410b4f935e14bb6f80f # Parent c25feee4428fdfbf1aa7cffd7c728cd6fb798dab 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 1366615760 -32400 # Node ID 80d69cc6a192e1ee4c9c86b73998bb8b78f5f146 # Parent 26ed1aaee5a2584612f1e410b4f935e14bb6f80f [mq]: gantt-04.diff 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 1364721366 -32400 # Node ID 4d5c1f0232410ac2e9ad6e52e1756ebb2d553bd0 # Parent 80d69cc6a192e1ee4c9c86b73998bb8b78f5f146 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