]> source.dussan.org Git - redmine.git/commitdiff
Makes time entry custom fields available for display on the time entries list (#1766).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 9 Dec 2012 21:03:30 +0000 (21:03 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 9 Dec 2012 21:03:30 +0000 (21:03 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10972 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/queries_helper.rb
app/models/time_entry_query.rb
app/views/timelog/_date_range.html.erb
app/views/timelog/_list.html.erb
public/stylesheets/application.css

index 9b0943aa7cac54c214510d52247007055f741346..0a263dd8ab29580e6de82c77cf44c1f118f03d01 100644 (file)
@@ -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',
index 60fc843124215ae642d566952a4e9edb907c9620..9a2cd5af6adf45798f2f5f2a52cdb8a7394b6b62 100644 (file)
@@ -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
index a0c180fc808326572beb578cfbfd6965e9fc9034..295be910ee18fa395175659b6e34544eadde051a 100644 (file)
@@ -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>
 
index d311d10f741b0f1b417de328e96165f911124882..522b13032763b669c6c4d3a14b4f2970603b0441 100644 (file)
@@ -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>
index fe5f28365e8a1e1a7c2ef031b4a3f38aa627e582..57c1cb91275dd4cda74ac5f6ff881ebb1cebd18c 100644 (file)
@@ -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; }