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; }
   |