@@ -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 |
|
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 += |
|
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