Merge pull request #8462 from colinux/fix-not-terminable-dossier-having-incomplete-etablissement

Fix: prévient l'instructeur lorsqu'un dossier n'est pas terminable à cause de champ SIRET incomplet
This commit is contained in:
Colin Darie 2023-01-18 19:37:31 +01:00 committed by GitHub
commit 40ca336750
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 13 deletions

View file

@ -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 nont pas pu encore être vérifiées : il nest 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 nest pas possible de le passer #{dossier_display_state(target_state, lower: true)}."

View file

@ -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

View file

@ -1,12 +1,20 @@
class SerializerService
def self.dossier(dossier)
data = execute_query('serializeDossier', { number: dossier.id })
data && data['dossier']
Sentry.with_scope do |scope|
scope.set_tags(dossier_id: dossier.id)
data = execute_query('serializeDossier', { number: dossier.id })
data && data['dossier']
end
end
def self.dossiers(procedure)
data = execute_query('serializeDossiers', { number: procedure.id })
data && data['demarche']['dossiers']
Sentry.with_scope do |scope|
scope.set_tags(procedure_id: procedure.id)
data = execute_query('serializeDossiers', { number: procedure.id })
data && data['demarche']['dossiers']
end
end
def self.demarches_publiques(after: nil)
@ -20,12 +28,16 @@ class SerializerService
end
def self.champ(champ)
if champ.private?
data = execute_query('serializeAnnotation', { number: champ.dossier_id, id: champ.to_typed_id })
data && data['dossier']['annotations'].first
else
data = execute_query('serializeChamp', { number: champ.dossier_id, id: champ.to_typed_id })
data && data['dossier']['champs'].first
Sentry.with_scope do |scope|
scope.set_tags(champ_id: champ.id)
if champ.private?
data = execute_query('serializeAnnotation', { number: champ.dossier_id, id: champ.to_typed_id })
data && data['dossier']['annotations'].first
else
data = execute_query('serializeChamp', { number: champ.dossier_id, id: champ.to_typed_id })
data && data['dossier']['champs'].first
end
end
end

View file

@ -2,7 +2,16 @@
%table.table.vertical.dossier-champs{ role: :presentation }
%tbody
%tr
%td.libelle{ colspan: 2 } ⚠ LʼINSEE est indisponible, les informations sur lʼentreprise arriveront dʼici quelques heures.
%td{ colspan: 2 }
.fr-alert.fr-alert--warning.fr-alert--sm
%p
LʼINSEE est indisponible, les informations sur lʼentreprise arriveront dʼici quelques heures.
- if profile == "instructeur"
%br
Il nʼest pas possible dʼaccepter ou de refuser un dossier sans cette étape.
%tr
%td.libelle SIRET :
%td= etablissement.siret

View file

@ -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