Merge pull request #6521 from betagouv/feat/6509

ETQ Administrateur, je souhaite exporter tous les groupes instructeurs d'une démarche au format CSV
This commit is contained in:
Kara Diaby 2021-10-05 15:57:45 +02:00 committed by GitHub
commit cf52e4bfc2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 55 additions and 1 deletions

View file

@ -69,3 +69,10 @@
position: absolute !important;
word-wrap: normal !important;
}
.label-bold {
font-size: 18px;
margin-bottom: 16px;
display: block;
font-weight: bold;
}

View file

@ -236,6 +236,24 @@ module NewAdministrateur
end
end
def export_groupe_instructeurs
groupe_instructeurs = procedure.groupe_instructeurs
data = CSV.generate(headers: true) do |csv|
column_names = ["Groupe", "Email"]
csv << column_names
groupe_instructeurs.each do |gi|
gi.instructeurs.each do |instructeur|
csv << [gi.label, instructeur.email]
end
end
end
respond_to do |format|
format.csv { send_data data, filename: "#{procedure.id}-groupe-instructeurs-#{Date.today}.csv" }
end
end
private
def create_instructeur(email)

View file

@ -1,3 +1,4 @@
- groupe_instructeurs_count = procedure.groupe_instructeurs.count
.card
= form_for procedure,
url: { action: :update_routing_criteria_name },
@ -17,7 +18,7 @@
Ajouter un groupe
%p.notice Ce groupe sera un choix de la liste « #{procedure.routing_criteria_name} » .
= f.text_field :label, placeholder: 'ex. Ville de Bordeaux', required: true
= f.submit 'Ajouter le groupe', class: 'button primary send'
= f.submit 'Ajouter le groupe', class: "button primary send"
- csv_max_size = NewAdministrateur::GroupeInstructeursController::CSV_MAX_SIZE
= form_tag import_admin_procedure_groupe_instructeurs_path(procedure), method: :post, multipart: true, class: "mt-4 form" do
@ -48,5 +49,7 @@
= link_to reaffecter_dossiers_admin_procedure_groupe_instructeur_path(procedure, group), class: 'button', title:'Réaffecter les dossiers à un autre groupe afin de pouvoir le supprimer' do
%span.icon.follow
déplacer les dossiers
- if groupe_instructeurs_count > 1
= link_to "Exporter au format CSV", export_groupe_instructeurs_admin_procedure_groupe_instructeurs_path(procedure, format: :csv)
= paginate groupes_instructeurs

View file

@ -427,6 +427,7 @@ Rails.application.routes.draw do
patch 'update_routing_enabled'
patch 'update_instructeurs_self_management_enabled'
post 'import'
get 'export_groupe_instructeurs'
end
end

View file

@ -422,6 +422,31 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
end
end
describe '#export_groupe_instructeurs' do
let(:procedure) { create(:procedure, :published) }
let(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 1 2') }
let(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] }
let(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] }
subject do
get :export_groupe_instructeurs, params: { procedure_id: procedure.id, format: :csv }
end
before do
procedure.administrateurs << admin
gi_1_2.instructeurs << [instructeur_assigned_1, instructeur_assigned_2]
end
it 'generates a CSV file containing the instructeurs and groups' do
expect(subject.status).to eq(200)
expect(subject.stream.body.split("\n").size).to eq(3)
expect(subject.stream.body).to include("groupe instructeur 1 2")
expect(subject.stream.body).to include(instructeur_assigned_1.email)
expect(subject.stream.body).to include(instructeur_assigned_2.email)
expect(subject.header["Content-Disposition"]).to include("#{procedure.id}-groupe-instructeurs-#{Date.today}.csv")
end
end
describe '#update_routing_criteria_name' do
before do
patch :update_routing_criteria_name,