2008-11-26 15 views

Odpowiedz

9

Można również zrobić to dodając kolumnę przy starcie. Spowoduje to dodanie kolumny zużytych godzin bez modyfikowania rdzenia Redmine. Wystarczy włożyć następujący kod do pliku w lib/

Adaptacja:

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
+1

Z powodzeniem użyłem tej metody zeszłej nocy, aby upewnić się, że projekt wyświetla się jako samodzielna kolumna sortowalna. Pełny kod źródłowy nie znajduje się w tej odpowiedzi, przejdź do: http://github.com/edavis10/redmine-question-plugin/tree/master/lib/question_query_patch.rb Dzięki Eric i Joel. – banderson623

+2

Ponieważ ta odpowiedź się starzeje, pomyślałem, że powinienem zapytać przed próbowaniem: czy wiesz, czy to działa z Redmine 0.9.3? – Oskar

+0

@Osker: Powinien, nie sądzę, że API bardzo się zmieniło. –

11

Konsolidacja Eric i Joela odpowiedź, to jest to, co potrzebne, aby zrobić, aby dodać kolumnę "Zużyty czas" do Redmine 1.0.3. Nie wiem, czy istnieje lepszy sposób na dodanie tekstu tłumaczenia.

Aby nadać nowego pola zlokalizowaną nazwę, dodane do config/locales/en.yml wokół linii 299 na końcu definicji polu:

field_spent_hours: Spent time 

Aby dodać nową kolumnę, stworzony lib/spent_time_query_patch .rb z zawartością:

# 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 

aby uzyskać spent_time_query_patch powyżej faktycznie załadowania stworzonego config/inicjalizatorów/spent_time_query_patch.rb o treści:

require 'spent_time_query_patch' 

Query.class_eval do 
    include QueryPatch 
end 
+1

Dzięki za napisanie tego dla innych. :) –

+0

Nie sprawdziło się to dla mnie - czy istnieją jakieś komendy do uruchomienia, aby uzyskać redmine, aby zobaczyć zmiany? – Toby

+0

Potrzebowałem zatrzymać i zrestartować mój serwer WWW. (Nie jestem ekspertem od Railsów/Ruby, ale jeśli z jakiegoś powodu twoja konfiguracja nie jest skonfigurowana do autoloadowania plików .rb w config/initializers /, fragment Query.class_eval nigdy się nie uruchomi, a łatka nie będzie Załadowany, być może podwójnie sprawdź, czy masz właściciela/uprawnienia do pliku poprawnie ustawione, aby serwer mógł je odczytać. Być może ktoś z większą wiedzą o Ruby mógłby skomentować, jak przetestować, które ścieżki są włączone dla ...) – user2067021

2

Byłoby również fajnie, gdyby kolumna "Czas spędzony" była do sortowania.

Po patrząc wytworzonego SQL, po prostu wdrożony Sortable Wyróżnij się w ten sposób:

base.add_available_column(QueryColumn.new(:spent_hours, 
:sortable => "(select sum(hours) from time_entries where time_entries.issue_id = t0_r0)") 
) 

Wymień odpowiednią linię. Mam tylko nadzieję, nazwa kolumna issue_id jest zawsze "t0_r0" ...

PS: Można znaleźć wiele przykładów w liniach app/models/query.rb 122 ++

2-Cyfry Problem: Niestety, musiałem siekać jednym z podstawowych plików: app/pomocników/queries_helper.rb

wokół linii 44, to zmienić:

when 'Fixnum', 'Float'        
    if column.name == :done_ratio 
    progress_bar(value, :width => '80px') 
    else 
    value.to_s 
    end 

do:

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 

EDYCJA: Korzystanie z patcha zamiast manipulowania źródłem Niedawno zrobiliśmy aktualizację systemu redmine, więc wyżej wspomniana poprawka została również usunięta. Tym razem postanowiliśmy zaimplementować to jako łatkę.

Otwórz dowolną wtyczkę (Stworzyliśmy wtyczkę dla naszych zmian patcha na rdzeniu). otworzyć vendor/plugins/redmine_YOURPLUGIN/app/pomocników/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 
1

za pomocą AgileDwarf wtyczki. Możesz spędzić czas & możesz powiedzieć o tym, co spędziłeś tym razem (rozwój - projektowanie -...)

Powiązane problemy