git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10972 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/2.3.0
@@ -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; } | |||