Feature #1474 » show_last_comment_in_issues_list.patch
app/controllers/issues_controller.rb (working copy) | ||
---|---|---|
63 | 63 |
:conditions => @query.statement, |
64 | 64 |
:limit => limit, |
65 | 65 |
:offset => @issue_pages.current.offset |
66 |
@issues.each do |issue| |
|
67 |
journals = issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on DESC LIMIT 1") |
|
68 |
issue.last_comment ||= journals.first[:notes] if !journals.first.nil? |
|
69 |
end |
|
66 | 70 |
respond_to do |format| |
67 | 71 |
format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? } |
68 | 72 |
format.atom { render_feed(@issues, :title => l(:label_issue_plural)) } |
... | ... | |
116 | 120 |
@issue.project = @project |
117 | 121 |
@issue.author = User.current |
118 | 122 |
@issue.tracker ||= @project.trackers.find(params[:tracker_id] ? params[:tracker_id] : :first) |
123 |
#@issue.last_comment = " " |
|
119 | 124 |
if @issue.tracker.nil? |
120 | 125 |
flash.now[:error] = 'No tracker is associated to this project. Please check the Project settings.' |
121 | 126 |
render :nothing => true, :layout => true |
app/helpers/issues_helper.rb (working copy) | ||
---|---|---|
25 | 25 |
@cached_label_due_date ||= l(:field_due_date) |
26 | 26 |
@cached_label_assigned_to ||= l(:field_assigned_to) |
27 | 27 |
@cached_label_priority ||= l(:field_priority) |
28 |
#@cahced_label_last_comment ||= l(:field_last_comment) |
|
28 | 29 |
|
29 | 30 |
link_to_issue(issue) + ": #{h(issue.subject)}<br /><br />" + |
30 | 31 |
"<strong>#{@cached_label_start_date}</strong>: #{format_date(issue.start_date)}<br />" + |
... | ... | |
138 | 139 |
l(:field_done_ratio), |
139 | 140 |
l(:field_estimated_hours), |
140 | 141 |
l(:field_created_on), |
141 |
l(:field_updated_on) |
|
142 |
l(:field_updated_on), |
|
143 |
l(:field_last_comment), |
|
142 | 144 |
] |
143 | 145 |
# Export project custom fields if project is given |
144 | 146 |
# otherwise export custom fields marked as "For all projects" |
... | ... | |
164 | 166 |
issue.done_ratio, |
165 | 167 |
issue.estimated_hours, |
166 | 168 |
format_time(issue.created_on), |
167 |
format_time(issue.updated_on) |
|
169 |
format_time(issue.updated_on), |
|
170 |
issue.last_comment |
|
168 | 171 |
] |
169 | 172 |
custom_fields.each {|f| fields << show_value(issue.custom_value_for(f)) } |
170 | 173 |
fields << issue.description |
app/models/query.rb (working copy) | ||
---|---|---|
107 | 107 |
QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours"), |
108 | 108 |
QueryColumn.new(:done_ratio, :sortable => "#{Issue.table_name}.done_ratio"), |
109 | 109 |
QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'), |
110 |
QueryColumn.new(:last_comment, :sortable => "#{Issue.table_name}.last_comment"), |
|
110 | 111 |
] |
111 | 112 |
cattr_reader :available_columns |
112 | 113 |
|
app/views/issues/index.rfpdf (working copy) | ||
---|---|---|
4 | 4 |
pdf.AliasNbPages |
5 | 5 |
pdf.footer_date = format_date(Date.today) |
6 | 6 |
pdf.AddPage("L") |
7 |
row_height = 7
|
|
7 |
row_height = 5
|
|
8 | 8 |
|
9 | 9 |
# |
10 | 10 |
# title |
... | ... | |
18 | 18 |
# |
19 | 19 |
pdf.SetFontStyle('B',10) |
20 | 20 |
pdf.SetFillColor(230, 230, 230) |
21 |
pdf.Cell(15, row_height, "#", 0, 0, 'L', 1) |
|
22 |
pdf.Cell(30, row_height, l(:field_tracker), 0, 0, 'L', 1) |
|
23 |
pdf.Cell(30, row_height, l(:field_status), 0, 0, 'L', 1) |
|
24 |
pdf.Cell(30, row_height, l(:field_priority), 0, 0, 'L', 1) |
|
25 |
pdf.Cell(40, row_height, l(:field_assigned_to), 0, 0, 'L', 1) |
|
26 |
pdf.Cell(25, row_height, l(:field_updated_on), 0, 0, 'L', 1) |
|
27 |
pdf.Cell(0, row_height, l(:field_subject), 0, 0, 'L', 1) |
|
21 |
pdf.Cell(15, row_height, "#", 0, 0, 'C', 1) |
|
22 |
pdf.Cell(30, row_height, l(:field_tracker), 0, 0, 'C', 1) |
|
23 |
pdf.Cell(30, row_height, l(:field_status), 0, 0, 'C', 1) |
|
24 |
pdf.Cell(30, row_height, l(:field_priority), 0, 0, 'C', 1) |
|
25 |
pdf.Cell(50, row_height, l(:field_assigned_to), 0, 0, 'C', 1) |
|
26 |
pdf.Cell(30, row_height, l(:field_updated_on), 0, 0, 'C', 1) |
|
27 |
pdf.Cell(0, row_height, l(:field_subject), 0, 0, 'L', 1) |
|
28 |
|
|
28 | 29 |
pdf.Line(10, pdf.GetY, 287, pdf.GetY) |
29 | 30 |
pdf.Ln |
30 | 31 |
pdf.Line(10, pdf.GetY, 287, pdf.GetY) |
... | ... | |
36 | 37 |
pdf.SetFontStyle('',9) |
37 | 38 |
pdf.SetFillColor(255, 255, 255) |
38 | 39 |
@issues.each do |issue| |
39 |
pdf.Cell(15, row_height, issue.id.to_s, 0, 0, 'L', 1) |
|
40 |
pdf.Cell(30, row_height, issue.tracker.name, 0, 0, 'L', 1) |
|
41 |
pdf.Cell(30, row_height, issue.status.name, 0, 0, 'L', 1) |
|
42 |
pdf.Cell(30, row_height, issue.priority.name, 0, 0, 'L', 1) |
|
43 |
pdf.Cell(40, row_height, issue.assigned_to ? issue.assigned_to.name : '', 0, 0, 'L', 1) |
|
44 |
pdf.Cell(25, row_height, format_date(issue.updated_on), 0, 0, 'L', 1) |
|
45 |
pdf.MultiCell(0, row_height, (@project == issue.project ? issue.subject : "#{issue.project.name} - #{issue.subject}")) |
|
40 |
pdf.Cell(15, row_height, issue.id.to_s, 0, 0, 'C', 1) |
|
41 |
pdf.Cell(30, row_height, issue.tracker.name, 0, 0, 'C', 1) |
|
42 |
pdf.Cell(30, row_height, issue.status.name, 0, 0, 'C', 1) |
|
43 |
pdf.Cell(30, row_height, issue.priority.name, 0, 0, 'C', 1) |
|
44 |
pdf.Cell(50, row_height, issue.assigned_to ? issue.assigned_to.name : '', 0, 0, 'C', 1) |
|
45 |
pdf.Cell(30, row_height, format_date(issue.updated_on), 0, 0, 'C', 1) |
|
46 |
pdf.MultiCell(0, row_height, (@project == issue.project ? issue.subject : "#{issue.project.name}\n#{issue.subject}")) |
|
47 |
if issue.last_comment != nil |
|
48 |
if issue.last_comment != "" |
|
49 |
pdf.Cell(23, row_height, "Last Comment:",0,0,'R',1) |
|
50 |
pdf.MultiCell(0, row_height, issue.last_comment) |
|
51 |
end |
|
52 |
end |
|
46 | 53 |
pdf.Line(10, pdf.GetY, 287, pdf.GetY) |
47 | 54 |
pdf.SetY(pdf.GetY() + 1) |
48 | 55 |
end |
lang/en.yml (working copy) | ||
---|---|---|
174 | 174 |
field_assignable: Issues can be assigned to this role |
175 | 175 |
field_redirect_existing_links: Redirect existing links |
176 | 176 |
field_estimated_hours: Estimated time |
177 |
field_last_comment: Last Comment |
|
177 | 178 |
field_column_names: Columns |
178 | 179 |
field_time_zone: Time zone |
179 | 180 |
field_searchable: Searchable |
public/stylesheets/application.css (working copy) | ||
---|---|---|
86 | 86 | |
87 | 87 |
table.list.issues { margin-top: 10px; } |
88 | 88 |
tr.issue { text-align: center; white-space: nowrap; } |
89 |
tr.issue td.subject, tr.issue td.category { white-space: normal; } |
|
90 |
tr.issue td.subject { text-align: left; }
|
|
89 |
tr.issue td.subject, tr.issue td.category, tr.issue td.last_comment { white-space: normal; }
|
|
90 |
tr.issue td.subject, tr.issue td.last_comment { text-align: left; width: 25%}
|
|
91 | 91 |
tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;} |
92 | 92 | |
93 | 93 |
tr.entry { border: 1px solid #f8f8f8; } |