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
This commit is contained in:
parent
a9e81b6b84
commit
e18d0e268d
@ -85,6 +85,28 @@ class QueryCustomFieldColumn < QueryColumn
|
|||||||
end
|
end
|
||||||
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 Query < ActiveRecord::Base
|
||||||
class StatementInvalid < ::ActiveRecord::StatementInvalid
|
class StatementInvalid < ::ActiveRecord::StatementInvalid
|
||||||
end
|
end
|
||||||
|
@ -100,6 +100,7 @@ class TimeEntryQuery < Query
|
|||||||
return @available_columns if @available_columns
|
return @available_columns if @available_columns
|
||||||
@available_columns = self.class.available_columns.dup
|
@available_columns = self.class.available_columns.dup
|
||||||
@available_columns += TimeEntryCustomField.all.map {|cf| QueryCustomFieldColumn.new(cf) }
|
@available_columns += TimeEntryCustomField.all.map {|cf| QueryCustomFieldColumn.new(cf) }
|
||||||
|
@available_columns += IssueCustomField.all.map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf) }
|
||||||
@available_columns
|
@available_columns
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -528,6 +528,16 @@ class TimelogControllerTest < ActionController::TestCase
|
|||||||
assert_equal [entry], assigns(:entries)
|
assert_equal [entry], assigns(:entries)
|
||||||
end
|
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
|
def test_index_atom_feed
|
||||||
get :index, :project_id => 1, :format => 'atom'
|
get :index, :project_id => 1, :format => 'atom'
|
||||||
assert_response :success
|
assert_response :success
|
||||||
|
Loading…
x
Reference in New Issue
Block a user