Index: app/models/query.rb =================================================================== --- app/models/query.rb (revision 4884) +++ app/models/query.rb (working copy) @@ -503,6 +503,14 @@ raise StatementInvalid.new(e.message) end + # Returns sum of all the issue's estimated_hours + def issue_sum + Issue.sum(:estimated_hours, :include => [:status, :project], + :conditions => Issue.merge_conditions(statement , "#{Issue.table_name}.rgt - #{Issue.table_name}.lft = 1")) + rescue ::ActiveRecord::StatementInvalid => e + raise StatementInvalid.new(e.message) + end + # Returns the issue count by group or nil if query is not grouped def issue_count_by_group r = nil @@ -523,6 +531,27 @@ raise StatementInvalid.new(e.message) end + # Returns sum of the issue's estimated_hours by group or nil if query is not grouped + def issue_sum_by_group + r = nil + if grouped? + begin + r = Issue.sum(:estimated_hours, :group => group_by_statement, :include => [:status, :project], + :conditions => Issue.merge_conditions(statement , "#{Issue.table_name}.rgt - #{Issue.table_name}.lft = 1")) + rescue ActiveRecord::RecordNotFound + r= {r => issue_sum} + end + + c = group_by_column + if c.is_a?(QueryCustomFieldColumn) + r = r.keys.inject({}) {|h, k| h[c.custom_field.cast_value(k)] = r[k]; h} + end + end + r + rescue ::ActiveRecord::StatementInvalid => e + raise StatementInvalid.new(e.message) + end + # Returns the issues # Valid options are :order, :offset, :limit, :include, :conditions def issues(options={}) Index: app/controllers/issues_controller.rb =================================================================== --- app/controllers/issues_controller.rb (revision 4884) +++ app/controllers/issues_controller.rb (working copy) @@ -85,7 +85,8 @@ :order => sort_clause, :offset => @offset, :limit => @limit) - @issue_count_by_group = @query.issue_count_by_group + @issue_count_by_group = @query.issue_count_by_group + @issue_sum_by_group = @query.issue_sum_by_group respond_to do |format| format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? } Index: app/views/issues/_list.rhtml =================================================================== --- app/views/issues/_list.rhtml (revision 4884) +++ app/views/issues/_list.rhtml (working copy) @@ -19,7 +19,7 @@   - <%= group.blank? ? 'None' : column_content(@query.group_by_column, issue) %> (<%= @issue_count_by_group[group] %>) + <%= group.blank? ? 'None' : column_content(@query.group_by_column, issue) %> (<%= @issue_count_by_group[group] %>, <%= l(:label_total) %>:<%= @issue_sum_by_group[group] %>) <% previous_group = group %> @@ -34,3 +34,7 @@ <% end -%> +

<%=issues.reject{|issue| issue.children?}.collect(&:estimated_hours).reject {|hours| hours.nil?}.sum %> + <%= l(:label_total) %>: <%=@query.issue_sum %> +