WIP: jury BUT: reprise UEs antérieures

This commit is contained in:
Emmanuel Viennet 2023-06-29 21:17:03 +02:00 committed by iziram
parent d38f233c21
commit eeaf449fb4
2 changed files with 59 additions and 17 deletions

View File

@ -1009,7 +1009,7 @@ class DecisionsProposeesRCUE(DecisionsProposees):
sco_codes.DEM if inscription_etat == scu.DEMISSION else sco_codes.DEF
]
return
self.validation = rcue.query_validations().first()
self.validation: ApcValidationRCUE = rcue.query_validations().first()
if self.validation is not None:
self.code_valide = self.validation.code
if rcue.est_compensable():
@ -1379,30 +1379,36 @@ class DecisionsProposeesUE(DecisionsProposees):
inscription_etat: str = scu.INSCRIT,
):
self.paire = paire
self.formsemestre = formsemestre
"Le formsemestre courant auquel appartient l'UE, ou None si validation antérieure"
self.rcue: RegroupementCoherentUE = rcue
"Le rcue auquel est rattaché cette UE, ou None"
self.ue: UniteEns = rcue.ue_2 if paire else rcue.ue_1
self.inscription_etat = inscription_etat
# Une UE peut être validée plusieurs fois en cas de redoublement
# (qu'elle soit capitalisée ou non)
# mais ici on a restreint au formsemestre donc une seule (prend la première)
validation = ScolarFormSemestreValidation.query.filter_by(
etudid=etud.id, formsemestre_id=formsemestre.id, ue_id=self.ue.id << XXX
).first()
self.cur_validation = (
rcue.validation_ue_cur_pair if paire else rcue.validation_ue_cur_impair
)
"validation dans le formsemestre courant"
autre_validation = (
rcue.validation_ue_best_pair if paire else rcue.validation_ue_best_impair
)
"validation antérieure ou capitalisée"
# la validation à afficher est celle "en cours", sauf si UE antérieure
validation = self.cur_validation if self.formsemestre else autre_validation
super().__init__(
etud=etud,
code_valide=validation.code if validation is not None else None,
)
self.validation = validation
"validation dans le formsemestre courant"
self.formsemestre = formsemestre
self.rcue: RegroupementCoherentUE = rcue
"Le rcue auquel est rattaché cette UE, ou None"
"validation dans le formsemestre courant ou à défaut celle enregistrée"
# Editable ou pas ?
# si ue courante, éditable.
self.editable = (
(self.rcue.ue_cur_pair is not None)
if paire
else (self.rcue.ue_cur_impair is not None)
)
self.editable = self.cur_validation is not None
res: ResultatsSemestreBUT = (
self.rcue.res_pair if paire else self.rcue.res_impair
)
@ -1427,8 +1433,9 @@ class DecisionsProposeesUE(DecisionsProposees):
# Moyenne de l'UE ?
ue_status = self.rcue.ue_status_pair if paire else self.rcue.ue_status_impair
self.moy_ue = ue_status["cur_moy_ue"]
self.moy_ue_with_cap = ue_status["moy"]
if ue_status:
self.moy_ue = ue_status["cur_moy_ue"]
self.moy_ue_with_cap = ue_status["moy"]
self.ue_status = ue_status
self.codes = [self.codes[0]] + sorted(self.codes[1:])
@ -1440,6 +1447,11 @@ class DecisionsProposeesUE(DecisionsProposees):
"""Calcul des .codes attribuables et de l'explanation associée"""
if self.inscription_etat != scu.INSCRIT:
return
# Si UE validée antérieure, on ne peut pas changer le code
if not self.formsemestre:
self.codes = [self.validation.code] if self.validation else []
self.explanation = "enregistrée"
return
if (
self.moy_ue > (sco_codes.CursusBUT.BARRE_MOY - sco_codes.NOTES_TOLERANCE)
) or self.formsemestre.modalite == "EXT":
@ -1499,6 +1511,8 @@ class DecisionsProposeesUE(DecisionsProposees):
def erase(self):
"""Efface la décision de jury de cet étudiant pour cette UE"""
# par prudence, on requete toutes les validations, en cas de doublons
if not self.formsemestre:
return # antérieure, rien à effacer
validations = ScolarFormSemestreValidation.query.filter_by(
etudid=self.etud.id, formsemestre_id=self.formsemestre.id, ue_id=self.ue.id
)

View File

@ -199,12 +199,40 @@ def _gen_but_niveau_ue(
</div>
</div>
"""
elif dec_ue.formsemestre is None:
# Validation d'UE antérieure (semestre hors année scolaire courante)
if dec_ue.validation:
moy_ue_str = f"""<span>{scu.fmt_note(dec_ue.validation.moy_ue)}</span>"""
scoplement = f"""<div class="scoplement">
<div>
<b>UE {ue.acronyme} antérieure </b>
<span>validée {dec_ue.validation.code}
le {dec_ue.validation.event_date.strftime("%d/%m/%Y")}
</span>
</div>
<div>Non reprise dans l'année en cours</div>
</div>
"""
else:
moy_ue_str = """<span>-</span>"""
scoplement = """<div class="scoplement">
<div>
<b>Pas d'UE en cours ou validée dans cette compétence de ce côté.</b>
</div>
</div>
"""
else:
moy_ue_str = f"""<span>{scu.fmt_note(dec_ue.moy_ue)}</span>"""
if dec_ue.code_valide:
scoplement = f"""<div class="scoplement">
<div>Code {dec_ue.code_valide} enregistré le {dec_ue.validation.event_date.strftime("%d/%m/%Y")}
date_str = (
f"""enregistré le {dec_ue.validation.event_date.strftime("%d/%m/%Y")}
à {dec_ue.validation.event_date.strftime("%Hh%M")}
"""
if dec_ue.validation and dec_ue.validation.event_date
else ""
)
scoplement = f"""<div class="scoplement">
<div>Code {dec_ue.code_valide} {date_str}
</div>
</div>
"""