]> source.dussan.org Git - redmine.git/commitdiff
Added subprojects issue count on project "Reports" page
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 3 Apr 2007 19:48:49 +0000 (19:48 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 3 Apr 2007 19:48:49 +0000 (19:48 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@410 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/reports_controller.rb
app/views/reports/_details.rhtml
app/views/reports/_simple.rhtml
app/views/reports/issue_report.rhtml

index ab648460b8d075ba0b7abde0a095f5e95157e7a6..5536e272c0fdfac1c27449a8ec70a60634491a68 100644 (file)
@@ -47,16 +47,24 @@ class ReportsController < ApplicationController
       @data = issues_by_author
       @report_title = l(:field_author)
       render :template => "reports/issue_report_details"  
+    when "subproject"
+      @field = "project_id"
+      @rows = @project.children
+      @data = issues_by_subproject
+      @report_title = l(:field_subproject)
+      render :template => "reports/issue_report_details"  
     else
       @queries = @project.queries.find :all, :conditions => ["is_public=? or user_id=?", true, (logged_in_user ? logged_in_user.id : 0)]
       @trackers = Tracker.find(:all, :order => 'position')
       @priorities = Enumeration::get_values('IPRI')
       @categories = @project.issue_categories
       @authors = @project.members.collect { |m| m.user }
+      @subprojects = @project.children
       issues_by_tracker
       issues_by_priority
       issues_by_category
       issues_by_author
+      issues_by_subproject
       @total_hours = @project.time_entries.sum(:hours)
       render :template => "reports/issue_report"
     end
@@ -165,4 +173,19 @@ private
                                                   and i.project_id=#{@project.id}
                                                 group by s.id, s.is_closed, a.id")     
   end
+  
+  def issues_by_subproject
+    @issues_by_subproject ||= 
+      ActiveRecord::Base.connection.select_all("select    s.id as status_id, 
+                                                  s.is_closed as closed, 
+                                                  i.project_id as project_id,
+                                                  count(i.id) as total 
+                                                from 
+                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s
+                                                where 
+                                                  i.status_id=s.id 
+                                                  and i.project_id IN (#{@project.children.collect{|p| p.id}.join(',')})
+                                                group by s.id, s.is_closed, i.project_id") if @project.children.any?
+    @issues_by_subproject ||= []
+  end
 end
index 323816a131e9691418f4fa4d084e4da002cbfac4..6a2888eaaa8be61a073a75cc564f4bb22e0a9875 100644 (file)
 <tbody>
 <% for row in rows %>
 <tr class="<%= cycle("odd", "even") %>">
-  <td><%= link_to row.name, :controller => 'projects', :action => 'list_issues', :id => @project
+  <td><%= link_to row.name, :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id %></td>
   <% for status in @statuses %>
     <td align="center"><%= link_to (aggregate data, { field_name => row.id, "status_id" => status.id }), 
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "status_id" => status.id, 
                                                 "#{field_name}" => row.id %></td>
   <% end %>
   <td align="center"><%= link_to (aggregate data, { field_name => row.id, "closed" => 0 }),
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id,
                                                 "status_id" => "o" %></td>
   <td align="center"><%= link_to (aggregate data, { field_name => row.id, "closed" => 1 }),
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id,
                                                 "status_id" => "c" %></td>
   <td align="center"><%= link_to (aggregate data, { field_name => row.id }),
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id,
                                                 "status_id" => "*" %></td>  
index 0e580fe72270f93e4ce281b7c2e97a0e432dbb16..20ff41fe20561d35be894a18a46d448988a688a9 100644 (file)
 <tbody>
 <% for row in rows %>
 <tr class="<%= cycle("odd", "even") %>">
-  <td><%= link_to row.name, :controller => 'projects', :action => 'list_issues', :id => @project
+  <td><%= link_to row.name, :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id %></td>
   <td align="center"><%= link_to (aggregate data, { field_name => row.id, "closed" => 0 }),
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id,
                                                 "status_id" => "o" %></td>
   <td align="center"><%= link_to (aggregate data, { field_name => row.id, "closed" => 1 }),
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id,
                                                 "status_id" => "c" %></td>
   <td align="center"><%= link_to (aggregate data, { field_name => row.id }),
-                                                :controller => 'projects', :action => 'list_issues', :id => @project
+                                                :controller => 'projects', :action => 'list_issues', :id => ((row.is_a?(Project) ? row : @project))
                                                 :set_filter => 1, 
                                                 "#{field_name}" => row.id,
                                                 "status_id" => "*" %></td>  
index 8f832f87e10a78e81e6523ecb5591b6611d9897e..1ab9dbdbd8a52bf6f0980df6c17c6c73bf03b5b0 100644 (file)
 <h3><%=l(:field_priority)%>&nbsp;&nbsp;<%= link_to image_tag('zoom_in.png'), :detail => 'priority' %></h3>
 <%= render :partial => 'simple', :locals => { :data => @issues_by_priority, :field_name => "priority_id", :rows => @priorities } %>
 <br />
+<% if @project.children.any? %>
+<h3><%=l(:field_subproject)%>&nbsp;&nbsp;<%= link_to image_tag('zoom_in.png'), :detail => 'subproject' %></h3>
+<%= render :partial => 'simple', :locals => { :data => @issues_by_subproject, :field_name => "project_id", :rows => @subprojects } %>
+<br />
+<% end %>
 <h3><%=l(:field_category)%>&nbsp;&nbsp;<%= link_to image_tag('zoom_in.png'), :detail => 'category' %></h3>
 <%= render :partial => 'simple', :locals => { :data => @issues_by_category, :field_name => "category_id", :rows => @categories } %>
 <br />