如何将“花费时间”添加为要在问题列表中显示的列?
整合 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
您还可以通过在运行时添加列来完成此操作。这将添加花费的时间列而不修改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 可用列=(v) self.available_columns = (v) 结尾 结尾 除非 Query.respond_to?(:add_available_column) # 将一列添加到核心未提供的+available_columns+的方法。 def add_available_column(列) self.available_columns
此外,如果“花费时间”栏可以排序,那就太酷了。
查找生成的 SQL 后,我只是通过这种方式实现了可排序功能:
base.add_available_column(QueryColumn.new(:spent_hours,
:sortable => "(select sum(hours) from time_entries where time_entries.issue_id = t0_r0)")
)
更换相应的线路。我只是希望 issues_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
此功能内置从1.4.0版本
通过使用 AgileDwarf 插件。你可以花时间&你可以说出你这次花了什么(开发-设计-...)
由于没有人回答,我只是戳来源,直到产生结果。然后我开始写博客来解释我是如何做到的。