From 256a9e9bb59f4634305076eafb4f0b2ff9a6b10e Mon Sep 17 00:00:00 2001 From: tnicolas1 Date: Tue, 8 Oct 2024 15:54:39 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20possibilit=C3=A9=20de=20reten?= =?UTF-8?q?ter=20l'envoi=20en=20paiement=20lors=20de=20la=20mise=20=C3=A0?= =?UTF-8?q?=20jour=20des=20coordonn=C3=A9es=20bancaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ribs_controller.rb | 10 ++++++++++ app/controllers/schoolings_controller.rb | 4 ++-- app/models/asp/payment_request.rb | 15 ++++++++++++--- features/saisie_de_coordonnees_bancaires.feature | 10 ++++++++++ spec/requests/schoolings_controller_spec.rb | 2 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/controllers/ribs_controller.rb b/app/controllers/ribs_controller.rb index 70f483d7a..e415f3983 100644 --- a/app/controllers/ribs_controller.rb +++ b/app/controllers/ribs_controller.rb @@ -33,6 +33,8 @@ def update @rib = @student.create_new_rib(rib_params) if @rib.save + retry_eligible_payment_requests! + redirect_to student_path(@student), notice: t(".success") else @@ -147,4 +149,12 @@ def check_establishment! def rib_is_readonly redirect_to student_path(@student), alert: t("flash.ribs.readonly", name: @student.full_name) end + + # TODO: Factoriser avec 'retry_eligible_payment_requests!' de 'schoolings_controller' + def retry_eligible_payment_requests! + @student.pfmps.in_state(:validated).each do |pfmp| + p_r = pfmp.latest_payment_request + p_r.mark_ready! if p_r&.eligible_for_auto_retry? + end + end end diff --git a/app/controllers/schoolings_controller.rb b/app/controllers/schoolings_controller.rb index dc2fa5641..98c4825f0 100644 --- a/app/controllers/schoolings_controller.rb +++ b/app/controllers/schoolings_controller.rb @@ -12,7 +12,7 @@ class SchoolingsController < ApplicationController def abrogate_decision GenerateAbrogationDecisionJob.perform_now(@schooling) - retry_eligibile_payment_requests! + retry_eligible_payment_requests! redirect_to student_path(@schooling.student), notice: t("flash.da.abrogated", name: @schooling.student.full_name) @@ -69,7 +69,7 @@ def set_classe alert: t("errors.classes.not_found") and return end - def retry_eligibile_payment_requests! + def retry_eligible_payment_requests! @schooling.pfmps.in_state(:validated).each do |pfmp| payment_request = pfmp.latest_payment_request payment_request.mark_ready! if payment_request&.eligible_for_auto_retry? diff --git a/app/models/asp/payment_request.rb b/app/models/asp/payment_request.rb index ce0ae93a5..d1839cbee 100644 --- a/app/models/asp/payment_request.rb +++ b/app/models/asp/payment_request.rb @@ -117,13 +117,22 @@ def active? !terminated? end + # rubocop:disable Metrics/AbcSize def eligible_for_auto_retry? - return false unless in_state?(:incomplete) - retryable_messages = RETRYABLE_INCOMPLETE_VALIDATION_TYPES.map do |r| I18n.t("activerecord.errors.models.asp/payment_request.attributes.ready_state_validation.#{r}") end - last_transition.metadata["incomplete_reasons"]["ready_state_validation"].intersect?(retryable_messages) + + if in_state?(:incomplete) + retryable_messages.intersect?(last_transition.metadata["incomplete_reasons"]["ready_state_validation"]) + elsif in_state?(:rejected) + retryable_messages.include?(last_transition.metadata["Motif rejet"]) + elsif in_state?(:unpaid) + retryable_messages.include?(last_transition.metadata["PAIEMENT"]["LIBELLEMOTIFINVAL"]) + else + false + end end + # rubocop:enable Metrics/AbcSize end end diff --git a/features/saisie_de_coordonnees_bancaires.feature b/features/saisie_de_coordonnees_bancaires.feature index 24626d068..40a80d72f 100644 --- a/features/saisie_de_coordonnees_bancaires.feature +++ b/features/saisie_de_coordonnees_bancaires.feature @@ -50,6 +50,16 @@ Fonctionnalité: Le personnel de direction saisit des coordonnées bancaires Et la page contient un bouton "Modifier les coordonnées bancaires" désactivé Et la page contient un bouton "Supprimer les coordonnées bancaires" désactivé + Scénario: Le personnel de direction peut relancer une demande de paiement en saisissant les coordonnées bancaires + Quand je consulte la classe de "2NDEB" + Et que je renseigne et valide une PFMP de 9 jours pour "Marie Curie" + Sachant que la dernière PFMP de "Marie Curie" en classe de "2NDEB" a une requête de paiement rejetée + Et que je clique sur "Modifier les coordonnées bancaires" + Quand je clique sur "Modifier les coordonnées bancaires" + Alors la page contient "Ces coordonnées bancaires ne sont pas modifiables" + Et la page contient un bouton "Modifier les coordonnées bancaires" désactivé + Et la page contient un bouton "Supprimer les coordonnées bancaires" désactivé + Scénario: Le personnel de direction ne peut pas accéder au RIB d'un élève s'il a été déclaré dans un autre établissement Sachant que je renseigne les coordonnées bancaires de l'élève "Marie Curie" de la classe "2NDEB" Et que l'élève "Marie Curie" a été transféré dans l'établissement "TEST" en classe "1EREB" diff --git a/spec/requests/schoolings_controller_spec.rb b/spec/requests/schoolings_controller_spec.rb index dc65bbe58..de18d10ec 100644 --- a/spec/requests/schoolings_controller_spec.rb +++ b/spec/requests/schoolings_controller_spec.rb @@ -34,7 +34,7 @@ end end - describe "retry_eligibile_payment_requests" do + describe "retry_eligible_payment_requests" do let(:expected_error_message) do I18n.t( "asp/payment_request.attributes.ready_state_validation.needs_abrogated_attributive_decision",