大人数で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 件のコメント:
コメントを投稿