]> source.dussan.org Git - redmine.git/commitdiff
Consider custom fields that correspond to the project only (#24014).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 8 Oct 2016 07:28:45 +0000 (07:28 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 8 Oct 2016 07:28:45 +0000 (07:28 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15890 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/time_entry_query.rb
test/unit/time_entry_query_test.rb

index 5d0bdee3b6e9e82ab2b062056b7208cbfb8ccc7b..74263ba9c243de8e7c834aa533442b5bdc8d201c 100644 (file)
@@ -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
index 9ca864f7208147390999d4e4b73340463d1fdce3..599aae52cff925ae27a5913d382837c93015f4e9 100644 (file)
@@ -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