##// END OF EJS Templates
Makes time entry custom fields available for display on the time entries list (#1766)....
Jean-Philippe Lang -
r10745:0ce6eb92850b
parent child
Show More
@@ -92,6 +92,8 module QueriesHelper
92 92 progress_bar(value, :width => '80px')
93 93 elsif column.name == :spent_hours
94 94 sprintf "%.2f", value
95 elsif column.name == :hours
96 html_hours("%.2f" % value)
95 97 else
96 98 h(value.to_s)
97 99 end
@@ -106,7 +108,7 module QueriesHelper
106 108 when 'FalseClass'
107 109 l(:general_text_No)
108 110 when 'Issue'
109 link_to_issue(value, :subject => false)
111 value.visible? ? link_to_issue(value) : "##{value.id}"
110 112 when 'IssueRelation'
111 113 other = value.other_issue(issue)
112 114 content_tag('span',
@@ -21,7 +21,7 class TimeEntryQuery < Query
21 21
22 22 self.available_columns = [
23 23 QueryColumn.new(:project, :sortable => "#{Project.table_name}.name", :groupable => true),
24 QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"]),
24 QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :default_order => 'desc', :groupable => true),
25 25 QueryColumn.new(:user, :sortable => lambda {User.fields_for_order_statement}, :groupable => true),
26 26 QueryColumn.new(:activity, :sortable => "#{TimeEntryActivity.table_name}.position", :groupable => true),
27 27 QueryColumn.new(:issue, :sortable => "#{Issue.table_name}.id"),
@@ -96,6 +96,13 class TimeEntryQuery < Query
96 96 @available_filters
97 97 end
98 98
99 def available_columns
100 return @available_columns if @available_columns
101 @available_columns = self.class.available_columns.dup
102 @available_columns += TimeEntryCustomField.all.map {|cf| QueryCustomFieldColumn.new(cf) }
103 @available_columns
104 end
105
99 106 def default_columns_names
100 107 @default_columns_names ||= [:project, :spent_on, :user, :activity, :issue, :comments, :hours]
101 108 end
@@ -1,14 +1,25
1 1 <div id="query_form_content" class="hide-when-print">
2 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
3 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
4 <div style="<%= @query.new_record? ? "" : "display: none;" %>">
5 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
6 </div>
7 </fieldset>
2 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
3 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
4 <div style="<%= @query.new_record? ? "" : "display: none;" %>">
5 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
6 </div>
7 </fieldset>
8 <fieldset class="collapsible collapsed">
9 <legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
10 <div style="display: none;">
11 <table>
12 <tr>
13 <td><%= l(:field_column_names) %></td>
14 <td><%= render :partial => 'queries/columns', :locals => {:query => @query} %></td>
15 </tr>
16 </table>
17 </div>
18 </fieldset>
8 19 </div>
9 20
10 21 <p class="buttons hide-when-print">
11 <%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %>
22 <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %>
12 23 <%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue}, :class => 'icon icon-reload' %>
13 24 </p>
14 25
@@ -3,49 +3,35
3 3 <div class="autoscroll">
4 4 <table class="list time-entries">
5 5 <thead>
6 <tr>
7 <th class="checkbox hide-when-print">
8 <%= link_to image_tag('toggle_check.png'),
9 {},
10 :onclick => 'toggleIssuesSelection(this); return false;',
11 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
12 </th>
13 <%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %>
14 <%= sort_header_tag('user', :caption => l(:label_user)) %>
15 <%= sort_header_tag('activity', :caption => l(:label_activity)) %>
16 <%= sort_header_tag('project', :caption => l(:label_project)) %>
17 <%= sort_header_tag('issue', :caption => l(:label_issue), :default_order => 'desc') %>
18 <th><%= l(:field_comments) %></th>
19 <%= sort_header_tag('hours', :caption => l(:field_hours)) %>
20 <th></th>
21 </tr>
6 <tr>
7 <th class="checkbox hide-when-print">
8 <%= link_to image_tag('toggle_check.png'),
9 {},
10 :onclick => 'toggleIssuesSelection(this); return false;',
11 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
12 </th>
13 <% @query.inline_columns.each do |column| %>
14 <%= column_header(column) %>
15 <% end %>
16 <th></th>
17 </tr>
22 18 </thead>
23 19 <tbody>
24 20 <% entries.each do |entry| -%>
25 <tr class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
26 <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
27 <td class="spent_on"><%= format_date(entry.spent_on) %></td>
28 <td class="user"><%= link_to_user(entry.user) %></td>
29 <td class="activity"><%=h entry.activity %></td>
30 <td class="project"><%= link_to_project(entry.project) %></td>
31 <td class="subject">
32 <% if entry.issue -%>
33 <%= entry.issue.visible? ? link_to_issue(entry.issue, :truncate => 50) : "##{entry.issue.id}" -%>
34 <% end -%>
35 </td>
36 <td class="comments"><%=h entry.comments %></td>
37 <td class="hours"><%= html_hours("%.2f" % entry.hours) %></td>
38 <td align="center">
39 <% if entry.editable_by?(User.current) -%>
40 <%= link_to image_tag('edit.png'), edit_time_entry_path(entry),
41 :title => l(:button_edit) %>
42 <%= link_to image_tag('delete.png'), time_entry_path(entry),
43 :data => {:confirm => l(:text_are_you_sure)},
44 :method => :delete,
45 :title => l(:button_delete) %>
46 <% end -%>
47 </td>
48 </tr>
21 <tr class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
22 <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
23 <%= raw @query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, entry)}</td>"}.join %>
24 <td align="center">
25 <% if entry.editable_by?(User.current) -%>
26 <%= link_to image_tag('edit.png'), edit_time_entry_path(entry),
27 :title => l(:button_edit) %>
28 <%= link_to image_tag('delete.png'), time_entry_path(entry),
29 :data => {:confirm => l(:text_are_you_sure)},
30 :method => :delete,
31 :title => l(:button_delete) %>
32 <% end -%>
33 </td>
34 </tr>
49 35 <% end -%>
50 36 </tbody>
51 37 </table>
@@ -211,7 +211,7 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !importan
211 211 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
212 212
213 213 tr.time-entry { text-align: center; white-space: nowrap; }
214 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
214 tr.time-entry td.issue, tr.time-entry td.comments { text-align: left; white-space: normal; }
215 215 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
216 216 td.hours .hours-dec { font-size: 0.9em; }
217 217
General Comments 0
You need to be logged in to leave comments. Login now