Project

General

Profile

Defect #33912 » fixed-33912.patch

Yuichi HARADA, 2020-09-02 07:30

View differences:

app/models/time_entry_query.rb
23 23

  
24 24
  self.available_columns = [
25 25
    QueryColumn.new(:project, :sortable => "#{Project.table_name}.name", :groupable => true),
26
    QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :default_order => 'desc', :groupable => true),
26
    QueryColumn.new(:spent_on, :sortable => "#{TimeEntry.table_name}.spent_on", :default_order => 'desc', :groupable => true),
27 27
    TimestampQueryColumn.new(:created_on, :sortable => "#{TimeEntry.table_name}.created_on", :default_order => 'desc', :groupable => true),
28 28
    QueryColumn.new(:tweek, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :caption => :label_week),
29 29
    QueryColumn.new(:author, :sortable => lambda {User.fields_for_order_statement}),
......
152 152
  def results_scope(options={})
153 153
    order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?)
154 154

  
155
    order_option << "#{TimeEntry.table_name}.id ASC"
155
    order_option <<
156
      if order_option.reverse.find{|order| order.match?(/#{TimeEntry.table_name}\./)}&.match?(/\sDESC$/i)
157
        "#{TimeEntry.table_name}.id DESC"
158
      else
159
        "#{TimeEntry.table_name}.id ASC"
160
      end
156 161
    base_scope.
157 162
      order(order_option).
158 163
      joins(joins_for_order_statement(order_option.join(',')))
test/functional/timelog_controller_test.rb
1128 1128
    assert_equal [t3, t1, t2].map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')}
1129 1129
  end
1130 1130

  
1131
  def test_index_should_sort_by_spent_on_and_user
1132
    user1 = User.find(1)  # Redmine Admin
1133
    user2 = User.find(2)  # John Smith
1134
    t1 = TimeEntry.generate!(:spent_on => '2012-06-16', :user => user2)
1135
    t2 = TimeEntry.generate!(:spent_on => '2012-06-16', :user => user1)
1136
    t3 = TimeEntry.generate!(:spent_on => '2012-06-15', :user => user2)
1137

  
1138
    params = {
1139
      :project_id => 1,
1140
      :f => ['spent_on'],
1141
      :op => {'spent_on' => '><'},
1142
      :v => {'spent_on' => ['2012-06-15', '2012-06-16']}
1143
    }
1144

  
1145
    [
1146
      [{:sort => 'spent_on,user'}, [t3, t1, t2]],
1147
      [{:sort => 'spent_on,user:desc'}, [t3, t2, t1]],
1148
      [{:sort => 'spent_on:desc,user'}, [t1, t2, t3]],
1149
      [{:sort => 'spent_on:desc,user:desc'}, [t2, t1, t3]],
1150
    ].each do |sort_criteria, expect|
1151
      get :index, :params => params.dup.merge(sort_criteria)
1152
      assert_response :success
1153
      assert_equal expect.map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')}
1154
    end
1155
  end
1156

  
1131 1157
  def test_index_with_activity_filter
1132 1158
    activity = TimeEntryActivity.create!(:name => 'Activity')
1133 1159
    entry = TimeEntry.generate!(:issue_id => 1, :hours => 4.5, :activity => activity)
(3-3/3)