]> source.dussan.org Git - redmine.git/commitdiff
Add a time tracking block for 'My page' (#615).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 16 Mar 2008 12:21:54 +0000 (12:21 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 16 Mar 2008 12:21:54 +0000 (12:21 +0000)
It lists current user's time entries for the last 7 days across all projects, grouped by day with subtotals for each day, and a grand total.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1260 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/my_controller.rb
app/controllers/timelog_controller.rb
app/helpers/application_helper.rb
app/views/my/blocks/_timelog.rhtml [new file with mode: 0644]
public/stylesheets/application.css

index cb326bc93474238527d4b58fab35a134e48c2a31..ff3393e90ec551f5a244092008baaad40a95ee60 100644 (file)
@@ -26,7 +26,8 @@ class MyController < ApplicationController
              'issueswatched' => :label_watched_issues,
              'news' => :label_news_latest,
              'calendar' => :label_calendar,
-             'documents' => :label_document_plural
+             'documents' => :label_document_plural,
+             'timelog' => :label_spent_time
            }.freeze
 
   DEFAULT_LAYOUT = {  'left' => ['issuesassignedtome'], 
index 38c1fb04c5ea7e8ec92b5c3c677823463bafc679..d767037eb31d1e93b932ad663191c88d8cb3e7cc 100644 (file)
@@ -216,6 +216,8 @@ class TimelogController < ApplicationController
     render_403 and return unless @time_entry.editable_by?(User.current)
     @time_entry.destroy
     flash[:notice] = l(:notice_successful_delete)
+    redirect_to :back
+  rescue RedirectBackError
     redirect_to :action => 'details', :project_id => @time_entry.project
   end
 
index be0b808d2c0c6697b64565a6c7892b056e8a6913..aa19ce7d4221e03e1edf5a7ffbda08558b4591fc 100644 (file)
@@ -37,8 +37,8 @@ module ApplicationHelper
     user ? link_to(user, :controller => 'account', :action => 'show', :id => user) : 'Anonymous'
   end
   
-  def link_to_issue(issue)
-    link_to "#{issue.tracker.name} ##{issue.id}", :controller => "issues", :action => "show", :id => issue
+  def link_to_issue(issue, options={})
+    link_to "#{issue.tracker.name} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, options
   end
   
   def toggle_link(name, id, options={})
diff --git a/app/views/my/blocks/_timelog.rhtml b/app/views/my/blocks/_timelog.rhtml
new file mode 100644 (file)
index 0000000..a3f74e5
--- /dev/null
@@ -0,0 +1,52 @@
+<h3><%=l(:label_spent_time)%> (<%= l(:label_last_n_days, 7) %>)</h3>
+<% 
+entries = TimeEntry.find(:all,
+                               :conditions => ["#{TimeEntry.table_name}.user_id = ? AND #{TimeEntry.table_name}.spent_on BETWEEN ? AND ?", @user.id, Date.today - 6, Date.today],
+                               :include => [:activity, :project, {:issue => [:tracker, :status]}],
+                               :order => "#{TimeEntry.table_name}.spent_on DESC, #{Project.table_name}.name ASC, #{Tracker.table_name}.position ASC, #{Issue.table_name}.id ASC")
+entries_by_day = entries.group_by(&:spent_on)
+%>
+
+<div class="total-hours">
+<p><%= l(:label_total) %>: <%= html_hours("%.2f" % entries.sum(&:hours).to_f) %></p>
+</div>
+
+<% if entries.any? %>
+<table class="list time-entries">
+<thead>
+<th><%= l(:label_activity) %></th>
+<th><%= l(:label_project) %></th>
+<th><%= l(:field_comments) %></th>
+<th><%= l(:field_hours) %></th>
+<th></th>
+</thead>
+<tbody>
+<% entries_by_day.keys.sort.reverse.each do |day| %>
+    <tr class="odd">
+    <td><strong><%= day == Date.today ? l(:label_today).titleize : format_date(day) %></strong></td>
+    <td colspan="2"></td>
+    <td class="hours"><em><%= html_hours("%.2f" % entries_by_day[day].sum(&:hours).to_f) %></em></td>
+    <td></td>
+    </tr>
+    <% entries_by_day[day].each do |entry| -%>
+    <tr class="time-entry" style="border-bottom: 1px solid #f5f5f5;">
+    <td class="activity"><%=h entry.activity %></td>
+    <td class="subject"><%=h entry.project %> <%= ' - ' + link_to_issue(entry.issue, :title => h("#{entry.issue.subject} (#{entry.issue.status})")) if entry.issue %></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) -%>
+        <%= link_to image_tag('edit.png'), {:controller => 'timelog', :action => 'edit', :id => entry},
+                                           :title => l(:button_edit) %>
+        <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry},
+                                             :confirm => l(:text_are_you_sure),
+                                             :method => :post,
+                                             :title => l(:button_delete) %>
+    <% end -%>
+    </td>
+    </tr>
+    <% end -%>
+<% end -%>
+</tbdoy>
+</table>
+<% end %>
index 1fd7881df6f9c91bcbcd440622a6aacdd71cf3cd..816cd05a20763d0c416bbd4546a362a2c652ef01 100644 (file)
@@ -113,9 +113,9 @@ tr.user.locked, tr.user.registered { color: #aaa; }
 tr.user.locked a, tr.user.registered a { color: #aaa; }
 
 tr.time-entry { text-align: center; white-space: nowrap; }
-tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; }
-tr.time-entry td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
-tr.time-entry .hours-dec { font-size: 0.9em; }
+tr.time-entry td.subject, 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; }
 
 table.list tbody tr:hover { background-color:#ffffdd; }
 table td {padding:2px;}