Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tableau de bord et graphiques #1085

Merged
merged 19 commits into from
Nov 13, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions app/facades/establishment_facade.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,35 +12,49 @@ def initialize(establishment, school_year)
@school_year = school_year
end

# TODO: Ajouter la condition sur l'année scolaire
def schoolings_count
@schoolings_count ||= selected_classes.joins(:schoolings).count
end

# TODO: Ajouter la condition sur l'année scolaire
def attributive_decisions_count
@attributive_decisions_count ||= selected_classes
.joins(:schoolings)
.merge(Schooling.with_attributive_decisions)
.count
end

# TODO: Ajouter la condition sur l'année scolaire
def without_attributive_decisions_count
@without_attributive_decisions_count ||= selected_classes
.joins(:schoolings)
.merge(Schooling.without_attributive_decisions)
.count
end

# TODO: Ajouter la condition sur l'année scolaire
def students_count
@students_count ||= selected_classes
.joins(:students)
.distinct(:"students.id")
.count(:"students.id")
end

# TODO: Ajouter la condition sur l'année scolaire
def ribs_count
@ribs_count ||= selected_classes.joins(students: :rib).distinct(:"students.id").count(:"ribs.id")
end

# TODO: Ajouter la condition sur l'année scolaire
def pfmps_counts
@pfmps_counts ||= PfmpStateMachine
.states
.map(&:to_sym)
.index_with { |state| pfmps.in_state(state).count }
end

# TODO: Ajouter la condition sur l'année scolaire
pskl marked this conversation as resolved.
Show resolved Hide resolved
def payment_requests_counts
@payment_requests_counts ||= STATES_GROUPS_FOR_COUNTS.to_h do |states|
count = states.map { |state| payment_requests_all_status_counts[state] }.compact.sum
Expand All @@ -50,6 +64,7 @@ def payment_requests_counts

private

# TODO: Ajouter la condition sur l'année scolaire
def payment_requests_all_status_counts
@payment_requests_all_status_counts ||=
selected_payment_requests
Expand Down
10 changes: 10 additions & 0 deletions app/views/home/_dashboard.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
%h2.fr-col Décisions d'attribution
%p= "Nombre d'élèves avec DA : #{@establishment_facade.attributive_decisions_count}"
%p= "Nombre d'élèves sans DA : #{@establishment_facade.without_attributive_decisions_count}"

%h2.fr-col Coordonnées bancaires
%p= "Nombre d'élèves avec RIB : #{@establishment_facade.ribs_count}"

%h2.fr-col Suivi des paiements
%p= pie_chart @establishment_facade.pfmps_counts, label: "PFMPs par états"
pskl marked this conversation as resolved.
Show resolved Hide resolved

94 changes: 49 additions & 45 deletions app/views/home/_home_timeline.html.haml
Original file line number Diff line number Diff line change
@@ -1,47 +1,51 @@
%h1= "Année scolaire #{selected_school_year}"

- if @establishment_facade.students_count <= 0
= t("errors.school_years.not_found").html_safe
- else
.gray-panel#attributive_decision_panel
= render 'classes/attributive_decisions_panel'

.gray-panel
.fr-grid-row.fr-grid-row--top
%h2.fr-col 2. Coordonnées bancaires
= progress_badge(@establishment_facade.ribs_count, @establishment_facade.students_count, title: "Les coordonnées bancaires sont réutilisées pour un même élève\nà travers toutes les classes qu'il a pu fréquenter.")

%p Afin de pouvoir verser l'allocation aux lycéens, APLyPro a besoin de leurs coordonnées bancaires, de celles d'un responsable légal ou d'un tiers.
%ul.fr-btns-group
%li= link_to "Choisir une classe pour saisir des coordonnées bancaires", school_year_classes_path(selected_school_year), class: "fr-btn fr-btn--primary fr-mb-0"

.gray-panel
%h2.fr-col 3. Périodes de formation en milieu professionnel

.fr-grid-row
- PfmpStateMachine.states.each_with_index do |state, index|
- if index > 0
.fr-mx-1w →
= pfmps_status_count_badge(state.to_sym, @establishment_facade.pfmps_counts[state.to_sym], display_zero: true)

%p Pour calculer le montant des allocations à envoyer, APLyPro a besoin de connaître le nombre de jours travaillés des PFMPs de chaque élève.
%ul.fr-btns-group
%li= link_to "Choisir une classe ou un élève pour saisir une PFMP", school_year_classes_path(selected_school_year), class: "fr-btn fr-btn--primary fr-mb-0"

.gray-panel
%h2.fr-col 4. Demandes de paiements des PFMPs

.fr-grid-row
- ASP::PaymentRequestDecorator::PAYMENT_STAGES.each_with_index do |states, index|
- if index > 0
.fr-mx-1w →
.centering-container.fr-mb-2w
= payment_requests_status_count_badge(states.first, @establishment_facade.payment_requests_counts[states.first], display_zero: true)
= payment_requests_status_count_badge(states.last, @establishment_facade.payment_requests_counts[states.last], display_zero: false)

%p La validation du chef d'établissement est nécessaire pour chaque PFMP. Une fois la PFMP validée, une demande de paiement sera envoyée à l'Agence de Services et de Paiement (ASP).
%ul.fr-btns-group
- if current_user.can_validate?
%li= link_to "Consulter et gérer les envois en paiement", school_year_validations_path(selected_school_year), class: "fr-btn fr-btn--primary fr-mb-0"
- else
%li= button_to "Vous n'avez pas le droit de valider des PFMPs", "#", class: 'fr-btn fr-btn--primary fr-mb-0', disabled: true
.fr-grid-row.fr-grid-row--center
.fr-col-md-6
= render partial: "dashboard"
.fr-col-md-6
- if @establishment_facade.students_count <= 0
= t("errors.school_years.not_found").html_safe
- else
.gray-panel#attributive_decision_panel
= render 'classes/attributive_decisions_panel'

.gray-panel
.fr-grid-row.fr-grid-row--top
%h2.fr-col 2. Coordonnées bancaires
= progress_badge(@establishment_facade.ribs_count, @establishment_facade.students_count, title: "Les coordonnées bancaires sont réutilisées pour un même élève\nà travers toutes les classes qu'il a pu fréquenter.")

%p Afin de pouvoir verser l'allocation aux lycéens, APLyPro a besoin de leurs coordonnées bancaires, de celles d'un responsable légal ou d'un tiers.
%ul.fr-btns-group
%li= link_to "Choisir une classe pour saisir des coordonnées bancaires", school_year_classes_path(selected_school_year), class: "fr-btn fr-btn--primary fr-mb-0"

.gray-panel
%h2.fr-col 3. Périodes de formation en milieu professionnel

.fr-grid-row
- PfmpStateMachine.states.each_with_index do |state, index|
- if index > 0
.fr-mx-1w →
= pfmps_status_count_badge(state.to_sym, @establishment_facade.pfmps_counts[state.to_sym], display_zero: true)

%p Pour calculer le montant des allocations à envoyer, APLyPro a besoin de connaître le nombre de jours travaillés des PFMPs de chaque élève.
%ul.fr-btns-group
%li= link_to "Choisir une classe ou un élève pour saisir une PFMP", school_year_classes_path(selected_school_year), class: "fr-btn fr-btn--primary fr-mb-0"

.gray-panel
%h2.fr-col 4. Demandes de paiements des PFMPs

.fr-grid-row
- ASP::PaymentRequestDecorator::PAYMENT_STAGES.each_with_index do |states, index|
- if index > 0
.fr-mx-1w →
.centering-container.fr-mb-2w
= payment_requests_status_count_badge(states.first, @establishment_facade.payment_requests_counts[states.first], display_zero: true)
= payment_requests_status_count_badge(states.last, @establishment_facade.payment_requests_counts[states.last], display_zero: false)

%p La validation du chef d'établissement est nécessaire pour chaque PFMP. Une fois la PFMP validée, une demande de paiement sera envoyée à l'Agence de Services et de Paiement (ASP).
%ul.fr-btns-group
- if current_user.can_validate?
%li= link_to "Consulter et gérer les envois en paiement", school_year_validations_path(selected_school_year), class: "fr-btn fr-btn--primary fr-mb-0"
- else
%li= button_to "Vous n'avez pas le droit de valider des PFMPs", "#", class: 'fr-btn fr-btn--primary fr-mb-0', disabled: true
11 changes: 5 additions & 6 deletions app/views/home/home.html.haml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
.home.fr-container
.fr-grid-row.fr-grid-row--center
.fr-col-lg-7
- if current_establishment.fetching_students
= dsfr_alert(type: :info, title: "Récupération des élèves en cours") do
%p Nous sommes en train de récupérer les données de vos élèves, veuillez rafraichir la page dans quelques minutes.
- else
= render partial: "home_timeline"
- if current_establishment.fetching_students
= dsfr_alert(type: :info, title: "Récupération des élèves en cours") do
%p Nous sommes en train de récupérer les données de vos élèves, veuillez rafraichir la page dans quelques minutes.
- else
= render partial: "home_timeline"
2 changes: 1 addition & 1 deletion config/locales/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ fr:
pfmp: "de la PFMP"
rib: "du RIB"
menu:
home: Accueil
home: Tableau de bord
classes: Classes
new_rib: Saisir des coord. bancaires
new_pfmp: Saisir une PFMP
Expand Down