diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb index 29ba4993..ca3774bc 100644 --- a/app/controllers/timelog_controller.rb +++ b/app/controllers/timelog_controller.rb @@ -80,14 +80,22 @@ class TimelogController < ApplicationController unless @criterias.empty? sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ') sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ') + sql_condition = '' + if @project.nil? + sql_condition = Project.allowed_to_condition(User.current, :view_time_entries) + elsif @issue.nil? + sql_condition = @project.project_condition(Setting.display_subprojects_issues?) + else + sql_condition = "#{TimeEntry.table_name}.issue_id = #{@issue.id}" + end + sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours" sql << " FROM #{TimeEntry.table_name}" sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id" sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id" sql << " WHERE" - sql << " (%s) AND" % @project.project_condition(Setting.display_subprojects_issues?) if @project - sql << " (%s) AND" % Project.allowed_to_condition(User.current, :view_time_entries) + sql << " (%s) AND" % sql_condition sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from.to_time), ActiveRecord::Base.connection.quoted_date(@to.to_time)] sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on" diff --git a/app/views/timelog/_date_range.rhtml b/app/views/timelog/_date_range.rhtml index 0375d345..9addba93 100644 --- a/app/views/timelog/_date_range.rhtml +++ b/app/views/timelog/_date_range.rhtml @@ -27,9 +27,9 @@
<% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
diff --git a/app/views/timelog/report.rhtml b/app/views/timelog/report.rhtml index 2107fcf7..533467ef 100644 --- a/app/views/timelog/report.rhtml +++ b/app/views/timelog/report.rhtml @@ -12,6 +12,7 @@ <% end %> <%# TODO: get rid of the project_id field, that should already be in the URL %> <%= hidden_field_tag('project_id', params[:project_id]) if @project %> + <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> <%= render :partial => 'date_range' %>

<%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb index 371fded1..e9ca2d2b 100644 --- a/test/functional/timelog_controller_test.rb +++ b/test/functional/timelog_controller_test.rb @@ -206,6 +206,14 @@ class TimelogControllerTest < ActionController::TestCase assert_equal "162.90", "%.2f" % assigns(:total_hours) end + def test_report_at_issue_level + get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "154.25", "%.2f" % assigns(:total_hours) + end + def test_report_custom_field_criteria get :report, :project_id => 1, :criterias => ['project', 'cf_1'] assert_response :success