diff --git a/app/controllers/admin/events_controller.rb b/app/controllers/admin/events_controller.rb index 017cede5..94b9653a 100644 --- a/app/controllers/admin/events_controller.rb +++ b/app/controllers/admin/events_controller.rb @@ -23,18 +23,22 @@ 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" + @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 { render xlsx: 'index', filename: "#{@file_name}.xlsx" } - format.pdf - format.csv - # format.csv { send_data @events, filename:"#{@file_name}.csv" } + 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 diff --git a/app/views/admin/events/index.csv.haml b/app/views/admin/events/_all_events.csv.haml similarity index 59% rename from app/views/admin/events/index.csv.haml rename to app/views/admin/events/_all_events.csv.haml index c7400dd8..b61859da 100644 --- a/app/views/admin/events/index.csv.haml +++ b/app/views/admin/events/_all_events.csv.haml @@ -9,17 +9,11 @@ '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, + = 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 : '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]) + (event.track.present? ? event.track.name : ''), + (event.difficulty_level.present? ? event.difficulty_level.title : ''), + (event.room.present? ? event.room.name : ''), event.state]).html_safe diff --git a/app/views/admin/events/index.pdf.prawn b/app/views/admin/events/_all_events.pdf.prawn similarity index 50% rename from app/views/admin/events/index.pdf.prawn rename to app/views/admin/events/_all_events.pdf.prawn index a60eeaec..e53a1018 100644 --- a/app/views/admin/events/index.pdf.prawn +++ b/app/views/admin/events/_all_events.pdf.prawn @@ -1,6 +1,5 @@ -prawn_document(force_download: true, filename: @pdf_filename, page_layout: :landscape) do |pdf| +prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf| events_array = [] - c_array = [] header_array = ['Event ID', 'Title', 'Abstract', @@ -19,7 +18,7 @@ prawn_document(force_download: true, filename: @pdf_filename, page_layout: :land row << event.id row << event.title row << event.abstract - row << event.time.to_s + 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 @@ -30,26 +29,6 @@ prawn_document(force_download: true, filename: @pdf_filename, page_layout: :land 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} + 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 diff --git a/app/views/admin/events/index.xlsx.axlsx b/app/views/admin/events/_all_events.xlsx.axlsx similarity index 56% rename from app/views/admin/events/index.xlsx.axlsx rename to app/views/admin/events/_all_events.xlsx.axlsx index d76834c5..66232784 100644 --- a/app/views/admin/events/index.xlsx.axlsx +++ b/app/views/admin/events/_all_events.xlsx.axlsx @@ -1,8 +1,6 @@ -wb = xlsx_package.workbook -wb.add_worksheet(name: 'events') do |sheet| +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| @@ -10,7 +8,7 @@ wb.add_worksheet(name: 'events') do |sheet| row << event.id row << event.title row << event.abstract - row << event.time + 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 @@ -21,21 +19,3 @@ wb.add_worksheet(name: 'events') do |sheet| 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 diff --git a/app/views/admin/events/_all_with_comments.csv.haml b/app/views/admin/events/_all_with_comments.csv.haml new file mode 100644 index 00000000..cdf79339 --- /dev/null +++ b/app/views/admin/events/_all_with_comments.csv.haml @@ -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 diff --git a/app/views/admin/events/_all_with_comments.pdf.prawn b/app/views/admin/events/_all_with_comments.pdf.prawn new file mode 100644 index 00000000..2df27759 --- /dev/null +++ b/app/views/admin/events/_all_with_comments.pdf.prawn @@ -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 "#{event.title} by #{event.speaker_names} on #{event.time.strftime("%m/%d/%Y")} at #{event.time.strftime("%I:%M%p")} ", inline_format: true + else + pdf.text "#{event.title} by #{event.speaker_names} ", inline_format: true + end + pdf.move_down 5 + event.root_comments.each do |comment| + pdf.text " #{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}", font_size: 10, style: :normal, inline_format: true, align: :justify + pdf.move_down 3 + end + pdf.move_down 20 + end + end +end diff --git a/app/views/admin/events/_all_with_comments.xlsx.axlsx b/app/views/admin/events/_all_with_comments.xlsx.axlsx new file mode 100644 index 00000000..038dfea5 --- /dev/null +++ b/app/views/admin/events/_all_with_comments.xlsx.axlsx @@ -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 diff --git a/app/views/admin/events/_confirmed_events.csv.haml b/app/views/admin/events/_confirmed_events.csv.haml new file mode 100644 index 00000000..4edbbaa3 --- /dev/null +++ b/app/views/admin/events/_confirmed_events.csv.haml @@ -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 diff --git a/app/views/admin/events/_confirmed_events.pdf.prawn b/app/views/admin/events/_confirmed_events.pdf.prawn new file mode 100644 index 00000000..ea838b94 --- /dev/null +++ b/app/views/admin/events/_confirmed_events.pdf.prawn @@ -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 diff --git a/app/views/admin/events/_confirmed_events.xlsx.axlsx b/app/views/admin/events/_confirmed_events.xlsx.axlsx new file mode 100644 index 00000000..34c40b36 --- /dev/null +++ b/app/views/admin/events/_confirmed_events.xlsx.axlsx @@ -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 diff --git a/app/views/admin/events/events.csv.haml b/app/views/admin/events/events.csv.haml new file mode 100644 index 00000000..e440a49e --- /dev/null +++ b/app/views/admin/events/events.csv.haml @@ -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' diff --git a/app/views/admin/events/events.pdf.prawn b/app/views/admin/events/events.pdf.prawn new file mode 100644 index 00000000..65813f3c --- /dev/null +++ b/app/views/admin/events/events.pdf.prawn @@ -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 diff --git a/app/views/admin/events/events.xlsx.axlsx b/app/views/admin/events/events.xlsx.axlsx new file mode 100644 index 00000000..abfd1365 --- /dev/null +++ b/app/views/admin/events/events.xlsx.axlsx @@ -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 diff --git a/app/views/admin/events/index.html.haml b/app/views/admin/events/index.html.haml index 4a19220d..4fbad664 100644 --- a/app/views/admin/events/index.html.haml +++ b/app/views/admin/events/index.html.haml @@ -6,9 +6,30 @@ = "(#{@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' + .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