Filter time entries after project status (#20081).

Patch by Marius BALTEANU.


git-svn-id: http://svn.redmine.org/redmine/trunk@17608 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA
2018-10-29 04:05:18 +00:00
parent 21034c5628
commit a0479c768e
3 changed files with 44 additions and 0 deletions

View File

@@ -80,6 +80,12 @@ class TimeEntryQuery < Query
:type => :list, :values => activities.map {|a| [a.name, a.id.to_s]}
)
add_available_filter("project.status",
:type => :list,
:name => l(:label_attribute_of_project, :name => l(:field_status)),
:values => lambda { project_statuses_values }
) if project.nil? || !project.leaf?
add_available_filter "comments", :type => :text
add_available_filter "hours", :type => :float
@@ -205,6 +211,10 @@ class TimeEntryQuery < Query
sql_for_field("category_id", operator, value, Issue.table_name, "category_id")
end
def sql_for_project_status_field(field, operator, value, options={})
sql_for_field(field, operator, value, Project.table_name, "status")
end
# Accepts :from/:to params as shortcut filters
def build_from_params(params, defaults={})
super

View File

@@ -986,6 +986,25 @@ class TimelogControllerTest < Redmine::ControllerTest
assert_equal [entry].map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')}
end
def test_index_with_project_status_filter
project = Project.find(3)
project.close
project.save
get :index, :params => {
:set_filter => 1,
:f => ['project.status'],
:op => {'project.status' => '='},
:v => {'project.status' => ['1']}
}
assert_response :success
time_entries = css_select('input[name="ids[]"]').map {|e| e.attr('value')}
assert_include '1', time_entries
assert_not_include '4', time_entries
end
def test_index_with_issue_status_column
issue = Issue.generate!(:project_id => 1, :tracker_id => 1, :status_id => 4)
entry = TimeEntry.generate!(:issue => issue)

View File

@@ -108,4 +108,19 @@ class TimeEntryQueryTest < ActiveSupport::TestCase
query = TimeEntryQuery.new(:project => nil, :name => '_')
assert !query.available_filters.has_key?('issue.category_id')
end
def test_project_status_filter_should_be_available_in_global_queries
query = TimeEntryQuery.new(:project => nil, :name => '_')
assert query.available_filters.has_key?('project.status')
end
def test_project_status_filter_should_be_available_when_project_has_subprojects
query = TimeEntryQuery.new(:project => Project.find(1), :name => '_')
assert query.available_filters.has_key?('project.status')
end
def test_project_status_filter_should_not_be_available_when_project_is_leaf
query = TimeEntryQuery.new(:project => Project.find(2), :name => '_')
assert !query.available_filters.has_key?('project.status')
end
end