WIP: jury BUT: reprise UEs antérieures

This commit is contained in:
Emmanuel Viennet 2023-06-29 21:17:03 +02:00
parent 5d30b9233b
commit ebe7dd8f73
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 sco_codes.DEM if inscription_etat == scu.DEMISSION else sco_codes.DEF
] ]
return return
self.validation = rcue.query_validations().first() self.validation: ApcValidationRCUE = rcue.query_validations().first()
if self.validation is not None: if self.validation is not None:
self.code_valide = self.validation.code self.code_valide = self.validation.code
if rcue.est_compensable(): if rcue.est_compensable():
@ -1379,30 +1379,36 @@ class DecisionsProposeesUE(DecisionsProposees):
inscription_etat: str = scu.INSCRIT, inscription_etat: str = scu.INSCRIT,
): ):
self.paire = paire 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.ue: UniteEns = rcue.ue_2 if paire else rcue.ue_1
self.inscription_etat = inscription_etat self.inscription_etat = inscription_etat
# Une UE peut être validée plusieurs fois en cas de redoublement # Une UE peut être validée plusieurs fois en cas de redoublement
# (qu'elle soit capitalisée ou non) # (qu'elle soit capitalisée ou non)
# mais ici on a restreint au formsemestre donc une seule (prend la première) # 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 self.cur_validation = (
).first() 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__( super().__init__(
etud=etud, etud=etud,
code_valide=validation.code if validation is not None else None, code_valide=validation.code if validation is not None else None,
) )
self.validation = validation self.validation = validation
"validation dans le formsemestre courant" "validation dans le formsemestre courant ou à défaut celle enregistrée"
self.formsemestre = formsemestre
self.rcue: RegroupementCoherentUE = rcue
"Le rcue auquel est rattaché cette UE, ou None"
# Editable ou pas ? # Editable ou pas ?
# si ue courante, éditable. # si ue courante, éditable.
self.editable = ( self.editable = self.cur_validation is not None
(self.rcue.ue_cur_pair is not None)
if paire
else (self.rcue.ue_cur_impair is not None)
)
res: ResultatsSemestreBUT = ( res: ResultatsSemestreBUT = (
self.rcue.res_pair if paire else self.rcue.res_impair self.rcue.res_pair if paire else self.rcue.res_impair
) )
@ -1427,6 +1433,7 @@ class DecisionsProposeesUE(DecisionsProposees):
# Moyenne de l'UE ? # Moyenne de l'UE ?
ue_status = self.rcue.ue_status_pair if paire else self.rcue.ue_status_impair ue_status = self.rcue.ue_status_pair if paire else self.rcue.ue_status_impair
if ue_status:
self.moy_ue = ue_status["cur_moy_ue"] self.moy_ue = ue_status["cur_moy_ue"]
self.moy_ue_with_cap = ue_status["moy"] self.moy_ue_with_cap = ue_status["moy"]
self.ue_status = ue_status self.ue_status = ue_status
@ -1440,6 +1447,11 @@ class DecisionsProposeesUE(DecisionsProposees):
"""Calcul des .codes attribuables et de l'explanation associée""" """Calcul des .codes attribuables et de l'explanation associée"""
if self.inscription_etat != scu.INSCRIT: if self.inscription_etat != scu.INSCRIT:
return 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 ( if (
self.moy_ue > (sco_codes.CursusBUT.BARRE_MOY - sco_codes.NOTES_TOLERANCE) self.moy_ue > (sco_codes.CursusBUT.BARRE_MOY - sco_codes.NOTES_TOLERANCE)
) or self.formsemestre.modalite == "EXT": ) or self.formsemestre.modalite == "EXT":
@ -1499,6 +1511,8 @@ class DecisionsProposeesUE(DecisionsProposees):
def erase(self): def erase(self):
"""Efface la décision de jury de cet étudiant pour cette UE""" """Efface la décision de jury de cet étudiant pour cette UE"""
# par prudence, on requete toutes les validations, en cas de doublons # 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( validations = ScolarFormSemestreValidation.query.filter_by(
etudid=self.etud.id, formsemestre_id=self.formsemestre.id, ue_id=self.ue.id 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>
</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: else:
moy_ue_str = f"""<span>{scu.fmt_note(dec_ue.moy_ue)}</span>""" moy_ue_str = f"""<span>{scu.fmt_note(dec_ue.moy_ue)}</span>"""
if dec_ue.code_valide: if dec_ue.code_valide:
scoplement = f"""<div class="scoplement"> date_str = (
<div>Code {dec_ue.code_valide} enregistré le {dec_ue.validation.event_date.strftime("%d/%m/%Y")} f"""enregistré le {dec_ue.validation.event_date.strftime("%d/%m/%Y")}
à {dec_ue.validation.event_date.strftime("%Hh%M")} à {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>
</div> </div>
""" """