【问题标题】:Redmine - Add "Spent Time" Field to Issues DisplayRedmine - 在问题显示中添加“花费时间”字段
【发布时间】:2008-11-26 16:56:05
【问题描述】:

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

【问题讨论】:

    标签: redmine


    【解决方案1】:

    整合 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 查看更改?
    • 我需要停止并重新启动我的网络服务器。 (我不是 Rails/Ruby 专家,但如果由于某种原因您的设置未配置为在 config/initializers/ 中自动加载 .rb 文件,那么 Query.class_eval 代码块将永远不会运行,补丁也不会运行完全加载。也许仔细检查您是否正确设置了新文件的文件所有者/权限,以便网络服务器可以读取它们。也许具有更多 Ruby 专业知识的人可以评论如何测试哪些路径“自动加载”处于活动状态为...)
    • lib 和 config/initializers 目录在默认情况下不会在没有重新启动 rails 应用程序的情况下重新加载。
    • 非常感谢 user493548 :) 工作就像一个魅力! Redmine 1.2
    【解决方案2】:

    您也可以通过在运行时添加列来做到这一点。这将在不修改 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 

    【讨论】:

    • 我昨晚成功地使用了这种方法来确保项目本身显示为可排序的列。完整的源代码不在此答案中,请转到:github.com/edavis10/redmine-question-plugin/tree/master/lib/…Thanks Eric 和 Joel。
    • 由于这个答案越来越老了,我想我应该在尝试之前先问一下:你知道这是否适用于 Redmine 0.9.3?
    • @Osker:应该,我认为 API 没有太大变化。
    【解决方案3】:

    另外,如果“花费时间”列是可排序的,那就太棒了。

    查看生成的 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++ 行找到很多示例

    两位数问题: 不幸的是,我不得不破解其中一个核心文件: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
    

    【讨论】:

      【解决方案4】:

      这个功能build in从1.4.0版本开始

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          Add spent time column to default issues list in Redmine

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-01
            • 2015-06-07
            • 2022-11-27
            • 2023-04-06
            • 1970-01-01
            • 2015-02-19
            相关资源
            最近更新 更多