From 3bc20bdb06ce55a4fd77e7dc6ab1a2edb842b907 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 18 Sep 2019 21:58:23 +0200 Subject: [PATCH 1/4] Procedure.routee? --- app/models/procedure.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 24806f6ba..27d38ab28 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -481,6 +481,10 @@ class Procedure < ApplicationRecord !AssignTo.exists?(groupe_instructeur: groupe_instructeurs) end + def routee? + groupe_instructeurs.count > 1 + end + private def move_type_de_champ_attributes(types_de_champ, type_de_champ, new_index) From f577484aa2765c73d603bd3bc1b578bcc9d0c3e2 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 18 Sep 2019 17:52:02 +0200 Subject: [PATCH 2/4] Add groupe_instructeur_label to export v1 --- app/services/procedure_export_service.rb | 13 ++++++++-- .../services/procedure_export_service_spec.rb | 25 ++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/app/services/procedure_export_service.rb b/app/services/procedure_export_service.rb index 1708e4d4b..f2a192b1b 100644 --- a/app/services/procedure_export_service.rb +++ b/app/services/procedure_export_service.rb @@ -51,6 +51,13 @@ class ProcedureExportService def initialize(procedure, dossiers, tables: [], ids: nil, since: nil, limit: nil) @procedure = procedure + + @attributes = ATTRIBUTES.dup + + if procedure.routee? + @attributes << :groupe_instructeur_label + end + @dossiers = dossiers.downloadable_sorted if ids @dossiers = @dossiers.where(id: ids) @@ -137,7 +144,7 @@ class ProcedureExportService end def dossiers_headers - headers = ATTRIBUTES.map(&:to_s) + + headers = @attributes.map(&:to_s) + @procedure.types_de_champ.reject(&:exclude_from_export?).map(&:libelle) + @procedure.types_de_champ_private.reject(&:exclude_from_export?).map(&:libelle) + ETABLISSEMENT_ATTRIBUTES.map { |key| "etablissement.#{key}" } + @@ -148,7 +155,7 @@ class ProcedureExportService def dossiers_data @dossiers.map do |dossier| - values = ATTRIBUTES.map do |key| + values = @attributes.map do |key| case key when :email dossier.user.email @@ -168,6 +175,8 @@ class ProcedureExportService dossier.individual&.gender when :emails_instructeurs dossier.followers_instructeurs.map(&:email).join(' ') + when :groupe_instructeur_label + dossier.groupe_instructeur.label else dossier.read_attribute(key) end diff --git a/spec/services/procedure_export_service_spec.rb b/spec/services/procedure_export_service_spec.rb index c8b1425d9..235a2baa7 100644 --- a/spec/services/procedure_export_service_spec.rb +++ b/spec/services/procedure_export_service_spec.rb @@ -19,8 +19,8 @@ describe ProcedureExportService do end context 'dossiers' do - it 'should have headers' do - expect(headers).to eq([ + let(:nominal_header) do + [ :id, :created_at, :updated_at, @@ -86,7 +86,19 @@ describe ProcedureExportService do :entreprise_date_creation, :entreprise_nom, :entreprise_prenom - ]) + ] + end + + it 'should have headers' do + expect(headers).to eq(nominal_header) + end + + context 'with a procedure routee' do + before { procedure.groupe_instructeurs.create(label: '2') } + + let(:routee_header) { nominal_header.insert(nominal_header.index(:textarea), :groupe_instructeur_label) } + + it { expect(headers).to eq(routee_header) } end it 'should have empty values' do @@ -139,6 +151,13 @@ describe ProcedureExportService do ]) end + context 'with a procedure routee' do + before { procedure.groupe_instructeurs.create(label: '2') } + + it { expect(data.first[15]).to eq('défaut') } + it { expect(data.first.count).to eq(dossier_data.count + champs_data.count + etablissement_data.count + 1) } + end + context 'and etablissement' do let!(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :with_entreprise, procedure: procedure) } From a2f82ab8be428f28c68b8d7eb4ce4b637797798c Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 18 Sep 2019 21:09:52 +0200 Subject: [PATCH 3/4] Add groupe_instructeur_label to export v2 --- app/models/dossier.rb | 10 ++++++++-- .../procedure_export_v2_service_spec.rb | 19 ++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 1f5cd63b0..38854e61e 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -447,7 +447,7 @@ class Dossier < ApplicationRecord end def spreadsheet_columns - [ + columns = [ ['ID', id.to_s], ['Email', user.email], ['Civilité', individual&.gender], @@ -462,7 +462,13 @@ class Dossier < ApplicationRecord ['Traité le', :processed_at], ['Motivation de la décision', :motivation], ['Instructeurs', followers_instructeurs.map(&:email).join(' ')] - ] + champs_for_export + annotations_for_export + ] + + if procedure.routee? + columns << ['Groupe instructeur', groupe_instructeur.label] + end + + columns + champs_for_export + annotations_for_export end def champs_for_export diff --git a/spec/services/procedure_export_v2_service_spec.rb b/spec/services/procedure_export_v2_service_spec.rb index 74d7d8e5b..12a3cf945 100644 --- a/spec/services/procedure_export_v2_service_spec.rb +++ b/spec/services/procedure_export_v2_service_spec.rb @@ -34,8 +34,8 @@ describe ProcedureExportV2Service do context 'with dossier' do let!(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :for_individual, procedure: procedure) } - it 'should have headers' do - expect(dossiers_sheet.headers).to eq([ + let(:nominal_headers) do + [ "ID", "Email", "Civilité", @@ -74,7 +74,11 @@ describe ProcedureExportV2Service do "siret", "carte", "text" - ]) + ] + end + + it 'should have headers' do + expect(dossiers_sheet.headers).to match(nominal_headers) end it 'should have data' do @@ -88,6 +92,15 @@ describe ProcedureExportV2Service do expect(en_construction_at).to eq(dossier.en_construction_at.round) expect(en_instruction_at).to eq(dossier.en_instruction_at.round) end + + context 'with a procedure routee' do + before { procedure.groupe_instructeurs.create(label: '2') } + + let(:routee_header) { nominal_headers.insert(nominal_headers.index('textarea'), 'Groupe instructeur') } + + it { expect(dossiers_sheet.headers).to match(routee_header) } + it { expect(dossiers_sheet.data[0][dossiers_sheet.headers.index('Groupe instructeur')]).to eq('défaut') } + end end context 'with etablissement' do From faddbc23ef2cdcfb3bbcbf654422ba1ca5b79055 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Thu, 19 Sep 2019 12:20:23 +0200 Subject: [PATCH 4/4] Eager load procedure: :groupe_instructeurs for export --- app/models/dossier.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 38854e61e..6a7ab2243 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -126,7 +126,8 @@ class Dossier < ApplicationRecord champs_private: { etablissement: :champ, type_de_champ: :drop_down_list - } + }, + procedure: :groupe_instructeurs ).order(en_construction_at: 'asc') } scope :en_cours, -> { not_archived.state_en_construction_ou_instruction }