summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2015-09-12 12:47:21 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2015-09-12 12:47:21 +0000
commit59e4b268afbfd41c7739ba7860d1ae13d8b64d12 (patch)
treee94d3d758d232463ebd4dec544bb97570f2c99fb
parentde9b8e7ef4004c6e7925be5ca9c9c5e1016e5146 (diff)
downloadredmine-59e4b268afbfd41c7739ba7860d1ae13d8b64d12.tar.gz
redmine-59e4b268afbfd41c7739ba7860d1ae13d8b64d12.zip
Adds a Total estimated hours column on issue list (#20688).
git-svn-id: http://svn.redmine.org/redmine/trunk@14554 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/issue_query.rb4
-rw-r--r--config/locales/en.yml1
-rw-r--r--config/locales/fr.yml1
-rw-r--r--test/functional/issues_controller_test.rb12
4 files changed, 18 insertions, 0 deletions
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 56f9caceb..d38b85d81 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -347,6 +347,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 be08413b7..8c2a13d32 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -367,6 +367,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 4aa89c64e..a69b85630 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)