diff --git a/app/scodoc/sco_apogee_csv.py b/app/scodoc/sco_apogee_csv.py index db0a64c28..3f863ebe4 100644 --- a/app/scodoc/sco_apogee_csv.py +++ b/app/scodoc/sco_apogee_csv.py @@ -586,7 +586,16 @@ class ApoEtud(dict): (sem["semestre_id"] == apo_data.cur_semestre_id) and (apo_data.etape in sem["etapes"]) and ( - sco_formsemestre.sem_in_annee_scolaire(sem, apo_data.annee_scolaire) + # sco_formsemestre.sem_in_annee_scolaire(sem, apo_data.annee_scolaire) # TODO à remplacer par ? + sco_formsemestre.sem_in_semestre_scolaire( + sem, + apo_data.annee_scolaire, + 0, + # jour_pivot_annee, + # mois_pivot_annee, + # jour_pivot_periode, + # mois_pivot_periode + ) ) ) ] diff --git a/app/scodoc/sco_formsemestre.py b/app/scodoc/sco_formsemestre.py index 9a00ff0bd..fc49f4330 100644 --- a/app/scodoc/sco_formsemestre.py +++ b/app/scodoc/sco_formsemestre.py @@ -422,7 +422,7 @@ def sem_set_responsable_name(sem): ) -def get_session( +def get_periode( debut: datetime, jour_pivot_annee=1, mois_pivot_annee=8, @@ -432,7 +432,7 @@ def get_session( """Calcule la session associée à un formsemestre sous la forme (année, période) année: première année de l'année scolaire période = 1 (première période de l'année scolaire anciennement automne) - ou 0 (deuxième période de l'année scolaire - anciennement printemps) + ou 2 (deuxième période de l'année scolaire - anciennement printemps) les quatre derniers paramètres forment les dates pivots pour l'année (1er août par défaut) et pour la période (1er décembre par défaut). Tous les calculs se font à partir de la date de début du formsemestre. @@ -442,9 +442,9 @@ def get_session( Cas à considérer pour le calcul de la période pa < pp -----------------|-------------------|----------------> - (A-1, P:0) pa (A, P:1) pp (A, P:0) + (A-1, P:2) pa (A, P:1) pp (A, P:2) pp < pa -----------------|-------------------|----------------> - (A-1, P:1) pp (A-1, P:0) pa (A, P:1) + (A-1, P:1) pp (A-1, P:2) pa (A, P:1) """ pa = 100 * mois_pivot_annee + jour_pivot_annee pp = 100 * mois_pivot_periode + jour_pivot_periode @@ -455,33 +455,17 @@ def get_session( annee = debut.year if pa < pp: if ps < pa or ps > pp: - periode = 0 + periode = 2 else: periode = 1 else: if ps < pp or ps > pa: periode = 1 else: - periode = 0 + periode = 2 return annee, periode -def debut_in_semestre_scolaire( - date_debut: datetime.date, year: int = False, saison: int = 0 -) -> bool: - """Vrai si date_debut est dans l'année scolaire ou le semestre - indiquée par year et periode - (par défaut, l'année scolaire en cours). - periode: - 1 = sept, - 0 = janvier - None = année complète - """ - if not year: - year = scu.AnneeScolaire() - # XXX WIP à voir selon ce que fait réellement sem_in_semestre_scolaire - - def sem_in_semestre_scolaire( sem, year=False, @@ -493,43 +477,42 @@ def sem_in_semestre_scolaire( ): """n'utilise que la date de debut, si annee non specifiée, année scolaire courante - Patch Jmp: ajout du parametre optionnel saison (1 ou 0) - si saison non spécifiée: année complète - XXX TODO: la période (ici appelée "saison" devrait être éditable - manuellement dans le formsemestre_edit afin de couvrir les cas particulier - comme un semestre S2 qui commencerait en décembre... voire novembre. + la période garde les même convention que semset["sem_id"]; + * 1 : premère période + * 2 : deuxième période + * 0 ou periode non précisée: annualisé (donc inclut toutes les périodes) ) """ if not year: year = scu.AnneeScolaire() # calcule l'année universitaire et la periode - sem_annee, sem_periode = get_session( - sem["date_debut"], + sem_annee, sem_periode = get_periode( + datetime.datetime.fromisoformat(sem["date_debut_iso"]), jour_pivot_annee, mois_pivot_annee, jour_pivot_periode, mois_pivot_periode, ) - if periode is None: + if periode == 0 or None: return sem_annee == year else: return sem_annee == year and sem_periode == periode -def sem_in_annee_scolaire(sem, year=False): - """Test si sem appartient à l'année scolaire year (int). - N'utilise que la date de début, pivot au 1er août. - Si année non specifiée, année scolaire courante - """ - if not year: - year = scu.AnneeScolaire() - return ( - (sem["annee_debut"] == str(year)) - and (sem["mois_debut_ord"] > scu.MONTH_FIN_ANNEE_SCOLAIRE) - ) or ( - (sem["annee_debut"] == str(year + 1)) - and (sem["mois_debut_ord"] <= scu.MONTH_FIN_ANNEE_SCOLAIRE) - ) +# def sem_in_annee_scolaire(sem, year=False): +# """Test si sem appartient à l'année scolaire year (int). +# N'utilise que la date de début, pivot au 1er août. +# Si année non specifiée, année scolaire courante +# """ +# if not year: +# year = scu.AnneeScolaire() +# return ( +# (sem["annee_debut"] == str(year)) +# and (sem["mois_debut_ord"] > scu.MONTH_FIN_ANNEE_SCOLAIRE) +# ) or ( +# (sem["annee_debut"] == str(year + 1)) +# and (sem["mois_debut_ord"] <= scu.MONTH_FIN_ANNEE_SCOLAIRE) +# ) def sem_est_courant(sem): # -> FormSemestre.est_courant diff --git a/app/scodoc/sco_semset.py b/app/scodoc/sco_semset.py index 4eeff7cff..92e23203f 100644 --- a/app/scodoc/sco_semset.py +++ b/app/scodoc/sco_semset.py @@ -233,7 +233,8 @@ class SemSet(dict): if sco_formsemestre.sem_in_semestre_scolaire( sem, year=self["annee_scolaire"], - saison=self["sem_id"], + # Indiquer ici les valeur des dates pivots année et période + periode=self["sem_id"], ) ] return sems diff --git a/tests/unit/test_periode.py b/tests/unit/test_periode.py index 0eecd6c86..91c60c916 100644 --- a/tests/unit/test_periode.py +++ b/tests/unit/test_periode.py @@ -7,7 +7,7 @@ Utiliser comme: """ import datetime -from app.scodoc.sco_formsemestre import get_session +from app.scodoc.sco_formsemestre import get_periode """ Calcule la session associée à un formsemestre sous la forme (année, période) année: première année de l'année scolaire @@ -34,28 +34,28 @@ Début FormSemestre pivot_année pivot_periode Résultat def test_general(): # A with default - assert (2021, 0) == get_session(datetime.datetime(2022, 1, 1)) + assert (2021, 2) == get_periode(datetime.datetime(2022, 1, 1)) # A - assert (2021, 0) == get_session(datetime.datetime(2022, 1, 1), 1, 8, 1, 12) + assert (2021, 2) == get_periode(datetime.datetime(2022, 1, 1), 1, 8, 1, 12) # automne nord - assert (2022, 1) == get_session(datetime.datetime(2022, 9, 1)) + assert (2022, 1) == get_periode(datetime.datetime(2022, 9, 1)) # noel nord - assert (2022, 0) == get_session(datetime.datetime(2022, 12, 15)) + assert (2022, 2) == get_periode(datetime.datetime(2022, 12, 15)) # été nord - assert (2021, 0) == get_session(datetime.datetime(2022, 7, 30)) + assert (2021, 2) == get_periode(datetime.datetime(2022, 7, 30)) # printemps sud - assert (2022, 1) == get_session(datetime.datetime(2022, 1, 1), 1, 1, 1, 8) + assert (2022, 1) == get_periode(datetime.datetime(2022, 1, 1), 1, 1, 1, 8) # automne sud - assert (2022, 0) == get_session(datetime.datetime(2022, 8, 2), 1, 1, 1, 8) + assert (2022, 2) == get_periode(datetime.datetime(2022, 8, 2), 1, 1, 1, 8) # noel sud - assert (2022, 0) == get_session(datetime.datetime(2022, 12, 30), 1, 1, 1, 8) + assert (2022, 2) == get_periode(datetime.datetime(2022, 12, 30), 1, 1, 1, 8) # été sud - assert (2022, 1) == get_session(datetime.datetime(2022, 7, 30), 1, 1, 1, 8) + assert (2022, 1) == get_periode(datetime.datetime(2022, 7, 30), 1, 1, 1, 8) # nouvel an sud - assert (2021, 0) == get_session(datetime.datetime(2022, 1, 1), 3, 1, 1, 8) + assert (2021, 2) == get_periode(datetime.datetime(2022, 1, 1), 3, 1, 1, 8) # nouvel an pp < pa - assert (2023, 1) == get_session(datetime.datetime(2024, 1, 10), 1, 8, 1, 2) + assert (2023, 1) == get_periode(datetime.datetime(2024, 1, 10), 1, 8, 1, 2) # été pivot pp