From 0ce6eb92850b550c5fd23bd87fc42ed4f29bcc0c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 9 Dec 2012 21:03:30 +0000 Subject: [PATCH] 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 --- app/helpers/queries_helper.rb | 4 +- app/models/time_entry_query.rb | 9 +++- app/views/timelog/_date_range.html.erb | 25 +++++++--- app/views/timelog/_list.html.erb | 66 ++++++++++---------------- 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 @@
-
"> - <%= l(:label_filter_plural) %> -
"> - <%= render :partial => 'queries/filters', :locals => {:query => @query} %> -
-
+
"> + <%= l(:label_filter_plural) %> +
"> + <%= render :partial => 'queries/filters', :locals => {:query => @query} %> +
+
+

- <%= 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' %>

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 @@
- - -<%= 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') %> - -<%= sort_header_tag('hours', :caption => l(:field_hours)) %> - - + + + <% @query.inline_columns.each do |column| %> + <%= column_header(column) %> + <% end %> + + <% entries.each do |entry| -%> - hascontextmenu"> - - - - - - - - - - + hascontextmenu"> + + <%= raw @query.inline_columns.map {|column| ""}.join %> + + <% end -%>
- <%= link_to image_tag('toggle_check.png'), - {}, - :onclick => 'toggleIssuesSelection(this); return false;', - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> -<%= l(:field_comments) %>
+ <%= link_to image_tag('toggle_check.png'), + {}, + :onclick => 'toggleIssuesSelection(this); return false;', + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> +
<%= check_box_tag("ids[]", entry.id, false, :id => nil) %><%= format_date(entry.spent_on) %><%= link_to_user(entry.user) %><%=h entry.activity %><%= link_to_project(entry.project) %> -<% if entry.issue -%> -<%= entry.issue.visible? ? link_to_issue(entry.issue, :truncate => 50) : "##{entry.issue.id}" -%> -<% end -%> -<%=h entry.comments %><%= html_hours("%.2f" % entry.hours) %> -<% 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 -%> -
<%= check_box_tag("ids[]", entry.id, false, :id => nil) %>#{column_content(column, entry)} + <% 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 -%> +
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; } -- 2.39.5