Merge pull request #1174 from AnithaPal/export-events-and-comments

Export events and comments
This commit is contained in:
Stella Rouzi 2016-11-16 01:44:05 +02:00 committed by GitHub
commit 710b4d26a4
15 changed files with 317 additions and 4 deletions

View file

@ -23,11 +23,22 @@ module Admin
@tracks_distribution_confirmed = @conference.tracks_distribution(:confirmed)
@event_distribution = @conference.event_distribution
@scheduled_event_distribution = @conference.scheduled_event_distribution
@file_name = "events_for_#{@conference.short_title}"
@event_export_option = params[:event_export_option]
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 do
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\""
render 'events'
end
format.pdf {render 'events'}
format.csv do
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\""
render 'events'
end
end
end

View file

@ -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

View file

@ -0,0 +1,19 @@
- headers = ['Event ID',
'Title',
'Abstract',
'Start time',
'Submitter',
'Speaker',
'Event Type',
'Track',
'Difficulty Level',
'Room',
'State']
= CSV.generate_line ["All Events"]
= CSV.generate_line headers
- @events.each do |event|
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
event.submitter.name, event.speaker_names, event.event_type.title,
(event.track.present? ? event.track.name : ''),
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
(event.room.present? ? event.room.name : ''), event.state]).html_safe

View file

@ -0,0 +1,34 @@
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
events_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.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
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
pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1}
end

View file

@ -0,0 +1,21 @@
wb.add_worksheet(name: 'all 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.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
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

View file

@ -0,0 +1,23 @@
- headers = ['Event ID',
'Title',
'Abstract',
'Start time',
'Submitter',
'Speaker',
'Event Type',
'Track',
'Difficulty Level',
'Room',
'State',
'Comments']
= CSV.generate_line ["Events with Comments"]
= CSV.generate_line headers
- @events.each do |event|
- all_comments = ''
- event.root_comments.each do |comment|
- all_comments << "#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}\n"
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
event.submitter.name, event.speaker_names, event.event_type.title,
(event.track.present? ? event.track.name : ''),
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
(event.room.present? ? event.room.name : ''), event.state, all_comments]).html_safe

View file

@ -0,0 +1,53 @@
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
events_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.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
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
pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
pdf.move_down 10
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1, position: :center}
pdf.start_new_page
pdf.text "#{@conference.short_title} Comments", font_size: 25, align: :center
pdf.move_down 20
@events.each do |event|
if event.root_comments.any?
if event.time.present?
pdf.text "<b>#{event.title} by #{event.speaker_names} on #{event.time.strftime("%m/%d/%Y")} at #{event.time.strftime("%I:%M%p")} </b> ", inline_format: true
else
pdf.text "<b>#{event.title} by #{event.speaker_names} </b>", inline_format: true
end
pdf.move_down 5
event.root_comments.each do |comment|
pdf.text " <i>#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} </i> <b>#{comment.user.name}:</b> #{comment.body}", font_size: 10, style: :normal, inline_format: true, align: :justify
pdf.move_down 3
end
pdf.move_down 20
end
end
end

View file

@ -0,0 +1,28 @@
wb.use_shared_strings = true
wb.add_worksheet(name: 'events with comments') do |sheet|
bold_style = wb.styles.add_style(b: true )
cell_style = wb.styles.add_style(alignment: { wrap_text: true, vertical: :top })
row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State', 'Comments']
sheet.add_row row, style: bold_style
@events.each do |event|
all_comments = ''
event.root_comments.each do |comment|
all_comments << "#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}\n"
end
row = []
row << event.id
row << event.title
row << event.abstract
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
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
row << all_comments.strip
sheet.add_row row, style: cell_style
end
end

View file

@ -0,0 +1,19 @@
- headers = ['Event ID',
'Title',
'Abstract',
'Start time',
'Submitter',
'Speaker',
'Event Type',
'Track',
'Difficulty Level',
'Room',
'State']
= CSV.generate_line ["Confirmed Events"]
= CSV.generate_line headers
- @events.confirmed.each do |event|
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
event.submitter.name, event.speaker_names, event.event_type.title,
(event.track.present? ? event.track.name : ''),
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
(event.room.present? ? event.room.name : ''), event.state]).html_safe

View file

@ -0,0 +1,35 @@
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
events_array = []
header_array = ['Event ID',
'Title',
'Abstract',
'Start time',
'Submitter',
'Speaker',
'Event Type',
'Track',
'Difficulty Level',
'Room',
'State'
]
events_array << header_array
@events.confirmed.each do |event|
row = []
row << event.id
row << event.title
row << event.abstract
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
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
pdf.text "#{@conference.short_title} Confirmed Events", font_size: 25, align: :center
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1}
end

View file

@ -0,0 +1,21 @@
wb.add_worksheet(name: 'confirmed 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.confirmed.each do |event|
row = []
row << event.id
row << event.title
row << event.abstract
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
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

View file

@ -0,0 +1,6 @@
- if @event_export_option == 'confirmed'
= render 'confirmed_events'
- elsif @event_export_option == 'all'
= render 'all_events'
- elsif @event_export_option == 'all_with_comments'
= render 'all_with_comments'

View file

@ -0,0 +1,7 @@
if @event_export_option == 'confirmed'
render 'confirmed_events'
elsif @event_export_option == 'all'
render 'all_events'
elsif @event_export_option == 'all_with_comments'
render 'all_with_comments'
end

View file

@ -0,0 +1,8 @@
wb = xlsx_package.workbook
if @event_export_option == 'confirmed'
render partial: 'confirmed_events', locals: {:wb => wb}
elsif @event_export_option == 'all'
render partial: 'all_events', locals: {:wb => wb}
elsif @event_export_option == 'all_with_comments'
render partial: 'all_with_comments', locals: {:wb => wb}
end

View file

@ -3,8 +3,33 @@
.page-header
%h1
Events
- if @events.any?
= "(#{@events.length})"
= "(#{@events.length})" if @events.any?
.btn-group.pull-right
- if can? :read, Event
.btn-group
%button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", :type => "button", :class => 'btn btn-success'}
Export PDF
%span.caret
%ul.dropdown-menu{:role => "menu"}
%li= link_to 'All Events', admin_conference_program_events_path(@conference.short_title, format: :pdf, event_export_option: 'all')
%li= link_to 'Confirmed Events', admin_conference_program_events_path(@conference.short_title, format: :pdf, event_export_option: 'confirmed')
%li= link_to 'All Events with Comments', admin_conference_program_events_path(@conference.short_title, format: :pdf, event_export_option: 'all_with_comments')
.btn-group
%button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", :type => "button", :class => 'btn btn-success'}
Export CSV
%span.caret
%ul.dropdown-menu{:role => "menu"}
%li= link_to 'All', admin_conference_program_events_path(@conference.short_title, format: :csv, event_export_option: 'all')
%li= link_to 'Confirmed', admin_conference_program_events_path(@conference.short_title, format: :csv, event_export_option: 'confirmed')
%li= link_to 'All with Comments', admin_conference_program_events_path(@conference.short_title, format: :csv, event_export_option: 'all_with_comments')
.btn-group
%button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", :type => "button", :class => 'btn btn-success'}
Export XLS
%span.caret
%ul.dropdown-menu{:role => "menu"}
%li= link_to 'All', admin_conference_program_events_path(@conference.short_title, format: :xlsx, event_export_option: 'all')
%li= link_to 'Confirmed', admin_conference_program_events_path(@conference.short_title, format: :xlsx, event_export_option: 'confirmed')
%li= link_to 'All with Comments', admin_conference_program_events_path(@conference.short_title, format: :xlsx, event_export_option: 'all_with_comments')
%p.text-muted
All the submissions of your speakers
.row