1
0
forked from ScoDoc/ScoDoc

WIP: nouveaux RCUEs

This commit is contained in:
IDK 2023-06-28 21:22:39 +02:00
parent 0c9d202e09
commit 7ed521e4f5

View File

@ -42,6 +42,8 @@ class RegroupementCoherentUE:
res_pair, res_impair: résultats des formsemestre de l'année en cours, ou None res_pair, res_impair: résultats des formsemestre de l'année en cours, ou None
cur_ues_pair, cur_ues_impair: ues auxquelles l'étudiant est inscrit cette année cur_ues_pair, cur_ues_impair: ues auxquelles l'étudiant est inscrit cette année
""" """
self.semestre_id_impair = semestre_id_impair
self.semestre_id_pair = semestre_id_impair + 1
self.etud: Identite = etud self.etud: Identite = etud
self.niveau: ApcNiveau = niveau self.niveau: ApcNiveau = niveau
"Le niveau de compétences de ce RCUE" "Le niveau de compétences de ce RCUE"
@ -59,7 +61,7 @@ class RegroupementCoherentUE:
ScolarFormSemestreValidation.query.filter_by( ScolarFormSemestreValidation.query.filter_by(
etudid=etud.id, etudid=etud.id,
formsemestre_id=res_pair.formsemestre.id, formsemestre_id=res_pair.formsemestre.id,
ue_id=self.ue_cur_pair, ue_id=self.ue_cur_pair.id,
).first() ).first()
if self.ue_cur_pair if self.ue_cur_pair
else None else None
@ -68,27 +70,27 @@ class RegroupementCoherentUE:
ScolarFormSemestreValidation.query.filter_by( ScolarFormSemestreValidation.query.filter_by(
etudid=etud.id, etudid=etud.id,
formsemestre_id=res_impair.formsemestre.id, formsemestre_id=res_impair.formsemestre.id,
ue_id=self.ue_cur_impair, ue_id=self.ue_cur_impair.id,
).first() ).first()
if self.ue_cur_impair if self.ue_cur_impair
else None else None
) )
# Autres validations pour l'UE paire # Autres validations pour l'UE paire
self.validation_ue_best_pair = _best_autre_ue_validation( self.validation_ue_best_pair = best_autre_ue_validation(
etud.id, etud.id,
niveau.id, niveau.id,
semestre_id_impair + 1, semestre_id_impair + 1,
self.ue_cur_pair.id if self.ue_cur_pair else None, res_pair.formsemestre.id if (res_pair and self.ue_cur_pair) else None,
) )
self.validation_ue_best_impair = _best_autre_ue_validation( self.validation_ue_best_impair = best_autre_ue_validation(
etud.id, etud.id,
niveau.id, niveau.id,
semestre_id_impair, semestre_id_impair,
self.ue_cur_impair.id if self.ue_cur_impair else None, res_impair.formsemestre.id if (res_impair and self.ue_cur_impair) else None,
) )
# Suis-je complet ? # Suis-je complet ? (= en cours ou validé sur les deux moitiés)
self.complete = (self.ue_cur_pair or self.validation_ue_best_pair) and ( self.complete = (self.ue_cur_pair or self.validation_ue_best_pair) and (
self.ue_cur_impair or self.validation_ue_best_impair self.ue_cur_impair or self.validation_ue_best_impair
) )
@ -96,21 +98,31 @@ class RegroupementCoherentUE:
self.moy_rcue = None self.moy_rcue = None
# Stocke les moyennes d'UE # Stocke les moyennes d'UE
self.res_impair = None
"résultats formsemestre de l'UE si elle est courante, None sinon"
self.ue_status_impair = None
if self.ue_cur_impair: if self.ue_cur_impair:
ue_status = res_impair.get_etud_ue_status(etud.id, self.ue_cur_impair.id) ue_status = res_impair.get_etud_ue_status(etud.id, self.ue_cur_impair.id)
self.moy_ue_1 = ue_status["moy"] if ue_status else None # avec capitalisée self.moy_ue_1 = ue_status["moy"] if ue_status else None # avec capitalisée
self.ue_1 = self.ue_cur_impair self.ue_1 = self.ue_cur_impair
self.res_impair = res_impair
self.ue_status_impair = ue_status
elif self.validation_ue_best_impair: elif self.validation_ue_best_impair:
self.moy_ue_1 = self.validation_ue_best_pair.moy_ue self.moy_ue_1 = self.validation_ue_best_impair.moy_ue
self.ue_1 = self.ue_cur_impair self.ue_1 = self.validation_ue_best_impair.ue
else: else:
self.moy_ue_1, self.ue_1 = None, None self.moy_ue_1, self.ue_1 = None, None
self.moy_ue_1_val = self.moy_ue_1 if self.moy_ue_1 is not None else 0.0 self.moy_ue_1_val = self.moy_ue_1 if self.moy_ue_1 is not None else 0.0
self.res_pair = None
"résultats formsemestre de l'UE si elle est courante, None sinon"
self.ue_status_pair = None
if self.ue_cur_pair: if self.ue_cur_pair:
ue_status = res_pair.get_etud_ue_status(etud.id, self.ue_cur_pair.id) ue_status = res_pair.get_etud_ue_status(etud.id, self.ue_cur_pair.id)
self.moy_ue_2 = ue_status["moy"] if ue_status else None # avec capitalisée self.moy_ue_2 = ue_status["moy"] if ue_status else None # avec capitalisée
self.ue_2 = self.ue_cur_pair self.ue_2 = self.ue_cur_pair
self.res_pair = res_pair
self.ue_status_pair = ue_status
elif self.validation_ue_best_pair: elif self.validation_ue_best_pair:
self.moy_ue_2 = self.validation_ue_best_pair.moy_ue self.moy_ue_2 = self.validation_ue_best_pair.moy_ue
self.ue_2 = self.validation_ue_best_pair.ue self.ue_2 = self.validation_ue_best_pair.ue
@ -142,15 +154,13 @@ class RegroupementCoherentUE:
self, self,
) -> Query: # list[ApcValidationRCUE] ) -> Query: # list[ApcValidationRCUE]
"""Les validations de jury enregistrées pour ce RCUE""" """Les validations de jury enregistrées pour ce RCUE"""
niveau = self.ue_2.niveau_competence
return ( return (
ApcValidationRCUE.query.filter_by( ApcValidationRCUE.query.filter_by(
etudid=self.etud.id, etudid=self.etud.id,
) )
.join(UniteEns, UniteEns.id == ApcValidationRCUE.ue2_id) .join(UniteEns, UniteEns.id == ApcValidationRCUE.ue2_id)
.join(ApcNiveau, UniteEns.niveau_competence_id == ApcNiveau.id) .join(ApcNiveau, UniteEns.niveau_competence_id == ApcNiveau.id)
.filter(ApcNiveau.id == niveau.id) .filter(ApcNiveau.id == self.niveau.id)
) )
def other_ue(self, ue: UniteEns) -> UniteEns: def other_ue(self, ue: UniteEns) -> UniteEns:
@ -205,21 +215,21 @@ class RegroupementCoherentUE:
return None return None
def _best_autre_ue_validation( def best_autre_ue_validation(
etudid: int, niveau_id: int, semestre_id: int, ue_id: int etudid: int, niveau_id: int, semestre_id: int, formsemestre_id: int
) -> ScolarFormSemestreValidation: ) -> ScolarFormSemestreValidation:
"""La "meilleure" validation validante d'UE pour ce niveau/semestre""" """La "meilleure" validation validante d'UE pour ce niveau/semestre"""
validations = ( validations = (
ScolarFormSemestreValidation.query.filter_by(etudid=etudid) ScolarFormSemestreValidation.query.filter_by(etudid=etudid)
.join(UniteEns) .join(UniteEns)
.filter_by(semestre_idx=semestre_id + 1) .filter_by(semestre_idx=semestre_id)
.join(ApcNiveau) .join(ApcNiveau)
.filter(ApcNiveau.id == niveau_id) .filter(ApcNiveau.id == niveau_id)
) )
validations = [v for v in validations if codes_cursus.code_ue_validant(v.code)] validations = [v for v in validations if codes_cursus.code_ue_validant(v.code)]
# Elimine l'UE en cours si elle existe # Elimine l'UE en cours si elle existe
if ue_id is not None: if formsemestre_id is not None:
validations = [v for v in validations if v.ue_id != ue_id] validations = [v for v in validations if v.formsemestre_id != formsemestre_id]
validations = sorted(validations, key=lambda v: BUT_CODES_ORDER.get(v.code, 0)) validations = sorted(validations, key=lambda v: BUT_CODES_ORDER.get(v.code, 0))
return validations[-1] if validations else None return validations[-1] if validations else None