Как мне добавить столбец «Потраченное время» в список задач?
Redmine — добавление поля затраченного времени на отображение задач
Ответы (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
Объединив ответы Эрика и Джоэла, это то, что мне нужно было сделать, чтобы добавить столбец «Потраченное время» в 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
Также было бы круто, если бы столбец «Потраченное время» можно было сортировать.
После просмотра полученного 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
с помощью подключаемого модуля AgileDwarf. Вы можете потратить время и можете сказать, на что вы потратили это время (разработка - дизайн -...)
Так как никто не ответил, я просто тыкал источник, пока это не дало результатов. Затем я начал блог, чтобы объяснить, как я это сделал.
Добавить столбец затраченного времени в список задач по умолчанию в Редмине