From b0a47cc5ba2e75af883dd3a0d116e6466e31148b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 9 Oct 2015 12:44:08 +0000 Subject: [PATCH] Fixes float conversion failures (#1561). git-svn-id: http://svn.redmine.org/redmine/trunk@14668 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue_query.rb | 5 +++-- app/models/query.rb | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 4528f4a9b..37f7ee391 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -320,12 +320,12 @@ class IssueQuery < Query # Returns sum of all the issue's estimated_hours def total_for_estimated_hours(scope) - scope.sum(:estimated_hours) + map_total(scope.sum(:estimated_hours)) {|t| t.to_f.round(2)} end # Returns sum of all the issue's time entries hours def total_for_spent_hours(scope) - if group_by_column.try(:name) == :project + total = 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 @@ -334,6 +334,7 @@ class IssueQuery < Query else scope.joins(:time_entries).sum("#{TimeEntry.table_name}.hours") end + map_total(total) {|t| t.to_f.round(2)} end # Returns the issues diff --git a/app/models/query.rb b/app/models/query.rb index 452b6d00c..fbcf2e646 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -709,20 +709,22 @@ class Query < ActiveRecord::Base total_for_custom_field(custom_field, scope) {|t| t.to_i} end - def total_for_custom_field(custom_field, scope) + def total_for_custom_field(custom_field, scope, &block) total = scope.joins(:custom_values). where(:custom_values => {:custom_field_id => custom_field.id}). where.not(:custom_values => {:value => ''}). sum("CAST(#{CustomValue.table_name}.value AS decimal(30,3))") - if block_given? - if total.is_a?(Hash) - total.keys.each {|k| total[k] = yield total[k]} - else - total = yield total - end - end + total = map_total(total, &block) if block_given? + total + end + def map_total(total, &block) + if total.is_a?(Hash) + total.keys.each {|k| total[k] = yield total[k]} + else + total = yield total + end total end -- 2.39.5