Index: models/issue_query.rb =================================================================== --- models/issue_query.rb (revision 11998) +++ models/issue_query.rb (working copy) @@ -232,6 +232,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 => statement << " AND #{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 @@ -252,6 +260,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 => statement << " AND #{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: controllers/issues_controller.rb =================================================================== --- controllers/issues_controller.rb (revision 11998) +++ controllers/issues_controller.rb (working copy) @@ -78,6 +78,7 @@ :offset => @offset, :limit => @limit) @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', :layout => !request.xhr? } Index: views/issues/_list.html.erb =================================================================== --- views/issues/_list.html.erb (revision 11998) +++ views/issues/_list.html.erb (working copy) @@ -22,7 +22,7 @@   - <%= group.blank? ? l(:label_none) : column_content(@query.group_by_column, issue) %> <%= @issue_count_by_group[group] %> + <%= group.blank? ? l(:label_none) : column_content(@query.group_by_column, issue) %> <%= @issue_count_by_group[group] %> (<%= l(:field_estimated_hours) %>: <%= l(:label_f_hour_plural, :value => @issue_sum_by_group[group]) %>) <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", "toggleAllRowGroups(this)", :class => 'toggle-all') %> @@ -45,3 +45,7 @@ <% end -%> +

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