雑多な日々

ノンセクションで行こうかと思っています。

redmineのガントチャートに日付を追加

2010年10月12日 | Weblog
このところ、ぽちぽちと、redmineなんかをいじいじと。

0.9.4をインストールしたものの、放置しちゃってて、気が付けば、正式バージョンが登場。
1.0.2なんてのが出ているじゃない、とmigrateに挑戦。

思ったより、あっさり終わりましたが、ガントチャートの日付がなし、と。
ということで、こちらのページを参考にしましたが、使っておられるのが0.9.2とのことですので、1.0.2向けに人間パッチ。

できたものの、Webだと、上から日付、週なのですが、pdfで出すと、週、日付の順。
これを、ちゃらっと、直しちゃったのと、出力ファイル名に日付が欲しいなぁ、と思いましたので、それを修正。

ちなみに、出力ファイル名の件は、
redmine/app/controllers/gantts_controller.rb
の修正となります。

ということで、unified diffを貼りつけておきます。
必要な方は、面倒ですが、このページのソースを表示して、HTMLのタグをぐりぐりしていただければ、patchファイルに生まれ変わらせて、patchに食わせるなりしてください。
インデントがスペースか、tabの違いで、rejectされるかもしれませんので、ご注意を。

なお、バージョンが変わると、使えなくなる可能性大ですので、ご注意のほどを。

(注)HTMLエディタで書いたら、タグがどっさりになったので、TEXTエディタで再編集。
ただ、スペースが、ぐちゃっとなっているので、気になる方はごめんなさい。

----
diff -ur redmine-1.0.2/app/controllers/gantts_controller.rb redmine/app/controllers/gantts_controller.rb
--- redmine-1.0.2/app/controllers/gantts_controller.rb 2010-08-19 13:33:57.000000000 +0900
+++ redmine/app/controllers/gantts_controller.rb 2010-10-12 18:44:49.000000000 +0900
@@ -34,7 +34,7 @@
       @gantt.events = events
     end
     
-    basename = (@project ? "#{@project.identifier}-" : '') + 'gantt'
+    basename = Time.now.strftime("%Y%m%d-") + (@project ? "#{@project.identifier}-" : '') + 'gantt'
     
     respond_to do |format|
       format.html { render :action => "show", :layout => !request.xhr? }
diff -ur redmine-1.0.2/app/views/gantts/show.html.erb redmine/app/views/gantts/show.html.erb
--- redmine-1.0.2/app/views/gantts/show.html.erb 2010-05-27 07:48:17.000000000 +0900
+++ redmine/app/views/gantts/show.html.erb 2010-10-12 18:20:33.000000000 +0900
@@ -44,6 +44,7 @@
 headers_height = header_heigth
 show_weeks = false
 show_days = false
+show_day_num = false
 
 if @gantt.zoom >1
     show_weeks = true
@@ -51,6 +52,10 @@
     if @gantt.zoom > 2
         show_days = true
         headers_height = 3*header_heigth
+        if @gantt.zoom > 3
+            show_day_num = true
+            headers_height = 4*header_heigth
+        end
     end
 end
 
@@ -142,6 +147,29 @@
  end
 end %>
 
+<%
+#
+# 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
@@ -149,11 +177,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
  %>
- <div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 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>
  <% 
diff -ur redmine-1.0.2/lib/redmine/export/pdf.rb redmine/lib/redmine/export/pdf.rb
--- redmine-1.0.2/lib/redmine/export/pdf.rb 2010-09-20 13:07:09.000000000 +0900
+++ redmine/lib/redmine/export/pdf.rb 2010-10-12 18:29:33.000000000 +0900
@@ -323,7 +323,8 @@
         pdf.SetX(15)
         pdf.Cell(70, 20, project.to_s)
         pdf.Ln
-        pdf.SetFontStyle('B',9)
+        #pdf.SetFontStyle('B',9)
+        pdf.SetFontStyle('B',8)
         
         subject_width = 100
         header_heigth = 5
@@ -335,10 +336,11 @@
         if gantt.months < 7
           show_weeks = true
           headers_heigth = 2*header_heigth
-          if gantt.months < 3
+          #if gantt.months < 3
             show_days = true
-            headers_heigth = 3*header_heigth
-          end
+          #  headers_heigth = 3*header_heigth
+             headers_heigth = 4*header_heigth
+          #end
         end
         
         g_width = 280 - subject_width
@@ -392,15 +394,27 @@
           left = subject_width
           height = header_heigth
           wday = gantt.date_from.cwday
-          pdf.SetFontStyle('B',7)
+          day_num = gantt.date_from
+          #pdf.SetFontStyle('B',7)
+          pdf.SetFontStyle('B',6)
           (gantt.date_to - gantt.date_from + 1).to_i.times do 
             width = zoom
+            if wday == 6
+              pdf.SetTextColor(0,0,255)
+            elsif wday == 7
+              pdf.SetTextColor(255,0,0)
+            end
             pdf.SetY(y_start + 2 * header_heigth)
             pdf.SetX(left)
+            pdf.Cell(width, height, day_num.day.to_s, "LTR", 0, "C")
+            pdf.SetY(y_start + 3 * header_heigth)
+            pdf.SetX(left)
             pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
+            day_num = day_num + 1
             left = left + width
             wday = wday + 1
             wday = 1 if wday > 7
+            pdf.SetTextColor(0,0,0)
           end
         end
         
@@ -410,7 +424,8 @@
         
         # Tasks
         top = headers_heigth + y_start
-        pdf.SetFontStyle('B',7)
+        #pdf.SetFontStyle('B',7)
+        pdf.SetFontStyle('B',5)
         gantt.events.each do |i|
           pdf.SetY(top)
           pdf.SetX(15)
@@ -429,6 +444,8 @@
           pdf.SetFillColor(255, 255, 255)
           pdf.Cell(g_width, 4.6, "", "LR", 0, "", 1)
           pdf.SetY(top+1.5)
+
+          today_position = 0
           
           if i.is_a? Issue
             i_start_date = (i.start_date >= gantt.date_from ? i.start_date : gantt.date_from )
@@ -445,6 +462,7 @@
             d_width = ((i_done_date - i_start_date)*zoom)
             l_width = ((i_late_date - i_start_date+1)*zoom) if i_late_date
             l_width ||= 0
+            today_position = ((Date.today - gantt.date_from)*zoom)
           
             pdf.SetX(subject_width + i_left)
             pdf.SetFillColor(200,200,200)
@@ -465,7 +483,8 @@
             
             pdf.SetY(top+1.5)
             pdf.SetX(subject_width + i_left + i_width)
-            pdf.Cell(30, 2, "#{i.status} #{i.done_ratio}%")
+            #pdf.Cell(30, 2, "#{i.status} #{i.done_ratio}%")
+            pdf.Cell(30, 2, "#{i.status} #{i.done_ratio}% (#{i.assigned_to})")
           else
             i_left = ((i.start_date - gantt.date_from)*zoom) 
             
@@ -477,6 +496,12 @@
             pdf.SetX(subject_width + i_left + 3)
             pdf.Cell(30, 2, "#{i.name}")
           end
+
+          pdf.SetY(top+1.5)
+          pdf.SetX(subject_width + today_position)
+          pdf.SetTextColor(100,100,100)
+          pdf.Cell(30, 2, "◆")
+          pdf.SetTextColor(0,0,0)
           
           top = top + 5
           pdf.SetDrawColor(200, 200, 200)
----

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。