Sha256: 5382df9f8f947223419508718bd7ce658b4a995bb1118f0585f2cafe1fa41d80

Contents?: true

Size: 1.78 KB

Versions: 5

Compression:

Stored size: 1.78 KB

Contents

require 'csv'
require 'spreadsheet'

module ReportsKit
  class ReportsController < ReportsKit::BaseController
    before_action :modify_context_params

    VALID_PARAMS_PROPERTIES_KEYS = [:ui_filters]

    def index
      respond_to do |format|
        format.json do
          render json: { data: report_data }
        end
        format.csv do
          properties[:format] = 'csv'
          csv = CSV.generate do |csv|
            report_data[:table_data].each do |row|
              csv << row
            end
          end
          send_data csv, filename: "#{report_filename}.csv"
        end
        format.xls do
          properties[:format] = 'csv'
          send_data xls_string, filename: "#{report_filename}.xls", type:  'application/vnd.ms-excel'
        end
      end
    end

    private

    def report_filename
      report_filename_method = ReportsKit.configuration.report_filename_method
      return 'Report' unless report_filename_method
      instance_eval(&report_filename_method)
    end

    def report_data
      Reports::Data::Generate.new(properties, context_record: context_record, context_params: context_params).perform
    end

    def properties
      @properties ||= begin
        properties = Reports::Properties.generate(self)
        properties.merge(params_properties).deep_symbolize_keys
      end
    end

    def params_properties
      @params_properties ||= ActiveSupport::JSON.decode(params[:properties]).with_indifferent_access.slice(*VALID_PARAMS_PROPERTIES_KEYS)
    end

    def xls_string
      spreadsheet = Spreadsheet::Workbook.new
      sheet = spreadsheet.create_worksheet
      report_data[:table_data].each_with_index do |row, index|
        sheet.update_row(index, *row)
      end
      io = StringIO.new
      spreadsheet.write(io)
      io.string
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
reports_kit-0.7.1 lib/reports_kit/reports_controller.rb
reports_kit-0.7.0 lib/reports_kit/reports_controller.rb
reports_kit-0.5.0 lib/reports_kit/reports_controller.rb
reports_kit-0.4.1 lib/reports_kit/reports_controller.rb
reports_kit-0.4.0 lib/reports_kit/reports_controller.rb