forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -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
|
||||
)
|
||||
|
@ -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>
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user