diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 81b23acb37..056185c611 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -41,7 +41,8 @@ module IssuesHelper !issue.is_descendant_of?(ancestors.last) ancestors.pop end - yield issue, ancestors.size, group_name, group_count, group_totals + level = (query.grouped? && query.group_by_column.name == :parent) ? 0 : ancestors.size + yield issue, level, group_name, group_count, group_totals ancestors << issue unless issue.leaf? end end diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index efd0ad0f1d..54db6a3bf7 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -28,6 +28,7 @@ class IssueQuery < Query QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.position", :groupable => true), QueryColumn.new(:parent, :sortable => ["#{Issue.table_name}.root_id", "#{Issue.table_name}.lft ASC"], + :groupable => "#{Issue.table_name}.parent_id", :default_order => 'desc', :caption => :field_parent_issue), QueryAssociationColumn.new(:parent, :subject, :caption => :field_parent_issue_subject), QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.position", :groupable => true), diff --git a/app/models/query.rb b/app/models/query.rb index c49e4f4d11..5c74516326 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -18,8 +18,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class QueryColumn - attr_accessor :name, :totalable, :default_order - attr_writer :sortable, :groupable + attr_accessor :name, :totalable, :default_order, :groupable + attr_writer :sortable include Redmine::I18n @@ -906,6 +906,9 @@ class Query < ActiveRecord::Base if column.is_a?(TimestampQueryColumn) column_sortable = Redmine::Database.timestamp_to_date(column.sortable, User.current.time_zone) end + if column.name == :parent + column_sortable = Array(column.groupable) + end Array(column_sortable).map {|s| Arel.sql("#{s} #{order}")} end end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index ccf30f4773..64ce1991f5 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -1761,6 +1761,19 @@ class QueryTest < ActiveSupport::TestCase assert_nil q.group_by_statement end + def test_grouped_with_parent_task_should_sort_by_parent_id + Issue.delete_all + first, second, third = Issue.generate!, Issue.generate!, Issue.generate! + Issue.generate!(:parent_id => second.id) + Issue.generate!(:parent_id => third.id) + Issue.generate!(:parent_id => first.id) + + q = IssueQuery.new(:group_by => 'parent') + assert_equal :parent, q.group_by_column.name + assert_equal ["#{Issue.table_name}.parent_id DESC"], q.group_by_sort_order + assert_equal [third.id, second.id, first.id, nil, nil, nil], q.issues.pluck(:parent_id) + end + def test_sortable_columns_should_sort_assignees_according_to_user_format_setting with_settings :user_format => 'lastname_comma_firstname' do q = IssueQuery.new