Defect #33912
Sorting of multiple columns including Date column does not work
Status: | Confirmed | Start date: | ||
---|---|---|---|---|
Priority: | Normal | Due date: | ||
Assignee: | - | % Done: | 0% | |
Category: | Time tracking | |||
Target version: | - | |||
Resolution: | Affected version: |
Description
When specifying the sorting condition of multiple columns including Date column in the custom query, sorting of columns after Date column does not work.
- Defining a custom query
- List of spent time with custom query
History
#1
Updated by Yuichi HARADA almost 2 years ago
- File fixed-33912.patch
added
I think the following patch will fix the problem.
diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb
index c8f8eeaeb..59a4f25ca 100644
--- a/app/models/time_entry_query.rb
+++ b/app/models/time_entry_query.rb
@@ -23,7 +23,7 @@ class TimeEntryQuery < Query
self.available_columns = [
QueryColumn.new(:project, :sortable => "#{Project.table_name}.name", :groupable => true),
- QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :default_order => 'desc', :groupable => true),
+ QueryColumn.new(:spent_on, :sortable => "#{TimeEntry.table_name}.spent_on", :default_order => 'desc', :groupable => true),
TimestampQueryColumn.new(:created_on, :sortable => "#{TimeEntry.table_name}.created_on", :default_order => 'desc', :groupable => true),
QueryColumn.new(:tweek, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :caption => :label_week),
QueryColumn.new(:author, :sortable => lambda {User.fields_for_order_statement}),
@@ -152,7 +152,12 @@ class TimeEntryQuery < Query
def results_scope(options={})
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?)
- order_option << "#{TimeEntry.table_name}.id ASC"
+ order_option <<
+ if order_option.reverse.find{|order| order.match?(/#{TimeEntry.table_name}\./)}&.match?(/\sDESC$/i)
+ "#{TimeEntry.table_name}.id DESC"
+ else
+ "#{TimeEntry.table_name}.id ASC"
+ end
base_scope.
order(order_option).
joins(joins_for_order_statement(order_option.join(',')))
#2
Updated by Go MAEDA over 1 year ago
- Status changed from New to Confirmed