14

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

4

6 回答 6

12

合并 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

为了让上面的花费时间查询补丁实际加载,创建了 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 '查询'

模块查询补丁
  def self.included(base) # :nodoc:
    base.extend(类方法)

    # 与在类中输入相同
    base.class_eval 做
      unloadable # 发送 unloadable 使其在开发中不会被卸载
      base.add_available_column(QueryColumn.new(:spent_hours))
    结尾

  结尾

  模块类方法

    除非 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

此外,如果“花费时间”列是可排序的,那将是很酷的。

在查找生成的 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 系统进行了更新,因此上述修复也被删除了。这一次,我们决定将其作为一个补丁来实现。

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

此功能内置于1.4.0 版本

于 2012-10-04T11:09:15.787 回答
1

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

将花费时间列添加到 Redmine 中的默认问题列表

于 2008-11-30T20:38:27.027 回答
1

通过使用AgileDwarf插件。你可以花时间&你可以说出你这段时间花了什么(开发-设计-...)

于 2013-09-02T08:08:22.797 回答