diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2012-12-09 21:03:30 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2012-12-09 21:03:30 +0000 |
commit | 0ce6eb92850b550c5fd23bd87fc42ed4f29bcc0c (patch) | |
tree | c648b688f81bcf124aafa2809b217d09cd977e33 | |
parent | 60088ed5a30408eb99207c11509deb888494846b (diff) | |
download | redmine-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.rb | 4 | ||||
-rw-r--r-- | app/models/time_entry_query.rb | 9 | ||||
-rw-r--r-- | app/views/timelog/_date_range.html.erb | 25 | ||||
-rw-r--r-- | app/views/timelog/_list.html.erb | 66 | ||||
-rw-r--r-- | public/stylesheets/application.css | 2 |
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; } |