From: Jean-Philippe Lang Date: Fri, 9 Oct 2015 09:30:14 +0000 (+0000) Subject: Workaround for spent time grouped by project (#1561). X-Git-Tag: 3.2.0~193 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9c7832d82230d96e8599df3574dc9d27811c23d8;p=redmine.git Workaround for spent time grouped by project (#1561). git-svn-id: http://svn.redmine.org/redmine/trunk@14667 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 45aacdffa..4528f4a9b 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -325,7 +325,15 @@ class IssueQuery < Query # Returns sum of all the issue's time entries hours def total_for_spent_hours(scope) - scope.joins(:time_entries).sum("#{TimeEntry.table_name}.hours") + if group_by_column.try(:name) == :project + # TODO: remove this when https://github.com/rails/rails/issues/21922 is fixed + # We have to do a custom join without the time_entries.project_id column + # that would trigger a ambiguous column name error + scope.joins("JOIN (SELECT issue_id, hours FROM #{TimeEntry.table_name}) AS joined_time_entries ON joined_time_entries.issue_id = #{Issue.table_name}.id"). + sum("joined_time_entries.hours") + else + scope.joins(:time_entries).sum("#{TimeEntry.table_name}.hours") + end end # Returns the issues diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 679fc772d..c76ad7265 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -1219,6 +1219,20 @@ class QueryTest < ActiveSupport::TestCase ) end + def test_total_by_project_group_for_spent_hours + TimeEntry.delete_all + TimeEntry.generate!(:hours => 5.5, :issue_id => 1) + TimeEntry.generate!(:hours => 1.1, :issue_id => 2) + Issue.where(:id => 1).update_all(:assigned_to_id => 2) + Issue.where(:id => 2).update_all(:assigned_to_id => 3) + + q = IssueQuery.new(:group_by => 'project') + assert_equal( + {Project.find(1) => 6.6}, + q.total_by_group_for(:spent_hours) + ) + end + def test_total_for_int_custom_field field = IssueCustomField.generate!(:field_format => 'int', :is_for_all => true) CustomValue.create!(:customized => Issue.find(1), :custom_field => field, :value => '2')