##// END OF EJS Templates
Added cache for application settings (Setting model)....
Added cache for application settings (Setting model). Once the values are cached, only one database query is done at each user request (to check if the cache is still valid). git-svn-id: http://redmine.rubyforge.org/svn/trunk@685 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r563:1c44600c62dc
r674:6bdc13b33d8d
Show More
reports_controller.rb
213 lines | 9.5 KiB | text/x-ruby | RubyLexer
/ app / controllers / reports_controller.rb
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ReportsController < ApplicationController
layout 'base'
before_filter :find_project, :authorize
def issue_report
@statuses = IssueStatus.find(:all, :order => 'position')
case params[:detail]
when "tracker"
@field = "tracker_id"
@rows = Tracker.find :all, :order => 'position'
@data = issues_by_tracker
@report_title = l(:field_tracker)
render :template => "reports/issue_report_details"
Jean-Philippe Lang
Added issue count details for versions on Reports view....
r540 when "version"
@field = "fixed_version_id"
@rows = @project.versions.sort
@data = issues_by_version
@report_title = l(:field_version)
render :template => "reports/issue_report_details"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 when "priority"
@field = "priority_id"
@rows = Enumeration::get_values('IPRI')
@data = issues_by_priority
@report_title = l(:field_priority)
render :template => "reports/issue_report_details"
when "category"
@field = "category_id"
@rows = @project.issue_categories
@data = issues_by_category
@report_title = l(:field_category)
render :template => "reports/issue_report_details"
when "author"
@field = "author_id"
@rows = @project.members.collect { |m| m.user }
@data = issues_by_author
@report_title = l(:field_author)
render :template => "reports/issue_report_details"
Jean-Philippe Lang
Added subprojects issue count on project "Reports" page...
r407 when "subproject"
@field = "project_id"
Jean-Philippe Lang
Added the ability to archive projects:...
r546 @rows = @project.active_children
Jean-Philippe Lang
Added subprojects issue count on project "Reports" page...
r407 @data = issues_by_subproject
@report_title = l(:field_subproject)
render :template => "reports/issue_report_details"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
@trackers = Tracker.find(:all, :order => 'position')
Jean-Philippe Lang
Added issue count details for versions on Reports view....
r540 @versions = @project.versions.sort
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @priorities = Enumeration::get_values('IPRI')
@categories = @project.issue_categories
@authors = @project.members.collect { |m| m.user }
Jean-Philippe Lang
Added the ability to archive projects:...
r546 @subprojects = @project.active_children
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 issues_by_tracker
Jean-Philippe Lang
Added issue count details for versions on Reports view....
r540 issues_by_version
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 issues_by_priority
issues_by_category
issues_by_author
Jean-Philippe Lang
Added subprojects issue count on project "Reports" page...
r407 issues_by_subproject
Jean-Philippe Lang
Simple time tracking functionality added. Time can be logged at issue or project level....
r365 @total_hours = @project.time_entries.sum(:hours)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 render :template => "reports/issue_report"
end
end
def delays
@trackers = Tracker.find(:all)
if request.get?
@selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
else
@selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
end
@selected_tracker_ids ||= []
@raw =
ActiveRecord::Base.connection.select_all("SELECT datediff( a.created_on, b.created_on ) as delay, count(a.id) as total
FROM issue_histories a, issue_histories b, issues i
WHERE a.status_id =5
AND a.issue_id = b.issue_id
AND a.issue_id = i.id
AND i.tracker_id in (#{@selected_tracker_ids.join(',')})
AND b.id = (
SELECT min( c.id )
FROM issue_histories c
WHERE b.issue_id = c.issue_id )
GROUP BY delay") unless @selected_tracker_ids.empty?
@raw ||=[]
@x_from = 0
@x_to = 0
@y_from = 0
@y_to = 0
@sum_total = 0
@sum_delay = 0
@raw.each do |r|
@x_to = [r['delay'].to_i, @x_to].max
@y_to = [r['total'].to_i, @y_to].max
@sum_total = @sum_total + r['total'].to_i
@sum_delay = @sum_delay + r['total'].to_i * r['delay'].to_i
end
end
private
# Find project of id params[:id]
def find_project
@project = Project.find(params[:id])
rescue ActiveRecord::RecordNotFound
render_404
end
def issues_by_tracker
@issues_by_tracker ||=
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
t.id as tracker_id,
count(i.id) as total
from
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 #{Issue.table_name} i, #{IssueStatus.table_name} s, #{Tracker.table_name} t
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 where
i.status_id=s.id
and i.tracker_id=t.id
and i.project_id=#{@project.id}
group by s.id, s.is_closed, t.id")
end
Jean-Philippe Lang
Added issue count details for versions on Reports view....
r540
def issues_by_version
@issues_by_version ||=
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
v.id as fixed_version_id,
count(i.id) as total
from
#{Issue.table_name} i, #{IssueStatus.table_name} s, #{Version.table_name} v
where
i.status_id=s.id
and i.fixed_version_id=v.id
and i.project_id=#{@project.id}
group by s.id, s.is_closed, v.id")
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def issues_by_priority
@issues_by_priority ||=
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
p.id as priority_id,
count(i.id) as total
from
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 #{Issue.table_name} i, #{IssueStatus.table_name} s, #{Enumeration.table_name} p
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 where
i.status_id=s.id
and i.priority_id=p.id
and i.project_id=#{@project.id}
group by s.id, s.is_closed, p.id")
end
def issues_by_category
@issues_by_category ||=
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
c.id as category_id,
count(i.id) as total
from
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 #{Issue.table_name} i, #{IssueStatus.table_name} s, #{IssueCategory.table_name} c
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 where
i.status_id=s.id
and i.category_id=c.id
and i.project_id=#{@project.id}
group by s.id, s.is_closed, c.id")
end
def issues_by_author
@issues_by_author ||=
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
a.id as author_id,
count(i.id) as total
from
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 #{Issue.table_name} i, #{IssueStatus.table_name} s, #{User.table_name} a
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 where
i.status_id=s.id
and i.author_id=a.id
and i.project_id=#{@project.id}
group by s.id, s.is_closed, a.id")
Jean-Philippe Lang
indentation corrections...
r198 end
Jean-Philippe Lang
Added subprojects issue count on project "Reports" page...
r407
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
Jean-Philippe Lang
Added the ability to archive projects:...
r546 and i.project_id IN (#{@project.active_children.collect{|p| p.id}.join(',')})
group by s.id, s.is_closed, i.project_id") if @project.active_children.any?
Jean-Philippe Lang
Added subprojects issue count on project "Reports" page...
r407 @issues_by_subproject ||= []
end
Jean-Philippe Lang
Initial commit...
r2 end