Merge pull request #9237 from demarches-simplifiees/cleaning-after-new-routing-logic

Nettoyage du code de l'ancien système de routage
This commit is contained in:
Eric Leroy-Terquem 2023-07-03 13:12:08 +00:00 committed by GitHub
commit 36a78dfd2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 26 additions and 153 deletions

View file

@ -282,15 +282,6 @@ module Administrateurs
end
end
def update_routing_criteria_name
if procedure.update(routing_criteria_name: routing_criteria_name)
flash[:notice] = "Le libellé est maintenant « #{procedure.routing_criteria_name} »."
else
flash[:alert] = "Le libellé du routage doit être rempli."
end
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
end
def update_instructeurs_self_management_enabled
procedure.update!(instructeurs_self_management_enabled_params)
@ -415,10 +406,6 @@ module Administrateurs
.order(:email)
end
def routing_criteria_name
params[:procedure][:routing_criteria_name]
end
def available_instructeur_emails
all = current_administrateur.instructeurs.map(&:email)
assigned = groupe_instructeur.instructeurs.map(&:email)

View file

@ -487,32 +487,6 @@ module Users
redirect_to dossier_path(dossier)
end
def should_change_groupe_instructeur?
if params[:dossier].key?(:groupe_instructeur_id)
groupe_instructeur_id = params[:dossier][:groupe_instructeur_id]
if groupe_instructeur_id.nil?
@dossier.groupe_instructeur_id.present?
else
@dossier.groupe_instructeur_id != groupe_instructeur_id.to_i
end
end
end
def groupe_instructeur_from_params
groupe_instructeur_id = params[:dossier][:groupe_instructeur_id]
if groupe_instructeur_id.present?
@dossier.procedure.groupe_instructeurs.find(groupe_instructeur_id)
end
end
def should_fill_groupe_instructeur?
!@dossier.procedure.routing_enabled? && @dossier.groupe_instructeur_id.nil?
end
def defaut_groupe_instructeur
@dossier.procedure.defaut_groupe_instructeur
end
def update_dossier_and_compute_errors
errors = []
@dossier.assign_attributes(champs_public_params)
@ -523,10 +497,6 @@ module Users
errors += format_errors(errors: @dossier.errors)
end
if should_change_groupe_instructeur?
@dossier.assign_to_groupe_instructeur(groupe_instructeur_from_params)
end
errors
end
@ -537,10 +507,6 @@ module Users
errors += format_errors(errors: @dossier.errors)
errors += format_errors(errors: @dossier.check_mandatory_and_visible_champs)
if should_fill_groupe_instructeur?
@dossier.assign_to_groupe_instructeur(defaut_groupe_instructeur)
end
RoutingEngine.compute(@dossier)
errors

View file

@ -56,6 +56,8 @@ class Dossier < ApplicationRecord
include DossierSearchableConcern
include DossierSectionsConcern
self.ignored_columns += [:migrated_champ_routage]
enum state: {
brouillon: 'brouillon',
en_construction: 'en_construction',
@ -664,14 +666,6 @@ class Dossier < ApplicationRecord
procedure.discarded? || (brouillon? && !procedure.dossier_can_transition_to_en_construction?)
end
def show_groupe_instructeur_details?
procedure.routing_enabled? && groupe_instructeur.present? && (!procedure.feature_enabled?(:procedure_routage_api) || !defaut_groupe_instructeur?) && !procedure.feature_enabled?(:routing_rules)
end
def show_groupe_instructeur_selector?
procedure.routing_enabled? && !procedure.feature_enabled?(:procedure_routage_api) && !procedure.feature_enabled?(:routing_rules)
end
def assign_to_groupe_instructeur(groupe_instructeur, author = nil)
return if groupe_instructeur.present? && groupe_instructeur.procedure != procedure
return if self.groupe_instructeur == groupe_instructeur

View file

@ -69,7 +69,14 @@ class Procedure < ApplicationRecord
include Discard::Model
self.discard_column = :hidden_at
self.ignored_columns += [:direction, :durees_conservation_required, :cerfa_flag, :test_started_at, :lien_demarche]
self.ignored_columns += [
:direction,
:durees_conservation_required,
:cerfa_flag,
:test_started_at,
:lien_demarche,
:migrated_champ_routage
]
default_scope -> { kept }
@ -356,7 +363,6 @@ class Procedure < ApplicationRecord
validates :api_entreprise_token, jwt_token: true, allow_blank: true
validates :api_particulier_token, format: { with: /\A[A-Za-z0-9\-_=.]{15,}\z/ }, allow_blank: true
validate :validate_auto_archive_on_in_the_future, if: :will_save_change_to_auto_archive_on?
validates :routing_criteria_name, presence: true, allow_blank: false
before_save :update_juridique_required
after_initialize :ensure_path_exists

View file

@ -13,6 +13,7 @@
#
class ProcedureRevision < ApplicationRecord
self.implicit_order_column = :created_at
self.ignored_columns += [:migrated_champ_routage]
belongs_to :procedure, -> { with_discarded }, inverse_of: :revisions, optional: false
belongs_to :dossier_submitted_message, inverse_of: :revisions, optional: true, dependent: :destroy

View file

@ -1,6 +1,5 @@
module RoutingEngine
def self.compute(dossier)
return if !dossier.procedure.feature_enabled?(:routing_rules)
return if dossier.forced_groupe_instructeur
matching_groupe = dossier.procedure.groupe_instructeurs.active.reject(&:routing_to_configure?).find do |gi|

View file

@ -1,15 +1 @@
- if dossier.show_groupe_instructeur_details?
.fr-my-4v.fr-px-4v
.flex
%p.champ-label.flex-grow= dossier.procedure.routing_criteria_name
%p.fr-mb-0.fr-text--xs
- if demande_seen_at && dossier.groupe_instructeur_updated_at && demande_seen_at < dossier.groupe_instructeur_updated_at
%span.fr-badge.fr-badge--sm{ class: badge_class_if_unseen(demande_seen_at, dossier.groupe_instructeur_updated_at) }
= t(:updated_at, scope: [:views, :shared, :dossiers, :form], datetime: try_format_datetime(dossier.groupe_instructeur_updated_at))
.champ-content{ class: highlight_if_unseen_class(demande_seen_at, dossier.groupe_instructeur_updated_at) }
%p= dossier.groupe_instructeur.label
= render ViewableChamp::SectionComponent.new(champs: champs, demande_seen_at: demande_seen_at, profile: profile)

View file

@ -19,15 +19,6 @@
- if dossier.procedure.notice.attached?
= render Dsfr::DownloadComponent.new(attachment: dossier.procedure.notice , url: notice_url(dossier.procedure), name: t("views.shared.dossiers.edit.notice"), ephemeral_link: administrateur_signed_in?)
- if dossier.show_groupe_instructeur_selector?
%span{ data: { controller: 'autosave' } }
= f.label :groupe_instructeur_id do
= dossier.procedure.routing_criteria_name
%span.mandatory *
= f.select :groupe_instructeur_id,
dossier.procedure.groupe_instructeurs.active.map { |gi| [gi.label, gi.id] },
{ include_blank: dossier.brouillon? }
= render EditableChamp::SectionComponent.new(champs: dossier_for_editing.champs_public)
- if dossier.pending_correction?

View file

@ -17,7 +17,6 @@ features = [
:dossier_pdf_vide,
:hide_instructeur_email,
:procedure_routage_api,
:routing_rules,
:groupe_instructeur_api_hack,
:rerouting
]

View file

@ -31,7 +31,6 @@ en:
declarative_with_state/en_instruction: Instruction
declarative_with_state/accepte: Accepted
api_particulier_token: Token API Particulier
routing_criteria_name: Routing criteria name
initiated_mail: File sorted for processing notification email
received_mail: File submitted notification email
closed_mail: File sorted as accepted notification email

View file

@ -37,7 +37,6 @@ fr:
declarative_with_state/en_instruction: En instruction
declarative_with_state/accepte: Accepté
api_particulier_token: Jeton API Particulier
routing_criteria_name: Nomination du routage
initiated_mail: Lemail de notification de passage de dossier en instruction
received_mail: Lemail de notification de dépôt de dossier
closed_mail: Lemail de notification dacceptation de dossier

View file

@ -58,37 +58,3 @@ fr:
procedures: Démarches
simple_routing:
procedures: Démarches
edit:
routing:
title: Libellé de la liste de groupes
group_management:
title: Gestion des Groupes
delete: supprimer le groupe
delete_confirmation: Êtes-vous sûr de vouloir supprimer le groupe "%{group_name}"
move_files:
zero: déplacer les dossiers en brouillon
one: déplacer un dossier
other: déplacer les %{count} dossiers
move_files_confirmation: Réaffecter les dossiers à un autre groupe afin de pouvoir le supprimer
add_a_group:
title: Ajouter un nom de groupe
notice: Ce groupe sera un choix de la liste "%{routing_criteria_name}"
csv_import:
link_text: exemple de fichier
instructeurs_file_path: /csv/import-instructeurs-test.csv
groupes_file_path: /csv/fr/import-groupe-test.csv
view: voir
set_up: paramétrer
button:
add_group: Ajouter le groupe
rename: Renommer
existing_groupe:
one: "%{count} groupe existe"
other: "%{count} groupes existent"
routing:
title: Routage
notice_html: |
Le routage permet dacheminer les dossiers vers différents groupes dinstructeurs. Il sactive automatiquement dès quune démarche compte au moins deux groupes actifs.
button:
self_managment_toggle: Activer lautogestion des instructeurs
add_group: Ajouter le groupe

View file

@ -542,7 +542,6 @@ Rails.application.routes.draw do
get 'simple_routing'
post 'create_simple_routing'
delete 'destroy_all_groups_but_defaut'
patch 'update_routing_criteria_name'
patch 'update_instructeurs_self_management_enabled'
post 'import'
get 'export_groupe_instructeurs'

View file

@ -692,18 +692,6 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
end
end
describe '#update_routing_criteria_name' do
before do
patch :update_routing_criteria_name,
params: {
procedure_id: procedure.id,
procedure: { routing_criteria_name: 'new name !' }
}
end
it { expect(procedure.reload.routing_criteria_name).to eq('new name !') }
end
describe '#create_simple_routing' do
let!(:procedure3) do
create(:procedure,

View file

@ -242,7 +242,7 @@ describe Instructeur, type: :model do
end
describe '#notifications_for_groupe_instructeurs' do
# a procedure, one group, 2 instructeurs
# a procedure, two groups, 2 instructeurs
let(:procedure) { create(:simple_procedure, :routee, :with_type_de_champ_private, :for_individual) }
let(:gi_p1) { procedure.groupe_instructeurs.last }
let!(:dossier) { create(:dossier, :en_construction, :with_individual, :followed, procedure: procedure, groupe_instructeur: gi_p1) }

View file

@ -1,8 +1,6 @@
describe RoutingEngine, type: :model do
include Logic
before { Flipper.enable(:routing_rules, procedure) }
describe '.compute' do
let(:procedure) do
create(:procedure,

View file

@ -20,7 +20,6 @@ describe 'The routing with rules', js: true do
let(:artistique_user) { create(:user, password: password) }
before do
Flipper.enable(:routing_rules, procedure)
procedure.defaut_groupe_instructeur.instructeurs << administrateur.instructeur
end

View file

@ -59,18 +59,11 @@ describe 'shared/dossiers/champs', type: :view do
context "with a routed procedure" do
let(:procedure) do
create(:procedure,
:routee,
routing_criteria_name: 'departement')
create(:procedure, :routee)
end
let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
let(:champs) { [] }
it "renders the routing criteria name and its value" do
expect(subject).to include(procedure.routing_criteria_name)
expect(subject).to include(dossier.groupe_instructeur.label)
end
context "with seen_at" do
let(:dossier) { create(:dossier) }
let(:nouveau_groupe_instructeur) { create(:groupe_instructeur, procedure: dossier.procedure) }

View file

@ -132,16 +132,19 @@ describe 'shared/dossiers/edit', type: :view do
end
context 'with a routed procedure' do
let(:procedure) do
create(:procedure,
:routee,
routing_criteria_name: 'departement')
let(:procedure_routee) do
create(:procedure, :routee)
end
let(:dossier) { create(:dossier, procedure: procedure) }
let(:champs) { [] }
let!(:drop_down_tdc) { create(:type_de_champ_drop_down_list, procedure: procedure_routee, drop_down_options: options) }
let(:options) { procedure_routee.groupe_instructeurs.pluck(:label) }
let(:dossier) { create(:dossier, procedure: procedure_routee) }
let(:champs) { [champ_drop_down] }
let(:champ_drop_down) { create(:champ_drop_down_list, dossier: dossier, type_de_champ: drop_down_tdc, value: options.first) }
it 'renders the routing criteria name and its value' do
expect(subject).to have_field(procedure.routing_criteria_name)
before { dossier.champs_public << champs }
it 'renders the libelle of the type de champ used for routing' do
expect(subject).to include(champ_drop_down.libelle)
end
context 'when groupe instructeur is selected' do
@ -149,8 +152,8 @@ describe 'shared/dossiers/edit', type: :view do
dossier.groupe_instructeur = dossier.procedure.defaut_groupe_instructeur
end
it 'renders the routing criteria name and its value' do
expect(subject).to have_field(procedure.routing_criteria_name)
it 'renders the routing libelle and its value' do
expect(subject).to include(champ_drop_down.libelle)
expect(subject).to include(dossier.groupe_instructeur.label)
end
end