Project

General

Profile

Patch #655 » MY_TIME_REPORT.diff

Mykhaylo Sorochan, 2008-02-14 12:32

View differences:

app/helpers/timelog_helper.rb (working copy)
27 27
    end
28 28
    sum
29 29
  end
30

  
31
  def render_time_entry_tooltip(time_entry)
32
    @cached_label_comments ||= l(:field_comments)
33

  
34
    issue = time_entry.issue.nil? ? "" : link_to_issue(time_entry.issue) + ": #{h(time_entry.issue.subject)}<br />"
35
    issue + "<strong>#{@cached_label_comments}</strong>: #{time_entry.comments}"
36
  end
30 37
end
app/controllers/my_controller.rb (working copy)
17 17

  
18 18
class MyController < ApplicationController
19 19
  helper :issues
20
  helper :timelog
20 21
  
21 22
  layout 'base'
22 23
  before_filter :require_login
......
26 27
             'issueswatched' => :label_watched_issues,
27 28
             'news' => :label_news_latest,
28 29
             'calendar' => :label_calendar,
29
             'documents' => :label_document_plural
30
             'documents' => :label_document_plural,
31
             'mytimereport' => :label_my_time_report
30 32
           }.freeze
31 33

  
32 34
  DEFAULT_LAYOUT = {  'left' => ['issuesassignedtome'], 
app/views/my/blocks/_mytimereport.rhtml (revision 0)
1
<h3><%= l(:label_my_time_report) %></h3>
2

  
3
<% calendar = Redmine::Helpers::TimeReportCalendar.new(Date.today, current_language, :week2)
4
   calendar.time_entries = TimeEntry.find :all,
5
                     :conditions => ["(user_id = #{@user.id}) AND (spent_on>=? and spent_on<=?)", calendar.startdt, calendar.enddt],
6
                     :include => [:project, :activity] unless @user.projects.empty?
7
%>
8

  
9
<%= render :partial => 'common/mytimereportcalendar', :locals => {:calendar => calendar } %>
app/views/common/_mytimereportcalendar.rhtml (revision 0)
1
<table class="cal">
2
<thead>
3

  
4
<tr><td></td><% 7.times do |i| %><th><%= day_name( (calendar.first_wday+i)%7 ) %></th><% end %></tr>
5
</thead>
6
<tbody>
7
<tr>
8
<% day = calendar.startdt
9
while day <= calendar.enddt %>
10
<%= "<th>#{day.cweek}</th>" if day.cwday == calendar.first_wday %>
11
<td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if Date.today == day %>">
12
<p class="day-num"><%= day.day %></p>
13
<% day_hours = 0 %>
14
<% calendar.time_entries_on(day).each do |i| %>
15
  <% day_hours += i.hours %>
16
  <div class="tooltip">
17
  <%= h("#{i.project.name} - #{i.activity.name} : #{i.hours}") %>
18
  <span class="tip"><%= render_time_entry_tooltip i %></span>
19
  </div>
20
<% end %>
21
<% if day_hours > 0 %>
22
  <%= h("TOTAL: #{day_hours}") %>
23
<% end %>
24
</td>
25
<%= '</tr><tr>' if day.cwday==calendar.last_wday and day!=calendar.enddt %>
26
<% day = day + 1
27
end %>
28
</tr>
29
</tbody>
30
</table>
lang/en.yml (working copy)
477 477
label_general: General
478 478
label_more: More
479 479
label_scm: SCM
480
label_my_time_report: My time report
480 481

  
481 482
button_login: Login
482 483
button_submit: Submit
lib/redmine/helpers/time_report_calendar.rb (revision 0)
1
# redMine - project management software
2
# Copyright (C) 2006-2007  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
module Redmine
19
  module Helpers
20

  
21
    #class for calculating personal time entries
22
    class TimeReportCalendar < Calendar
23
      def initialize(date, lang = current_language, period = :week2)
24
        @date = date
25
        @events = []
26
        @ending_events_by_days = {}
27
        @starting_events_by_days = {}
28

  
29
        @time_entries = []
30
        @spent_time_entries_by_days = {}
31

  
32
        set_language lang
33

  
34
        case period
35
        when :week2
36
          @startdt = date - 7 - (date.cwday - first_wday)%7
37
          @enddt = date + (last_wday - date.cwday)%7
38
        else
39
          super(date, lang, period)
40
        end
41
      end
42

  
43
      # Sets calendar time_entries
44
      def time_entries=(time_entries)
45
        @time_entries = time_entries
46
        @spent_time_entries_by_days = @time_entries.group_by {|entry| entry.spent_on}
47
      end
48

  
49
      # Returns time_entries for the given day
50
      def time_entries_on(day)
51
        @spent_time_entries_by_days[day] || []
52
      end
53

  
54
    end
55

  
56
  end
57
end
(2-2/2)