summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/time_entry_query.rb14
-rw-r--r--test/unit/time_entry_query_test.rb24
2 files changed, 36 insertions, 2 deletions
diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb
index 5d0bdee3b..74263ba9c 100644
--- a/app/models/time_entry_query.rb
+++ b/app/models/time_entry_query.rb
@@ -106,7 +106,9 @@ class TimeEntryQuery < Query
add_available_filter "hours", :type => :float
add_custom_fields_filters(TimeEntryCustomField)
- add_associations_custom_fields_filters :project, :issue, :user
+ add_associations_custom_fields_filters :project
+ add_custom_fields_filters(issue_custom_fields, :issue)
+ add_associations_custom_fields_filters :user
end
def available_columns
@@ -114,7 +116,7 @@ class TimeEntryQuery < Query
@available_columns = self.class.available_columns.dup
@available_columns += TimeEntryCustomField.visible.
map {|cf| QueryCustomFieldColumn.new(cf) }
- @available_columns += IssueCustomField.visible.
+ @available_columns += issue_custom_fields.visible.
map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf, :totalable => false) }
@available_columns
end
@@ -233,4 +235,12 @@ class TimeEntryQuery < Query
joins.compact!
joins.any? ? joins.join(' ') : nil
end
+
+ def issue_custom_fields
+ if project
+ project.all_issue_custom_fields
+ else
+ IssueCustomField.where(:is_for_all => true)
+ end
+ end
end
diff --git a/test/unit/time_entry_query_test.rb b/test/unit/time_entry_query_test.rb
index 9ca864f72..599aae52c 100644
--- a/test/unit/time_entry_query_test.rb
+++ b/test/unit/time_entry_query_test.rb
@@ -54,4 +54,28 @@ class TimeEntryQueryTest < ActiveSupport::TestCase
query.add_filter('activity_id', '!', [system.id.to_s])
assert_equal 4.0, query.results_scope.sum(:hours)
end
+
+ def test_project_query_should_include_project_issue_custom_fields_only_as_filters
+ global = IssueCustomField.generate!(:is_for_all => true, :is_filter => true)
+ field_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [3], :is_filter => true)
+ field_not_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [1,2], :is_filter => true)
+
+ query = TimeEntryQuery.new(:project => Project.find(3))
+
+ assert_include "issue.cf_#{global.id}", query.available_filters.keys
+ assert_include "issue.cf_#{field_on_project.id}", query.available_filters.keys
+ assert_not_include "issue.cf_#{field_not_on_project.id}", query.available_filters.keys
+ end
+
+ def test_project_query_should_include_project_issue_custom_fields_only_as_columns
+ global = IssueCustomField.generate!(:is_for_all => true, :is_filter => true)
+ field_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [3], :is_filter => true)
+ field_not_on_project = IssueCustomField.generate!(:is_for_all => false, :project_ids => [1,2], :is_filter => true)
+
+ query = TimeEntryQuery.new(:project => Project.find(3))
+
+ assert_include "issue.cf_#{global.id}", query.available_columns.map(&:name).map(&:to_s)
+ assert_include "issue.cf_#{field_on_project.id}", query.available_columns.map(&:name).map(&:to_s)
+ assert_not_include "issue.cf_#{field_not_on_project.id}", query.available_columns.map(&:name).map(&:to_s)
+ end
end