チケットCSV出力に関連チケット・注記・関連コミットを追加する

大人数でRedmineを使っていると、エクセル大好きな人もいると思う。
全てをCSVに出して、加工し、レポートを作成する。
それが良いか悪いかは別として、RedmineのCSV出力でちょっと足りない項目を付け足してみた。
「注記」については200コメントまで出力するように制限した。(CSVのカラム数制限のある旧エクセル対策として)


<Redmineでの設定>
  • 「関係しているリビジョン」を出すには、関連するリポジトリのあるプロジェクトで、リポジトリ参照権限があること。

<Redmineソースの改造>(v.1.3.0ベース)
  • 「関連するチケット」「注記」「関係しているリビジョン」を出力するCSVに追加できるようにする改造。

     export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
       # csv header fields
       csv << [ "#" ] + columns.collect {|c| Redmine::CodesetUtil.from_utf8(c.caption.to_s, encoding) } +
-        (options[:description] ? [Redmine::CodesetUtil.from_utf8(l(:field_description), encoding)] : [])
+        (options[:issue_to] ? [Redmine::CodesetUtil.from_utf8(l(:field_issue_to)+"-from", encoding)] : []) +
+        (options[:issue_to] ? [Redmine::CodesetUtil.from_utf8(l(:field_issue_to)+"-to", encoding)] : []) +
+        (options[:revision] ? [Redmine::CodesetUtil.from_utf8(l(:label_associated_revisions), encoding)] : []) +
+        (options[:description] ? [Redmine::CodesetUtil.from_utf8(l(:field_description), encoding)] : []) +
+        (options[:notes] ? [Redmine::CodesetUtil.from_utf8(l(:field_notes), encoding)] : [])

       # csv lines
       issues.each do |issue|
:
:
           end
           s.to_s
         end
+
+        if options[:issue_to]
+          related_from = []
+          issue.relations_from.each do |relation|
+            related_from << Redmine::CodesetUtil.from_utf8("#{relation.relation_type}:#{relation.issue_to_id.to_s}", encoding)
+          end
+          related_from = related_from.join("\x0D\x0A")
+
+          related_to = []
+          issue.relations_to.each do |relation|
+            related_to << Redmine::CodesetUtil.from_utf8("#{relation.relation_type}:#{relation.issue_from_id.to_s}", encoding)
+          end
+          related_to = related_to.join("\x0D\x0A")
+        end
+
+        if options[:revision]
+          revision = []
+          issue.changesets.each do |c|
+            revision << Redmine::CodesetUtil.from_utf8(c.revision, encoding)
+          end
+          revision = revision.join("\x0D\x0A")
+        end
+
+        if options[:notes]
+          notes = []
+          Journal.find(:all,
+                       :conditions => ["journalized_id= ?", issue.id],
+                       :order => :created_on,
+                       :limit => 200).map(&:notes).uniq.each do |note|
+                         notes << Redmine::CodesetUtil.from_utf8(note, encoding)
+                       end
+        end
         csv << [ issue.id.to_s ] + col_values.collect {|c| Redmine::CodesetUtil.from_utf8(c.to_s, encoding) } +
-          (options[:description] ? [Redmine::CodesetUtil.from_utf8(issue.description, encoding)] : [])
+          (options[:issue_to] ? [related_from] : []) +
+          (options[:issue_to] ? [related_to] : []) +
+          (options[:revision] ? [revision] : []) +
+          (options[:description] ? [Redmine::CodesetUtil.from_utf8(issue.description, encoding)] : []) +
+          (options[:notes] ? notes : [])
+
       end
     end
     export

     <label><%= radio_button_tag 'columns', 'all' %> <%= l(:description_all_columns) %></label>
   </p>
   <p>
-    <label><%= check_box_tag 'description', '1' %> <%= l(:field_description) %></label>
+    <label><%= check_box_tag 'issue_to', '1' %> <%= l(:field_issue_to) %></label><br />
+<% if !@project.repository.nil? && User.current.allowed_to?(:view_changesets, @project) -%>
+    <label><%= check_box_tag 'revision', '1' %> <%= l(:label_associated_revisions) %></label>< br />
+<% end -%>
+    <label><%= check_box_tag 'description', '1' %> <%= l(:field_description) %></label>< br />
+    <label><%= check_box_tag 'notes', '1' %> <%= l(:field_notes) %></label>
   </p>
   <p class="buttons">
     <%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);" %>
#↑ブラウザによっては、SyntaxHighlighterがコード中の一部の-を変に認識しているから注意!

0 件のコメント:

コメントを投稿