Patch #4776 » estimatedTime.diff
| models/issue_query.rb (working copy) | ||
|---|---|---|
| 232 | 232 | 
    raise StatementInvalid.new(e.message)  | 
| 233 | 233 | 
    end  | 
| 234 | 234 | |
| 235 | 
    # Returns sum of all the issue's estimated_hours  | 
|
| 236 | 
    def issue_sum  | 
|
| 237 | 
    Issue.sum(:estimated_hours, :include => [:status, :project],  | 
|
| 238 | 
        :conditions => statement << " AND #{Issue.table_name}.rgt - #{Issue.table_name}.lft = 1")
   | 
|
| 239 | 
    rescue ::ActiveRecord::StatementInvalid => e  | 
|
| 240 | 
    raise StatementInvalid.new(e.message)  | 
|
| 241 | 
    end  | 
|
| 242 | ||
| 235 | 243 | 
    # Returns the issue count by group or nil if query is not grouped  | 
| 236 | 244 | 
    def issue_count_by_group  | 
| 237 | 245 | 
    r = nil  | 
| ... | ... | |
| 252 | 260 | 
    raise StatementInvalid.new(e.message)  | 
| 253 | 261 | 
    end  | 
| 254 | 262 | |
| 263 | 
    # Returns sum of the issue's estimated_hours by group or nil if query is not grouped  | 
|
| 264 | 
    def issue_sum_by_group  | 
|
| 265 | 
    r = nil  | 
|
| 266 | 
    if grouped?  | 
|
| 267 | 
    begin  | 
|
| 268 | 
    r = Issue.sum(:estimated_hours, :group => group_by_statement, :include => [:status, :project],  | 
|
| 269 | 
            :conditions => statement << " AND #{Issue.table_name}.rgt - #{Issue.table_name}.lft = 1")
   | 
|
| 270 | 
    rescue ActiveRecord::RecordNotFound  | 
|
| 271 | 
            r= {r => issue_sum}
   | 
|
| 272 | 
    end  | 
|
| 273 | 
     | 
|
| 274 | 
    c = group_by_column  | 
|
| 275 | 
    if c.is_a?(QueryCustomFieldColumn)  | 
|
| 276 | 
            r = r.keys.inject({}) {|h, k| h[c.custom_field.cast_value(k)] = r[k]; h}
   | 
|
| 277 | 
    end  | 
|
| 278 | 
    end  | 
|
| 279 | 
    r  | 
|
| 280 | 
    rescue ::ActiveRecord::StatementInvalid => e  | 
|
| 281 | 
    raise StatementInvalid.new(e.message)  | 
|
| 282 | 
    end  | 
|
| 283 | ||
| 255 | 284 | 
    # Returns the issues  | 
| 256 | 285 | 
    # Valid options are :order, :offset, :limit, :include, :conditions  | 
| 257 | 286 | 
      def issues(options={})
   | 
| controllers/issues_controller.rb (working copy) | ||
|---|---|---|
| 78 | 78 | 
    :offset => @offset,  | 
| 79 | 79 | 
    :limit => @limit)  | 
| 80 | 80 | 
    @issue_count_by_group = @query.issue_count_by_group  | 
| 81 | 
    @issue_sum_by_group = @query.issue_sum_by_group  | 
|
| 81 | 82 | |
| 82 | 83 | 
    respond_to do |format|  | 
| 83 | 84 | 
            format.html { render :template => 'issues/index', :layout => !request.xhr? }
   | 
| views/issues/_list.html.erb (working copy) | ||
|---|---|---|
| 22 | 22 | 
    <tr class="group open">  | 
| 23 | 23 | 
    <td colspan="<%= query.inline_columns.size + 2 %>">  | 
| 24 | 24 | 
    <span class="expander" onclick="toggleRowGroup(this);"> </span>  | 
| 25 | 
    <%= group.blank? ? l(:label_none) : column_content(@query.group_by_column, issue) %> <span class="count"><%= @issue_count_by_group[group] %></span>  | 
|
| 25 | 
            <%= group.blank? ? l(:label_none) : column_content(@query.group_by_column, issue) %> <span class="count"><%= @issue_count_by_group[group] %> (<%= l(:field_estimated_hours) %>: <%= l(:label_f_hour_plural, :value => @issue_sum_by_group[group]) %>)</span>
   | 
|
| 26 | 26 | 
            <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
   | 
| 27 | 27 | 
    "toggleAllRowGroups(this)", :class => 'toggle-all') %>  | 
| 28 | 28 | 
    </td>  | 
| ... | ... | |
| 45 | 45 | 
    </table>  | 
| 46 | 46 | 
    </div>  | 
| 47 | 47 | 
    <% end -%>  | 
| 48 | 
    <p align="right"  | 
|
| 49 | 
        current page: <b><%=issues.reject{|issue| issue.children?}.collect(&:estimated_hours).reject {|hours| hours.nil?}.sum %></b>
   | 
|
| 50 | 
    <%= l(:field_estimated_hours) %>: <b><%= l(:label_f_hour_plural, :value => @query.issue_sum) %></b>  | 
|
| 51 | 
    </p>  | 
|