diff --git a/app/controllers/admin/events_controller.rb b/app/controllers/admin/events_controller.rb index abe426b8..94b9653a 100644 --- a/app/controllers/admin/events_controller.rb +++ b/app/controllers/admin/events_controller.rb @@ -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 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/_all_events.csv.haml b/app/views/admin/events/_all_events.csv.haml new file mode 100644 index 00000000..b61859da --- /dev/null +++ b/app/views/admin/events/_all_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 ["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 diff --git a/app/views/admin/events/_all_events.pdf.prawn b/app/views/admin/events/_all_events.pdf.prawn new file mode 100644 index 00000000..e53a1018 --- /dev/null +++ b/app/views/admin/events/_all_events.pdf.prawn @@ -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 diff --git a/app/views/admin/events/_all_events.xlsx.axlsx b/app/views/admin/events/_all_events.xlsx.axlsx new file mode 100644 index 00000000..66232784 --- /dev/null +++ b/app/views/admin/events/_all_events.xlsx.axlsx @@ -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 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 75349458..4fbad664 100644 --- a/app/views/admin/events/index.html.haml +++ b/app/views/admin/events/index.html.haml @@ -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