Redmine のガントチャートでチケットを開始日順に表示する

ガントチャートでは親子関係をインデントによる階層表示した上で後はチケット番号順に表示しています。
開始日順に表示させる変更は redmine_better_gantt_chartプラグインやその他の試みがありますが私がググって見つけたものを試した限りでは複雑なチケット順、親子関係、開始日順になっている状況では階層表示が親子関係を正しく反映していませんでした。

以下が root までさかのぼって開始日順にソートするパッチです。だたし rootチケットだけは開始日ではなくチケット番号をソート対象にしています。
比較ごとに root までたどる array が作られるので多くのチケットを並べる状況だと重くなるかもしれません。

redmine-1.3.2 で確認しましたがコードを見る限り redmine-2系にも対応していると思います。

--- lib/redmine/helpers/gantt.rb.org
+++ lib/redmine/helpers/gantt.rb
@@ -674,11 +674,17 @@
       end
 
-      # TODO: top level issues should be sorted by start date
-      def gantt_issue_compare(x, y, issues)
-        if x.root_id == y.root_id
-          x.lft <=> y.lft
-        else
-          x.root_id <=> y.root_id
+      def gantt_issue_compare(x, y, issues = nil)
+        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