diff --git a/app/but/jury_but.py b/app/but/jury_but.py index fe670d70e..87bbe4721 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -77,7 +77,7 @@ from app.models.but_refcomp import ( ApcNiveau, ApcParcours, ) -from app.models import Evaluation, Scolog, ScolarAutorisationInscription +from app.models import Evaluation, ModuleImpl, Scolog, ScolarAutorisationInscription from app.models.but_validations import ( ApcValidationAnnee, ApcValidationRCUE, @@ -796,16 +796,33 @@ class DecisionsProposeesAnnee(DecisionsProposees): if self.formsemestre_pair is not None: sco_cache.invalidate_formsemestre(formsemestre_id=self.formsemestre_pair.id) - def has_notes_en_attente(self) -> bool: - "Vrai si l'étudiant a au moins une note en attente dans le semestre origine de ce deca" - res = ( + def _get_current_res(self) -> ResultatsSemestreBUT: + "Les res. du semestre d'origine du deca" + return ( self.res_pair if self.formsemestre_pair and (self.formsemestre.id == self.formsemestre_pair.id) else self.res_impair ) + + def has_notes_en_attente(self) -> bool: + "Vrai si l'étudiant a au moins une note en attente dans le semestre origine de ce deca" + res = self._get_current_res() return res and self.etud.id in res.get_etudids_attente() + def get_modimpls_attente(self) -> list[ModuleImpl]: + "Liste des ModuleImpl dans lesquels l'étudiant à au moins une note en ATTente" + res = self._get_current_res() + modimpls_results = [ + modimpl_result + for modimpl_result in res.modimpls_results.values() + if self.etud.id in modimpl_result.etudids_attente + ] + modimpls = [ + db.session.get(ModuleImpl, mr.moduleimpl_id) for mr in modimpls_results + ] + return sorted(modimpls, key=lambda mi: (mi.module.numero, mi.module.code)) + def record_all(self, only_validantes: bool = False) -> bool: """Enregistre les codes qui n'ont pas été spécifiés par le formulaire, et sont donc en mode "automatique". diff --git a/app/static/css/jury_but.css b/app/static/css/jury_but.css index c75c1a50c..525c532f0 100644 --- a/app/static/css/jury_but.css +++ b/app/static/css/jury_but.css @@ -19,6 +19,13 @@ font-weight: bold; } +ul.modimpls_att { + margin-top: 8px; + margin-left: 32px; + padding-top: 0; + color: black; +} + .jury_but h3 { margin-top: 0px; } diff --git a/app/templates/scolar/index.j2 b/app/templates/scolar/index.j2 index c5c243f2b..8b93dee0a 100644 --- a/app/templates/scolar/index.j2 +++ b/app/templates/scolar/index.j2 @@ -16,6 +16,10 @@ table.listesems tr td.titresem { font-weight: bold; font-size: 110%; } +div.semlist { + padding-right: 8px; +} + table.semlist tr td.datesem { text-align: center; white-space: nowrap; @@ -113,7 +117,9 @@ table.semlist tbody tr td.modalite { url_for('scolar.export_table_dept_formsemestres', scodoc_dept=g.scodoc_dept) }}">{{scu.ICON_XLS|safe}} - {{ html_table_formsemestres|safe }} +
+ """
+ for modimpl in deca.get_modimpls_attente():
+ warning += f"""