##// END OF EJS Templates
Consider custom fields that correspond to the project only (#24014)....
Jean-Philippe Lang -
r15508:960b32238830
parent child
Show More
@@ -106,7 +106,9 class TimeEntryQuery < Query
106 add_available_filter "hours", :type => :float
106 add_available_filter "hours", :type => :float
107
107
108 add_custom_fields_filters(TimeEntryCustomField)
108 add_custom_fields_filters(TimeEntryCustomField)
109 add_associations_custom_fields_filters :project, :issue, :user
109 add_associations_custom_fields_filters :project
110 add_custom_fields_filters(issue_custom_fields, :issue)
111 add_associations_custom_fields_filters :user
110 end
112 end
111
113
112 def available_columns
114 def available_columns
@@ -114,7 +116,7 class TimeEntryQuery < Query
114 @available_columns = self.class.available_columns.dup
116 @available_columns = self.class.available_columns.dup
115 @available_columns += TimeEntryCustomField.visible.
117 @available_columns += TimeEntryCustomField.visible.
116 map {|cf| QueryCustomFieldColumn.new(cf) }
118 map {|cf| QueryCustomFieldColumn.new(cf) }
117 @available_columns += IssueCustomField.visible.
119 @available_columns += issue_custom_fields.visible.
118 map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf, :totalable => false) }
120 map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf, :totalable => false) }
119 @available_columns
121 @available_columns
120 end
122 end
@@ -233,4 +235,12 class TimeEntryQuery < Query
233 joins.compact!
235 joins.compact!
234 joins.any? ? joins.join(' ') : nil
236 joins.any? ? joins.join(' ') : nil
235 end
237 end
238
239 def issue_custom_fields
240 if project
241 project.all_issue_custom_fields
242 else
243 IssueCustomField.where(:is_for_all => true)
244 end
245 end
236 end
246 end
@@ -54,4 +54,28 class TimeEntryQueryTest < ActiveSupport::TestCase
54 query.add_filter('activity_id', '!', [system.id.to_s])
54 query.add_filter('activity_id', '!', [system.id.to_s])
55 assert_equal 4.0, query.results_scope.sum(:hours)
55 assert_equal 4.0, query.results_scope.sum(:hours)
56 end
56 end
57
58 def test_project_query_should_include_project_issue_custom_fields_only_as_filters
59 global = IssueCustomField.generate!(:is_for_all => true, :is_filter => true)
60 field_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [3], :is_filter => true)
61 field_not_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [1,2], :is_filter => true)
62
63 query = TimeEntryQuery.new(:project => Project.find(3))
64
65 assert_include "issue.cf_#{global.id}", query.available_filters.keys
66 assert_include "issue.cf_#{field_on_project.id}", query.available_filters.keys
67 assert_not_include "issue.cf_#{field_not_on_project.id}", query.available_filters.keys
68 end
69
70 def test_project_query_should_include_project_issue_custom_fields_only_as_columns
71 global = IssueCustomField.generate!(:is_for_all => true, :is_filter => true)
72 field_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [3], :is_filter => true)
73 field_not_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [1,2], :is_filter => true)
74
75 query = TimeEntryQuery.new(:project => Project.find(3))
76
77 assert_include "issue.cf_#{global.id}", query.available_columns.map(&:name).map(&:to_s)
78 assert_include "issue.cf_#{field_on_project.id}", query.available_columns.map(&:name).map(&:to_s)
79 assert_not_include "issue.cf_#{field_not_on_project.id}", query.available_columns.map(&:name).map(&:to_s)
80 end
57 end
81 end
General Comments 0
You need to be logged in to leave comments. Login now