Import synchro Apo: fix #116
This commit is contained in:
parent
7bc5a5ffd1
commit
5d527edb71
@ -153,7 +153,7 @@ def get_inscrits_etape(code_etape, anneeapogee=None, ntrials=4, use_cache=True):
|
||||
ntrials: try several time the same request, useful for some bad web services
|
||||
use_cache: use (redis) cache
|
||||
"""
|
||||
log("get_inscrits_etape: code=%s anneeapogee=%s" % (code_etape, anneeapogee))
|
||||
log(f"get_inscrits_etape: code={code_etape} anneeapogee={anneeapogee}")
|
||||
if anneeapogee is None:
|
||||
anneeapogee = str(time.localtime()[0])
|
||||
if use_cache:
|
||||
|
@ -87,7 +87,7 @@ def formsemestre_synchro_etuds(
|
||||
etuds: apres sélection par l'utilisateur, la liste des étudiants selectionnés
|
||||
que l'on va importer/inscrire
|
||||
"""
|
||||
log("formsemestre_synchro_etuds: formsemestre_id=%s" % formsemestre_id)
|
||||
log(f"formsemestre_synchro_etuds: formsemestre_id={formsemestre_id}")
|
||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
||||
# Write access ?
|
||||
@ -182,35 +182,35 @@ def formsemestre_synchro_etuds(
|
||||
if not dialog_confirmed:
|
||||
# Confirmation
|
||||
if a_importer:
|
||||
H.append("<h3>Etudiants à importer et inscrire :</h3><ol>")
|
||||
H.append("<h3>Étudiants à importer et inscrire :</h3><ol>")
|
||||
for key in a_importer:
|
||||
H.append("<li>%(fullname)s</li>" % etudsapo_ident[key])
|
||||
nom = f"""{etudsapo_ident[key]['nom']} {etudsapo_ident[key].get("prenom", "")}"""
|
||||
H.append(f"<li>{nom}</li>")
|
||||
H.append("</ol>")
|
||||
|
||||
if a_inscrire:
|
||||
H.append("<h3>Etudiants à inscrire :</h3><ol>")
|
||||
H.append("<h3>Étudiants à inscrire :</h3><ol>")
|
||||
for key in a_inscrire:
|
||||
H.append("<li>%(fullname)s</li>" % etudsapo_ident[key])
|
||||
nom = f"""{etudsapo_ident[key]['nom']} {etudsapo_ident[key].get("prenom", "")}"""
|
||||
H.append(f"<li>{nom}</li>")
|
||||
H.append("</ol>")
|
||||
|
||||
a_inscrire_en_double = inscrits_ailleurs.intersection(a_inscrire)
|
||||
if a_inscrire_en_double:
|
||||
H.append("<h3>dont étudiants déjà inscrits:</h3><ol>")
|
||||
for key in a_inscrire_en_double:
|
||||
H.append(
|
||||
'<li class="inscrailleurs">%(fullname)s</li>'
|
||||
% etudsapo_ident[key]
|
||||
)
|
||||
nom = f"""{etudsapo_ident[key]['nom']} {etudsapo_ident[key].get("prenom", "")}"""
|
||||
H.append(f'<li class="inscrailleurs">{nom}</li>')
|
||||
H.append("</ol>")
|
||||
|
||||
if a_desinscrire:
|
||||
H.append("<h3>Etudiants à désinscrire :</h3><ol>")
|
||||
H.append("<h3>Étudiants à désinscrire :</h3><ol>")
|
||||
for key in a_desinscrire:
|
||||
etud = sco_etud.get_etud_info(filled=True, code_nip=key)[0]
|
||||
H.append('<li class="desinscription">%(nomprenom)s</li>' % etud)
|
||||
H.append("</ol>")
|
||||
if a_desinscrire_without_key:
|
||||
H.append("<h3>Etudiants à désinscrire (sans code):</h3><ol>")
|
||||
H.append("<h3>Étudiants à désinscrire (sans code):</h3><ol>")
|
||||
for etudid in a_desinscrire_without_key:
|
||||
etud = inscrits_without_key_all[etudid]
|
||||
sco_etud.format_etud_ident(etud)
|
||||
@ -669,7 +669,7 @@ def do_import_etuds_from_portal(sem, a_importer, etudsapo_ident):
|
||||
# here we try to remove all created students
|
||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
||||
for etudid in created_etudids:
|
||||
log("do_import_etuds_from_portal: deleting etudid=%s" % etudid)
|
||||
log(f"do_import_etuds_from_portal: deleting etudid={etudid}")
|
||||
cursor.execute(
|
||||
"delete from notes_moduleimpl_inscription where etudid=%(etudid)s",
|
||||
{"etudid": etudid},
|
||||
@ -702,7 +702,7 @@ def do_import_etuds_from_portal(sem, a_importer, etudsapo_ident):
|
||||
|
||||
ScolarNews.add(
|
||||
typ=ScolarNews.NEWS_INSCR,
|
||||
text="Import Apogée de %d étudiants en " % len(created_etudids),
|
||||
text=f"Import Apogée de {len(created_etudids)} étudiants en ",
|
||||
obj=sem["formsemestre_id"],
|
||||
max_frequency=10 * 60, # 10'
|
||||
)
|
||||
@ -716,6 +716,7 @@ def do_import_etud_admission(
|
||||
"""
|
||||
annee_courante = time.localtime()[0]
|
||||
serie_bac, spe_bac = get_bac(etud)
|
||||
# Les champs n'ont pas les mêmes noms dans Apogee et dans ScoDoc:
|
||||
args = {
|
||||
"etudid": etudid,
|
||||
"annee": get_opt_str(etud, "inscription") or annee_courante,
|
||||
@ -723,23 +724,26 @@ def do_import_etud_admission(
|
||||
"specialite": spe_bac,
|
||||
"annee_bac": get_opt_str(etud, "anneebac"),
|
||||
"codelycee": get_opt_str(etud, "lycee"),
|
||||
"nomlycee": get_opt_str(etud, "nom_lycee"),
|
||||
"villelycee": get_opt_str(etud, "ville_lycee"),
|
||||
"codepostallycee": get_opt_str(etud, "codepostal_lycee"),
|
||||
"boursier": get_opt_str(etud, "bourse"),
|
||||
}
|
||||
# log("do_import_etud_admission: etud=%s" % pprint.pformat(etud))
|
||||
al = sco_etud.admission_list(cnx, args={"etudid": etudid})
|
||||
if not al:
|
||||
adm_list = sco_etud.admission_list(cnx, args={"etudid": etudid})
|
||||
if not adm_list:
|
||||
sco_etud.admission_create(cnx, args) # -> adm_id
|
||||
else:
|
||||
# existing data: merge
|
||||
e = al[0]
|
||||
adm_info = adm_list[0]
|
||||
if get_opt_str(etud, "inscription"):
|
||||
e["annee"] = args["annee"]
|
||||
adm_info["annee"] = args["annee"]
|
||||
keys = list(args.keys())
|
||||
for k in keys:
|
||||
if not args[k]:
|
||||
del args[k]
|
||||
e.update(args)
|
||||
sco_etud.admission_edit(cnx, e)
|
||||
adm_info.update(args)
|
||||
sco_etud.admission_edit(cnx, adm_info)
|
||||
# Traite cas particulier de la date de naissance pour anciens
|
||||
# etudiants IUTV
|
||||
if import_naissance and "naissance" in etud:
|
||||
|
@ -1,7 +1,7 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "9.3.27"
|
||||
SCOVERSION = "9.3.28"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
|
@ -18,6 +18,9 @@
|
||||
<bac>S Scientifique</bac>
|
||||
<anneebac>2019</anneebac>
|
||||
<lycee>07981234T</lycee>
|
||||
<nom_lycee>nom du lycée</nom_lycee>
|
||||
<ville_lycee>ville lycée</ville_lycee>
|
||||
<codepostal_lycee>code postal lycée</codepostal_lycee>
|
||||
<mention>AB</mention>
|
||||
<bourse>N</bourse>
|
||||
<paiementinscription>true</paiementinscription>
|
||||
@ -34,5 +37,4 @@
|
||||
<cod_dip>{diplome}</cod_dip>
|
||||
<cod_etp>{etape}</cod_etp>
|
||||
<tem_rgl_sit_mil>O</tem_rgl_sit_mil>
|
||||
<fullname>{prenom} {nom}</fullname>
|
||||
</etudiant>
|
||||
|
@ -2,6 +2,14 @@
|
||||
|
||||
"""Simple fake HTTP serveur
|
||||
emulating "Apogee" Web service
|
||||
|
||||
Usage:
|
||||
/opt/scodoc/tools/fakeportal/fakeportal.py
|
||||
|
||||
et régler "URL du portail" sur la page de *Paramétrage* du département testé,
|
||||
typiquement: http://localhost:8678
|
||||
et "Version de l'API" à 2
|
||||
|
||||
"""
|
||||
from pathlib import Path
|
||||
from urllib.parse import parse_qs
|
||||
@ -32,6 +40,8 @@ ETUD_HEAD = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
ETUD_TAIL = """</etudiants>
|
||||
"""
|
||||
|
||||
CODES_ETAPES = ("V1RT", "V2RT", "V2RT2", "")
|
||||
|
||||
|
||||
def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
||||
"""return XML for a student"""
|
||||
@ -39,7 +49,7 @@ def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
||||
gender = random.choice(("M", "F"))
|
||||
nom, prenom = nomprenom(gender)
|
||||
if not etape:
|
||||
etape = random.choice(("V1RT", "V2RT", "V2RT2", ""))
|
||||
etape = random.choice(CODES_ETAPES)
|
||||
if not annee:
|
||||
annee = time.strftime("%Y") # current year
|
||||
diplome = "VDRT"
|
||||
@ -54,7 +64,6 @@ def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
||||
ville_naissance=random.choice(("Paris", "Berlin", "Londres", "")),
|
||||
code_dep_naissance=random.choice(("75", "99", "89")),
|
||||
libelle_dep_naissance="nom département",
|
||||
# nomlycee=
|
||||
)
|
||||
return data
|
||||
|
||||
@ -155,6 +164,10 @@ def signal_handler(sig, frame):
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Help message
|
||||
print(f"Les étapes (codes Apogée) sont: {CODES_ETAPES}")
|
||||
print(f"Définir l'URL du portail comme: http://localhost:{PORT}")
|
||||
print("""et "Version de l'API" à 2""")
|
||||
# Start the server
|
||||
print(f"Server listening on port {PORT}...")
|
||||
my_server = socketserver.TCPServer(("", PORT), MyHttpRequestHandler)
|
||||
|
Loading…
Reference in New Issue
Block a user