Sha256: 914ac3a050b692efb0e71f74ebd740f9ca5acfca9074178c7856db524ceaae3c
Contents?: true
Size: 1.79 KB
Versions: 2
Compression:
Stored size: 1.79 KB
Contents
require 'csv' require 'spreadsheet' module ReportsKits class ReportsController < ReportsKits::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 = ReportsKits.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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
reports_kits-0.7.8 | lib/reports_kits/reports_controller.rb |
reports_kits-0.7.7 | lib/reports_kits/reports_controller.rb |