# 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
)
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')