This commit is contained in:
Jean-Marie Place 2022-11-10 16:09:24 +01:00
parent d3e0ff019c
commit 21933000ce
4 changed files with 53 additions and 60 deletions

View File

@ -586,7 +586,16 @@ class ApoEtud(dict):
(sem["semestre_id"] == apo_data.cur_semestre_id) (sem["semestre_id"] == apo_data.cur_semestre_id)
and (apo_data.etape in sem["etapes"]) and (apo_data.etape in sem["etapes"])
and ( 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
)
) )
) )
] ]

View File

@ -422,7 +422,7 @@ def sem_set_responsable_name(sem):
) )
def get_session( def get_periode(
debut: datetime, debut: datetime,
jour_pivot_annee=1, jour_pivot_annee=1,
mois_pivot_annee=8, 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) """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 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) 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) 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). 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. 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 Cas à considérer pour le calcul de la période
pa < pp -----------------|-------------------|----------------> 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 -----------------|-------------------|----------------> 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 pa = 100 * mois_pivot_annee + jour_pivot_annee
pp = 100 * mois_pivot_periode + jour_pivot_periode pp = 100 * mois_pivot_periode + jour_pivot_periode
@ -455,33 +455,17 @@ def get_session(
annee = debut.year annee = debut.year
if pa < pp: if pa < pp:
if ps < pa or ps > pp: if ps < pa or ps > pp:
periode = 0 periode = 2
else: else:
periode = 1 periode = 1
else: else:
if ps < pp or ps > pa: if ps < pp or ps > pa:
periode = 1 periode = 1
else: else:
periode = 0 periode = 2
return annee, periode 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( def sem_in_semestre_scolaire(
sem, sem,
year=False, year=False,
@ -493,43 +477,42 @@ def sem_in_semestre_scolaire(
): ):
"""n'utilise que la date de debut, """n'utilise que la date de debut,
si annee non specifiée, année scolaire courante si annee non specifiée, année scolaire courante
Patch Jmp: ajout du parametre optionnel saison (1 ou 0) la période garde les même convention que semset["sem_id"];
si saison non spécifiée: année complète * 1 : premère période
XXX TODO: la période (ici appelée "saison" devrait être éditable * 2 : deuxième période
manuellement dans le formsemestre_edit afin de couvrir les cas particulier * 0 ou periode non précisée: annualisé (donc inclut toutes les périodes)
comme un semestre S2 qui commencerait en décembre... voire novembre.
) )
""" """
if not year: if not year:
year = scu.AnneeScolaire() year = scu.AnneeScolaire()
# calcule l'année universitaire et la periode # calcule l'année universitaire et la periode
sem_annee, sem_periode = get_session( sem_annee, sem_periode = get_periode(
sem["date_debut"], datetime.datetime.fromisoformat(sem["date_debut_iso"]),
jour_pivot_annee, jour_pivot_annee,
mois_pivot_annee, mois_pivot_annee,
jour_pivot_periode, jour_pivot_periode,
mois_pivot_periode, mois_pivot_periode,
) )
if periode is None: if periode == 0 or None:
return sem_annee == year return sem_annee == year
else: else:
return sem_annee == year and sem_periode == periode return sem_annee == year and sem_periode == periode
def sem_in_annee_scolaire(sem, year=False): # def sem_in_annee_scolaire(sem, year=False):
"""Test si sem appartient à l'année scolaire year (int). # """Test si sem appartient à l'année scolaire year (int).
N'utilise que la date de début, pivot au 1er août. # N'utilise que la date de début, pivot au 1er août.
Si année non specifiée, année scolaire courante # Si année non specifiée, année scolaire courante
""" # """
if not year: # if not year:
year = scu.AnneeScolaire() # year = scu.AnneeScolaire()
return ( # return (
(sem["annee_debut"] == str(year)) # (sem["annee_debut"] == str(year))
and (sem["mois_debut_ord"] > scu.MONTH_FIN_ANNEE_SCOLAIRE) # and (sem["mois_debut_ord"] > scu.MONTH_FIN_ANNEE_SCOLAIRE)
) or ( # ) or (
(sem["annee_debut"] == str(year + 1)) # (sem["annee_debut"] == str(year + 1))
and (sem["mois_debut_ord"] <= scu.MONTH_FIN_ANNEE_SCOLAIRE) # and (sem["mois_debut_ord"] <= scu.MONTH_FIN_ANNEE_SCOLAIRE)
) # )
def sem_est_courant(sem): # -> FormSemestre.est_courant def sem_est_courant(sem): # -> FormSemestre.est_courant

View File

@ -233,7 +233,8 @@ class SemSet(dict):
if sco_formsemestre.sem_in_semestre_scolaire( if sco_formsemestre.sem_in_semestre_scolaire(
sem, sem,
year=self["annee_scolaire"], 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 return sems

View File

@ -7,7 +7,7 @@ Utiliser comme:
""" """
import datetime 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) """ 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 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(): def test_general():
# A with default # A with default
assert (2021, 0) == get_session(datetime.datetime(2022, 1, 1)) assert (2021, 2) == get_periode(datetime.datetime(2022, 1, 1))
# A # 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 # automne nord
assert (2022, 1) == get_session(datetime.datetime(2022, 9, 1)) assert (2022, 1) == get_periode(datetime.datetime(2022, 9, 1))
# noel nord # noel nord
assert (2022, 0) == get_session(datetime.datetime(2022, 12, 15)) assert (2022, 2) == get_periode(datetime.datetime(2022, 12, 15))
# été nord # été nord
assert (2021, 0) == get_session(datetime.datetime(2022, 7, 30)) assert (2021, 2) == get_periode(datetime.datetime(2022, 7, 30))
# printemps sud # 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 # 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 # 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 # é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 # 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 # 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<pa # été pivot pp<pa
assert (2023, 0) == get_session(datetime.datetime(2024, 6, 1), 1, 8, 1, 2) assert (2023, 2) == get_periode(datetime.datetime(2024, 6, 1), 1, 8, 1, 2)
# automne pp<pa # automne pp<pa
assert (2024, 1) == get_session(datetime.datetime(2024, 9, 20), 1, 8, 1, 2) assert (2024, 1) == get_periode(datetime.datetime(2024, 9, 20), 1, 8, 1, 2)