diff --git a/Gemfile b/Gemfile index 96cc1673..f3dc73c1 100644 --- a/Gemfile +++ b/Gemfile @@ -51,4 +51,4 @@ gem 'prawn' gem 'prawn_rails' gem 'gravtastic' gem 'active_model_serializers' - +gem 'axlsx_rails' diff --git a/Gemfile.lock b/Gemfile.lock index b9041a60..e95ca596 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -39,6 +39,13 @@ GEM arel (3.0.2) awesome_nested_set (2.1.6) activerecord (>= 3.0.0) + axlsx (1.3.6) + htmlentities (~> 4.3.1) + nokogiri (>= 1.4.1) + rubyzip (>= 0.9.5) + axlsx_rails (0.1.4) + axlsx + rails (>= 3.1) bcrypt-ruby (3.0.1) bootstrap-sass (2.3.2.0) sass (~> 3.2) @@ -80,6 +87,7 @@ GEM tilt hashery (2.1.0) hike (1.2.2) + htmlentities (4.3.1) i18n (0.6.4) journey (1.0.4) jquery-fileupload-rails (0.4.1) @@ -217,6 +225,7 @@ PLATFORMS DEPENDENCIES active_model_serializers acts_as_commentable_with_threading + axlsx_rails bcrypt-ruby (~> 3.0.0) bootstrap-sass cancan diff --git a/app/controllers/admin/registrations_controller.rb b/app/controllers/admin/registrations_controller.rb index edb5b5da..3144b0c8 100644 --- a/app/controllers/admin/registrations_controller.rb +++ b/app/controllers/admin/registrations_controller.rb @@ -4,15 +4,8 @@ class Admin::RegistrationsController < ApplicationController def show session[:return_to] ||= request.referer @pdf_filename = "#{@conference.title}.pdf" - @registrations = @conference.registrations.all(:joins => :person, - :order => "registrations.created_at ASC", - :select => "registrations.*, - people.last_name AS last_name, - people.first_name AS first_name, - people.public_name AS public_name, - people.email AS email") - - @attended = @conference.registrations.where("attended = ?", true) + @registrations = @conference.registrations.includes(:person).order("registrations.created_at ASC") + @attended = @conference.registrations.where("attended = ?", true).count @headers = %w[attended name email attending_social_events attending_with_partner need_access other_needs arrival departure] end diff --git a/app/models/registration.rb b/app/models/registration.rb index 7109e37e..3c5329e1 100644 --- a/app/models/registration.rb +++ b/app/models/registration.rb @@ -15,6 +15,13 @@ class Registration < ActiveRecord::Base accepts_nested_attributes_for :person accepts_nested_attributes_for :supporter_registration accepts_nested_attributes_for :social_events + + delegate :first_name, :to => :person + delegate :last_name, :to => :person + delegate :public_name, :to => :person + delegate :email, :to => :person + delegate :irc_nickname, :to => :person + delegate :company, :to => :person alias_attribute :with_partner, :attending_with_partner alias_attribute :need_access, :handicapped_access_required diff --git a/app/views/admin/registrations/show.html.haml b/app/views/admin/registrations/show.html.haml index 7a395458..bd673302 100644 --- a/app/views/admin/registrations/show.html.haml +++ b/app/views/admin/registrations/show.html.haml @@ -3,14 +3,14 @@ .pull-right{:style=>"margin-top:20px; margin-bottom:20px;"} = link_to "New", admin_users_new_path(@conference.short_title), :class => "btn btn-primary" = link_to "Export PDF", admin_conference_registrations_path(@conference.short_title, :format => :pdf), :class => "btn btn-success" + = link_to "Export xlsx", {:format => :xlsx}, :class => "btn btn-success" .row-fluid .span12 %h2 Registrations - if @registrations = "(#{@registrations.length})" - - if @attended - = " - Attended (#{@attended.length})" + = " - Attended (#{@attended})" %table.table.table-striped.table-bordered.table-hover#registrations %thead %th @@ -49,4 +49,4 @@ "bPaginate": false, "bLengthChange": false } ); - } ); \ No newline at end of file + } ); diff --git a/app/views/admin/registrations/show.xlsx.axlsx b/app/views/admin/registrations/show.xlsx.axlsx new file mode 100644 index 00000000..5ce6d282 --- /dev/null +++ b/app/views/admin/registrations/show.xlsx.axlsx @@ -0,0 +1,25 @@ +wb = xlsx_package.workbook +wb.add_worksheet(:name => "registrations") do |sheet| + bold_style = wb.styles.add_style(:b => true) + row = ["Attended", "Name", "Nickname", "Affilation", "Email", "Social events", + "With partner", "Needs access", "Other needs", "Arrival", "Departure"] + sheet.add_row row, :style => bold_style + + @registrations.each do |reg| + row = [] + row << reg.attended + row << "#{reg.last_name} #{reg.first_name} (#{reg.public_name})" + row << reg.irc_nickname + row << reg.company + row << reg.email + row << reg.attending_social_events + row << reg.attending_with_partner + row << reg.need_access + row << reg.other_needs + row << reg.arrival + row << reg.departure + sheet.add_row row + end + sheet.column_info[8].width = [sheet.column_info[8].width, 30].min +end +