14

問題リストに表示される列として「費やした時間」を追加するにはどうすればよいですか?

4

6 に答える 6

12

Eric と Joel の回答をまとめて、Redmine 1.0.3 に「Spent time」列を追加するために必要なことは次のとおりです。翻訳テキストを追加するためのより良い方法があるかどうかはわかりません.

新しいフィールドにローカライズされた名前を付けるには、config/locales/en.yml のフィールド定義の最後の 299 行あたりに追加します。

  field_spent_hours: Spent time

新しい列を追加するには、次の内容で lib/spent_time_query_patch.rb を作成しました。

# Based on http://github.com/edavis10/question_plugin/blob/master/lib/question_query_patch.rb
require_dependency 'query'

module QueryPatch
  def self.included(base) # :nodoc:
    base.extend(ClassMethods)

    # Same as typing in the class
    base.class_eval do
      unloadable # Send unloadable so it will not be unloaded in development
      base.add_available_column(QueryColumn.new(:spent_hours))
    end

  end

  module ClassMethods
    unless Query.respond_to?(:available_columns=)
      # Setter for +available_columns+ that isn't provided by the core.
      def available_columns=(v)
        self.available_columns = (v)
      end
    end

    unless Query.respond_to?(:add_available_column)
      # Method to add a column to the +available_columns+ that isn't provided by the core.
      def add_available_column(column)
        self.available_columns << (column)
      end
    end
  end
end

上記の sent_time_query_patch を実際にロードするために、次の内容で config/initializers/spent_time_query_patch.rb を作成しました。

require 'spent_time_query_patch'

Query.class_eval do
  include QueryPatch
end
于 2010-11-02T01:19:02.090 に答える
9

これは、実行時に列を追加することによっても実行できます。これにより、Redmine コアを変更せずに、費やした時間の列が追加されます。次のコードを lib/ のファイルにドロップするだけです

から適応:

require_dependency 'クエリ'

モジュール QueryPatch
  def self.included(base) # :nodoc:
    base.extend(クラスメソッド)

    # クラスで入力するのと同じ
    base.class_eval する
      unloadable # unloadable を送信して、開発中にアンロードされないようにする
      base.add_available_column(QueryColumn.new(:spent_hours))
    終わり

  終わり

  モジュール ClassMethods

    Query.respond_to?(:available_columns=) でない限り
      # コアによって提供されていない +available_columns+ のセッター。
      def available_columns=(v)
        self.available_columns = (v)
      終わり
    終わり

    Query.respond_to?(:add_available_column) でない限り
      # コアが提供していない +available_columns+ に列を追加するメソッド。
      def add_available_column(列)
        self.available_columns
于 2009-01-08T06:04:32.887 に答える
2

この機能は1.4.0バージョンから組み込まれています

于 2012-10-04T11:09:15.787 に答える
2

また、「費やした時間」の列がソート可能であればクールです。

生成された SQL を調べた後、次の方法でソート可能な機能を実装しました。

base.add_available_column(QueryColumn.new(:spent_hours, 
 :sortable => "(select sum(hours) from time_entries where time_entries.issue_id = t0_r0)")
) 

それぞれの行を置き換えます。issue_id 列の名前が常に「t0_r0」であることを願っています...

PS: app/models/query.rb 行 122++ で多くの例を見つけることができます

2 桁の問題: 残念ながら、コア ファイルの 1 つをハックする必要がありました: app/helpers/queries_helper.rb

44 行目あたりを次のように変更します。

when 'Fixnum', 'Float'                              
  if column.name == :done_ratio
    progress_bar(value, :width => '80px')
  else
    value.to_s
  end

の中へ:

when 'Fixnum', 'Float'
  if column.name == :done_ratio
    progress_bar(value, :width => '80px')
  elsif column.name == :spent_hours
    sprintf "%.2f", value
  else
    value.to_s
  end

編集: ソースを操作する代わりにパッチを使用する 最近、redmine システムの更新を行ったため、上記の修正も削除されました。今回はそれをパッチとして実装することにしました。

任意のプラグインを開きます (コアのモンキー パッチの変更用にプラグインを作成しました)。vendor/plugins/redmine_YOURPLUGIN/app/helpers/queries_helper.rb を開く

module QueriesHelper
  def new_column_content(column, issue)
    value = column.value(issue)
    if value.class.name == "Float" and column.name == :spent_hours
      sprintf "%.2f", value
    else
      __column_content(column, issue)
    end 
  end
  alias_method :__column_content, :column_content
  alias_method :column_content, :new_column_content
end
于 2010-12-09T21:45:29.337 に答える
1

誰も答えなかったので、結果が得られるまでソースを突き刺しました。それから、私はそれをどのように行ったかを説明するためにブログを始めました.

Redmine のデフォルトの問題リストに費やした時間の列を追加します

于 2008-11-30T20:38:27.027 に答える
1

AgileDwarfプラグインを使用して。あなたは時間を費やしたかもしれませんし、あなたがこの時間に費やしたものについて言うことができます (開発 - 設計 -...)

于 2013-09-02T08:08:22.797 に答える