class GanttsController < ApplicationController before_filter :find_optional_project rescue_from Query::StatementInvalid, :with => :query_statement_invalid helper :issues helper :projects helper :queries include QueriesHelper helper :sort include SortHelper 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 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 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? } format.png { send_data(@gantt.to_image, :disposition => 'inline', :type => 'image/png', :filename => "#{basename}.png") } if @gantt.respond_to?('to_image') format.pdf { send_data(gantt_to_pdf(@gantt, @project), :type => 'application/pdf', :filename => "#{basename}.pdf") } end end private # TODO: Refactor, duplicates IssuesController def find_optional_project @project = Project.find(params[:project_id]) unless params[:project_id].blank? allowed = User.current.allowed_to?({:controller => params[:controller], :action => params[:action]}, @project, :global => true) allowed ? true : deny_access rescue ActiveRecord::RecordNotFound render_404 end end