From: Jean-Philippe Lang Date: Sat, 12 Sep 2015 14:53:28 +0000 (+0000) Subject: Merged r14554 (#20688). X-Git-Tag: 3.1.1~14 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d5bb0e85931bfdddcef4eada5e7e1c133c84a7e3;p=redmine.git Merged r14554 (#20688). git-svn-id: http://svn.redmine.org/redmine/branches/3.1-stable@14558 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 8316f6b4b..e21ccf618 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -35,6 +35,10 @@ class IssueQuery < Query QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"), QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date"), QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours"), + QueryColumn.new(:total_estimated_hours, + :sortable => "COALESCE((SELECT SUM(estimated_hours) FROM #{Issue.table_name} subtasks" + + " WHERE subtasks.root_id = #{Issue.table_name}.root_id AND subtasks.lft >= #{Issue.table_name}.lft AND subtasks.rgt <= #{Issue.table_name}.rgt), 0)", + :default_order => 'desc'), QueryColumn.new(:done_ratio, :sortable => "#{Issue.table_name}.done_ratio", :groupable => true), QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'), QueryColumn.new(:closed_on, :sortable => "#{Issue.table_name}.closed_on", :default_order => 'desc'), diff --git a/config/locales/en.yml b/config/locales/en.yml index 039df462f..b5aa9f2cf 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -342,6 +342,7 @@ en: field_default_status: Default status field_users_visibility: Users visibility field_time_entries_visibility: Time logs visibility + field_total_estimated_hours: Total estimated time setting_app_title: Application title setting_app_subtitle: Application subtitle diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 3432514be..e97427533 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -362,6 +362,7 @@ fr: field_default_status: Statut par défaut field_users_visibility: Visibilité des utilisateurs field_time_entries_visibility: Visibilité du temps passé + field_total_estimated_hours: Temps estimé total setting_app_title: Titre de l'application setting_app_subtitle: Sous-titre de l'application diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index f642d582d..7b0cac6de 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -721,6 +721,13 @@ class IssuesControllerTest < ActionController::TestCase hours = assigns(:issues).collect(&:total_spent_hours) assert_equal hours.sort.reverse, hours end + + def test_index_sort_by_total_estimated_hours + get :index, :sort => 'total_estimated_hours:desc' + assert_response :success + hours = assigns(:issues).collect(&:total_estimated_hours) + assert_equal hours.sort.reverse, hours + end def test_index_sort_by_user_custom_field cf = IssueCustomField.create!(:name => 'User', :is_for_all => true, :tracker_ids => [1,2,3], :field_format => 'user') @@ -862,6 +869,11 @@ class IssuesControllerTest < ActionController::TestCase assert_select 'table.issues tr#issue-3 td.total_spent_hours', :text => '1.00' end + def test_index_with_total_estimated_hours_column + get :index, :set_filter => 1, :c => %w(subject total_estimated_hours) + assert_select 'table.issues td.total_estimated_hours' + end + def test_index_should_not_show_spent_hours_column_without_permission Role.anonymous.remove_permission! :view_time_entries get :index, :set_filter => 1, :c => %w(subject spent_hours)