mirror of
https://github.com/redmine/redmine.git
synced 2025-11-03 20:06:24 +01:00
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
This commit is contained in:
@@ -35,6 +35,10 @@ class IssueQuery < Query
|
|||||||
QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"),
|
QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"),
|
||||||
QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date"),
|
QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date"),
|
||||||
QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours"),
|
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(: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(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'),
|
||||||
QueryColumn.new(:closed_on, :sortable => "#{Issue.table_name}.closed_on", :default_order => 'desc'),
|
QueryColumn.new(:closed_on, :sortable => "#{Issue.table_name}.closed_on", :default_order => 'desc'),
|
||||||
|
|||||||
@@ -347,6 +347,7 @@ en:
|
|||||||
field_default_status: Default status
|
field_default_status: Default status
|
||||||
field_users_visibility: Users visibility
|
field_users_visibility: Users visibility
|
||||||
field_time_entries_visibility: Time logs visibility
|
field_time_entries_visibility: Time logs visibility
|
||||||
|
field_total_estimated_hours: Total estimated time
|
||||||
|
|
||||||
setting_app_title: Application title
|
setting_app_title: Application title
|
||||||
setting_app_subtitle: Application subtitle
|
setting_app_subtitle: Application subtitle
|
||||||
|
|||||||
@@ -367,6 +367,7 @@ fr:
|
|||||||
field_default_status: Statut par défaut
|
field_default_status: Statut par défaut
|
||||||
field_users_visibility: Visibilité des utilisateurs
|
field_users_visibility: Visibilité des utilisateurs
|
||||||
field_time_entries_visibility: Visibilité du temps passé
|
field_time_entries_visibility: Visibilité du temps passé
|
||||||
|
field_total_estimated_hours: Temps estimé total
|
||||||
|
|
||||||
setting_app_title: Titre de l'application
|
setting_app_title: Titre de l'application
|
||||||
setting_app_subtitle: Sous-titre de l'application
|
setting_app_subtitle: Sous-titre de l'application
|
||||||
|
|||||||
@@ -722,6 +722,13 @@ class IssuesControllerTest < ActionController::TestCase
|
|||||||
assert_equal hours.sort.reverse, hours
|
assert_equal hours.sort.reverse, hours
|
||||||
end
|
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
|
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')
|
cf = IssueCustomField.create!(:name => 'User', :is_for_all => true, :tracker_ids => [1,2,3], :field_format => 'user')
|
||||||
CustomValue.create!(:custom_field => cf, :customized => Issue.find(1), :value => '2')
|
CustomValue.create!(:custom_field => cf, :customized => Issue.find(1), :value => '2')
|
||||||
@@ -862,6 +869,11 @@ class IssuesControllerTest < ActionController::TestCase
|
|||||||
assert_select 'table.issues tr#issue-3 td.total_spent_hours', :text => '1.00'
|
assert_select 'table.issues tr#issue-3 td.total_spent_hours', :text => '1.00'
|
||||||
end
|
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
|
def test_index_should_not_show_spent_hours_column_without_permission
|
||||||
Role.anonymous.remove_permission! :view_time_entries
|
Role.anonymous.remove_permission! :view_time_entries
|
||||||
get :index, :set_filter => 1, :c => %w(subject spent_hours)
|
get :index, :set_filter => 1, :c => %w(subject spent_hours)
|
||||||
|
|||||||
Reference in New Issue
Block a user