From 3da3fcccbb6b8512d5dfe262470c51b110a78204 Mon Sep 17 00:00:00 2001 From: AnithaPal Date: Thu, 11 Aug 2016 16:21:30 -0400 Subject: [PATCH] exporting events to pdf, excel, and csv format --- app/controllers/admin/events_controller.rb | 7 +++ app/views/admin/comments/index.html.haml | 7 ++- app/views/admin/events/index.csv.haml | 25 ++++++++++ app/views/admin/events/index.html.haml | 8 +++- app/views/admin/events/index.pdf.prawn | 55 ++++++++++++++++++++++ app/views/admin/events/index.xlsx.axlsx | 41 ++++++++++++++++ 6 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 app/views/admin/events/index.csv.haml create mode 100644 app/views/admin/events/index.pdf.prawn create mode 100644 app/views/admin/events/index.xlsx.axlsx diff --git a/app/controllers/admin/events_controller.rb b/app/controllers/admin/events_controller.rb index abe426b8..017cede5 100644 --- a/app/controllers/admin/events_controller.rb +++ b/app/controllers/admin/events_controller.rb @@ -23,11 +23,18 @@ module Admin @tracks_distribution_confirmed = @conference.tracks_distribution(:confirmed) @event_distribution = @conference.event_distribution @scheduled_event_distribution = @conference.scheduled_event_distribution + @pdf_filename = "events_for_#{@conference.short_title}.pdf" + @file_name = "events_for_#{@conference.short_title}" + @csv_filename = "events_for_#{@conference.short_title}.csv" respond_to do |format| format.html # Explicity call #to_json to avoid the use of EventSerializer format.json { render json: Event.where(state: :confirmed, program: @program).to_json } + format.xlsx { render xlsx: 'index', filename: "#{@file_name}.xlsx" } + format.pdf + format.csv + # format.csv { send_data @events, filename:"#{@file_name}.csv" } end end diff --git a/app/views/admin/comments/index.html.haml b/app/views/admin/comments/index.html.haml index 9a141c85..dd504f65 100644 --- a/app/views/admin/comments/index.html.haml +++ b/app/views/admin/comments/index.html.haml @@ -1,6 +1,9 @@ -%h1 Comments -%br .row + .col-md-12 + .page-header + %h1 + Comments + = "(#{@comments.length})" if @comments.any? .col-md-12 %ul.nav.nav-tabs#commentsTable %li.active diff --git a/app/views/admin/events/index.csv.haml b/app/views/admin/events/index.csv.haml new file mode 100644 index 00000000..c7400dd8 --- /dev/null +++ b/app/views/admin/events/index.csv.haml @@ -0,0 +1,25 @@ +- headers = ['Event ID', + 'Title', + 'Abstract', + 'Start time', + 'Submitter', + 'Speaker', + 'Event Type', + 'Track', + 'Difficulty Level', + 'Room', + 'State'] += CSV.generate_line headers +- @events.each do |event| + = CSV.generate_line([event.id, event.title, event.abstract, event.time, + event.submitter.name, event.speaker_names, event.event_type.title, + (event.track.present? ? event.track.name : 'nil'), + (event.difficulty_level.present? ? event.difficulty_level.title : 'nil'), + (event.room.present? ? event.room.name : 'nil'), event.state]) + += CSV.generate_line [nil] +- headers = ['Comment ID', 'Event Title', 'Body', 'User Name'] += CSV.generate_line headers +- @events.each do |event| + - event.root_comments.each do |comment| + = CSV.generate_line([comment.id, event.title, comment.body, comment.user.name]) diff --git a/app/views/admin/events/index.html.haml b/app/views/admin/events/index.html.haml index 75349458..4a19220d 100644 --- a/app/views/admin/events/index.html.haml +++ b/app/views/admin/events/index.html.haml @@ -3,8 +3,12 @@ .page-header %h1 Events - - if @events.any? - = "(#{@events.length})" + = "(#{@events.length})" if @events.any? + .btn-group.pull-right + - if can? :read, Event + = link_to 'Export CSV', admin_conference_program_events_path(@conference.short_title, format: :csv), class: 'btn btn-success' + = link_to 'Export PDF', admin_conference_program_events_path(@conference.short_title, format: :pdf), class: 'btn btn-success' + = link_to 'Export XLS', admin_conference_program_events_path(@conference.short_title, format: :xlsx), class: 'btn btn-success' %p.text-muted All the submissions of your speakers .row diff --git a/app/views/admin/events/index.pdf.prawn b/app/views/admin/events/index.pdf.prawn new file mode 100644 index 00000000..a60eeaec --- /dev/null +++ b/app/views/admin/events/index.pdf.prawn @@ -0,0 +1,55 @@ +prawn_document(force_download: true, filename: @pdf_filename, page_layout: :landscape) do |pdf| + events_array = [] + c_array = [] + header_array = ['Event ID', + 'Title', + 'Abstract', + 'Start time', + 'Submitter', + 'Speaker', + 'Event Type', + 'Track', + 'Difficulty Level', + 'Room', + 'State' + ] + events_array << header_array + @events.each do |event| + row = [] + row << event.id + row << event.title + row << event.abstract + row << event.time.to_s + row << event.submitter.name + row << event.speaker_names + row << event.event_type.title + row << (event.track.present? ? event.track.name : '') + row << (event.difficulty_level.present? ? event.difficulty_level.title : '') + row << (event.room.present? ? event.room.name : '') + row << event.state + events_array << row + end + + comments_array = [] + header_array = ['Comment ID', + 'Event Title', + 'Body', + 'User name'] + comments_array << header_array + @events.each do |event| + event.root_comments.each do |comment| + row = [] + row << comment.id + row << event.title + row << comment.body + row << comment.user.name + comments_array << row + end + end + + pdf.text "#{@conference.short_title} Events", font_size: 25 + pdf.table events_array, header: true, cell_style: {size: 5, border_width: 1} + pdf.move_down 10 + pdf.text "#{@conference.short_title} Comments", font_size: 25 + pdf.table comments_array, header: true, cell_style: {size: 5, border_width: 1} +end diff --git a/app/views/admin/events/index.xlsx.axlsx b/app/views/admin/events/index.xlsx.axlsx new file mode 100644 index 00000000..d76834c5 --- /dev/null +++ b/app/views/admin/events/index.xlsx.axlsx @@ -0,0 +1,41 @@ +wb = xlsx_package.workbook +wb.add_worksheet(name: 'events') do |sheet| + bold_style = wb.styles.add_style(b: true) + row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State'] + + sheet.add_row row, style: bold_style + + @events.each do |event| + row = [] + row << event.id + row << event.title + row << event.abstract + row << event.time + row << event.submitter.name + row << event.speaker_names + row << event.event_type.title + row << (event.track.present? ? event.track.name : '') + row << (event.difficulty_level.present? ? event.difficulty_level.title : '') + row << (event.room.present? ? event.room.name : '') + row << event.state + sheet.add_row row + end +end + +wb.add_worksheet(name: 'comments') do |sheet| + bold_style = wb.styles.add_style(b: true) + row = ['Comment ID', 'Event Title', 'Body', 'User Name'] + + sheet.add_row row, style: bold_style + + @events.each do |event| + event.root_comments.each do |comment| + row = [] + row << comment.id + row << event.title + row << comment.body + row << comment.user.name + sheet.add_row row + end + end +end