gantts_controller.rb
46 lines
| 2.3 KiB
| text/x-ruby
|
RubyLexer
|
r3581 | class GanttsController < ApplicationController | ||
|
r3829 | menu_item :gantt | ||
|
r3581 | before_filter :find_optional_project | ||
rescue_from Query::StatementInvalid, :with => :query_statement_invalid | ||||
helper :issues | ||||
helper :projects | ||||
helper :queries | ||||
include QueriesHelper | ||||
|
r3582 | helper :sort | ||
include SortHelper | ||||
|
r3581 | include Redmine::Export::PDF | ||
def show | ||||
@gantt = Redmine::Helpers::Gantt.new(params) | ||||
retrieve_query | ||||
@query.group_by = nil | ||||
if @query.valid? | ||||
events = [] | ||||
# Issues that have start and due dates | ||||
events += @query.issues(:include => [:tracker, :assigned_to, :priority], | ||||
:order => "start_date, due_date", | ||||
:conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null)", @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to] | ||||
) | ||||
# Issues that don't have a due date but that are assigned to a version with a date | ||||
events += @query.issues(:include => [:tracker, :assigned_to, :priority, :fixed_version], | ||||
:order => "start_date, effective_date", | ||||
:conditions => ["(((start_date>=? and start_date<=?) or (effective_date>=? and effective_date<=?) or (start_date<? and effective_date>?)) and start_date is not null and due_date is null and effective_date is not null)", @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to] | ||||
) | ||||
# Versions | ||||
events += @query.versions(:conditions => ["effective_date BETWEEN ? AND ?", @gantt.date_from, @gantt.date_to]) | ||||
@gantt.events = events | ||||
end | ||||
basename = (@project ? "#{@project.identifier}-" : '') + 'gantt' | ||||
respond_to do |format| | ||||
format.html { render :action => "show", :layout => !request.xhr? } | ||||
|
r3771 | format.png { send_data(@gantt.to_image(@project), :disposition => 'inline', :type => 'image/png', :filename => "#{basename}.png") } if @gantt.respond_to?('to_image') | ||
|
r3581 | format.pdf { send_data(gantt_to_pdf(@gantt, @project), :type => 'application/pdf', :filename => "#{basename}.pdf") } | ||
end | ||||
end | ||||
end | ||||