diff --git a/app/controllers/instructeurs/dossiers_controller.rb b/app/controllers/instructeurs/dossiers_controller.rb index 79579a79a..db2f996f3 100644 --- a/app/controllers/instructeurs/dossiers_controller.rb +++ b/app/controllers/instructeurs/dossiers_controller.rb @@ -315,7 +315,7 @@ module Instructeurs def aasm_error_message(exception, target_state:) if exception.originating_state == target_state "Le dossier est déjà #{dossier_display_state(target_state, lower: true)}." - elsif exception.failures.include?(:can_terminer?) + elsif exception.failures.include?(:can_terminer?) && dossier.any_etablissement_as_degraded_mode? "Les données relatives au SIRET de ce dossier n’ont pas pu encore être vérifiées : il n’est pas possible de le passer #{dossier_display_state(target_state, lower: true)}." else "Le dossier est en ce moment #{dossier_display_state(exception.originating_state, lower: true)} : il n’est pas possible de le passer #{dossier_display_state(target_state, lower: true)}." diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 794e46400..9ba6b74c0 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -540,7 +540,7 @@ class Dossier < ApplicationRecord end def can_terminer? - return false if etablissement&.as_degraded_mode? + return false if any_etablissement_as_degraded_mode? true end @@ -569,6 +569,13 @@ class Dossier < ApplicationRecord termine? || reason == :procedure_removed end + def any_etablissement_as_degraded_mode? + return true if etablissement&.as_degraded_mode? + return true if champs_public_all.any? { _1.etablissement&.as_degraded_mode? } + + false + end + def messagerie_available? visible_by_administration? && !hidden_by_user? && !user_deleted? && !archived end diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 9b1f509df..e78a3f9ba 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -1192,6 +1192,21 @@ describe Dossier do expect(dossier_ok.accepter_automatiquement(instructeur:, motivation:)).to be_truthy end end + + context "when a SIRET champ has etablissement in degraded mode" do + let(:dossier_incomplete) { create(:dossier, :en_instruction) } + let(:dossier_ok) { create(:dossier, :en_instruction) } + + before do + dossier_incomplete.champs_public << create(:champ_siret, dossier: dossier_incomplete, etablissement: Etablissement.new(siret: build(:etablissement).siret)) + dossier_ok.champs_public << create(:champ_siret, dossier: dossier_ok) + end + + it "can't accepter" do + expect(dossier_incomplete.may_accepter?(instructeur:, motivation:)).to be_falsey + expect(dossier_ok.may_accepter?(instructeur:, motivation:)).to be_truthy + end + end end describe "#check_mandatory_and_visible_champs" do