diff --git a/app/controllers/registrar/contacts_controller.rb b/app/controllers/registrar/contacts_controller.rb index e01051007..b4ab97dc4 100644 --- a/app/controllers/registrar/contacts_controller.rb +++ b/app/controllers/registrar/contacts_controller.rb @@ -25,18 +25,50 @@ class Registrar::ContactsController < Registrar::DeppController # EPP controller @q = contacts.search(params[:q]) @contacts = @q.result.page(params[:page]) if @contacts.count == 0 && params[:q][:name_matches] !~ /^%.+%$/ - # if we do not get any results, add wildcards to the name field and search again n_cache = params[:q][:name_matches] params[:q][:name_matches] = "%#{params[:q][:name_matches]}%" @q = contacts.search(params[:q]) @contacts = @q.result.page(params[:page]) - params[:q][:name_matches] = n_cache # we don't want to show wildcards in search form + params[:q][:name_matches] = n_cache end end @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 end + def download_list + authorize! :view, Depp::Contact + + params[:q] ||= {} + if params[:statuses_contains] + contacts = current_user.registrar.contacts.includes(:registrar).where( + "statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}" + ) + else + contacts = current_user.registrar.contacts.includes(:registrar) + end + + normalize_search_parameters do + @q = contacts.search(params[:q]) + @contacts = @q.result.page(params[:page]) + if @contacts.count == 0 && params[:q][:name_matches] !~ /^%.+%$/ + n_cache = params[:q][:name_matches] + params[:q][:name_matches] = "%#{params[:q][:name_matches]}%" + @q = contacts.search(params[:q]) + @contacts = @q.result.page(params[:page]) + params[:q][:name_matches] = n_cache + end + end + + respond_to do |format| + format.csv { render text: @contacts.to_csv } + format.pdf do + pdf = @contacts.pdf(render_to_string('registrar/contacts/download_list', layout: false)) + send_data pdf, filename: 'contacts.pdf' + end + end + end + def new authorize! :create, Depp::Contact @contact = Depp::Contact.new diff --git a/app/models/contact.rb b/app/models/contact.rb index f5a177eef..d0d0ba967 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -201,6 +201,21 @@ class Contact < ActiveRecord::Base ['DeleteProhibited', SERVER_DELETE_PROHIBITED] ] end + + def to_csv + CSV.generate do |csv| + csv << column_names + all.each do |contact| + csv << contact.attributes.values_at(*column_names) + end + end + end + + def pdf(html) + kit = PDFKit.new(html) + kit.to_pdf + end + end def roid diff --git a/app/views/registrar/contacts/download_list.haml b/app/views/registrar/contacts/download_list.haml new file mode 100644 index 000000000..2c1d67d81 --- /dev/null +++ b/app/views/registrar/contacts/download_list.haml @@ -0,0 +1,24 @@ +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-2'} + =t(:name) + %th{class: 'col-xs-2'} + =t(:id) + %th{class: 'col-xs-2'} + =t(:ident) + %th{class: 'col-xs-2'} + =t(:created_at) + %th{class: 'col-xs-2'} + =t(:registrar) + %tbody + - @contacts.each do |contact| + %tr + %td= contact + %td= contact.code + %td= ident_for(contact) + %td= l(contact.created_at, format: :short) + %td= contact.registrar \ No newline at end of file diff --git a/app/views/registrar/contacts/index.haml b/app/views/registrar/contacts/index.haml index 452affe78..7ffb7bc4e 100644 --- a/app/views/registrar/contacts/index.haml +++ b/app/views/registrar/contacts/index.haml @@ -73,6 +73,18 @@   %button.btn.btn-default.js-reset-form = t(:clear_fields) + .row + .col-md-3 + .btn-group{:role => "group"} + %button.btn.btn-default.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :type => "button"} + Download + %span.caret + %ul.dropdown-menu + %li= link_to 'PDF', download_list_registrar_contacts_path(params[:q], format: "pdf") + %li= link_to 'CSV', download_list_registrar_contacts_path(params[:q], format: "csv") + .col-md-3 + .col-md-3 + .col-md-3 %hr .row diff --git a/config/routes.rb b/config/routes.rb index f5b81e8b5..2a03355f3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -74,6 +74,7 @@ Rails.application.routes.draw do collection do get 'check' + get 'download_list' end end