add_column_last_updated_by.patch

Marius BALTEANU, 2016-08-04 12:47

Download (3.42 KB)

View differences:

app/models/issue.rb
244 244
    @spent_hours = nil
245 245
    @total_spent_hours = nil
246 246
    @total_estimated_hours = nil
247
    @last_updated_by = nil
247 248
    base_reload(*args)
248 249
  end
249 250

  
......
1027 1028
    @relations ||= IssueRelation::Relations.new(self, (relations_from + relations_to).sort)
1028 1029
  end
1029 1030

  
1031
  def last_updated_by
1032
    @last_updated_by
1033
  end
1034

  
1030 1035
  # Preloads relations for a collection of issues
1031 1036
  def self.load_relations(issues)
1032 1037
    if issues.any?
......
1081 1086
    end
1082 1087
  end
1083 1088

  
1089
  # Preloads users who updated last a collection of issues
1090
  def self.load_last_updated_by(issues)
1091
    if issues.any?
1092
      journals_user = {}
1093
      issues_last_journal = Journal.joins(:issue).preload(:user).
1094
        where('issues.updated_on = journals.created_on').
1095
        where(:journalized_id => issues.map(&:id))
1096

  
1097
      issues_last_journal.each do |journal|
1098
        journals_user[journal.journalized_id] = journal.user
1099
      end
1100

  
1101
      issues.each do |issue|
1102
        issue.instance_variable_set "@last_updated_by", (journals_user[issue.id] || nil)
1103
      end
1104
    end
1105
  end
1106

  
1084 1107
  # Finds an issue relation given its id.
1085 1108
  def find_relation(relation_id)
1086 1109
    IssueRelation.where("issue_to_id = ? OR issue_from_id = ?", id, id).find(relation_id)
......
1400 1423
    end
1401 1424
    Project.where(condition).having_trackers
1402 1425
  end
1403
 
1426

  
1404 1427
  # Returns a scope of trackers that user can assign the issue to
1405 1428
  def allowed_target_trackers(user=User.current)
1406 1429
    self.class.allowed_target_trackers(project, user, tracker_id_was)
app/models/issue_query.rb
31 31
    QueryColumn.new(:author, :sortable => lambda {User.fields_for_order_statement("authors")}, :groupable => true),
32 32
    QueryColumn.new(:assigned_to, :sortable => lambda {User.fields_for_order_statement}, :groupable => true),
33 33
    QueryColumn.new(:updated_on, :sortable => "#{Issue.table_name}.updated_on", :default_order => 'desc'),
34
    QueryColumn.new(:last_updated_by, :sortable => false),
34 35
    QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name", :groupable => true),
35 36
    QueryColumn.new(:fixed_version, :sortable => lambda {Version.fields_for_order_statement}, :groupable => true),
36 37
    QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"),
......
44 45
    QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'),
45 46
    QueryColumn.new(:closed_on, :sortable => "#{Issue.table_name}.closed_on", :default_order => 'desc'),
46 47
    QueryColumn.new(:relations, :caption => :label_related_issues),
47
    QueryColumn.new(:description, :inline => false)
48
    QueryColumn.new(:description, :inline => false),
48 49
  ]
49 50

  
50 51
  def initialize(attributes=nil, *args)
......
328 329
    if has_column?(:total_spent_hours)
329 330
      Issue.load_visible_total_spent_hours(issues)
330 331
    end
332
    if has_column?(:last_updated_by)
333
      Issue.load_last_updated_by(issues)
334
    end
331 335
    if has_column?(:relations)
332 336
      Issue.load_visible_relations(issues)
333 337
    end