diff --git a/app/but/rcue.py b/app/but/rcue.py index 26763468c3..b7cf2711e5 100644 --- a/app/but/rcue.py +++ b/app/but/rcue.py @@ -42,6 +42,8 @@ class RegroupementCoherentUE: 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 """ + self.semestre_id_impair = semestre_id_impair + self.semestre_id_pair = semestre_id_impair + 1 self.etud: Identite = etud self.niveau: ApcNiveau = niveau "Le niveau de compétences de ce RCUE" @@ -59,7 +61,7 @@ class RegroupementCoherentUE: ScolarFormSemestreValidation.query.filter_by( etudid=etud.id, formsemestre_id=res_pair.formsemestre.id, - ue_id=self.ue_cur_pair, + ue_id=self.ue_cur_pair.id, ).first() if self.ue_cur_pair else None @@ -68,27 +70,27 @@ class RegroupementCoherentUE: ScolarFormSemestreValidation.query.filter_by( etudid=etud.id, formsemestre_id=res_impair.formsemestre.id, - ue_id=self.ue_cur_impair, + ue_id=self.ue_cur_impair.id, ).first() if self.ue_cur_impair else None ) # 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, niveau.id, 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, niveau.id, 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.ue_cur_impair or self.validation_ue_best_impair ) @@ -96,21 +98,31 @@ class RegroupementCoherentUE: self.moy_rcue = None # 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: 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.ue_1 = self.ue_cur_impair + self.res_impair = res_impair + self.ue_status_impair = ue_status elif self.validation_ue_best_impair: - self.moy_ue_1 = self.validation_ue_best_pair.moy_ue - self.ue_1 = self.ue_cur_impair + self.moy_ue_1 = self.validation_ue_best_impair.moy_ue + self.ue_1 = self.validation_ue_best_impair.ue else: 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.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: 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.ue_2 = self.ue_cur_pair + self.res_pair = res_pair + self.ue_status_pair = ue_status elif self.validation_ue_best_pair: self.moy_ue_2 = self.validation_ue_best_pair.moy_ue self.ue_2 = self.validation_ue_best_pair.ue @@ -142,15 +154,13 @@ class RegroupementCoherentUE: self, ) -> Query: # list[ApcValidationRCUE] """Les validations de jury enregistrées pour ce RCUE""" - niveau = self.ue_2.niveau_competence - return ( ApcValidationRCUE.query.filter_by( etudid=self.etud.id, ) .join(UniteEns, UniteEns.id == ApcValidationRCUE.ue2_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: @@ -205,21 +215,21 @@ class RegroupementCoherentUE: return None -def _best_autre_ue_validation( - etudid: int, niveau_id: int, semestre_id: int, ue_id: int +def best_autre_ue_validation( + etudid: int, niveau_id: int, semestre_id: int, formsemestre_id: int ) -> ScolarFormSemestreValidation: """La "meilleure" validation validante d'UE pour ce niveau/semestre""" validations = ( ScolarFormSemestreValidation.query.filter_by(etudid=etudid) .join(UniteEns) - .filter_by(semestre_idx=semestre_id + 1) + .filter_by(semestre_idx=semestre_id) .join(ApcNiveau) .filter(ApcNiveau.id == niveau_id) ) validations = [v for v in validations if codes_cursus.code_ue_validant(v.code)] # Elimine l'UE en cours si elle existe - if ue_id is not None: - validations = [v for v in validations if v.ue_id != ue_id] + if formsemestre_id is not None: + 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)) return validations[-1] if validations else None