Ajoute hide_instructeurs_identity sur Procedures et dans l'interface admin

This commit is contained in:
Kara Diaby 2024-08-28 12:40:16 +00:00
parent 0b8212f151
commit c86ad15b8c
No known key found for this signature in database
GPG key ID: C4D1B0CF9F24D759
7 changed files with 113 additions and 0 deletions

View file

@ -15,6 +15,17 @@
hint: "Lautogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ 'Nous recommandons de laisser lautogestion des instructeurs activée.' if @procedure.routing_enabled? }", hint: "Lautogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ 'Nous recommandons de laisser lautogestion des instructeurs activée.' if @procedure.routing_enabled? }",
disabled: false) disabled: false)
%li
= form_for @procedure,
method: :patch,
url: update_hide_instructeurs_email_admin_procedure_groupe_instructeurs_path(@procedure),
data: { controller: 'autosubmit', turbo: 'true' } do |f|
= render Dsfr::ToggleComponent.new(form: f,
target: :hide_instructeurs_email,
title: "Anonymat des instructeurs",
hint: "Permet de cacher l'adresse mail des instructeurs aux usagers lors de leurs interactions par le biais de la messagerie. Cette option est à activer pour les démarches sensibles.",
disabled: false)
%hr %hr
%p.fr-mt-2w Routage %p.fr-mt-2w Routage
%p.fr-mt-2w= t('.routing_configuration_notice_1') %p.fr-mt-2w= t('.routing_configuration_notice_1')

View file

@ -320,6 +320,13 @@ module Administrateurs
notice: "Lautogestion des instructeurs est #{procedure.instructeurs_self_management_enabled? ? "activée" : "désactivée"}." notice: "Lautogestion des instructeurs est #{procedure.instructeurs_self_management_enabled? ? "activée" : "désactivée"}."
end end
def update_hide_instructeurs_email
procedure.update!(hide_instructeurs_email_params)
redirect_to options_admin_procedure_groupe_instructeurs_path(procedure),
notice: "L'anonymisation des instructeurs est #{procedure.hide_instructeurs_email? ? "activée" : "désactivée"}."
end
def import def import
if procedure.publiee_or_close? if procedure.publiee_or_close?
if !CSV_ACCEPTED_CONTENT_TYPES.include?(csv_file.content_type) && !CSV_ACCEPTED_CONTENT_TYPES.include?(marcel_content_type) if !CSV_ACCEPTED_CONTENT_TYPES.include?(csv_file.content_type) && !CSV_ACCEPTED_CONTENT_TYPES.include?(marcel_content_type)
@ -463,6 +470,10 @@ module Administrateurs
params.require(:procedure).permit(:instructeurs_self_management_enabled) params.require(:procedure).permit(:instructeurs_self_management_enabled)
end end
def hide_instructeurs_email_params
params.require(:procedure).permit(:hide_instructeurs_email)
end
def routing_enabled_params def routing_enabled_params
{ routing_enabled: params.require(:routing) == 'enable' } { routing_enabled: params.require(:routing) == 'enable' }
end end

View file

@ -669,6 +669,7 @@ Rails.application.routes.draw do
post 'create_simple_routing' post 'create_simple_routing'
delete 'destroy_all_groups_but_defaut' delete 'destroy_all_groups_but_defaut'
patch 'update_instructeurs_self_management_enabled' patch 'update_instructeurs_self_management_enabled'
patch 'update_hide_instructeurs_email'
post 'import' post 'import'
get 'export_groupe_instructeurs' get 'export_groupe_instructeurs'
end end

View file

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddHideInstructeurEmailToProcedures < ActiveRecord::Migration[7.0]
def change
add_column :procedures, :hide_instructeurs_email, :boolean, default: false, null: false
end
end

View file

@ -942,6 +942,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_08_29_141049) do
t.boolean "for_tiers_enabled", default: true, null: false t.boolean "for_tiers_enabled", default: true, null: false
t.datetime "hidden_at", precision: nil t.datetime "hidden_at", precision: nil
t.datetime "hidden_at_as_template", precision: nil t.datetime "hidden_at_as_template", precision: nil
t.boolean "hide_instructeurs_email", default: false, null: false
t.boolean "instructeurs_self_management_enabled", default: false t.boolean "instructeurs_self_management_enabled", default: false
t.boolean "juridique_required", default: true t.boolean "juridique_required", default: true
t.string "libelle" t.string "libelle"

View file

@ -0,0 +1,45 @@
# frozen_string_literal: true
namespace :after_party do
desc 'Deployment task: backfill_hide_instructeurs_email'
task backfill_hide_instructeurs_email: :environment do
puts "Running deploy task 'backfill_hide_instructeurs_email'"
feature_name = "hide_instructeur_email"
feature = Flipper.feature(feature_name)
gates = Flipper::Adapters::ActiveRecord::Gate
.where(feature_key: feature.key, key: 'actors')
total_gates = gates.count
progress = ProgressReport.new(total_gates)
puts 'Collecte des démarches avec le feature flag'
procedure_ids = gates.ids
puts procedure_ids
progress.finish
puts progress
puts "Mise à jour des #{procedure_ids.size} démarches"
update_progress = ProgressReport.new(procedure_ids.size)
Procedure.where(id: procedure_ids).in_batches(of: 500) do |batch|
batch.update_all(hide_instructeurs_email: true)
update_progress.inc(batch.size)
puts update_progress
end
update_progress.finish
puts update_progress
puts "Suppression du feature flag '#{feature_name}'"
Flipper.remove(feature_name)
puts "Feature flag '#{feature_name}' supprimé avec succès"
AfterParty::TaskRecord
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
end
end

View file

@ -995,4 +995,41 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
expect(gi_1_1.signature).to be_attached expect(gi_1_1.signature).to be_attached
end end
end end
describe '#update_hide_instructeurs_email' do
let(:administrateur) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, administrateurs: [administrateur]) }
before do
sign_in(administrateur.user)
end
context 'when activating hide_instructeurs_email' do
it 'updates the procedure and redirects with correct notice' do
patch :update_hide_instructeurs_email, params: {
procedure_id: procedure.id,
procedure: { hide_instructeurs_email: "1" }
}
expect(procedure.reload.hide_instructeurs_email).to be true
expect(response).to redirect_to(options_admin_procedure_groupe_instructeurs_path(procedure))
expect(flash[:notice]).to eq("L'anonymisation des instructeurs est activée.")
end
end
context 'when deactivating hide_instructeurs_email' do
let(:procedure) { create(:procedure, hide_instructeurs_email: true, administrateurs: [administrateur]) }
it 'updates the procedure and redirects with correct notice' do
patch :update_hide_instructeurs_email, params: {
procedure_id: procedure.id,
procedure: { hide_instructeurs_email: "0" }
}
expect(procedure.reload.hide_instructeurs_email).to be false
expect(response).to redirect_to(options_admin_procedure_groupe_instructeurs_path(procedure))
expect(flash[:notice]).to eq("L'anonymisation des instructeurs est désactivée.")
end
end
end
end end