diff --git a/app/models/query.rb b/app/models/query.rb index 100728cff..7f1169023 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -755,7 +755,13 @@ class Query < ActiveRecord::Base end def available_totalable_columns - available_columns.select(&:totalable) + available_columns.select(&:totalable).sort do |a, b| + if a.is_a?(QueryCustomFieldColumn) && b.is_a?(QueryCustomFieldColumn) + a.custom_field <=> b.custom_field + else + 0 + end + end end def default_columns_names diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 02cb25afd..8d85a285f 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -1802,6 +1802,17 @@ class QueryTest < ActiveSupport::TestCase assert_include "cf_#{field.id}".to_sym, q.available_totalable_columns.map(&:name) end + def test_available_totalable_columns_should_sort_in_position_order_for_custom_field + IssueCustomField.delete_all + cf_pos3 = IssueCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int') + cf_pos4 = IssueCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float') + cf_pos1 = IssueCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float') + cf_pos2 = IssueCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int') + q = IssueQuery.new + custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)} + assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field) + end + def test_total_for_estimated_hours Issue.delete_all Issue.generate!(:estimated_hours => 5.5)