Module: QueryReport::Helper

Defined in:
lib/query_report/helper.rb

Instance Method Summary collapse

Instance Method Details

#generate_csv_for_report(records) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/query_report/helper.rb', line 65

def generate_csv_for_report(records)
  if records.size > 0
    columns = records.first.keys
    CSV.generate do |csv|
      csv << columns
      records.each do |record|
        csv << record.values.collect { |val| val.kind_of?(String) ? view_context.strip_links(val) : val }
      end
    end
  else
    nil
  end
end

#pdf_for_report(options) ⇒ Object



52
53
54
# File 'lib/query_report/helper.rb', line 52

def pdf_for_report(options)
  query_report_pdf_template_class(options).new(@report).to_pdf.render
end

#query_report_pdf_template_class(options) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/query_report/helper.rb', line 56

def query_report_pdf_template_class(options)
  options = QueryReport.config.pdf_options.merge(options)
  if options[:template_class]
    @template_class ||= options[:template_class].to_s.constantize
    return @template_class
  end
  QueryReport::ReportPdf
end

#render_report(options) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/query_report/helper.rb', line 27

def render_report(options)
  if (params[:send_as_email].to_i > 0)
    send_pdf_email(params[:email_to], params[:subject], params[:message], action_name, pdf_for_report(options))
  end

  @remote = false
  respond_to do |format|
    if options[:custom_view]
      format.js do
        @remote = true
      end
      format.html
    else
      format.js do
        @remote = true
        render 'query_report/list'
      end
      format.html { render('query_report/list') }
    end
    format.json { render json: @report.all_records }
    format.csv { send_data generate_csv_for_report(@report.all_records), :disposition => "attachment;" }
    format.pdf { send_data pdf_for_report(options), :type => 'application/pdf', :disposition => 'inline' }
  end
end

#reporter(query, options = {}, &block) ⇒ Object

Generates the reports Params: query - The base query that the reporter with start with [filters will be applied on it] options - Options for the reports

:custom_view - by default false, if set to true then the reporter will look for the file to render
:skip_rendering - by default false, if set to true then the reporter will not render any thing, you will have to implement the rendering


19
20
21
22
23
24
25
# File 'lib/query_report/helper.rb', line 19

def reporter(query, options={}, &block)
  @report ||= QueryReport::Report.new(params, view_context, options)
  @report.query = query
  @report.instance_eval &block
  render_report(options) unless options[:skip_rendering]
  @report
end

#send_pdf_email(email, subject, message, file_name, attachment) ⇒ Object



79
80
81
82
83
# File 'lib/query_report/helper.rb', line 79

def send_pdf_email(email, subject, message, file_name, attachment)
  @user = current_user
  to = email.split(',')
  ReportMailer.send_report(@user, to, subject, message, file_name, attachment).deliver
end