class PeriodsController < ApplicationController skip_before_filter :populate_layout, :only => [:index, :show_no_layout, :destroy, :burn_down_chart_thumbnail, :burn_down_chart] skip_before_filter :authenticate_user, :only => [:burn_down_chart, :burn_down_chart_thumbnail, :burn_down_chart_large] def index active_periods = Period.find(:all).select {|period| period.active?(true)} my_active_periods = active_periods.select {|period| period.party.includes?(current_user)} unless my_active_periods.empty? most_urgent_period = my_active_periods.sort_by {|p| p.required_speed}.last else most_urgent_period = active_periods.sort_by {|p| p.required_speed}.last end redirect_to :action => 'show', :id => most_urgent_period end # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :index } def show if params[:task_id] @selected_task = Task.find(params[:task_id]) end if @selected_task @period = @selected_task.period elsif params[:id] && @period = Period.find_by_id(params[:id]) elsif @period = Period.find(:first) else redirect_to :action => :new return end if @selected_task.nil? @selected_task = Task.find(:first, :conditions => "position = 1 AND period_id = #{@period.id}") end @tasks = @period.open_tasks @completed_tasks = @period.completed_tasks.reverse end def show_no_layout show render :partial => 'show_active', :layout => false, :locals => {:i => 0} end def new @period = Period.new if params[:period] && params[:period][:party_id] @period.party_id = params[:period][:party_id] previous = @period.party.periods.last if previous @period.start_on = previous.end_on + 1 @period.end_on = previous.end_on + (1 + (previous.end_on - previous.start_on)) else @period.start_on = Date.today end end @parties = Party.find(:all) end def create @period = Period.new(params[:period]) if @period.save @period.reload flash[:notice] = 'Period was successfully created.' back_or_redirect_to :action => 'show', :id => @period.higher_item ? @period.higher_item : @period else render :action => 'new' end end def edit @period = Period.find(params[:id]) end def update @period = Period.find(params[:id]) if @period.update_attributes(params[:period]) flash[:notice] = 'Period was successfully updated.' redirect_to :action => 'show', :id => @period else render :action => 'edit' end end def destroy Period.find(params[:id]).destroy flash[:notice] = 'Period was successfully deleted.' redirect_to :action => 'index' end def burn_down_chart_thumbnail send_burn_down_chart Chart::THUMBNAIL end def burn_down_chart send_burn_down_chart Chart::NORMAL end def burn_down_chart_large send_burn_down_chart Chart::LARGE end def list_work @period = Period.find(params[:id]) @works = Work.find_by_sql("SELECT w.* FROM works w LEFT OUTER JOIN tasks t ON t.id = w.task_id WHERE t.period_id = #{@period.id} ORDER BY w.completed_at") render :template => '/works/list' end def make_link if params[:id].to_i > 0 render :partial => 'link', :layout => false, :locals => {:period => Period.find(params[:id])} else render :text => '' end end private def send_burn_down_chart(size) period = Period.find(params[:id]) g = period.burn_down_graph(size) send_data(g, :disposition => 'inline', :type => 'image/png', :filename => "burn_down_chart.png") end end