Redmine - 为问题显示添加“花费时间”字段

时间:2008-11-26 16:56:05

标签: redmine

我如何将“花费时间”作为要显示在问题列表中的列添加?

6 个答案:

答案 0 :(得分:11)

巩固Eric和Joel的答案,这就是我需要做的才能将“花费的时间”专栏添加到Redmine 1.0.3中。不确定是否有更好的方法来添加翻译文本。

要为新字段指定一个本地化名称,请在字段定义末尾的第299行添加到config / locales / en.yml:

  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

要使上面的spent_time_query_patch实际加载,请创建包含内容的config / initializers / spent_time_query_patch.rb:

require 'spent_time_query_patch'

Query.class_eval do
  include QueryPatch
end

答案 1 :(得分:9)

您也可以通过在运行时添加列来完成此操作。这将添加花费的小时列而不修改Redmine核心。只需将以下代码放入lib /

中的文件即可

改编自:

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 

答案 2 :(得分: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位数问题: 不幸的是,我不得不破解其中一个核心文件: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系统进行了更新,因此上面提到的Fix也被删除了。 这一次,我们决定将其作为补丁实现。

打开任何插件(我们为核心的猴子补丁更改创建了一个插件)。打开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

答案 3 :(得分:2)

1.4.0版本中的此功能build in

答案 4 :(得分:1)

由于没有人回答,我只是戳了源,直到它产生了结果。然后我开了一个博客来解释我是如何做到的。

Add spent time column to default issues list in Redmine

答案 5 :(得分:1)

使用AgileDwarf插件。你可以花时间和时间你可以说你这次花了多少钱(开发 - 设计-...)