diff --git a/app/api/etudiants.py b/app/api/etudiants.py index 821a545c34e22adebb9d8860fd1e3ee20054960d..bc9b363526a613da142d10c4478090e4424bde2c 100755 --- a/app/api/etudiants.py +++ b/app/api/etudiants.py @@ -5,11 +5,11 @@ ############################################################################## """ - API : accès aux étudiants +API : accès aux étudiants - CATEGORY - -------- - Étudiants +CATEGORY +-------- +Étudiants """ from datetime import datetime from operator import attrgetter @@ -35,8 +35,8 @@ from app.models import ( FormSemestreInscription, FormSemestre, Identite, - ScolarNews, ) +from app.models.etudiants import create_etud_with_adresse_admission from app.scodoc import sco_bulletins from app.scodoc import sco_groups from app.scodoc.sco_bulletins import do_formsemestre_bulletinetud @@ -549,32 +549,8 @@ def etudiant_create(force=False): return scu.json_error( 400, f"{len(homonyms)} homonymes détectés. Vous pouvez utiliser /force." ) - etud = Identite.create_etud(**args) - db.session.flush() - # --- Données admission - admission_args = args.get("admission", None) - if admission_args: - etud.admission.from_dict(admission_args) - # --- Adresse - adresses = args.get("adresses", []) - if adresses: - # ne prend en compte que la première adresse - # car si la base est concue pour avoir plusieurs adresses par étudiant, - # l'application n'en gère plus qu'une seule. - adresse = etud.adresses.first() - adresse.from_dict(adresses[0]) - - # Poste une nouvelle dans le département concerné: - ScolarNews.add( - typ=ScolarNews.NEWS_INSCR, - text=f"Nouvel étudiant {etud.html_link_fiche()}", - url=etud.url_fiche(), - max_frequency=0, - dept_id=dept_o.id, - ) + etud = create_etud_with_adresse_admission(args) db.session.commit() - # Note: je ne comprends pas pourquoi un refresh est nécessaire ici - # sans ce refresh, etud.__dict__ est incomplet (pas de 'nom'). db.session.refresh(etud) r = etud.to_dict_api(restrict=False) # pas de restriction, on vient de le créer diff --git a/app/models/etudiants.py b/app/models/etudiants.py index bf337158df12ea3e5787edafabf7bff1d75491f4..573f3f2ba0ef0ac80ec09daaf373fff64d6e65b1 100644 --- a/app/models/etudiants.py +++ b/app/models/etudiants.py @@ -1,7 +1,7 @@ # -*- coding: UTF-8 -* """Définition d'un étudiant - et données rattachées (adresses, annotations, ...) +et données rattachées (adresses, annotations, ...) """ import datetime @@ -1192,6 +1192,7 @@ class ItemSuivi(models.ScoDocModel): class ItemSuiviTag(models.ScoDocModel): "Tag sur un itemsuivi" + __tablename__ = "itemsuivi_tags" id = db.Column(db.Integer, primary_key=True) dept_id = db.Column(db.Integer, db.ForeignKey("departement.id"), index=True) @@ -1231,5 +1232,39 @@ class EtudAnnotation(models.ScoDocModel): return e +def create_etud_with_adresse_admission( + args: dict, dept: Departement | None = None +) -> Identite: + """Création d'un étudiant avec adresse et admission. + Poste une "nouvelle". + Renvoie l'étudiant créé. + """ + etud = Identite.create_etud(**args) + db.session.flush() + # --- Données admission + admission_args = args.get("admission", None) + if admission_args: + etud.admission.from_dict(admission_args) + # --- Adresse + adresses = args.get("adresses", []) + if adresses: + # ne prend en compte que la première adresse + # car si la base est concue pour avoir plusieurs adresses par étudiant, + # l'application n'en gère plus qu'une seule. + adresse = etud.adresses.first() + adresse.from_dict(adresses[0]) + + # Poste une nouvelle dans le département concerné: + if dept: + ScolarNews.add( + typ=ScolarNews.NEWS_INSCR, + text=f"Nouvel étudiant {etud.html_link_fiche()}", + url=etud.url_fiche(), + max_frequency=0, + dept_id=dept.id, + ) + return etud + + from app.models.formsemestre import FormSemestre, FormSemestreInscription from app.models.moduleimpls import ModuleImpl, ModuleImplInscription