Redmine0.9.0でredmine_chartsプラグインを動かしてやるぜ

感想おまちしてます!

charts01 (2)

社内でスクラムを広めてみたいなーと思って、Redmineのchartsプラグインを0.9.0にインストールしてみた。だが、ただでは動かない。

こちらをみるかぎり魅力的なプラグインなので、なんとしても入れたい。がんばってみたら、意外と簡単に直せた。Rubyはやはりわかりやすくて楽しい。

インストールは以下になる。

まずopen_flash_chart 2.1.1をもってきて、vendor/pluginsにつっこむ。

そして、redmine_charts 0.0.13をおなじくつっこむ。
redmine_charts/assets/open-flash-chart-bar-clicking.swfとredmine_charts/assets/open-flash-chart.swfをRedmineのpublicフォルダにつっこみ、redmine_charts/assets/javascripts/swfobject.jsをRedmineのpublic/javascriptsフォルダにつっこむ。

ここまでが正規の手順だが、このまま表示してもバーンダウン以外が404になる。
これは本家のフォーラムにも書いてあったが、project_idをパラメタで渡せていないバグが原因。

そして、これを解決しても、記録時間割合と記録時間予定で、

NoMethodError (undefined method `find_all_by_opt' for #):

となる。
原因は、migrateの20091225164732_remove_enumerations_opt.rbで、enumerationsテーブルのカラム名などが変わっているからだと思う。
これをまとめて修正したものが以下のパッチファイル。

diff -u -r C:\fujihara\before/app/controllers/charts_controller.rb C:\fujihara\after/app/controllers/charts_controller.rb
--- C:\fujihara\before/app/controllers/charts_controller.rb	Thu Sep  3 03:59:44 2009
+++ C:\fujihara\after/app/controllers/charts_controller.rb	Fri Jan 29 23:52:44 2010
@@ -237,6 +237,7 @@
# Finds current project or raises 404
def find_project
@project = Project.find(params[:project_id])
+    @project_id = params[:project_id]
rescue ActiveRecord::RecordNotFound
render_404
end
diff -u -r C:\fujihara\before/app/helpers/charts_helper.rb C:\fujihara\after/app/helpers/charts_helper.rb
--- C:\fujihara\before/app/helpers/charts_helper.rb	Thu Sep  3 03:59:44 2009
+++ C:\fujihara\after/app/helpers/charts_helper.rb	Fri Jan 29 23:53:21 2010
@@ -13,7 +13,7 @@
if controller.controller_name == controller_name
res << separator << link_name
else
-        res << separator << link_to(link_name, :controller => controller_name)
+        res << separator << link_to(link_name, :controller => controller_name, :project_id => @project)
end
end
res
diff -u -r C:\fujihara\before/app/views/charts/index.rhtml C:\fujihara\after/app/views/charts/index.rhtml
--- C:\fujihara\before/app/views/charts/index.rhtml	Thu Sep  3 03:59:44 2009
+++ C:\fujihara\after/app/views/charts/index.rhtml	Fri Jan 29 23:54:06 2010
@@ -18,6 +18,7 @@
<% form_tag '#', :method => :get do %>
<%= hidden_field_tag :page, @page %>
+        <%= hidden_field_tag :project_id, @project_id %>
<% if @show_conditions %>
<% if @sub_project_condition %>
diff -u -r C:\fujihara\before/lib/redmine_charts/conditions_utils.rb C:\fujihara\after/lib/redmine_charts/conditions_utils.rb
--- C:\fujihara\before/lib/redmine_charts/conditions_utils.rb	Thu Sep  3 03:59:44 2009
+++ C:\fujihara\after/lib/redmine_charts/conditions_utils.rb	Sat Jan 30 00:33:06 2010
@@ -35,11 +35,11 @@
["time_entries.user_id".to_sym, users.to_a.unshift([l(:charts_condition_all), 0])]
when "time_entries.issue_id".to_sym then ["time_entries.issue_id".to_sym, nil]
-        when "time_entries.activity_id".to_sym then ["time_entries.activity_id".to_sym, Enumeration.find_all_by_opt("ACTI").collect { |a| [a.name, a.id] }.unshift([l(:charts_condition_all), 0])]
+        when "time_entries.activity_id".to_sym then ["time_entries.activity_id".to_sym, Enumeration.find_all_by_type("TimeEntryActivity").collect { |a| [a.name, a.id] }.unshift([l(:charts_condition_all), 0])]
when "issues.category_id".to_sym then ["issues.category_id".to_sym, IssueCategory.find_all_by_project_id(project_and_its_children_ids(project_id)).collect { |c|

[c 1=”c.id” language=”.name,”][/c]

}.unshift([l(:charts_condition_all), 0])] when "issues.fixed_version_id".to_sym then ["issues.fixed_version_id".to_sym, Version.find_all_by_project_id(project_and_its_children_ids(project_id)).collect { |c|

[c 1=”c.id” language=”.name,”][/c]

}.unshift([l(:charts_condition_all), 0])] when "issues.tracker_id".to_sym then ["issues.tracker_id".to_sym, Tracker.all.collect { |c|

[c 1=”c.id” language=”.name,”][/c]

[/c] }.unshift([l(:charts_condition_all), 0])] - when "issues.priority_id".to_sym then ["issues.priority_id".to_sym, Enumeration.find_all_by_opt("IPRI").collect { |a| [a.name, a.id] }.unshift([l(:charts_condition_all), 0])] + when "issues.priority_id".to_sym then ["issues.priority_id".to_sym, Enumeration.find_all_by_type("IssuePriority").collect { |a| [a.name, a.id] }.unshift([l(:charts_condition_all), 0])] end end end

あとは、ロールと権限で見えるように設定すればOK。
ここまでくるのに1時間かかったー。でもかっこいいプラグインだ。

Download

  • github (Recent version is here.)

Product Backlog

  • 期限を設定するプルダウンの表示がおかしい

コメント

  1. morishoji より:

    修正パッチの公開ありがとうございます。
    ところで github にアップされている修正版ですが、パッチにあるconditions_utils.rb の修正が反映されていないようです。
    http://github.com/daipresents/redmine_charts/commits/master/lib/redmine_charts/conditions_utils.rb
    ご参考まで。