diff --git a/app/facades/classes_facade.rb b/app/facades/classes_facade.rb index abbe16d76..be932bc81 100644 --- a/app/facades/classes_facade.rb +++ b/app/facades/classes_facade.rb @@ -43,12 +43,24 @@ def nb_pfmps(class_id, state) pfmps_by_classe_and_state.dig(class_id, state.to_s) || 0 end + def nb_payment_requests(class_id, states) + count = 0 + states.each do |state| + count += payments_requests_by_classe_and_state.dig(class_id, state.to_s) || 0 + end + count + end + private def pfmps_by_classe_and_state @pfmps_by_classe_and_state ||= group_pfmps_by_classe_and_state end + def payments_requests_by_classe_and_state + @payments_requests_by_classe_and_state ||= group_payments_requests_by_classe_and_state + end + def group_pfmps_by_classe_and_state counts = {} @@ -64,4 +76,20 @@ def group_pfmps_by_classe_and_state counts end + + def group_payments_requests_by_classe_and_state + counts = {} + + ASP::PaymentRequest.joins(:schooling) + .joins("LEFT JOIN asp_payment_request_transitions ON asp_payment_request_transitions.asp_payment_request_id = asp_payment_requests.id AND asp_payment_request_transitions.most_recent = true") # rubocop:disable Layout/LineLength + .where(schoolings: { classe_id: @classes.pluck(:id) }) + .group("schoolings.classe_id", "COALESCE(asp_payment_request_transitions.to_state, 'pending')") + .count + .each do |(class_id, state), count| + counts[class_id] ||= {} + counts[class_id][state.presence || "pending"] = count + end + + counts + end end diff --git a/app/views/classes/_pfmps_payments_table.html.haml b/app/views/classes/_pfmps_payments_table.html.haml new file mode 100644 index 000000000..23803fe28 --- /dev/null +++ b/app/views/classes/_pfmps_payments_table.html.haml @@ -0,0 +1,8 @@ +- schooling.pfmps.each do |pfmp| + .fr-grid-row + .fr-col-md-7 + = dsfr_link_to pfmp.listing_to_s, school_year_class_schooling_pfmp_path(selected_school_year, @classe, schooling, pfmp), title: pfmp.full_dates + .fr-col-md-5 + -if pfmp.latest_payment_request.present? + = pfmp.latest_payment_request.status_badge += dsfr_link_to "Ajouter une PFMP individuelle", new_school_year_class_schooling_pfmp_path(selected_school_year, @classe, schooling) diff --git a/app/views/classes/_students_table.html.haml b/app/views/classes/_students_table.html.haml index 43f3bf009..5ba891050 100644 --- a/app/views/classes/_students_table.html.haml +++ b/app/views/classes/_students_table.html.haml @@ -15,7 +15,7 @@ .fr-mr-1w Coordonnées bancaires = ribs_progress_badge(schoolings) %th{scope: "col"} - PFMPs + PFMPs et Paiements = "(#{nb_pfmps(schoolings)})" %tbody @@ -47,7 +47,4 @@ %p= dsfr_badge(status: :error) { "Non saisies" } = dsfr_link_to "Saisir les coordonnées bancaires", new_student_rib_path(student) %td - %ul - - schooling.pfmps.each do |pfmp| - %li= dsfr_link_to pfmp.listing_to_s, school_year_class_schooling_pfmp_path(selected_school_year, @classe, schooling, pfmp), title: pfmp.full_dates - %li= dsfr_link_to "Ajouter une PFMP individuelle", new_school_year_class_schooling_pfmp_path(selected_school_year, @classe, schooling) + = render partial: "pfmps_payments_table", locals: { schooling: schooling } diff --git a/app/views/classes/index.html.haml b/app/views/classes/index.html.haml index f8b652657..7ff066a16 100644 --- a/app/views/classes/index.html.haml +++ b/app/views/classes/index.html.haml @@ -11,6 +11,7 @@ %th{scope: "col"} Décisions d'attribution %th{scope: "col"} Coordonnées bancaires %th{scope: "col"} PFMPs + %th{scope: "col"} Paiements %tbody - @classes.each do |classe| - nb_students = @classes_facade.nb_students_per_class[classe.id] @@ -19,9 +20,11 @@ %td= progress_badge @classes_facade.nb_attributive_decisions_per_class[classe.id], nb_students %td= progress_badge @classes_facade.nb_ribs_per_class[classe.id], nb_students %td - .fr-grid-row - %div - = pfmps_status_count_badge :pending, @classes_facade.nb_pfmps(classe.id, :pending) - = pfmps_status_count_badge :completed, @classes_facade.nb_pfmps(classe.id, :completed) - %div - = pfmps_status_count_badge :validated, @classes_facade.nb_pfmps(classe.id, :validated) + = pfmps_status_count_badge :pending, @classes_facade.nb_pfmps(classe.id, :pending) + = pfmps_status_count_badge :completed, @classes_facade.nb_pfmps(classe.id, :completed) + = pfmps_status_count_badge :validated, @classes_facade.nb_pfmps(classe.id, :validated) + %td + = payment_requests_status_count_badge :pending, @classes_facade.nb_payment_requests(classe.id, %i[pending ready]) + = payment_requests_status_count_badge :sent, @classes_facade.nb_payment_requests(classe.id, %i[sent integrated]) + = payment_requests_status_count_badge :incomplete, @classes_facade.nb_payment_requests(classe.id, %i[incomplete rejected unpaid]) + = payment_requests_status_count_badge :paid, @classes_facade.nb_payment_requests(classe.id, %i[paid])