From 3cabf937677c647ea48cd10790a71875d03112ae Mon Sep 17 00:00:00 2001 From: tnicolas1 Date: Thu, 24 Oct 2024 15:28:55 +0200 Subject: [PATCH] =?UTF-8?q?Relance=20en=20paiement=20les=20PFMPs=20bloqu?= =?UTF-8?q?=C3=A9es=20pour=20des=20motifs=20li=C3=A9s=20=C3=A0=20l'adresse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ribs_controller.rb | 2 +- app/jobs/sync/student_job.rb | 17 +++++++++++++++++ app/models/asp/payment_request.rb | 4 ++-- app/models/student.rb | 1 + spec/models/asp/payment_request_spec.rb | 8 ++++---- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/app/controllers/ribs_controller.rb b/app/controllers/ribs_controller.rb index dbb08ee5c..77fc1544e 100644 --- a/app/controllers/ribs_controller.rb +++ b/app/controllers/ribs_controller.rb @@ -152,7 +152,7 @@ def rib_is_readonly def retry_rejected_or_unpaid_payment_request! @student.pfmps.in_state(:validated).each do |pfmp| - if pfmp.latest_payment_request&.eligible_for_rejected_or_unpaid_auto_retry? + if pfmp.latest_payment_request&.eligible_for_rejected_or_unpaid_auto_retry?(%w[RIB BIC PAIEMENT]) p_r = PfmpManager.new(pfmp).create_new_payment_request! p_r.mark_ready! end diff --git a/app/jobs/sync/student_job.rb b/app/jobs/sync/student_job.rb index cb2d22a30..675910a3d 100644 --- a/app/jobs/sync/student_job.rb +++ b/app/jobs/sync/student_job.rb @@ -23,6 +23,8 @@ def fetch_student_data(schooling) api.fetch_resource(:student, ine: schooling.student.ine) .then { |data| map_student_attributes(data, api) } .then { |attributes| schooling.student.update!(attributes) } + + retry_rejected_or_unpaid_payment_request!(schooling.student) end def map_student_attributes(data, api) @@ -34,5 +36,20 @@ def map_student_attributes(data, api) .slice(*Student.updatable_attributes) .except(:ine) end + + def retry_rejected_or_unpaid_payment_request!(student) + if student.previous_changes.key?("address_line1") || + student.previous_changes.key?("address_line2") || + student.previous_changes.key?("address_city_insee_code") || + student.previous_changes.key?("address_country_code") + + student.pfmps.in_state(:validated).each do |pfmp| + if pfmp.latest_payment_request&.eligible_for_rejected_or_unpaid_auto_retry?(%w[ADRESSE PAYS]) + p_r = PfmpManager.new(pfmp).create_new_payment_request! + p_r.mark_ready! + end + end + end + end end end diff --git a/app/models/asp/payment_request.rb b/app/models/asp/payment_request.rb index d34585072..e6452207f 100644 --- a/app/models/asp/payment_request.rb +++ b/app/models/asp/payment_request.rb @@ -126,12 +126,12 @@ def eligible_for_incomplete_retry? last_transition.metadata["incomplete_reasons"]["ready_state_validation"].intersect?(retryable_messages) end - def eligible_for_rejected_or_unpaid_auto_retry? + def eligible_for_rejected_or_unpaid_auto_retry?(reasons) return false unless in_state?(:rejected) || in_state?(:unpaid) decorator = ActiveDecorator::Decorator.instance.decorate(self) message = in_state?(:rejected) ? decorator.rejected_reason : decorator.unpaid_reason - %w[RIB BIC PAIEMENT].any? { |word| message.upcase.include?(word) } + reasons.any? { |word| message.upcase.include?(word) } end end end diff --git a/app/models/student.rb b/app/models/student.rb index 8e3f22aab..1b73ef1eb 100644 --- a/app/models/student.rb +++ b/app/models/student.rb @@ -66,6 +66,7 @@ class Student < ApplicationRecord # rubocop:disable Metrics/ClassLength sourced_from_external_api :birthdate, :address_line1, + :address_line2, :address_postal_code, :address_city_insee_code, :address_country_code, diff --git a/spec/models/asp/payment_request_spec.rb b/spec/models/asp/payment_request_spec.rb index c8437686d..a2d7e04b2 100644 --- a/spec/models/asp/payment_request_spec.rb +++ b/spec/models/asp/payment_request_spec.rb @@ -170,7 +170,7 @@ let(:p_r) { create(:asp_payment_request, :rejected) } it "returns false" do - expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?).to be false + expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?(%w[RIB BIC PAIEMENT])).to be false end end @@ -180,7 +180,7 @@ end it "returns true" do - expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?).to be true + expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?(%w[RIB BIC PAIEMENT])).to be true end end @@ -188,7 +188,7 @@ let(:p_r) { create(:asp_payment_request, :unpaid) } it "returns false" do - expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?).to be false + expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?(%w[RIB BIC PAIEMENT])).to be false end end @@ -198,7 +198,7 @@ end it "returns true" do - expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?).to be true + expect(p_r.eligible_for_rejected_or_unpaid_auto_retry?(%w[RIB BIC PAIEMENT])).to be true end end end