Merge pull request #10430 from demarches-simplifiees/routing-when-autosave-dossier

ETQ usager je vois les infos de contact de mon groupe instructeur avant dépôt du dossier, une fois le(s) champ(s) de routage rempli(s)
This commit is contained in:
Eric Leroy-Terquem 2024-07-23 08:31:14 +00:00 committed by GitHub
commit e79a3b6aa2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 51 additions and 30 deletions

View file

@ -558,6 +558,10 @@ module Users
@dossier.update_champs_attributes(champs_public_attributes_params, :public, updated_by: current_user.email)
if @dossier.champs.any?(&:changed_for_autosave?)
@dossier.last_champ_updated_at = Time.zone.now
if @dossier.champs_public.any? { _1.changed_for_autosave? && _1.used_by_routing_rules? }
RoutingEngine.compute(@dossier)
end
end
# We save the dossier without validating fields, and if it is successful and the client

View file

@ -0,0 +1,30 @@
#contact_information
- service = dossier&.service || procedure.service
- if service.present?
%h3.fr-footer__top-cat= I18n.t('users.procedure_footer.managed_by.header')
.fr-footer__top-link.fr-pb-2w
%span{ lang: :fr }= service.pretty_nom
%div{ lang: :fr }
= render SimpleFormatComponent.new(service.adresse, class_names_map: {paragraph: 'fr-footer__content-desc'})
%h3.fr-footer__top-cat= I18n.t('users.procedure_footer.contact.header')
%ul.fr-footer__top-list
- if dossier.present? && dossier.messagerie_available?
%li
= link_to I18n.t('users.procedure_footer.contact.in_app_mail.link'), messagerie_dossier_path(dossier), class: 'fr-footer__top-link'
- elsif service.present?
%li
%span.fr-footer__top-link
= I18n.t('users.procedure_footer.contact.email.link')
= link_to service.email, "mailto:#{service.email}", class: "fr-footer__top-link"
- if service.present?
- if service.telephone.present? || service.horaires.present?
%li
- horaires = "#{I18n.t('users.procedure_footer.contact.schedule.prefix')}#{formatted_horaires(service.horaires)}"
- if service.telephone.present?
= link_to service.telephone_url, class: 'fr-footer__top-link' do
%p
= I18n.t('users.procedure_footer.contact.phone.link', service_telephone: service.telephone)
- if service.horaires.present?
%p
= horaires

View file

@ -1,37 +1,9 @@
%footer.fr-footer.footer-procedure#footer{ role: "contentinfo" }
- service = dossier&.service || procedure.service
.fr-footer__top.fr-mb-0
.fr-container
.fr-grid-row.fr-grid-row--start.fr-grid-row--gutters
.fr-col-12.fr-col-sm-4.fr-col-md-4
- if service.present?
%h3.fr-footer__top-cat= I18n.t('users.procedure_footer.managed_by.header')
.fr-footer__top-link.fr-pb-2w
%span{ lang: :fr }= service.pretty_nom
%div{ lang: :fr }
= render SimpleFormatComponent.new(service.adresse, class_names_map: {paragraph: 'fr-footer__content-desc'})
%h3.fr-footer__top-cat= I18n.t('users.procedure_footer.contact.header')
%ul.fr-footer__top-list
- if dossier.present? && dossier.messagerie_available?
%li
= link_to I18n.t('users.procedure_footer.contact.in_app_mail.link'), messagerie_dossier_path(dossier), class: 'fr-footer__top-link'
- elsif service.present?
%li
%span.fr-footer__top-link
= I18n.t('users.procedure_footer.contact.email.link')
= link_to service.email, "mailto:#{service.email}", class: "fr-footer__top-link"
- if service.present?
- if service.telephone.present? || service.horaires.present?
%li
- horaires = "#{I18n.t('users.procedure_footer.contact.schedule.prefix')}#{formatted_horaires(service.horaires)}"
- if service.telephone.present?
= link_to service.telephone_url, class: 'fr-footer__top-link' do
%p
= I18n.t('users.procedure_footer.contact.phone.link', service_telephone: service.telephone)
- if service.horaires.present?
%p
= horaires
= render partial: 'shared/dossiers/update_contact_information', locals: { dossier: dossier, procedure: procedure }
- politiques = politiques_conservation_de_donnees(procedure)
- if politiques.present?

View file

@ -5,3 +5,5 @@
= turbo_stream.append('contenu', render(Dossiers::InvalidIneligibiliteRulesComponent.new(dossier: @dossier)))
- else @ineligibilite_rules_is_computable
= turbo_stream.remove(dom_id(@dossier, :ineligibilite_rules_broken))
- if @dossier.champs.any? { _1.used_by_routing_rules? && params[:dossier][:champs_public_attributes].key?(_1.stable_id.to_s) }
= turbo_stream.update "contact_information", partial: 'shared/dossiers/update_contact_information', locals: { dossier: @dossier, procedure: @procedure }

View file

@ -125,6 +125,9 @@ describe 'The routing with rules', js: true do
expect(page).to have_text('Le groupe dinstructeurs « artistique » a été créé. ')
expect(procedure.groupe_instructeurs.count).to eq(4)
# add contact_information to all groupes instructeur
procedure.groupe_instructeurs.each { |gi| gi.update!(contact_information: create(:contact_information)) }
# publish
publish_procedure(procedure)
log_out
@ -267,9 +270,18 @@ describe 'The routing with rules', js: true do
# the old system should not be present
expect(page).not_to have_selector("#dossier_groupe_instructeur_id")
dossier = user.dossiers.first
expect(dossier.groupe_instructeur_id).to be_nil
expect(page).to have_text(procedure.service.nom)
choose(groupe)
wait_for_autosave
expect(dossier.reload.groupe_instructeur_id).not_to be_nil
expect(page).to have_text(dossier.service.nom)
expect(page).not_to have_text(procedure.service.nom)
click_on 'Déposer le dossier'
expect(page).to have_text('Merci')

View file

@ -674,7 +674,8 @@ describe 'The user' do
def champ_for(libelle)
champs = user_dossier.reload.champs_public
champs.find { |c| c.libelle == libelle }
champ = champs.find { |c| c.libelle == libelle }
champ.reload
end
def fill_individual