Redmine - добавление поля "Отработанное время" для отображения вопросов

Как мне добавить добавление "Проведенное время" в качестве столбца, который будет отображаться в списке проблем?

Ответы

Ответ 1

Вы также можете сделать это, добавив столбец во время выполнения. Это добавит столбец потраченных часов без изменения ядра 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

Консолидация ответов Эрика и Джоэла, это то, что мне нужно было сделать, чтобы добавить столбец "потраченное время" в Redmine 1.0.3. Не уверен, есть ли лучший способ получить текст перевода.

Чтобы дать новому полю локализованное имя, добавленное в 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

Чтобы загрузить потраченную_страницу_на_оценке выше, чтобы создать фактическую загрузку, создали config/initializers/spent_time_query_patch.rb с контентом:

require 'spent_time_query_patch'

Query.class_eval do
  include QueryPatch
end

Ответ 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

EDIT: использование патча вместо управления исходным текстом Недавно мы обновили систему redmine, поэтому вышеупомянутое Fix также было удалено. На этот раз мы решили реализовать это как патч.

Откройте любой плагин (мы создали плагин для наших изменений в файле monkey-patch на ядре). открыть поставщика/плагины/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

Ответ 6

используя AgileDwarf плагин. Вы могли потратить время, и вы можете сказать, за что вы потратили это время (разработка - дизайн -...)