class CmAdmin::Models::Export
Public Class Methods
create_workbook(records, class_name, file_path)
click to toggle source
# File lib/cm_admin/models/export.rb, line 20 def create_workbook(records, class_name, file_path) flattened_records = records.map { |record| CmAdmin::Utils.flatten_hash(record) } columns = flattened_records.map{|x| x.keys}.flatten.uniq.sort size_arr = [] columns.size.times { size_arr << 22 } xl = Axlsx::Package.new xl.workbook.add_worksheet do |sheet| sheet.add_row columns&.map(&:titleize), b: true flattened_records.each do |record| sheet.add_row(columns.map { |column| record[column] }) end sheet.column_widths(*size_arr) end xl.serialize(file_path) end
exportable_columns(klass)
click to toggle source
# File lib/cm_admin/models/export.rb, line 36 def exportable_columns(klass) klass.available_fields[:index].map{|x| x.exportable ? x.db_column_name : ""}.reject { |c| c.empty? } end
generate_excel(klass_name, columns = [])
click to toggle source
# File lib/cm_admin/models/export.rb, line 5 def generate_excel(klass_name, columns = []) klass = klass_name.constantize records = get_records(klass, columns) file_path = "#{Rails.root}/tmp/#{klass}_data_#{DateTime.now.strftime("%Y-%m-%d_%H-%M-%S")}.xlsx" create_workbook(records, columns, file_path) return file_path end
get_records(klass, columns)
click to toggle source
# File lib/cm_admin/models/export.rb, line 13 def get_records(klass, columns) records = klass deserialized_columns = CmAdmin::Utils.deserialize_csv_columns(columns, :as_json_params) # This includes isn't recursve, a full solution should be recursive records.includes(deserialized_columns[:include].keys).find_each.as_json(deserialized_columns) end