Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ActivitiesController < ApplicationController
- helper :sparklines # sparklines helps with flash graphs
- before_filter :authorize # force authorisation
- layout "main", :except => :graph_xml # graph_xml is loaded only by AJAX, no layout needed
- require 'params_filter'
- include ParamsFilter
- def index
- list
- render :action => 'list'
- end
- def search
- case params[:commit]
- when "Search"
- list
- render :action => 'list'
- when "Export to CSV"
- report
- when "Generate graph"
- graph
- render :action => 'graph'
- else
- redirect_to :action => 'list'
- end
- end
- def list
- if params[:search] or session[:month] or session[:year]
- prepare_search_dates
- @client_id = Project.find(params[:search][:project_id]).client_id unless params[:search][:project_id].blank?
- @invoices = @client_id && Invoice.find_all_by_client_id_and_is_issued(@client_id, false, :order => "created_at DESC")
- @activities = Activity.list(params[:search])
- else
- @activities = Activity.list({}, {:page => params[:page]})
- end
- end
- def show
- if ( @activity = Activity.find(params[:id]) ).nil?
- flash[:notice] = "No such activity"
- redirect_to :action => :index
- end
- end
- def edit
- begin
- @activity = Activity.find(params[:id])
- @projects = Project.find(:all)
- rescue
- flash[:notice] = "No such activity"
- redirect_to :action => :index
- else
- @selected = {'project_id' => ''}
- if (@activity.project)
- @selected['project_id']=@activity.project.id.to_i
- end
- end
- end
- def update
- begin
- @activity = Activity.find(params[:id])
- @projects = Project.find(:all)
- rescue
- flash[:notice] = "No such activity"
- redirect_to :action => :index
- else
- @selected = {'project_id' => ''}
- if (@activity.project)
- @selected['project_id']=@activity.project.id.to_i
- end
- params[:activity]['minutes']= Activity.convert_duration(params[:activity]['minutes'])
- if @activity.update_attributes(params[:activity])
- flash[:notice] = 'Activity has been successfully updated'
- redirect_to :action => 'show', :id => @activity
- else
- render :action => 'edit'
- end
- end
- end
- def destroy
- # Activity.find(params[:id]).destroy
- redirect_to :action => 'list'
- end
- def graph
- prepare_search_dates
- @activities = Activity.for_graph( params[:search] )[:activities]
- session[:graph] = params[:search]
- end
- def graph_xml
- params[:search] = session[:graph]
- session[:graph] = nil
- prepare_search_dates
- query_results = Activity.for_graph( params[:search] )
- @activities = query_results[:activities]
- @grouped_roles = query_results[:grouped_roles]
- @weeks = query_results[:weeks]
- @years = query_results[:years]
- end
- def report
- prepare_search_dates
- activities = Activity.list( params[:search] )
- require 'csv'
- report = StringIO.new
- minutes = 0
- ::CSV::Writer.generate(report, ',') do |csv|
- header = ["Name", "Login", "Role", "Date", "Minutes"]
- header << "Comments" if params[:search] and params[:search][:details]
- csv << header
- activities.each do |activity|
- minutes += activity.minutes
- data = [activity.project.name, activity.user.login, activity.user.role.name, activity.date, activity.minutes]
- data << activity.comments if params[:search] and params[:search][:details]
- csv << data
- end
- csv << ["Sum", minutes]
- end
- report.rewind
- send_data(report.read,
- :type => 'text/csv; charset=utf-8; header=present',
- :filename => 'report.csv')
- end
- def show_activity_data
- @activity = Activity.find(params[:id])
- render :layout => false
- end
- end
Add Comment
Please, Sign In to add comment