@@ -86,7 +86,9 class TimeEntryQuery < Query | |||||
86 | add_available_filter "hours", :type => :float |
|
86 | add_available_filter "hours", :type => :float | |
87 |
|
87 | |||
88 | add_custom_fields_filters(TimeEntryCustomField) |
|
88 | add_custom_fields_filters(TimeEntryCustomField) | |
89 |
add_associations_custom_fields_filters :project |
|
89 | add_associations_custom_fields_filters :project | |
|
90 | add_custom_fields_filters(issue_custom_fields, :issue) | |||
|
91 | add_associations_custom_fields_filters :user | |||
90 | end |
|
92 | end | |
91 |
|
93 | |||
92 | def available_columns |
|
94 | def available_columns | |
@@ -94,7 +96,7 class TimeEntryQuery < Query | |||||
94 | @available_columns = self.class.available_columns.dup |
|
96 | @available_columns = self.class.available_columns.dup | |
95 | @available_columns += TimeEntryCustomField.visible. |
|
97 | @available_columns += TimeEntryCustomField.visible. | |
96 | map {|cf| QueryCustomFieldColumn.new(cf) } |
|
98 | map {|cf| QueryCustomFieldColumn.new(cf) } | |
97 |
@available_columns += |
|
99 | @available_columns += issue_custom_fields.visible. | |
98 | map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf) } |
|
100 | map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf) } | |
99 | @available_columns |
|
101 | @available_columns | |
100 | end |
|
102 | end | |
@@ -138,4 +140,12 class TimeEntryQuery < Query | |||||
138 | end |
|
140 | end | |
139 | self |
|
141 | self | |
140 | end |
|
142 | end | |
|
143 | ||||
|
144 | def issue_custom_fields | |||
|
145 | if project | |||
|
146 | project.all_issue_custom_fields | |||
|
147 | else | |||
|
148 | IssueCustomField.where(:is_for_all => true) | |||
|
149 | end | |||
|
150 | end | |||
141 | end |
|
151 | 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