diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 6f75b56527..477d9b2407 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -28,33 +28,35 @@ class ReportsController < ApplicationController @authors = @project.users.sort @subprojects = @project.descendants.visible - @issues_by_tracker = Issue.by_tracker(@project) - @issues_by_version = Issue.by_version(@project) - @issues_by_priority = Issue.by_priority(@project) - @issues_by_category = Issue.by_category(@project) - @issues_by_assigned_to = Issue.by_assigned_to(@project) - @issues_by_author = Issue.by_author(@project) + @issues_by_tracker = Issue.count_and_group_by(report_options(:tracker)) + + @issues_by_version = Issue.count_and_group_by(report_options(:fixed_version)) + @issues_by_priority = Issue.count_and_group_by(report_options(:priority)) + @issues_by_category = Issue.count_and_group_by(report_options(:category)) + @issues_by_assigned_to = Issue.count_and_group_by(report_options(:assigned_to)) + @issues_by_author = Issue.count_and_group_by(report_options(:author)) @issues_by_subproject = Issue.by_subproject(@project) || [] render :template => "reports/issue_report" end def issue_report_details + @subprojects = Setting.display_subprojects_issues? ? @project.descendants.visible : nil case params[:detail] when "tracker" @field = "tracker_id" @rows = @project.rolled_up_trackers(false).visible - @data = Issue.by_tracker(@project) + @data = Issue.count_and_group_by(report_options(:tracker)) @report_title = l(:field_tracker) when "version" @field = "fixed_version_id" @rows = @project.shared_versions.sort - @data = Issue.by_version(@project) + @data = Issue.count_and_group_by(report_options(:fixed_version)) @report_title = l(:field_version) when "priority" @field = "priority_id" @rows = IssuePriority.all.reverse - @data = Issue.by_priority(@project) + @data = Issue.count_and_group_by(report_options(:priority)) @report_title = l(:field_priority) when "category" @field = "category_id" @@ -64,12 +66,12 @@ class ReportsController < ApplicationController when "assigned_to" @field = "assigned_to_id" @rows = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort - @data = Issue.by_assigned_to(@project) + @data = Issue.count_and_group_by(report_options(:assigned_to)) @report_title = l(:field_assigned_to) when "author" @field = "author_id" @rows = @project.users.sort - @data = Issue.by_author(@project) + @data = Issue.count_and_group_by(report_options(:author)) @report_title = l(:field_author) when "subproject" @field = "project_id" @@ -86,4 +88,9 @@ class ReportsController < ApplicationController def find_issue_statuses @statuses = @project.rolled_up_statuses.sorted.to_a end + + def report_options(association) + with_subprojects = Setting.display_subprojects_issues? ? @subprojects : nil + {:project => @project, :association => association, :with_subprojects => with_subprojects} + end end diff --git a/app/views/reports/_details.html.erb b/app/views/reports/_details.html.erb index 998089cafc..d9d9a3614b 100644 --- a/app/views/reports/_details.html.erb +++ b/app/views/reports/_details.html.erb @@ -14,13 +14,13 @@ <% for row in rows %> - <%= link_to row.name, aggregate_path(@project, field_name, row) %> + <%= link_to row.name, aggregate_path(@project, field_name, row, :subproject_id => nil) %> <% for status in @statuses %> - <%= aggregate_link data, { field_name => row.id, "status_id" => status.id }, aggregate_path(@project, field_name, row, :status_id => status.id) %> + <%= aggregate_link data, { field_name => row.id, "status_id" => status.id }, aggregate_path(@project, field_name, row, :status_id => status.id, :subproject_id => nil) %> <% end %> - <%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o") %> - <%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c") %> - <%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*") %> + <%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o", :subproject_id => nil) %> + <%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c", :subproject_id => nil) %> + <%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*", :subproject_id => nil) %> <% end %> diff --git a/app/views/reports/_simple.html.erb b/app/views/reports/_simple.html.erb index d6f51ad19f..754b1f21d0 100644 --- a/app/views/reports/_simple.html.erb +++ b/app/views/reports/_simple.html.erb @@ -11,10 +11,10 @@ <% for row in rows %> - <%= link_to row.name, aggregate_path(@project, field_name, row) %> - <%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o") %> - <%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c") %> - <%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*") %> + <%= link_to row.name, aggregate_path(@project, field_name, row, :subproject_id => nil) %> + <%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o", :subproject_id => nil) %> + <%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c", :subproject_id => nil) %> + <%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*", :subproject_id => nil) %> <% end %> diff --git a/test/functional/reports_controller_test.rb b/test/functional/reports_controller_test.rb index 63a882a8d5..9b43c63466 100644 --- a/test/functional/reports_controller_test.rb +++ b/test/functional/reports_controller_test.rb @@ -34,6 +34,38 @@ class ReportsControllerTest < Redmine::ControllerTest assert_response :success end + def test_issue_report_when_displaying_subprojects_issues + Setting.stubs(:display_subprojects_issues?).returns(true) + get :issue_report, :params => { + :id => 1 + } + + assert_response :success + # Count subprojects issues + assert_select 'table.list tbody :nth-child(1):first' do + assert_select 'td', :text => 'Bug' + assert_select ':nth-child(2)', :text => '5' # open + assert_select ':nth-child(3)', :text => '3' # closed + assert_select ':nth-child(4)', :text => '8' # total + end + end + + def test_issue_report_when_not_displaying_subprojects_issues + Setting.stubs(:display_subprojects_issues?).returns(false) + get :issue_report, :params => { + :id => 1 + } + + assert_response :success + # Do not count subprojects issues + assert_select 'table.list tbody :nth-child(1):first' do + assert_select 'td', :text => 'Bug' + assert_select ':nth-child(2)', :text => '3' # open + assert_select ':nth-child(3)', :text => '3' # closed + assert_select ':nth-child(4)', :text => '6' # total + end + end + def test_get_issue_report_details %w(tracker version priority category assigned_to author subproject).each do |detail| get :issue_report_details, :params => { @@ -45,6 +77,7 @@ class ReportsControllerTest < Redmine::ControllerTest end def test_get_issue_report_details_by_tracker_should_show_only_statuses_used_by_the_project + Setting.stubs(:display_subprojects_issues?).returns(false) WorkflowTransition.delete_all WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5) WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4) @@ -70,6 +103,52 @@ class ReportsControllerTest < Redmine::ControllerTest end end + def test_get_issue_report_details_by_tracker_when_displaying_subprojects_issues + Setting.stubs(:display_subprojects_issues?).returns(true) + get :issue_report_details, :params => { + :id => 1, + :detail => 'tracker' + } + + assert_response :success + # Count subprojects issues + assert_select 'table.list tbody :nth-child(1)' do + assert_select 'td', :text => 'Bug' + assert_select ':nth-child(2)', :text => '5' # status:1 + assert_select ':nth-child(3)', :text => '-' # status:2 + assert_select ':nth-child(4)', :text => '-' # status:3 + assert_select ':nth-child(5)', :text => '-' # status:4 + assert_select ':nth-child(6)', :text => '3' # status:5 + assert_select ':nth-child(7)', :text => '-' # status:6 + assert_select ':nth-child(8)', :text => '5' # open + assert_select ':nth-child(9)', :text => '3' # closed + assert_select ':nth-child(10)', :text => '8' # total + end + end + + def test_get_issue_report_details_by_tracker_when_not_displaying_subprojects_issues + Setting.stubs(:display_subprojects_issues?).returns(false) + get :issue_report_details, :params => { + :id => 1, + :detail => 'tracker' + } + + assert_response :success + # Do not count subprojects issues + assert_select 'table.list tbody :nth-child(1)' do + assert_select 'td', :text => 'Bug' + assert_select ':nth-child(2)', :text => '3' # status:1 + assert_select ':nth-child(3)', :text => '-' # status:2 + assert_select ':nth-child(4)', :text => '-' # status:3 + assert_select ':nth-child(5)', :text => '-' # status:4 + assert_select ':nth-child(6)', :text => '3' # status:5 + assert_select ':nth-child(7)', :text => '-' # status:6 + assert_select ':nth-child(8)', :text => '3' # open + assert_select ':nth-child(9)', :text => '3' # closed + assert_select ':nth-child(10)', :text => '6' # total + end + end + def test_get_issue_report_details_by_tracker_should_show_issue_count Issue.delete_all Issue.generate!(:tracker_id => 1)