Redmine - добавить поле «Потраченное время» в окно «Проблемы» - PullRequest
14 голосов
/ 26 ноября 2008

Как мне добавить «потраченное время» в качестве столбца для отображения в списке проблем?

Ответы [ 6 ]

11 голосов
/ 02 ноября 2010

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

Чтобы присвоить новому полю локализованное имя, добавленное в config / locales / en.yml вокруг строки 299 в конце определений поля:

  field_spent_hours: Spent time

Чтобы добавить новый столбец, создан lib / lost_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 / lost_time_query_patch.rb с содержимым:

require 'spent_time_query_patch'

Query.class_eval do
  include QueryPatch
end
9 голосов
/ 08 января 2009

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

Эта функция встроенная от версии 1.4.0

2 голосов
/ 10 декабря 2010

Также было бы здорово, если бы колонка «Потраченное время» была сортируемой.

После просмотра созданного 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 / questions_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, поэтому вышеупомянутое исправление также было удалено. На этот раз мы решили реализовать это как патч.

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

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

1 голос
/ 30 ноября 2008

Поскольку никто не ответил, я просто ткнул источник, пока он не дал результатов. Затем я начал блог, чтобы объяснить, как я это сделал.

Добавление столбца затраченного времени в список проблем по умолчанию в Redmine

...