(※一番最後に,少し修正したものを置きました!2011.06.06)
ガントチャートの絞り込み機能にどうもバグが有る気がして,4月中旬にその時期の最新版のレポジトリからダウンロードしてきたredmineを使用していましたが,1.1.3とも若干異なる部分もあるし,早く次のバージョンに環境を合わせて置きたかったので待望の更新です.
多くのプラグインはRedmineのバージョンに合わせているのでレポジトリから引っ張ってきたものがどこまで適用できるか悩んでしまう時もあり,そういう意味で更新したかったのです.
まず,日本語の文字化けがなくなったのは大きい.
そして,ガントチャートの表示が以前は親子関係にずれがあったのですがそれもなくなりました.
さらには当日でクローズしたチケットもきちんと緑色で表示されるようになりました.
ということでさっそく,ガントチャートに日付が出るようにしました.
参考:以前自分が行った修正.
ただし,これはHTMLの解釈の問題なのか,貼りつけ方が失敗したのかちょっと構文が崩れてしまっていたので参考にされた方がいましたら,うまく動かせなくて不快な思いをさせたかもしれません.ごめんなさい.
Redmineガントチャートの日付表示再び
■修正ファイル
・gantts_controller.rb
・show.html.erb
修正ソースコードはこちら
show.html.erb
・gantt.rb
修正ソースコードはこちら.
gantt.rb
以下,詳細な変更部分.
今回も"'{<
(追記.<"div>, <"/div>のようにダブルコーテーションマークをdivや/div, em, /emの前に挿入して解釈されるのを防ぎました.コピペするときはこの"マークを消してください.)
- /app/controllers/gantts_controller.rb
# add date for output.
# これはプロジェクトの名前を出力するだけです.#basename = (@project ? "#{@project.identifier}-" : '') + 'gantt'
basename = Time.now.strftime("%Y%m%d-") + (@project ? "#{@project.identifier}-" : '') + 'gantt'
- /app/views/gantts/show.html.erb
--- redmine-1.2.0/app/views/gantts/show.html.erb 2011-05-30 18:47:22.000000000 +0900
+++ app/views/gantts/show.html.erb 2011-05-31 20:47:30.118416800 +0900
@@ -38,6 +38,9 @@
headers_height = header_heigth
show_weeks = false
show_days = false
+# add show day
+show_day_num = false # <= ここ
+
if @gantt.zoom >1
show_weeks = true
@@ -46,6 +49,10 @@
show_days = true
headers_height = 3*header_heigth
end
+ if @gantt.zoom > 3 # <= ここの条件を丸々追加
+ show_day_num = true
+ headers_height = 4*header_heigth
+ end
end
# Width of the entire chart
@@ -131,6 +138,33 @@
end
end %>
+
+<%
+#add show day
+#
+# Days headers Num
+#
+if show_day_num
+ left = 0
+ height = g_height + header_heigth*2 - 1
+ wday = @gantt.date_from.cwday
+ day_num = @gantt.date_from
+ (@gantt.date_to - @gantt.date_from + 1).to_i.times do
+ width = zoom - 1
+%>
+ <"div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %><%= "color:blue;" if wday == 6 %><%= "color:red;" if wday == 7 %>" class="gantt_hdr">
+ <%= day_num.day %>
+ <"/div>
+<%
+ left = left + width+1
+ day_num = day_num + 1
+ wday = wday + 1
+ wday = 1 if wday > 7
+ end
+end %>
+
+
+
<%
#
# Days headers
@@ -138,11 +172,12 @@
if show_days
left = 0
height = g_height + header_heigth - 1
+ top = (show_day_num ? 55 : 37) # <= ここ
wday = @gantt.date_from.cwday
(@gantt.date_to - @gantt.date_from + 1).to_i.times do
width = zoom - 1
%>
- <"em><"div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday ><"/em> 5 %>" class="gantt_hdr">
+ <"div style="left:<%= left %>px;top:<%= top %>px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %><%= "color:blue;" if wday == 6 %><%= "color:red;" if wday == 7 %>" class="gantt_hdr">
<%= day_name(wday).first %>
<"/div>
<%
- lib/redmine/helpers/gantt.rb
--- redmine-1.2.0/lib/redmine/helpers/gantt.rb 2011-05-30 18:47:30.000000000 +0900
+++ lib/redmine/helpers/gantt.rb 2011-06-01 11:51:13.940114300 +0900
@@ -1,3 +1,4 @@
+# -*- coding: cp932 -*-
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
@@ -410,6 +411,8 @@
imgl.new_image(subject_width+g_width+1, height)
gc = Magick::Draw.new
+ gc.font = "c:\WINDOWS\Fonts\VL-Gothic-Regular.ttf"
+ gc.pointsize = 12
# Subjects
gc.stroke('transparent')
subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image)
@@ -524,13 +527,16 @@
headers_height = header_height
show_weeks = false
show_days = false
+ show_day_num = false # <= 追加
if self.months < 7
show_weeks = true
headers_height = 2*header_height
if self.months < 3
show_days = true
- headers_height = 3*header_height
+ show_day_num = true
+ #headers_height = 3*header_height
+ headers_height = 4*header_height
end
end
@@ -595,6 +601,26 @@
wday = wday + 1
wday = 1 if wday > 7
end
+ end
+
+
+ # Day num headers
+ if show_day_num # num
+ left = subject_width
+ height = header_height
+ wday = self.date_from.cwday
+ day_num = self.date_from
+ pdf.SetFontStyle('B',7)
+ (self.date_to - self.date_from + 1).to_i.times do
+ width = zoom
+ pdf.SetY(y_start + 3 * header_height)
+ pdf.SetX(left)
+ pdf.RDMCell(width, height, day_num.day.to_s, "LTR", 0, "C")
+ left = left + width
+ day_num = day_num + 1
+ wday = wday + 1
+ wday = 1 if wday > 7
+ end
end
pdf.SetY(y_start)
(※2011/6/6 追記)
あの後,縦線をPDFのガントチャートに引くという素晴らしいことをしていたサイトをみつけました.1.2.0では修正の必要があったので修正したものを載せます.こちらのほうが,土日の日には色がついたりの親切設計です:)
ご利用は自己責任で!
数日前に変更したばかりですが,PDFのガントチャートに縦線を入れる方法があったのでそれについてメモ.
参考:
"Redmine の ガントチャートの PDF 出力に縦線を出してみた - 玩具箱" - http://d.hatena.ne.jp/gangubako/20110407/1302168692
修正ファイル:redmine_path/lib/redmine/helpers/gantt.rb
■差分ファイル
gantt.rb_1.2.0.diff
■修正したファイル
gantt.rb
以下,修正内容.
--- c:/tmp/redmine/redmine-1.2.0/lib/redmine/helpers/gantt.rb 2011-05-30 18:47:30.000000000 +0900
+++ gantt.rb 2011-06-03 13:08:33.948718000 +0900
@@ -1,3 +1,4 @@
+# -*- coding: cp932 -*-
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
@@ -254,9 +255,36 @@
case options[:format]
when :pdf
options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
+ vertical_line_pdf(options)
end
end
+ # --------------------------vertical line.start
+ def vertical_line_pdf(options)
+ left = options[:subject_width]
+ day = 0
+ options[:pdf].SetFontStyle('B',7)
+ width = options[:zoom]
+ options[:pdf].SetDrawColor(200,200,200)
+ (self.date_to - self.date_from).to_i.times do
+ leftwidth = (left + width ).to_i
+ options[:pdf].SetY(options[:top_start].to_i)
+ options[:pdf].SetX(left)
+ options[:pdf].RDMCell(width, options[:top].to_i - options[:top_start].to_i, "", "R", 0, "C")
+ if Time.now.beginning_of_day == self.date_from.since(day.days)
+ options[:pdf].SetDrawColor(255, 0, 0)
+ options[:pdf].Line( leftwidth, options[:top_start].to_i, leftwidth, options[:top])
+ options[:pdf].SetDrawColor(200,200,200)
+ else
+ options[:pdf].Line( leftwidth, options[:top_start].to_i, leftwidth, options[:top])
+ end
+ left = left + width
+ day = day + 1
+ end
+ options[:pdf].SetDrawColor(0, 0, 0)
+ end
+ # --------------------------vertical line.end
+
def subject_for_project(project, options)
case options[:format]
when :html
@@ -410,6 +438,9 @@
imgl.new_image(subject_width+g_width+1, height)
gc = Magick::Draw.new
+ #gc.font = "c:\\WINDOWS\Fonts\VL-Gothic-Regular.ttf"
+ gc.font = "C:\\WINDWS\\FONTS\\MSGOTHIC.TTC" #和文フォントの指定
+ gc.pointsize = 12
# Subjects
gc.stroke('transparent')
subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image)
@@ -524,13 +555,16 @@
headers_height = header_height
show_weeks = false
show_days = false
+ show_day_num = false # <= 追加
if self.months < 7
show_weeks = true
headers_height = 2*header_height
if self.months < 3
show_days = true
- headers_height = 3*header_height
+ show_day_num = true
+ #headers_height = 3*header_height
+ headers_height = 4*header_height
end
end
@@ -590,6 +624,14 @@
width = zoom
pdf.SetY(y_start + 2 * header_height)
pdf.SetX(left)
+ case(wday)
+ when 6
+ pdf.SetTextColor(0, 0, 255)
+ when 7
+ pdf.SetTextColor(255, 0, 0)
+ else
+ pdf.SetTextColor(0, 0, 0)
+ end
pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C")
left = left + width
wday = wday + 1
@@ -597,12 +639,49 @@
end
end
+
+ # Day num headers
+ if show_day_num # num
+ left = subject_width
+ height = header_height
+ wday = self.date_from.cwday
+ day_num = self.date_from
+ pdf.SetFontStyle('B',7)
+ (self.date_to - self.date_from + 1).to_i.times do
+ width = zoom
+ pdf.SetY(y_start + 3 * header_height)
+ pdf.SetX(left)
+ case(wday)
+ when 6
+ pdf.SetTextColor(0, 0, 255)
+ when 7
+ pdf.SetTextColor(255, 0, 0)
+ else
+ pdf.SetTextColor(0, 0, 0)
+ end
+ pdf.RDMCell(width, height, day_num.day.to_s, "LTR", 0, "C")
+ left = left + width
+ day_num = day_num + 1
+ wday = wday + 1
+ wday = 1 if wday > 7
+ end
+ end
+
pdf.SetY(y_start)
pdf.SetX(15)
+ case(wday)
+ when 6
+ pdf.SetTextColor(0, 0, 255)
+ when 7
+ pdf.SetTextColor(255, 0, 0)
+ else
+ pdf.SetTextColor(0, 0, 0)
+ end
pdf.RDMCell(subject_width+g_width-15, headers_height, "", 1)
# Tasks
top = headers_height + y_start
+ pdf.SetTextColor(0, 0, 0)
options = {
:top => top,
:zoom => zoom,
@@ -612,6 +691,7 @@
:indent_increment => 5,
:top_increment => 5,
:format => :pdf,
+ :top_start => top,
:pdf => pdf
}
render(options)
@@ -699,8 +779,10 @@
def pdf_new_page?(options)
if options[:top] > 180
options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
+ vertical_line_pdf(options)
options[:pdf].AddPage("L")
- options[:top] = 15
+ #options[:top] = 15
+ options[:top] = options[:top_start] = 15
options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1)
end
end
縦線表示も反映しているのですが、2ヶ月表示にすると縦線が2重に表示されてしまうのですが、どこか反映漏れがあるのでしょうか?
そうなんです,縦線入ってしまうのです..
原因が絞りきれておらず,後回しにしたままです...すみません.
私もがんばって追っかけてみたのですがいまいちわからず、パッチの反映ミスかと思ってましたので。
とりあえず同じようになるとのことで、安心?しました。
対応しました.以下のページを御覧ください.
http://in.shappi.org/?1318589457
<
>
ですよ。全部半角で。