Redmine — добавление поля затраченного времени на отображение задач

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


person Joel Meador    schedule 26.11.2008    source источник


Ответы (6)


Вы также можете сделать это, добавив столбец во время выполнения. Это добавит столбец затраченных часов без изменения ядра 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 
person Eric Davis    schedule 08.01.2009
comment
Вчера вечером я успешно использовал этот метод, чтобы убедиться, что проект отображается как сортируемый столбец сам по себе. Полный исходный код отсутствует в этом ответе, просто перейдите по ссылке: github.com/edavis10/redmine-question-plugin/tree/master/lib/ Спасибо, Эрик и Джоэл. - person banderson623; 09.01.2009
comment
Поскольку этот ответ устарел, я подумал, что должен спросить, прежде чем пытаться: знаете ли вы, работает ли это с Redmine 0.9.3? - person Oskar; 07.06.2010
comment
@Osker: Так и должно быть, я не думаю, что API сильно изменился. - person Eric Davis; 10.06.2011

Объединив ответы Эрика и Джоэла, это то, что мне нужно было сделать, чтобы добавить столбец «Потраченное время» в 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

Для того, чтобы указанный выше файл expire_time_query_patch фактически загрузился, создайте файл config/initializers/spent_time_query_patch.rb с содержимым:

require 'spent_time_query_patch'

Query.class_eval do
  include QueryPatch
end
person user2067021    schedule 02.11.2010
comment
Спасибо, что записали это для других. :) - person Joel Meador; 02.11.2010
comment
У меня это не сработало - есть ли какие-нибудь команды, которые нужно запустить, чтобы redmine увидел изменения? - person Toby; 02.11.2010
comment
Мне нужно было остановить и перезапустить мой веб-сервер. (Я не эксперт по Rails/Ruby, но если по какой-то причине ваша установка не настроена на автоматическую загрузку файлов .rb в config/initializers/, то фрагмент кода Query.class_eval никогда не запустится, а патч не будет вообще загружен. Возможно, дважды проверьте, что у вас правильно установлены владелец файла / права доступа к новым файлам, чтобы веб-сервер мог их прочитать. Возможно, кто-то с большим опытом работы с Ruby может прокомментировать, как проверить, какие пути «автозагрузка» активны. для...) - person user2067021; 03.11.2010
comment
Каталоги lib и config/initializers по умолчанию не загружаются повторно без перезапуска приложения rails. - person Joel Meador; 18.11.2010
comment
Большое спасибо пользователю 493548 :) Сработало как по маслу! Redmine 1.2 - person Ramon Araujo; 10.01.2012

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

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

Откройте любой плагин (мы создали плагин для наших изменений в ядре). откройте 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
person stwienert    schedule 09.12.2010

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

person diimdeep    schedule 04.10.2012

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

person parisssss    schedule 02.09.2013

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

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

person Joel Meador    schedule 30.11.2008