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
This commit is contained in:
parent
60088ed5a3
commit
0ce6eb9285
|
@ -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',
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
Loading…
Reference in New Issue