Redmineのガントチャートに日付を出したい。
プロジェクト管理にRedmineを導入してみました。状況を報告する為にガントチャートをPDF出力してみたのですが、時間の単位が日付ではなく週で表示されるのでちょっと不評でした。。。
自分としてはそんなもんかなぁと気にならなかったのですが、同僚がRedmineのガントチャートに日付の表示を追加を見つけてきてくれたので、ブラウザでの閲覧時には日付を表示出来るように対応してみました。
やったことは参照先のまんまなんではしょりますが、ブラウザで日付で見れるとなると今度はPDFには反映されないの?ってことになります。
PDFの生成をどこでやっているのかわからないので、ムリです。って答えていたのですが色々調べているウチに/lib/redmine/export/pdf.rbでPDFを生成していそうって事がわかったので実験してみたところ日付が出るようになりました。
rubyがちゃんとわかっているわけではないので、ブラウザに対応した時の対応の真似事をしただけなのですが備忘録として書いておきます。(#addが追加した部分です。)
300行あたり
if gantt.months < 7 show_weeks = true headers_heigth = 2*header_heigth if gantt.months < 3 show_days = true # headers_heigth = 3*header_heigth headers_heigth = 4*header_heigth #add end end g_width = 210 zoom = (g_width) / (gantt.date_to - gantt.date_from + 1) g_height = 120 t_height = g_height + headers_heigth y_start = pdf.GetY # Months headers month_f = gantt.date_from left = subject_width height = header_heigth gantt.months.times do width = ((month_f >> 1) - month_f) * zoom pdf.SetY(y_start) pdf.SetX(left) pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C") left = left + width month_f = month_f >> 1 end # Weeks headers if show_weeks left = subject_width height = header_heigth if gantt.date_from.cwday == 1 # gantt.date_from is monday week_f = gantt.date_from else # find next monday after gantt.date_from week_f = gantt.date_from + (7 - gantt.date_from.cwday + 1) width = (7 - gantt.date_from.cwday + 1) * zoom-1 pdf.SetY(y_start + header_heigth) pdf.SetX(left) pdf.Cell(width + 1, height, "", "LTR") left = left + width+1 end while week_f <= gantt.date_to width = (week_f + 6 <= gantt.date_to) ? 7 * zoom : (gantt.date_to - week_f + 1) * zoom pdf.SetY(y_start + header_heigth) pdf.SetX(left) pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C") left = left + width week_f = week_f+7 end end # Days headers if show_days left = subject_width height = header_heigth wday = gantt.date_from.cwday day_num = gantt.date_from #add pdf.SetFontStyle('B',7) (gantt.date_to - gantt.date_from + 1).to_i.times do width = zoom pdf.SetY(y_start + 2 * header_heigth) pdf.SetX(left) pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C") # add ここから pdf.SetY(y_start + 3 * header_heigth) pdf.SetX(left) pdf.Cell(width, height, day_num.day.to_s, "LTR", 0, "C") day_num = day_num + 1 # ここまで left = left + width wday = wday + 1 wday = 1 if wday > 7 end end
関連記事:
- None Found
2 Comments so far. add yours
コメントをどうぞ
Additional comments powered byBackType

このままでは、日付が右に1つずれて表示されます。
# add ここから
の上にある
left = left + width
を
# ここまで
の下に移動すると解決します。
ご指摘ありがとうございます。
スパム以外の初コメントでとてもうれしいです。
修正しておきます。