Redmine(ver.2.4.2, Rails ver3.2.16) のガントチャートに日付を表示する
前置き
動機
ガントチャートで (+拡大) を押していくと、チャートがズームされていって、曜日が見えるようになるのだけど、標準では日付は表示されません。
チケットの登録時の「開始日」や「期日」には日付で入力するので、ガントチャートを見ながら自分の仕事量を考えて仕事を割り振っていこうと思うと、ガントチャート上で日付を確認したくなります。
と言うわけで、ガントチャート上で日付を表示したいです。
before
after
読まれる方への注意
Ruby on Railsはまるっきり勉強をしたことが無いので、手探りです。間違いがあったらごめんなさい。なんとなくModel View Controllerという考え方があって、RailsのViewの部分のテンプレートを書き換えれば、自分の望むデータを表示できるのだろうな、というぐらいの認識でやっています。
環境
手順
参考にさせていただいたサイト様
基本的にはこちらの通り
【Redmine 1.1.2】ガントチャートに日付を表示させる|渋谷ではたらくマー君の技術とかブログ。
そもそもRailsを全然分かっていないので、最低限のことはこちらで
テンプレート(ビュー)とヘルパーメソッド - Ruby on Rails入門
念のためバックアップは取る
cd views/gantts cp show.html.erb _show.html.erb
views/gantts/show.html.erb を書き換える
90行目あたりに、ズーム率を上げるとヘッダの行数を増やす記述を追加
<% zoom = 1 @gantt.zoom.times { zoom = zoom * 2 } subject_width = 330 header_height = 18 headers_height = header_height show_weeks = false show_days = false + show_day_num = false if @gantt.zoom > 1 show_weeks = true headers_height = 2 * header_height if @gantt.zoom > 2 show_days = true headers_height = 3 * header_height + if @gantt.zoom > 3 + show_day_num = true + headers_height = 4 * header_height + end end end
230行目あたりに、日付のHTMLを生成する記述を追加する。ついでに週末に色を着ける
# <% ###### Weeks headers ###### %> # <% if show_weeks %> # 中略 # <% end %> ブロックのあと + <% ###### Days Headers Num ###### %> + <% if show_day_num %> + <% + left = 0 + height = g_height + header_height - 1 + wday = @gantt.date_from.cwday + day_num = @gantt.date_from + width = zoom - 1 + %> + <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %> + <% + style = "" + style += "left: #{left}px;" + style += "top: 37px;" + style += "width: #{width}px;" + style += "height: #{height}px;" + style += "font-size:0.7em;" + clss = "gantt_hdr" + clss << " nwday" if @gantt.non_working_week_days.include?(wday) + %> + <% if wday == 6 %><% style += "color:blue;" %><% end %> + <% if wday == 7 %><% style += "color:red;" %><% end %> + <%= content_tag(:div, :style => style, :class => clss) do %> + <%= day_num.day %> + <% end %> + <% + left = left + width + 1 + day_num = day_num + 1 + wday = wday + 1 + wday = 1 if wday > 7 + %> + <% end %> + <% end %> <% ###### Days headers ####### %> <% if show_days %> # 以下略
235行目あたり、日付の行が足された分曜日の行をずらす。週末の色付けもする
<% ###### Days headers ####### %> <% if show_days %> <% left = 0 height = g_height + header_height - 1 wday = @gantt.date_from.cwday + top = (show_day_num ? 55 : 37) %> <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %> <% width = zoom - 1 style = "" style += "left: #{left}px;" + style += "top: #{top}px;" style += "width: #{width}px;" style += "height: #{height}px;" style += "font-size:0.7em;" clss = "gantt_hdr" clss << " nwday" if @gantt.non_working_week_days.include?(wday) %> <% if wday == 6 %><% style += "color:blue;" %><% end %> <% if wday == 7 %><% style += "color:red;" %><% end %> <%= content_tag(:div, :style => style, :class => clss) do %> <%= day_letter(wday) %> <% end %>
これらを書き換えた後、Redmineを再起動すると、更新が反映されます。以上です。