diff --git a/app/api/jury.py b/app/api/jury.py index b58b35c2c7e9bfc669b6bcd7216e9882fc9b6c49..795062bd54ac4eafd7820c329ad2003ec6df65c0 100644 --- a/app/api/jury.py +++ b/app/api/jury.py @@ -5,12 +5,12 @@ ############################################################################## """ - ScoDoc 9 API : jury WIP à compléter avec enregistrement décisions. +ScoDoc 9 API : jury WIP à compléter avec enregistrement décisions. - CATEGORY - -------- - Jury +CATEGORY +-------- +Jury """ import datetime @@ -85,7 +85,7 @@ def _news_delete_jury_etud(etud: Identite, detail: str = ""): Scolog.logdb( "jury_delete_manual", etudid=etud.id, - msg=f"Validation {detail} effacée", + msg=f"Suppression décision jury {detail}", commit=True, ) @@ -151,11 +151,12 @@ def _validation_ue_delete(etudid: int, validation_id: int): # Validation non rattachée à un semestre: on doit être chef return json_error(403, "opération non autorisée (126)") + detail = f"UE {validation}" log(f"validation_ue_delete: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud) + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -179,11 +180,12 @@ def autorisation_inscription_delete(etudid: int, validation_id: int): validation = ScolarAutorisationInscription.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() + detail = f"autorisation inscription {validation}" log(f"autorisation_inscription_delete: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud) + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -338,11 +340,12 @@ def validation_rcue_delete(etudid: int, validation_id: int): validation = ApcValidationRCUE.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() + detail = f"RCUE {validation}" log(f"delete validation_ue_delete: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud, detail="UE") + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -366,12 +369,12 @@ def validation_annee_but_delete(etudid: int, validation_id: int): validation = ApcValidationAnnee.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() - ordre = validation.ordre + detail = f"{validation}" log(f"delete validation_annee_but: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud, detail=f"année BUT{ordre}") + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -395,9 +398,10 @@ def validation_dut120_delete(etudid: int, validation_id: int): validation = ValidationDUT120.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() + detail = f"{validation}" log(f"delete validation_dut120: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud, detail="diplôme DUT120") + _news_delete_jury_etud(etud, detail=detail) return "ok" diff --git a/app/models/but_validations.py b/app/models/but_validations.py index b5d962192178a87d745d87a358398d02cb52e6a7..e09e6d0ad6f4873bca6d6d07b14a30721c212bb4 100644 --- a/app/models/but_validations.py +++ b/app/models/but_validations.py @@ -1,7 +1,6 @@ # -*- coding: UTF-8 -* -"""Décisions de jury (validations) des RCUE et années du BUT -""" +"""Décisions de jury (validations) des RCUE et années du BUT""" from collections import defaultdict import sqlalchemy as sa @@ -163,7 +162,8 @@ class ApcValidationAnnee(ScoDocModel): } BUT{self.ordre}/{self.annee_scolaire}:{self.code!r}>""" def __str__(self): - return f"""décision sur année BUT{self.ordre} {self.annee_scolaire} : {self.code}""" + return f"""décision sur année BUT{self.ordre} {self.annee_scolaire} : {self.code + } enregistrée le {self.date.strftime(scu.DATE_FMT) if self.date else '?'}""" def to_dict_bul(self) -> dict: "dict pour bulletins" @@ -326,6 +326,11 @@ class ValidationDUT120(ScoDocModel): def __repr__(self): return f"""<ValidationDUT120 {self.etud}>""" + def __str__(self): + return f"""Diplôme de DUT 120 ECTS { + self.formsemestre.formation.referentiel_competence.specialite + } enregistré le {self.date.strftime(scu.DATE_FMT)}""" + def html(self) -> str: "Affichage html" date_str = ( diff --git a/app/models/validations.py b/app/models/validations.py index 25417b4258f9e0cf842e306f7f7ab49a62c1cc9f..4f860826ac7eed92a0b7736c1a42f0694a861e48 100644 --- a/app/models/validations.py +++ b/app/models/validations.py @@ -1,7 +1,6 @@ # -*- coding: UTF-8 -* -"""Notes, décisions de jury -""" +"""Notes, décisions de jury""" from flask_sqlalchemy.query import Query from app import db, log, models @@ -182,6 +181,11 @@ class ScolarAutorisationInscription(models.ScoDocModel): return f"""{self.__class__.__name__}(id={self.id}, etudid={ self.etudid}, semestre_id={self.semestre_id})""" + def __str__(self) -> str: + return f"""Autorisation de passage vers S{self.semestre_id} émise par { + self.origin_formsemestre.titre_mois() if self.origin_formsemestre else '?' + } le {self.date.strftime(scu.DATE_FMT) if self.date else '?'}""" + def to_dict(self) -> dict: "as a dict" d = dict(self.__dict__) diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py index b4690148dc7784f6d8b4b60d5bf9d9089f8697a8..fe598e57028c66af64f110429027fbc4ffaa62bc 100644 --- a/app/scodoc/sco_formsemestre_validation.py +++ b/app/scodoc/sco_formsemestre_validation.py @@ -1122,24 +1122,36 @@ def formsemestre_validation_suppress_etud(formsemestre_id, etudid): """ log(f"formsemestre_validation_suppress_etud( {formsemestre_id}, {etudid})") + def log_op(v): + Scolog.logdb( + method="formsemestre_validation_suppress_etud", + etudid=etudid, + msg=f"Suppression décision jury sur {v}", + ) + # Validations jury classiques (semestres, UEs, autorisations) for v in ScolarFormSemestreValidation.query.filter_by( etudid=etudid, formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) + for v in ScolarAutorisationInscription.query.filter_by( etudid=etudid, origin_formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) # Validations jury spécifiques BUT for v in ApcValidationRCUE.query.filter_by( etudid=etudid, formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) for v in ApcValidationAnnee.query.filter_by( etudid=etudid, formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) db.session.commit()