From 961259b84e0fd7b0e2c5659abc8c06bbd95b84ad Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Wed, 9 Apr 2025 20:16:23 +0200
Subject: [PATCH] small refactoring (create_etud / API).
---
app/api/etudiants.py | 36 ++++++------------------------------
app/models/etudiants.py | 37 ++++++++++++++++++++++++++++++++++++-
2 files changed, 42 insertions(+), 31 deletions(-)
diff --git a/app/api/etudiants.py b/app/api/etudiants.py
index 821a545c..bc9b3635 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 bf337158..573f3f2b 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
--
GitLab