From 519999b90e367ac0f9bdce8465b148333eb90dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20B=C4=82LTEANU?= Date: Thu, 2 May 2024 18:27:12 +0300 Subject: [PATCH 1/2] Move logic for estimated remaining hours from @QueryColumn@ to @Issue@. diff --git a/app/models/issue.rb b/app/models/issue.rb index ad4728444..fdca171c9 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1165,6 +1165,11 @@ class Issue < ApplicationRecord end end + # Returns the number of estimated remaining hours on this issue + def estimated_remaining_hours + (estimated_hours || 0) * (100 - (done_ratio || 0)) / 100 + end + def relations @relations ||= IssueRelation::Relations.new( self, diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 0895e8074..62b3d6529 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -18,25 +18,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class IssueQuery < Query - class EstimatedRemainingHoursColumn < QueryColumn - COLUMN_SQL = Arel.sql("COALESCE(#{Issue.table_name}.estimated_hours, 0) * (100 - COALESCE(#{Issue.table_name}.done_ratio, 0)) / 100") - - def initialize - super(:estimated_remaining_hours, totalable: true, sortable: COLUMN_SQL) - end - - def value(object) - (object.estimated_hours || 0) * (100 - (object.done_ratio || 0)) / 100 - end - - def value_object(object) - value(object) - end - end - self.queried_class = Issue self.view_permission = :view_issues + ESTIMATED_REMAINING_HOURS_SQL = Arel.sql("COALESCE(#{Issue.table_name}.estimated_hours, 0) * (100 - COALESCE(#{Issue.table_name}.done_ratio, 0)) / 100") self.available_columns = [ QueryColumn.new(:id, :sortable => "#{Issue.table_name}.id", :default_order => 'desc', :caption => '#', :frozen => true), @@ -66,7 +51,9 @@ class IssueQuery < Query QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date", :groupable => true), QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours", :totalable => true), - EstimatedRemainingHoursColumn.new, + QueryColumn.new(:estimated_remaining_hours, + :sortable => ESTIMATED_REMAINING_HOURS_SQL, + :totalable => true), QueryColumn.new( :total_estimated_hours, :sortable => @@ -390,7 +377,7 @@ class IssueQuery < Query end def total_for_estimated_remaining_hours(scope) - map_total(scope.sum(EstimatedRemainingHoursColumn::COLUMN_SQL)) {|t| t.to_f.round(2)} + map_total(scope.sum(ESTIMATED_REMAINING_HOURS_SQL)) {|t| t.to_f.round(2)} end # Returns sum of all the issue's time entries hours -- 2.39.3 (Apple Git-146)