diff --git a/app/models/etudiants.py b/app/models/etudiants.py index ff91981b6..72e2088f5 100644 --- a/app/models/etudiants.py +++ b/app/models/etudiants.py @@ -7,6 +7,7 @@ from functools import cached_property from flask import abort, url_for from flask import g, request +import sqlalchemy from app import db from app import models @@ -302,6 +303,24 @@ class Admission(db.Model): "Le bac. utiliser bac.abbrev() pour avoir une chaine de caractères." return Baccalaureat(self.bac, specialite=self.specialite) + def to_dict(self, no_nulls=False): + """Représentation dictionnaire,""" + e = dict(self.__dict__) + e.pop("_sa_instance_state", None) + if no_nulls: + for k in e: + if e[k] is None: + col_type = getattr( + sqlalchemy.inspect(models.Admission).columns, "apb_groupe" + ).expression.type + if isinstance(col_type, sqlalchemy.Text): + e[k] = "" + elif isinstance(col_type, sqlalchemy.Integer): + e[k] = 0 + elif isinstance(col_type, sqlalchemy.Boolean): + e[k] = False + return e + # Suivi scolarité / débouchés class ItemSuivi(db.Model): diff --git a/app/scodoc/sco_etud.py b/app/scodoc/sco_etud.py index dbf30cf31..b4af85fda 100644 --- a/app/scodoc/sco_etud.py +++ b/app/scodoc/sco_etud.py @@ -38,6 +38,7 @@ from flask_mail import Message from app import email from app import log +from app.models import Admission from app.models.etudiants import make_etud_args import app.scodoc.sco_utils as scu import app.scodoc.notesdb as ndb @@ -859,10 +860,12 @@ def list_scolog(etudid): return cursor.dictfetchall() -def fill_etuds_info(etuds): +def fill_etuds_info(etuds, add_admission=True): """etuds est une liste d'etudiants (mappings) Pour chaque etudiant, ajoute ou formatte les champs -> informations pour fiche etudiant ou listes diverses + + Si add_admission: ajoute au dict le schamps "admission" s'il n'y sont pas déjà. """ from app.scodoc import sco_formsemestre from app.scodoc import sco_formsemestre_inscriptions @@ -872,6 +875,13 @@ def fill_etuds_info(etuds): for etud in etuds: etudid = etud["etudid"] etud["dept"] = g.scodoc_dept + # Admission + if add_admission and "nomlycee" not in etud: + admission = ( + Admission.query.filter_by(etudid=etudid).first().to_dict(no_nulls=True) + ) + etud.update(admission) + # adrs = adresse_list(cnx, {"etudid": etudid}) if not adrs: # certains "vieux" etudiants n'ont pas d'adresse @@ -928,35 +938,35 @@ def fill_etuds_info(etuds): # XXXetud['partitions'] = {} # ne va pas chercher les groupes des anciens semestres etud["etatincursem"] = "?" - # nettoyage champs souvents vides - if etud["nomlycee"]: + # nettoyage champs souvent vides + if etud.get("nomlycee"): etud["ilycee"] = "Lycée " + format_lycee(etud["nomlycee"]) if etud["villelycee"]: - etud["ilycee"] += " (%s)" % etud["villelycee"] + etud["ilycee"] += " (%s)" % etud.get("villelycee", "") etud["ilycee"] += "
" else: - if etud["codelycee"]: + if etud.get("codelycee"): etud["ilycee"] = format_lycee_from_code(etud["codelycee"]) else: etud["ilycee"] = "" rap = "" - if etud["rapporteur"] or etud["commentaire"]: + if etud.get("rapporteur") or etud.get("commentaire"): rap = "Note du rapporteur" - if etud["rapporteur"]: + if etud.get("rapporteur"): rap += " (%s)" % etud["rapporteur"] rap += ": " - if etud["commentaire"]: + if etud.get("commentaire"): rap += "%s" % etud["commentaire"] etud["rap"] = rap # if etud['boursier_prec']: # pass - if etud["telephone"]: + if etud.get("telephone"): etud["telephonestr"] = "Tél.: " + format_telephone(etud["telephone"]) else: etud["telephonestr"] = "" - if etud["telephonemobile"]: + if etud.get("telephonemobile"): etud["telephonemobilestr"] = "Mobile: " + format_telephone( etud["telephonemobile"] )