summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-12-09 21:03:30 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-12-09 21:03:30 +0000
commit0ce6eb92850b550c5fd23bd87fc42ed4f29bcc0c (patch)
treec648b688f81bcf124aafa2809b217d09cd977e33
parent60088ed5a30408eb99207c11509deb888494846b (diff)
downloadredmine-0ce6eb92850b550c5fd23bd87fc42ed4f29bcc0c.tar.gz
redmine-0ce6eb92850b550c5fd23bd87fc42ed4f29bcc0c.zip
Makes time entry custom fields available for display on the time entries list (#1766).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10972 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/helpers/queries_helper.rb4
-rw-r--r--app/models/time_entry_query.rb9
-rw-r--r--app/views/timelog/_date_range.html.erb25
-rw-r--r--app/views/timelog/_list.html.erb66
-rw-r--r--public/stylesheets/application.css2
5 files changed, 56 insertions, 50 deletions
diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb
index 9b0943aa7..0a263dd8a 100644
--- a/app/helpers/queries_helper.rb
+++ b/app/helpers/queries_helper.rb
@@ -92,6 +92,8 @@ module QueriesHelper
progress_bar(value, :width => '80px')
elsif column.name == :spent_hours
sprintf "%.2f", value
+ elsif column.name == :hours
+ html_hours("%.2f" % value)
else
h(value.to_s)
end
@@ -106,7 +108,7 @@ module QueriesHelper
when 'FalseClass'
l(:general_text_No)
when 'Issue'
- link_to_issue(value, :subject => false)
+ value.visible? ? link_to_issue(value) : "##{value.id}"
when 'IssueRelation'
other = value.other_issue(issue)
content_tag('span',
diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb
index 60fc84312..9a2cd5af6 100644
--- a/app/models/time_entry_query.rb
+++ b/app/models/time_entry_query.rb
@@ -21,7 +21,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"]),
+ QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :default_order => 'desc', :groupable => true),
QueryColumn.new(:user, :sortable => lambda {User.fields_for_order_statement}, :groupable => true),
QueryColumn.new(:activity, :sortable => "#{TimeEntryActivity.table_name}.position", :groupable => true),
QueryColumn.new(:issue, :sortable => "#{Issue.table_name}.id"),
@@ -96,6 +96,13 @@ class TimeEntryQuery < Query
@available_filters
end
+ def available_columns
+ return @available_columns if @available_columns
+ @available_columns = self.class.available_columns.dup
+ @available_columns += TimeEntryCustomField.all.map {|cf| QueryCustomFieldColumn.new(cf) }
+ @available_columns
+ end
+
def default_columns_names
@default_columns_names ||= [:project, :spent_on, :user, :activity, :issue, :comments, :hours]
end
diff --git a/app/views/timelog/_date_range.html.erb b/app/views/timelog/_date_range.html.erb
index a0c180fc8..295be910e 100644
--- a/app/views/timelog/_date_range.html.erb
+++ b/app/views/timelog/_date_range.html.erb
@@ -1,14 +1,25 @@
<div id="query_form_content" class="hide-when-print">
-<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
- <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
- <div style="<%= @query.new_record? ? "" : "display: none;" %>">
- <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
- </div>
-</fieldset>
+ <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
+ <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
+ <div style="<%= @query.new_record? ? "" : "display: none;" %>">
+ <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
+ </div>
+ </fieldset>
+ <fieldset class="collapsible collapsed">
+ <legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
+ <div style="display: none;">
+ <table>
+ <tr>
+ <td><%= l(:field_column_names) %></td>
+ <td><%= render :partial => 'queries/columns', :locals => {:query => @query} %></td>
+ </tr>
+ </table>
+ </div>
+ </fieldset>
</div>
<p class="buttons hide-when-print">
- <%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %>
+ <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %>
<%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue}, :class => 'icon icon-reload' %>
</p>
diff --git a/app/views/timelog/_list.html.erb b/app/views/timelog/_list.html.erb
index d311d10f7..522b13032 100644
--- a/app/views/timelog/_list.html.erb
+++ b/app/views/timelog/_list.html.erb
@@ -3,49 +3,35 @@
<div class="autoscroll">
<table class="list time-entries">
<thead>
-<tr>
-<th class="checkbox hide-when-print">
- <%= link_to image_tag('toggle_check.png'),
- {},
- :onclick => 'toggleIssuesSelection(this); return false;',
- :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
-</th>
-<%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %>
-<%= sort_header_tag('user', :caption => l(:label_user)) %>
-<%= sort_header_tag('activity', :caption => l(:label_activity)) %>
-<%= sort_header_tag('project', :caption => l(:label_project)) %>
-<%= sort_header_tag('issue', :caption => l(:label_issue), :default_order => 'desc') %>
-<th><%= l(:field_comments) %></th>
-<%= sort_header_tag('hours', :caption => l(:field_hours)) %>
-<th></th>
-</tr>
+ <tr>
+ <th class="checkbox hide-when-print">
+ <%= link_to image_tag('toggle_check.png'),
+ {},
+ :onclick => 'toggleIssuesSelection(this); return false;',
+ :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
+ </th>
+ <% @query.inline_columns.each do |column| %>
+ <%= column_header(column) %>
+ <% end %>
+ <th></th>
+ </tr>
</thead>
<tbody>
<% entries.each do |entry| -%>
-<tr class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
-<td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
-<td class="spent_on"><%= format_date(entry.spent_on) %></td>
-<td class="user"><%= link_to_user(entry.user) %></td>
-<td class="activity"><%=h entry.activity %></td>
-<td class="project"><%= link_to_project(entry.project) %></td>
-<td class="subject">
-<% if entry.issue -%>
-<%= entry.issue.visible? ? link_to_issue(entry.issue, :truncate => 50) : "##{entry.issue.id}" -%>
-<% end -%>
-</td>
-<td class="comments"><%=h entry.comments %></td>
-<td class="hours"><%= html_hours("%.2f" % entry.hours) %></td>
-<td align="center">
-<% if entry.editable_by?(User.current) -%>
- <%= link_to image_tag('edit.png'), edit_time_entry_path(entry),
- :title => l(:button_edit) %>
- <%= link_to image_tag('delete.png'), time_entry_path(entry),
- :data => {:confirm => l(:text_are_you_sure)},
- :method => :delete,
- :title => l(:button_delete) %>
-<% end -%>
-</td>
-</tr>
+ <tr class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
+ <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
+ <%= raw @query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, entry)}</td>"}.join %>
+ <td align="center">
+ <% if entry.editable_by?(User.current) -%>
+ <%= link_to image_tag('edit.png'), edit_time_entry_path(entry),
+ :title => l(:button_edit) %>
+ <%= link_to image_tag('delete.png'), time_entry_path(entry),
+ :data => {:confirm => l(:text_are_you_sure)},
+ :method => :delete,
+ :title => l(:button_delete) %>
+ <% end -%>
+ </td>
+ </tr>
<% end -%>
</tbody>
</table>
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index fe5f28365..57c1cb912 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -211,7 +211,7 @@ table.permissions td.role {color:#999;font-size:90%;font-weight:normal !importan
tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
tr.time-entry { text-align: center; white-space: nowrap; }
-tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
+tr.time-entry td.issue, tr.time-entry td.comments { text-align: left; white-space: normal; }
td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
td.hours .hours-dec { font-size: 0.9em; }