summaryrefslogtreecommitdiffstats
path: root/app/views/timelog
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-06-24 16:07:06 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-06-24 16:07:06 +0000
commitfaa3d984ab0a44da354b901f4962d3441b800f99 (patch)
treef750d4fad72e14e5f18b32f0dd0bdef6ab0695d1 /app/views/timelog
parent6d7a855ca2f497a0deeb728d4d7da5cf4afa1d51 (diff)
downloadredmine-faa3d984ab0a44da354b901f4962d3441b800f99.tar.gz
redmine-faa3d984ab0a44da354b901f4962d3441b800f99.zip
Added time report.
Report can be generated by member/activity/tracker/version and year/month/week for the selected period. git-svn-id: http://redmine.rubyforge.org/svn/trunk@572 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/views/timelog')
-rw-r--r--app/views/timelog/_report_criteria.rhtml17
-rw-r--r--app/views/timelog/report.rhtml52
2 files changed, 69 insertions, 0 deletions
diff --git a/app/views/timelog/_report_criteria.rhtml b/app/views/timelog/_report_criteria.rhtml
new file mode 100644
index 000000000..e4f5fa39a
--- /dev/null
+++ b/app/views/timelog/_report_criteria.rhtml
@@ -0,0 +1,17 @@
+<% @available_criterias[criterias[level]][:values].each do |value| %>
+<tr class="<%= cycle('odd', 'even') if criterias.length < level + 2 %>">
+<%= '<td></td>' * level %>
+<td><%= value.name %></td>
+<%= '<td></td>' * (criterias.length - level - 1) %>
+<% hours_for_value = select_hours(hours, criterias[level], value.id) %>
+ <% @periods.each do |period| %>
+ <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)) %>
+ <td align="center"><%= sum > 0 ? sum : "-" %></td>
+ <% end %>
+</tr>
+<% if criterias.length > level+1 %>
+ <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
+<% end %>
+
+<% end %>
+<% reset_cycle %>
diff --git a/app/views/timelog/report.rhtml b/app/views/timelog/report.rhtml
new file mode 100644
index 000000000..4fabfe3dd
--- /dev/null
+++ b/app/views/timelog/report.rhtml
@@ -0,0 +1,52 @@
+<h2><%= l(:label_spent_time) %></h2>
+
+<% form_remote_tag(:url => {:project_id => @project}, :update => 'content') do %>
+ <% @criterias.each do |criteria| %>
+ <%= hidden_field_tag 'criterias[]', criteria %>
+ <% end %>
+ <p>
+ <%= l(:label_date_from) %>: <%= text_field_tag 'date_from', @date_from, :size => 10 %><%= calendar_for('date_from') %>
+ &nbsp;
+ <%= l(:label_date_to) %>: <%= text_field_tag 'date_to', @date_to, :size => 10 %><%= calendar_for('date_to') %>
+ &nbsp;
+ <%= l(:label_details) %>:
+ <%= select_tag 'period', options_for_select([[l(:label_year), 'year'],
+ [l(:label_month), 'month'],
+ [l(:label_week), 'week']], @columns) %>
+ &nbsp;
+ <%= submit_tag l(:button_apply) %>
+ <%= link_to_remote l(:button_clear), {:url => {:project_id => @project}, :update => 'content'}, :class => 'icon icon-reload' %>
+ </p>
+
+ <% if @criterias.length < 3 %>
+ <p><%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l(@available_criterias[k][:label]), k]}), :onchange => "this.form.onsubmit();") %></p>
+ <% end %>
+
+<br />
+
+<% unless @criterias.empty? %>
+<table class="list">
+<thead>
+<tr>
+<% @criterias.each do |criteria| %>
+ <th width="15%"><%= l(@available_criterias[criteria][:label]) %></th>
+<% end %>
+<% @periods.each do |period| %>
+ <th width="<%= ((100 - @criterias.length * 15 - 15 ) / @periods.length).to_i %>%"><%= period %></th>
+<% end %>
+</tr>
+</thead>
+
+<tbody>
+<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
+</tbody>
+</table>
+<% end %>
+<% end %>
+
+<% content_for :header_tags do %>
+<%= javascript_include_tag 'calendar/calendar' %>
+<%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
+<%= javascript_include_tag 'calendar/calendar-setup' %>
+<%= stylesheet_link_tag 'calendar' %>
+<% end %>