Skip to content
Snippets Groups Projects
Commit 1193364c authored by Emmanuel Viennet's avatar Emmanuel Viennet
Browse files

Fix: sco_report when no admission data (continued)

parent cc290487
No related branches found
No related tags found
No related merge requests found
...@@ -63,6 +63,7 @@ class Identite(models.ScoDocModel): ...@@ -63,6 +63,7 @@ class Identite(models.ScoDocModel):
dept_naissance = db.Column(db.Text()) dept_naissance = db.Column(db.Text())
nationalite = db.Column(db.Text()) nationalite = db.Column(db.Text())
statut = db.Column(db.Text()) statut = db.Column(db.Text())
"champ libre inutilisé par ScoDoc, peut servir à filtrer dans les statistiques"
boursier = db.Column( boursier = db.Column(
db.Boolean(), nullable=False, default=False, server_default="false" db.Boolean(), nullable=False, default=False, server_default="false"
) )
...@@ -217,11 +218,15 @@ class Identite(models.ScoDocModel): ...@@ -217,11 +218,15 @@ class Identite(models.ScoDocModel):
return cls.query.filter_by(**args).first_or_404() return cls.query.filter_by(**args).first_or_404()
@classmethod @classmethod
def get_etud(cls, etudid: int, accept_none=False) -> "Identite": def get_etud(
cls, etudid: int, accept_none=False, ensure_admission=False
) -> "Identite":
"""Etudiant ou 404 (ou None si accept_none), """Etudiant ou 404 (ou None si accept_none),
cherche uniquement dans le département courant. cherche uniquement dans le département courant.
Si accept_none, return None si l'id est invalide ou ne correspond Si accept_none, return None si l'id est invalide ou ne correspond
pas à un étudiant. pas à un étudiant.
Si ensure_admission: ajoute la relation "admission" si elle n'existe pas
déjà (cela entraîne un commit).
""" """
if not isinstance(etudid, int): if not isinstance(etudid, int):
try: try:
...@@ -236,9 +241,15 @@ class Identite(models.ScoDocModel): ...@@ -236,9 +241,15 @@ class Identite(models.ScoDocModel):
if g.scodoc_dept if g.scodoc_dept
else cls.query.filter_by(id=etudid) else cls.query.filter_by(id=etudid)
) )
if accept_none: etud: "Identite" = query.first() if accept_none else query.first_or_404()
return query.first() if etud and not etud.admission and ensure_admission:
return query.first_or_404() # Si admission n'existe pas, on l'ajoute
etud.admission = Admission()
db.session.add(etud.admission)
db.session.commit()
db.session.refresh(etud)
log(f"get_etud: added Admission to etudid={etudid}")
return etud
@classmethod @classmethod
def create_etud(cls, **args) -> "Identite": def create_etud(cls, **args) -> "Identite":
......
...@@ -90,7 +90,7 @@ def formsemestre_etuds_stats( ...@@ -90,7 +90,7 @@ def formsemestre_etuds_stats(
etudid = t[-1] etudid = t[-1]
if etudids and etudid not in etudids: if etudids and etudid not in etudids:
continue continue
etud = Identite.get_etud(etudid) etud = Identite.get_etud(etudid, ensure_admission=True)
e_dict = etud.to_dict_scodoc7() e_dict = etud.to_dict_scodoc7()
if etud.admission: if etud.admission:
e_dict |= etud.admission.to_dict() e_dict |= etud.admission.to_dict()
......
...@@ -777,9 +777,6 @@ def do_import_etud_admission(etud: Identite, etud_data: dict, import_identite=Fa ...@@ -777,9 +777,6 @@ def do_import_etud_admission(etud: Identite, etud_data: dict, import_identite=Fa
"codepostallycee": get_opt_str(etud_data, "codepostal_lycee"), "codepostallycee": get_opt_str(etud_data, "codepostal_lycee"),
"boursier": get_opt_str(etud_data, "bourse"), "boursier": get_opt_str(etud_data, "bourse"),
} }
if etud.admission is None:
etud.admission = Admission()
db.session.add(etud.admission)
args = {k: v for k, v in args.items() if v not in ("", None)} args = {k: v for k, v in args.items() if v not in ("", None)}
etud.admission.from_dict(args) etud.admission.from_dict(args)
...@@ -873,7 +870,7 @@ def formsemestre_import_etud_admission( ...@@ -873,7 +870,7 @@ def formsemestre_import_etud_admission(
for i in ins: for i in ins:
etudid = i["etudid"] etudid = i["etudid"]
etud: Identite = Identite.get_or_404(etudid) etud: Identite = Identite.get_etud(etudid, ensure_admission=True)
code_nip = etud.code_nip code_nip = etud.code_nip
if not code_nip: if not code_nip:
etuds_no_nip.append(etud) etuds_no_nip.append(etud)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"Infos sur version ScoDoc" "Infos sur version ScoDoc"
SCOVERSION = "9.7.74" SCOVERSION = "9.7.75"
SCONAME = "ScoDoc" SCONAME = "ScoDoc"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment