From fa76ec5c0196a309d541edcc5fda6022e19aefe2 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Sun, 1 Apr 2018 00:29:22 +0000 Subject: [PATCH] Adds issue category filter to spent time queries (#28391). Patch by Marius BALTEANU. git-svn-id: http://svn.redmine.org/redmine/trunk@17249 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/time_entry_query.rb | 8 ++++++++ test/functional/timelog_controller_test.rb | 11 +++++++++++ test/unit/time_entry_query_test.rb | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb index 706c6b234..ea32cb939 100644 --- a/app/models/time_entry_query.rb +++ b/app/models/time_entry_query.rb @@ -65,6 +65,10 @@ class TimeEntryQuery < Query :type => :list, :name => l("label_attribute_of_issue", :name => l(:field_fixed_version)), :values => lambda { fixed_version_values }) + add_available_filter "issue.category_id", + :type => :list_optional, + :name => l("label_attribute_of_issue", :name => l(:field_category)), + :values => lambda { project.issue_categories.collect{|s| [s.name, s.id.to_s] } } if project add_available_filter("user_id", :type => :list_optional, :values => lambda { author_values } @@ -197,6 +201,10 @@ class TimeEntryQuery < Query sql_for_field("status_id", operator, value, Issue.table_name, "status_id") end + def sql_for_issue_category_id_field(field, operator, value) + sql_for_field("category_id", operator, value, Issue.table_name, "category_id") + end + # Accepts :from/:to params as shortcut filters def build_from_params(params, defaults={}) super diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb index 1dfe22987..02338e20d 100644 --- a/test/functional/timelog_controller_test.rb +++ b/test/functional/timelog_controller_test.rb @@ -1025,6 +1025,17 @@ class TimelogControllerTest < Redmine::ControllerTest assert_equal Tracker.where(:id => [1, 2, 3]).sorted.pluck(:name), values end + def test_index_with_issue_category_filter + get :index, :params => { + :project_id => 'ecookbook', + :f => ['issue.category_id'], + :op => {'issue.category_id' => '='}, + :v => {'issue.category_id' => ['1']} + } + assert_response :success + assert_equal ['1', '2'], css_select('input[name="ids[]"]').map {|e| e.attr('value')} + end + def test_index_with_filter_on_issue_custom_field issue = Issue.generate!(:project_id => 1, :tracker_id => 1, :custom_field_values => {2 => 'filter_on_issue_custom_field'}) entry = TimeEntry.generate!(:issue => issue, :hours => 2.5) diff --git a/test/unit/time_entry_query_test.rb b/test/unit/time_entry_query_test.rb index e00e33845..637f884f4 100644 --- a/test/unit/time_entry_query_test.rb +++ b/test/unit/time_entry_query_test.rb @@ -102,4 +102,9 @@ class TimeEntryQueryTest < ActiveSupport::TestCase 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 + + def test_issue_category_filter_should_not_be_available_in_global_queries + query = TimeEntryQuery.new(:project => nil, :name => '_') + assert !query.available_filters.has_key?('issue.category_id') + end end -- 2.39.5