Commit 2cdb335e authored by Tanguy Le Carrour's avatar Tanguy Le Carrour
Browse files

Remplace la projection des statistiques de demandes par un calcul *via* les demandes.

Le calcul des statistiques étant bogué, on le remplace temporairement
par un calcul dynamique des statistiques *via* la projection des
demandes.
parent 596f1740
......@@ -3,6 +3,7 @@
- Listes de diffusion ! cf `wip`
* Implémenter le projecteur et créer les listes lors de l'import des séminaires.
* Démarrer en modifiant la commande dans supervisor
- Réparer et ré-utiliser le projecteur de statistiques_seminaires (*revert changeset*)
- Forcer la connexion des participants avec une adresse EHESS
- Afficher un message de maintenance si `MAINTENANCE` n'est pas vide.
- page gestion demandes, qd pas de formation, il faut gérér l'absence !… pourquoi
......
......@@ -127,8 +127,8 @@ def requetes_seminaires() -> gestion_requetes.queries.Seminaires:
def requetes_statistiques_seminaires() -> gestion_requetes.queries.StatistiquesSeminaires:
if "requetes_statistiques_seminaires" not in g:
g.requetes_statistiques_seminaires = projections.StatistiquesSeminaires(
session_projections()
g.requetes_statistiques_seminaires = (
projections.StatistiquesSeminairesViaDemandes(session_projections())
)
return g.requetes_statistiques_seminaires # type: ignore
......
......@@ -22,6 +22,7 @@ from sqlalchemy import Boolean, Column, Integer, String, Table # type: ignore
from sqlalchemy.orm import Session, registry # type: ignore
import listsem.domain.gestion.value_objects as vo
from listsem.domain.gestion.entities import ModesParticipation, StatutsDemande
from listsem.domain.gestion_requetes.dto import (
Demande,
Participant,
......@@ -271,3 +272,36 @@ class StatistiquesSeminaires(
def augmenter_nb_demandes_en_attente(self, numero_seminaire: str) -> None:
stats = self.__statistiques(numero_seminaire)
stats.nb_demandes_en_attente = stats.nb_demandes_en_attente + 1
class StatistiquesSeminairesViaDemandes(RequetesStatistiquesSeminaires):
def __init__(self, session: Session) -> None:
self.session = session
def par_numero(self, numero: str) -> Optional[StatistiquesSeminaire]:
resultat = StatistiquesSeminaire(
numero=numero,
nb_demandes_en_attente=0,
nb_demandes_acceptees=0,
nb_en_presentiel=0,
nb_a_distance=0,
)
demandes = (
self.session.query(Demande)
.filter(Demande.numero_seminaire == numero)
.filter(Demande.statut != "SUPPRIMEE")
.all()
)
for d in demandes:
if d.statut == StatutsDemande.CONFIRMEE.name:
resultat.nb_demandes_en_attente += 1
elif d.statut == StatutsDemande.ACCEPTEE.name:
resultat.nb_demandes_acceptees += 1
if d.mode_participation == ModesParticipation.A_DISTANCE.name:
resultat.nb_a_distance += 1
elif d.mode_participation == ModesParticipation.EN_PRESENTIEL.name:
resultat.nb_en_presentiel += 1
return resultat
......@@ -104,10 +104,6 @@ def build_projectionist(
projecteurs[nom] = projectors.Demandes(services.demandes())
if nom == "participants":
projecteurs[nom] = projectors.Participants(services.participants())
if nom == "statistiques_seminaires":
projecteurs[nom] = projectors.StatistiquesSeminaire(
services.statistiques_seminaires(), services.demandes()
)
if nom == "notifications":
projecteurs[nom] = projectors.Notifications(
envoyer_notifications.Interactor(
......
......@@ -75,8 +75,8 @@ class Services:
repositories.Seminaires(self.__session_donnees)
)
def statistiques_seminaires(self) -> projections.StatistiquesSeminaires:
return projections.StatistiquesSeminaires(self.__session_projections)
def statistiques_seminaires(self) -> projections.StatistiquesSeminairesViaDemandes:
return projections.StatistiquesSeminairesViaDemandes(self.__session_projections)
def superviseurs(self) -> Superviseurs:
return facades.SuperviseursPourGestionRequetes(
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment