From 5f8e8caeb5c1cdf8191b0cb301791538f764edae Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 1 Oct 2018 12:59:26 +0200 Subject: [PATCH 1/6] Stop auto copying the FC infos to the dossier identity --- app/controllers/users/dossiers_controller.rb | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 9658eed83..fe2f10ed7 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -73,17 +73,6 @@ class Users::DossiersController < UsersController @siret = current_user.siret end - if @facade.procedure.for_individual? && current_user.loged_in_with_france_connect? - individual = @facade.dossier.individual - - individual.update_column :gender, @facade.dossier.france_connect_information.gender - individual.update_column :nom, @facade.dossier.france_connect_information.family_name - individual.update_column :prenom, @facade.dossier.france_connect_information.given_name - - individual.birthdate = @facade.dossier.france_connect_information.birthdate - individual.save - end - rescue ActiveRecord::RecordNotFound flash.alert = t('errors.messages.dossier_not_found') redirect_to url_for dossiers_path From 5107b33af8e3af95ef99b0a33c83e59c1dcd3906 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 1 Oct 2018 12:59:34 +0200 Subject: [PATCH 2/6] Remove FC fields from search --- app/models/dossier.rb | 2 -- spec/models/dossier_spec.rb | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index b901b9e92..db405b172 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -83,8 +83,6 @@ class Dossier < ApplicationRecord def update_search_terms self.search_terms = [ user&.email, - france_connect_information&.given_name, - france_connect_information&.family_name, *champs.flat_map(&:search_terms), *etablissement&.search_terms, individual&.nom, diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 3b7dbfc10..89eaefd66 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -75,7 +75,7 @@ describe Dossier do dossier.update_search_terms end - it { expect(dossier.search_terms).to eq("#{user.email} #{france_connect_information.given_name} #{france_connect_information.family_name} champ public #{etablissement.entreprise_siren} #{etablissement.entreprise_numero_tva_intracommunautaire} #{etablissement.entreprise_forme_juridique} #{etablissement.entreprise_forme_juridique_code} #{etablissement.entreprise_nom_commercial} #{etablissement.entreprise_raison_sociale} #{etablissement.entreprise_siret_siege_social} #{etablissement.entreprise_nom} #{etablissement.entreprise_prenom} #{etablissement.association_rna} #{etablissement.association_titre} #{etablissement.association_objet} #{etablissement.siret} #{etablissement.naf} #{etablissement.libelle_naf} #{etablissement.adresse} #{etablissement.code_postal} #{etablissement.localite} #{etablissement.code_insee_localite}") } + it { expect(dossier.search_terms).to eq("#{user.email} champ public #{etablissement.entreprise_siren} #{etablissement.entreprise_numero_tva_intracommunautaire} #{etablissement.entreprise_forme_juridique} #{etablissement.entreprise_forme_juridique_code} #{etablissement.entreprise_nom_commercial} #{etablissement.entreprise_raison_sociale} #{etablissement.entreprise_siret_siege_social} #{etablissement.entreprise_nom} #{etablissement.entreprise_prenom} #{etablissement.association_rna} #{etablissement.association_titre} #{etablissement.association_objet} #{etablissement.siret} #{etablissement.naf} #{etablissement.libelle_naf} #{etablissement.adresse} #{etablissement.code_postal} #{etablissement.localite} #{etablissement.code_insee_localite}") } it { expect(dossier.private_search_terms).to eq('champ privé') } context 'with an update' do From 12f0c99b5a74fccbd06011d47026b407f3a14a5f Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 1 Oct 2018 12:59:50 +0200 Subject: [PATCH 3/6] Remove FC fields from instructeur table customisation --- .../new_gestionnaire/procedures_controller.rb | 2 -- app/services/dossier_field_service.rb | 18 ------------- spec/models/dossier_spec.rb | 1 - spec/models/procedure_spec.rb | 3 --- spec/services/dossier_field_service_spec.rb | 27 ------------------- 5 files changed, 51 deletions(-) diff --git a/app/controllers/new_gestionnaire/procedures_controller.rb b/app/controllers/new_gestionnaire/procedures_controller.rb index 8d7ea32c5..2b5bd6464 100644 --- a/app/controllers/new_gestionnaire/procedures_controller.rb +++ b/app/controllers/new_gestionnaire/procedures_controller.rb @@ -240,8 +240,6 @@ module NewGestionnaire end end.each do |group_key, fields| case group_key - when 'france_connect_information' - @dossiers = @dossiers.includes({ user: :france_connect_information }) when 'type_de_champ_group' if fields.any? { |field| field['table'] == 'type_de_champ' } @dossiers = @dossiers.includes(:champs).references(:champs) diff --git a/app/services/dossier_field_service.rb b/app/services/dossier_field_service.rb index 1d82db39f..dad49c2f9 100644 --- a/app/services/dossier_field_service.rb +++ b/app/services/dossier_field_service.rb @@ -9,12 +9,6 @@ class DossierFieldService field_hash('Demandeur', 'user', 'email') ] - fields.push( - field_hash('Civilité (FC)', 'france_connect_information', 'gender'), - field_hash('Prénom (FC)', 'france_connect_information', 'given_name'), - field_hash('Nom (FC)', 'france_connect_information', 'family_name') - ) - if !procedure.for_individual || (procedure.for_individual && procedure.individual_with_siret) fields.push( field_hash('SIREN', 'etablissement', 'entreprise_siren'), @@ -53,8 +47,6 @@ class DossierFieldService dossier.send(column) when 'user' dossier.user.send(column) - when 'france_connect_information' - dossier.user.france_connect_information&.send(column) when 'etablissement' dossier.etablissement&.send(column) when 'type_de_champ' @@ -82,11 +74,6 @@ class DossierFieldService when 'self' dossiers.where("? ILIKE ?", filter['column'], "%#{filter['value']}%") - when 'france_connect_information' - dossiers - .includes(user: :france_connect_information) - .where("? ILIKE ?", "france_connect_informations.#{filter['column']}", "%#{filter['value']}%") - when 'type_de_champ', 'type_de_champ_private' relation = table == 'type_de_champ' ? :champs : :champs_private dossiers @@ -133,11 +120,6 @@ class DossierFieldService return dossiers .order("#{column} #{order}") .pluck(:id) - when 'france_connect_information' - return dossiers - .includes(user: :france_connect_information) - .order("#{column} #{order}") - .pluck(:id) when 'type_de_champ', 'type_de_champ_private' return dossiers .includes(table == 'type_de_champ' ? :champs : :champs_private) diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 89eaefd66..3d6960488 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -749,7 +749,6 @@ describe Dossier do it { expect(dossier.get_value('self', 'created_at')).to eq(dossier.created_at) } it { expect(dossier.get_value('user', 'email')).to eq(user.email) } - it { expect(dossier.get_value('france_connect_information', 'gender')).to eq(user.france_connect_information.gender) } it { expect(dossier.get_value('etablissement', 'entreprise_siren')).to eq(dossier.etablissement.entreprise_siren) } it { expect(dossier.get_value('etablissement', 'siret')).to eq(dossier.etablissement.siret) } it { expect(dossier.get_value('type_de_champ', @champ_public.type_de_champ.id.to_s)).to eq(dossier.champs.first.value) } diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index f2c2d9082..6e3a93a23 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -639,9 +639,6 @@ describe Procedure do { "label" => 'Créé le', "table" => 'self', "column" => 'created_at' }, { "label" => 'Mis à jour le', "table" => 'self', "column" => 'updated_at' }, { "label" => 'Demandeur', "table" => 'user', "column" => 'email' }, - { "label" => 'Civilité (FC)', "table" => 'france_connect_information', "column" => 'gender' }, - { "label" => 'Prénom (FC)', "table" => 'france_connect_information', "column" => 'given_name' }, - { "label" => 'Nom (FC)', "table" => 'france_connect_information', "column" => 'family_name' }, { "label" => 'SIREN', "table" => 'etablissement', "column" => 'entreprise_siren' }, { "label" => 'Forme juridique', "table" => 'etablissement', "column" => 'entreprise_forme_juridique' }, { "label" => 'Nom commercial', "table" => 'etablissement', "column" => 'entreprise_nom_commercial' }, diff --git a/spec/services/dossier_field_service_spec.rb b/spec/services/dossier_field_service_spec.rb index 0b59daed2..5f1a1a5fb 100644 --- a/spec/services/dossier_field_service_spec.rb +++ b/spec/services/dossier_field_service_spec.rb @@ -118,22 +118,6 @@ describe DossierFieldService do it { is_expected.to eq([older_dossier, recent_dossier].map(&:id)) } end - context 'for france_connect_information table' do - let(:table) { 'france_connect_information' } - let(:column) { 'given_name' } # All other columns work the same, no extra test required - let(:order) { 'asc' } # Desc works the same, no extra test required - - let(:anna_dossier) { create(:dossier, procedure: procedure) } - let(:zacharie_dossier) { create(:dossier, procedure: procedure) } - - before do - create(:france_connect_information, given_name: 'Anna', user: anna_dossier.user) - create(:france_connect_information, given_name: 'Zacharie', user: zacharie_dossier.user) - end - - it { is_expected.to eq([anna_dossier, zacharie_dossier].map(&:id)) } - end - context 'for type_de_champ table' do let(:table) { 'type_de_champ' } let(:column) { procedure.types_de_champ.first.id.to_s } @@ -202,17 +186,6 @@ describe DossierFieldService do it { is_expected.to eq('bla@yopmail.com') } end - context 'for france_connect_information table' do - let(:table) { 'france_connect_information' } - let(:column) { 'given_name' } # All other columns work the same, no extra test required - - let(:dossier) { create(:dossier, procedure: procedure) } - - before { create(:france_connect_information, given_name: 'Anna', user: dossier.user) } - - it { is_expected.to eq('Anna') } - end - context 'for etablissement table' do let(:table) { 'etablissement' } let(:column) { 'code_postal' } # All other columns work the same, no extra test required From 14c8e02aca2e19926405ed1b7e11a3e779ae26e2 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 1 Oct 2018 13:09:29 +0200 Subject: [PATCH 4/6] [Fixes #2597] Remove given_name and family_name delegation --- app/assets/images/logo_mini_FC.png | Bin 25391 -> 0 bytes app/assets/stylesheets/application.scss | 12 ------------ app/models/user.rb | 2 +- app/views/users/_login_banner.html.haml | 15 +++------------ vendor/assets/stylesheets/franceconnect.scss | 9 --------- 5 files changed, 4 insertions(+), 34 deletions(-) delete mode 100644 app/assets/images/logo_mini_FC.png diff --git a/app/assets/images/logo_mini_FC.png b/app/assets/images/logo_mini_FC.png deleted file mode 100644 index b388bc6927f9036ced708f0f35c4d3c21f63e505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25391 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 diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 5ba2309b1..9edbc7ce4 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -238,18 +238,6 @@ div.pagination { left: 23% !important; } -#fconnect-profile { - margin-top: 5px; - display: inline-block; - - a { - color: #3471A9 !important; - text-decoration: none; - font-size: 16px !important; - margin-right: 0px !important; - } -} - .no-padding { padding: 0; } diff --git a/app/models/user.rb b/app/models/user.rb index ec69e9b6c..5dbae7119 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -19,7 +19,7 @@ class User < ApplicationRecord has_many :feedbacks, dependent: :destroy has_one :france_connect_information, dependent: :destroy - delegate :given_name, :family_name, :email_france_connect, :gender, :birthdate, :birthplace, :france_connect_particulier_id, to: :france_connect_information + delegate :email_france_connect, :gender, :birthdate, :birthplace, :france_connect_particulier_id, to: :france_connect_information accepts_nested_attributes_for :france_connect_information before_validation -> { sanitize_email(:email) } diff --git a/app/views/users/_login_banner.html.haml b/app/views/users/_login_banner.html.haml index 12d2b2459..522cb0c0f 100644 --- a/app/views/users/_login_banner.html.haml +++ b/app/views/users/_login_banner.html.haml @@ -1,12 +1,3 @@ -- if current_user.loged_in_with_france_connect? - #fconnect-profile{ "data-fc-logout-url" => '/users/sign_out" data-method="delete' } - %a.text-info{ href: "#" } - = "#{current_user.given_name} #{current_user.family_name}" - = link_to "/users/sign_out", method: :delete do - %span.fa.fa-sign-out - Se déconnecter - -- else - = link_to "/users/sign_out", method: :delete do - %span.fa.fa-sign-out - Se déconnecter += link_to "/users/sign_out", method: :delete do + %span.fa.fa-sign-out + Se déconnecter diff --git a/vendor/assets/stylesheets/franceconnect.scss b/vendor/assets/stylesheets/franceconnect.scss index 892aaf840..5a74703d4 100644 --- a/vendor/assets/stylesheets/franceconnect.scss +++ b/vendor/assets/stylesheets/franceconnect.scss @@ -39,15 +39,6 @@ width: 38px; } -#fconnect-profile > a { - padding: 15px 0 15px 50px; - color: #ffffff; - margin-right: 10px; - font-size: 18px; - background: image-url('logo_mini_FC.png') left center no-repeat; - background-size: 40px; -} - #fconnect-access { all: initial; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; From 36ce94195bb2efd5259306b73997d91293c31822 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 1 Oct 2018 13:10:36 +0200 Subject: [PATCH 5/6] Remove france_connect delegation on User --- app/models/user.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 5dbae7119..d6d55c9f3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -19,7 +19,6 @@ class User < ApplicationRecord has_many :feedbacks, dependent: :destroy has_one :france_connect_information, dependent: :destroy - delegate :email_france_connect, :gender, :birthdate, :birthplace, :france_connect_particulier_id, to: :france_connect_information accepts_nested_attributes_for :france_connect_information before_validation -> { sanitize_email(:email) } From 826117bcb42a59620b5bfb67bbb2cb2ced87f8bc Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Wed, 3 Oct 2018 15:41:11 +0200 Subject: [PATCH 6/6] Migrate now obsolete displayed fields, filters and sorts --- ...remove_fc_from_procedure_presentation.rake | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 lib/tasks/2018_10_03_remove_fc_from_procedure_presentation.rake diff --git a/lib/tasks/2018_10_03_remove_fc_from_procedure_presentation.rake b/lib/tasks/2018_10_03_remove_fc_from_procedure_presentation.rake new file mode 100644 index 000000000..54a2a556e --- /dev/null +++ b/lib/tasks/2018_10_03_remove_fc_from_procedure_presentation.rake @@ -0,0 +1,52 @@ +namespace :'2018_10_03_remove_fc_from_procedure_presentation' do + task run: :environment do + Class.new do + def run + fix_displayed_fields + fix_sort + fix_filters + end + + def fix_displayed_fields + ProcedurePresentation.where(%q`displayed_fields @> '[{"table": "france_connect_information"}]'`).each do |procedure_presentation| + procedure_presentation.displayed_fields = procedure_presentation.displayed_fields.reject do |df| + df['table'] == 'france_connect_information' + end + + procedure_presentation.save(validate: false) + end + end + + def fix_sort + ProcedurePresentation.where(%q`sort @> '{"table": "france_connect_information"}'`).each do |procedure_presentation| + procedure_presentation.sort = { + "order" => "desc", + "table" => "notifications", + "column" => "notifications" + } + + procedure_presentation.save(validate: false) + end + end + + def fix_filters + ProcedurePresentation.find_by_sql( + <<~SQL + SELECT procedure_presentations.* + FROM procedure_presentations, LATERAL jsonb_each(filters) + WHERE value @> '[{"table": "france_connect_information"}]' + GROUP BY id; + SQL + ).each do |procedure_presentation| + procedure_presentation.filters.keys.each do |key| + procedure_presentation.filters[key] = procedure_presentation.filters[key].reject do |filter| + filter['table'] == 'france_connect_information' + end + end + + procedure_presentation.save + end + end + end.new.run + end +end