summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2013-01-12 13:09:06 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2013-01-12 13:09:06 +0000
commite18d0e268de5a3eee897eac3072c3d3dc37405d1 (patch)
treeb433b889bd31ed31aec02bae2053a8d87db17edf
parenta9e81b6b847078d0eac673a4bbaebb5274231231 (diff)
downloadredmine-e18d0e268de5a3eee897eac3072c3d3dc37405d1.tar.gz
redmine-e18d0e268de5a3eee897eac3072c3d3dc37405d1.zip
Makes issue custom fields available as timelog columns (#1766).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11174 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/query.rb22
-rw-r--r--app/models/time_entry_query.rb1
-rw-r--r--test/functional/timelog_controller_test.rb10
3 files changed, 33 insertions, 0 deletions
diff --git a/app/models/query.rb b/app/models/query.rb
index 97a635c10..5094cc3a9 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -85,6 +85,28 @@ class QueryCustomFieldColumn < QueryColumn
end
end
+class QueryAssociationCustomFieldColumn < QueryCustomFieldColumn
+
+ def initialize(association, custom_field)
+ super(custom_field)
+ self.name = "#{association}.cf_#{custom_field.id}".to_sym
+ # TODO: support sorting/grouping by association custom field
+ self.sortable = false
+ self.groupable = false
+ @association = association
+ end
+
+ def value(object)
+ if assoc = object.send(@association)
+ super(assoc)
+ end
+ end
+
+ def css_classes
+ @css_classes ||= "#{@association}_cf_#{@cf.id} #{@cf.field_format}"
+ end
+end
+
class Query < ActiveRecord::Base
class StatementInvalid < ::ActiveRecord::StatementInvalid
end
diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb
index 9ffa5f15d..7283fbd2f 100644
--- a/app/models/time_entry_query.rb
+++ b/app/models/time_entry_query.rb
@@ -100,6 +100,7 @@ class TimeEntryQuery < Query
return @available_columns if @available_columns
@available_columns = self.class.available_columns.dup
@available_columns += TimeEntryCustomField.all.map {|cf| QueryCustomFieldColumn.new(cf) }
+ @available_columns += IssueCustomField.all.map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf) }
@available_columns
end
diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb
index cb81a41ad..ae0561bfa 100644
--- a/test/functional/timelog_controller_test.rb
+++ b/test/functional/timelog_controller_test.rb
@@ -528,6 +528,16 @@ class TimelogControllerTest < ActionController::TestCase
assert_equal [entry], assigns(:entries)
end
+ def test_index_with_issue_custom_field_column
+ issue = Issue.generate!(:project_id => 1, :tracker_id => 1, :custom_field_values => {2 => 'filter_on_issue_custom_field'})
+ entry = TimeEntry.generate!(:issue => issue, :hours => 2.5)
+
+ get :index, :c => %w(project spent_on issue comments hours issue.cf_2)
+ assert_response :success
+ assert_include :'issue.cf_2', assigns(:query).column_names
+ assert_select 'td.issue_cf_2', :text => 'filter_on_issue_custom_field'
+ end
+
def test_index_atom_feed
get :index, :project_id => 1, :format => 'atom'
assert_response :success