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
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',
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"),
@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
<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>
<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>
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; }