forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -301,7 +301,6 @@ class EtapeBilan:
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.semestres[sem["formsemestre_id"]] = sem
|
self.semestres[sem["formsemestre_id"]] = sem
|
||||||
# if anneeapogee == None: # année d'inscription par défaut
|
|
||||||
annee_apogee = str(
|
annee_apogee = str(
|
||||||
annee_scolaire_debut(sem["annee_debut"], sem["mois_debut_ord"])
|
annee_scolaire_debut(sem["annee_debut"], sem["mois_debut_ord"])
|
||||||
)
|
)
|
||||||
@ -313,7 +312,7 @@ class EtapeBilan:
|
|||||||
"""
|
"""
|
||||||
Prise en compte d'une étape apogée
|
Prise en compte d'une étape apogée
|
||||||
:param etape_str: La clé de l'étape à prendre en compte
|
:param etape_str: La clé de l'étape à prendre en compte
|
||||||
:param anneeapogee: l'année de l'étape à prendre en compte
|
:param annee_apogee: l'année de l'étape à prendre en compte
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
if etape_str != "":
|
if etape_str != "":
|
||||||
@ -405,9 +404,9 @@ class EtapeBilan:
|
|||||||
self.etu_semestre[formsemestre_id].add(key_etu)
|
self.etu_semestre[formsemestre_id].add(key_etu)
|
||||||
|
|
||||||
for key_etape in self.etapes:
|
for key_etape in self.etapes:
|
||||||
anneeapogee, etapestr = key_to_values(key_etape)
|
annee_apogee, etapestr = key_to_values(key_etape)
|
||||||
self.etu_etapes[key_etape] = set()
|
self.etu_etapes[key_etape] = set()
|
||||||
for etud in get_inscrits_etape(etapestr, anneeapogee):
|
for etud in get_inscrits_etape(etapestr, annee_apogee):
|
||||||
key_etu = self.register_etud_apogee(etud, key_etape)
|
key_etu = self.register_etud_apogee(etud, key_etape)
|
||||||
self.etu_etapes[key_etape].add(key_etu)
|
self.etu_etapes[key_etape].add(key_etu)
|
||||||
|
|
||||||
@ -771,8 +770,8 @@ class EtapeBilan:
|
|||||||
return "\n".join(H)
|
return "\n".join(H)
|
||||||
|
|
||||||
|
|
||||||
def etape_to_key(anneeapogee, etapestr):
|
def etape_to_key(annee_apogee, etape_str):
|
||||||
return anneeapogee, etapestr
|
return annee_apogee, etape_str
|
||||||
|
|
||||||
|
|
||||||
def key_to_values(key_etape):
|
def key_to_values(key_etape):
|
||||||
|
@ -147,17 +147,17 @@ get_maquette_url = _PI.get_maquette_url
|
|||||||
get_portal_api_version = _PI.get_portal_api_version
|
get_portal_api_version = _PI.get_portal_api_version
|
||||||
|
|
||||||
|
|
||||||
def get_inscrits_etape(code_etape, anneeapogee=None, ntrials=4, use_cache=True):
|
def get_inscrits_etape(code_etape, annee_apogee=None, ntrials=4, use_cache=True):
|
||||||
"""Liste des inscrits à une étape Apogée
|
"""Liste des inscrits à une étape Apogée
|
||||||
Result = list of dicts
|
Result = list of dicts
|
||||||
ntrials: try several time the same request, useful for some bad web services
|
ntrials: try several time the same request, useful for some bad web services
|
||||||
use_cache: use (redis) cache
|
use_cache: use (redis) cache
|
||||||
"""
|
"""
|
||||||
log(f"get_inscrits_etape: code={code_etape} anneeapogee={anneeapogee}")
|
log(f"get_inscrits_etape: code={code_etape} annee_apogee={annee_apogee}")
|
||||||
if anneeapogee is None:
|
if annee_apogee is None:
|
||||||
anneeapogee = str(time.localtime()[0])
|
annee_apogee = str(time.localtime()[0])
|
||||||
if use_cache:
|
if use_cache:
|
||||||
obj = ApoInscritsEtapeCache.get((code_etape, anneeapogee))
|
obj = ApoInscritsEtapeCache.get((code_etape, annee_apogee))
|
||||||
if obj:
|
if obj:
|
||||||
log("get_inscrits_etape: using cached data")
|
log("get_inscrits_etape: using cached data")
|
||||||
return obj
|
return obj
|
||||||
@ -171,7 +171,7 @@ def get_inscrits_etape(code_etape, anneeapogee=None, ntrials=4, use_cache=True):
|
|||||||
req = (
|
req = (
|
||||||
etud_url
|
etud_url
|
||||||
+ "?"
|
+ "?"
|
||||||
+ urllib.parse.urlencode((("etape", code_etape), ("annee", anneeapogee)))
|
+ urllib.parse.urlencode((("etape", code_etape), ("annee", annee_apogee)))
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
req = etud_url + "?" + urllib.parse.urlencode((("etape", code_etape),))
|
req = etud_url + "?" + urllib.parse.urlencode((("etape", code_etape),))
|
||||||
@ -191,7 +191,7 @@ def get_inscrits_etape(code_etape, anneeapogee=None, ntrials=4, use_cache=True):
|
|||||||
# Filtre sur annee inscription Apogee:
|
# Filtre sur annee inscription Apogee:
|
||||||
def check_inscription(e):
|
def check_inscription(e):
|
||||||
if "inscription" in e:
|
if "inscription" in e:
|
||||||
if e["inscription"] == anneeapogee:
|
if e["inscription"] == annee_apogee:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@ -204,7 +204,7 @@ def get_inscrits_etape(code_etape, anneeapogee=None, ntrials=4, use_cache=True):
|
|||||||
|
|
||||||
etuds = [e for e in etuds if check_inscription(e)]
|
etuds = [e for e in etuds if check_inscription(e)]
|
||||||
if use_cache and etuds:
|
if use_cache and etuds:
|
||||||
ApoInscritsEtapeCache.set((code_etape, anneeapogee), etuds)
|
ApoInscritsEtapeCache.set((code_etape, annee_apogee), etuds)
|
||||||
return etuds
|
return etuds
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,15 +59,20 @@ EKEY_NAME = "code NIP"
|
|||||||
# view:
|
# view:
|
||||||
def formsemestre_synchro_etuds(
|
def formsemestre_synchro_etuds(
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
etuds=[], # liste des codes NIP des etudiants a inscrire (ou deja inscrits)
|
etuds: list = None,
|
||||||
inscrits_without_key=[], # codes etudid des etudiants sans code NIP a laisser inscrits
|
inscrits_without_key: list = None,
|
||||||
anneeapogee=None,
|
annee_apogee=None,
|
||||||
submitted=False,
|
submitted=False,
|
||||||
dialog_confirmed=False,
|
dialog_confirmed=False,
|
||||||
export_cat_xls=None,
|
export_cat_xls=None,
|
||||||
read_only=False, # Affiche sans permettre modifications
|
read_only=False,
|
||||||
):
|
):
|
||||||
"""Synchronise les étudiants de ce semestre avec ceux d'Apogée.
|
"""Synchronise les étudiants de ce semestre avec ceux d'Apogée.
|
||||||
|
|
||||||
|
etuds : liste des codes NIP des etudiants a inscrire (ou deja inscrits)
|
||||||
|
inscrits_without_key : etudids des etudiants sans code NIP a laisser inscrits
|
||||||
|
read_only : Affiche sans permettre modifications
|
||||||
|
|
||||||
On a plusieurs cas de figure: L'étudiant peut être
|
On a plusieurs cas de figure: L'étudiant peut être
|
||||||
1- présent dans Apogée et inscrit dans le semestre ScoDoc (etuds_ok)
|
1- présent dans Apogée et inscrit dans le semestre ScoDoc (etuds_ok)
|
||||||
2- dans Apogée, dans ScoDoc, mais pas inscrit dans le semestre (etuds_noninscrits)
|
2- dans Apogée, dans ScoDoc, mais pas inscrit dans le semestre (etuds_noninscrits)
|
||||||
@ -88,6 +93,8 @@ def formsemestre_synchro_etuds(
|
|||||||
etuds: apres sélection par l'utilisateur, la liste des étudiants selectionnés
|
etuds: apres sélection par l'utilisateur, la liste des étudiants selectionnés
|
||||||
que l'on va importer/inscrire
|
que l'on va importer/inscrire
|
||||||
"""
|
"""
|
||||||
|
etuds = etuds or []
|
||||||
|
inscrits_without_key = inscrits_without_key or []
|
||||||
log(f"formsemestre_synchro_etuds: formsemestre_id={formsemestre_id}")
|
log(f"formsemestre_synchro_etuds: formsemestre_id={formsemestre_id}")
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
||||||
@ -113,14 +120,14 @@ def formsemestre_synchro_etuds(
|
|||||||
"notes.formsemestre_synchro_etuds",
|
"notes.formsemestre_synchro_etuds",
|
||||||
scodoc_dept=g.scodoc_dept,
|
scodoc_dept=g.scodoc_dept,
|
||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre_id,
|
||||||
anneeapogee=anneeapogee or None, # si None, le param n'est pas dans l'URL
|
annee_apogee=annee_apogee or None, # si None, le param n'est pas dans l'URL
|
||||||
)
|
)
|
||||||
|
|
||||||
if anneeapogee is None: # année d'inscription par défaut
|
if annee_apogee is None: # année d'inscription par défaut
|
||||||
anneeapogee = scu.annee_scolaire_debut(
|
annee_apogee = scu.annee_scolaire_debut(
|
||||||
sem["annee_debut"], sem["mois_debut_ord"]
|
sem["annee_debut"], sem["mois_debut_ord"]
|
||||||
)
|
)
|
||||||
anneeapogee = str(anneeapogee)
|
annee_apogee = str(annee_apogee)
|
||||||
|
|
||||||
if isinstance(etuds, str):
|
if isinstance(etuds, str):
|
||||||
etuds = etuds.split(",") # vient du form de confirmation
|
etuds = etuds.split(",") # vient du form de confirmation
|
||||||
@ -140,13 +147,13 @@ def formsemestre_synchro_etuds(
|
|||||||
inscrits_set,
|
inscrits_set,
|
||||||
inscrits_without_key_all,
|
inscrits_without_key_all,
|
||||||
etudsapo_ident,
|
etudsapo_ident,
|
||||||
) = list_synch(sem, anneeapogee=anneeapogee)
|
) = list_synch(sem, annee_apogee=annee_apogee)
|
||||||
if export_cat_xls:
|
if export_cat_xls:
|
||||||
filename = export_cat_xls
|
filename = export_cat_xls
|
||||||
xls = build_page(
|
xls = build_page(
|
||||||
sem,
|
sem,
|
||||||
etuds_by_cat,
|
etuds_by_cat,
|
||||||
anneeapogee,
|
annee_apogee,
|
||||||
export_cat_xls=export_cat_xls,
|
export_cat_xls=export_cat_xls,
|
||||||
base_url=base_url,
|
base_url=base_url,
|
||||||
read_only=read_only,
|
read_only=read_only,
|
||||||
@ -163,7 +170,7 @@ def formsemestre_synchro_etuds(
|
|||||||
H += build_page(
|
H += build_page(
|
||||||
sem,
|
sem,
|
||||||
etuds_by_cat,
|
etuds_by_cat,
|
||||||
anneeapogee,
|
annee_apogee,
|
||||||
base_url=base_url,
|
base_url=base_url,
|
||||||
read_only=read_only,
|
read_only=read_only,
|
||||||
)
|
)
|
||||||
@ -237,7 +244,7 @@ def formsemestre_synchro_etuds(
|
|||||||
[str(x) for x in inscrits_without_key]
|
[str(x) for x in inscrits_without_key]
|
||||||
),
|
),
|
||||||
"submitted": 1,
|
"submitted": 1,
|
||||||
"anneeapogee": anneeapogee,
|
"annee_apogee": annee_apogee,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -284,7 +291,7 @@ def formsemestre_synchro_etuds(
|
|||||||
def build_page(
|
def build_page(
|
||||||
sem,
|
sem,
|
||||||
etuds_by_cat,
|
etuds_by_cat,
|
||||||
anneeapogee,
|
annee_apogee,
|
||||||
export_cat_xls=None,
|
export_cat_xls=None,
|
||||||
base_url="",
|
base_url="",
|
||||||
read_only=False,
|
read_only=False,
|
||||||
@ -294,21 +301,23 @@ def build_page(
|
|||||||
etuds_by_cat, export_cat_xls=export_cat_xls, base_url=base_url
|
etuds_by_cat, export_cat_xls=export_cat_xls, base_url=base_url
|
||||||
)
|
)
|
||||||
year = time.localtime()[0]
|
year = time.localtime()[0]
|
||||||
if anneeapogee and abs(year - int(anneeapogee)) < 50:
|
if annee_apogee and abs(year - int(annee_apogee)) < 50:
|
||||||
years = list(
|
years = list(
|
||||||
range(min(year - 1, int(anneeapogee) - 1), max(year, int(anneeapogee)) + 1)
|
range(
|
||||||
|
min(year - 1, int(annee_apogee) - 1), max(year, int(annee_apogee)) + 1
|
||||||
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
years = list(range(year - 1, year + 1))
|
years = list(range(year - 1, year + 1))
|
||||||
anneeapogee = ""
|
annee_apogee = ""
|
||||||
options = []
|
options = []
|
||||||
for y in years:
|
for y in years:
|
||||||
if str(y) == anneeapogee:
|
if str(y) == annee_apogee:
|
||||||
sel = "selected"
|
sel = "selected"
|
||||||
else:
|
else:
|
||||||
sel = ""
|
sel = ""
|
||||||
options.append('<option value="%s" %s>%s</option>' % (str(y), sel, str(y)))
|
options.append('<option value="%s" %s>%s</option>' % (str(y), sel, str(y)))
|
||||||
if anneeapogee:
|
if annee_apogee:
|
||||||
sel = ""
|
sel = ""
|
||||||
else:
|
else:
|
||||||
sel = "selected"
|
sel = "selected"
|
||||||
@ -328,8 +337,8 @@ def build_page(
|
|||||||
"""
|
"""
|
||||||
% sem,
|
% sem,
|
||||||
"""
|
"""
|
||||||
Année Apogée: <select id="anneeapogee" name="anneeapogee"
|
Année Apogée: <select id="anne_eapogee" name="annee_apogee"
|
||||||
onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&anneeapogee='+document.getElementById('anneeapogee').value">"""
|
onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&annee_apogee='+document.getElementById('annee_apogee').value">"""
|
||||||
% (sem["formsemestre_id"]),
|
% (sem["formsemestre_id"]),
|
||||||
"\n".join(options),
|
"\n".join(options),
|
||||||
"""
|
"""
|
||||||
@ -359,7 +368,7 @@ def build_page(
|
|||||||
return H
|
return H
|
||||||
|
|
||||||
|
|
||||||
def list_synch(sem, anneeapogee=None):
|
def list_synch(sem, annee_apogee=None):
|
||||||
""""""
|
""""""
|
||||||
inscrits = sco_inscr_passage.list_inscrits(sem["formsemestre_id"], with_dems=True)
|
inscrits = sco_inscr_passage.list_inscrits(sem["formsemestre_id"], with_dems=True)
|
||||||
# Tous les ensembles d'etudiants sont ici des ensembles de codes NIP (voir EKEY_SCO)
|
# Tous les ensembles d'etudiants sont ici des ensembles de codes NIP (voir EKEY_SCO)
|
||||||
@ -372,39 +381,35 @@ def list_synch(sem, anneeapogee=None):
|
|||||||
e["inscrit"] = True # checkbox state
|
e["inscrit"] = True # checkbox state
|
||||||
else:
|
else:
|
||||||
inscrits_set.add(e[EKEY_SCO])
|
inscrits_set.add(e[EKEY_SCO])
|
||||||
# allinscrits_set = set() # tous les inscrits scodoc avec code_nip, y compris les demissionnaires
|
|
||||||
# for e in inscrits.values():
|
|
||||||
# if e[EKEY_SCO]:
|
|
||||||
# allinscrits_set.add(e[EKEY_SCO])
|
|
||||||
|
|
||||||
datefinalisationinscription_by_NIP = {} # nip : datefinalisationinscription_str
|
date_finalisation_inscr_by_nip = {} # nip : datefinalisationinscription_str
|
||||||
|
|
||||||
etapes = sem["etapes"]
|
etapes = sem["etapes"]
|
||||||
etudsapo_set = set()
|
etudsapo_set = set()
|
||||||
etudsapo_ident = {}
|
etudsapo_ident = {}
|
||||||
|
etuds_payes = set() # étudiants ayant payé (avec balise <paiementinscription> true)
|
||||||
for etape in etapes:
|
for etape in etapes:
|
||||||
if etape:
|
if etape:
|
||||||
etudsapo = sco_portal_apogee.get_inscrits_etape(
|
etudsapo = sco_portal_apogee.get_inscrits_etape(
|
||||||
etape, anneeapogee=anneeapogee
|
etape, annee_apogee=annee_apogee
|
||||||
)
|
)
|
||||||
etudsapo_set = etudsapo_set.union(set([x[EKEY_APO] for x in etudsapo]))
|
etudsapo_set |= {x[EKEY_APO] for x in etudsapo}
|
||||||
for e in etudsapo:
|
for e in etudsapo:
|
||||||
if e[EKEY_APO] not in etudsapo_ident:
|
if e[EKEY_APO] not in etudsapo_ident:
|
||||||
etudsapo_ident[e[EKEY_APO]] = e
|
etudsapo_ident[e[EKEY_APO]] = e
|
||||||
datefinalisationinscription_by_NIP[e[EKEY_APO]] = e[
|
date_finalisation_inscr_by_nip[e[EKEY_APO]] = e[
|
||||||
"datefinalisationinscription"
|
"datefinalisationinscription"
|
||||||
]
|
]
|
||||||
|
# note: si le portail ne renseigne pas cette balise, suppose que paiement ok
|
||||||
|
etuds_payes |= {
|
||||||
|
x[EKEY_APO] for x in etudsapo if x.get("paiementinscription", True)
|
||||||
|
}
|
||||||
|
|
||||||
# categories:
|
# categories:
|
||||||
etuds_ok = etudsapo_set.intersection(inscrits_set)
|
etuds_ok = etudsapo_set.intersection(inscrits_set)
|
||||||
etuds_aposco, a_importer, key2etudid = list_all(etudsapo_set)
|
etuds_aposco, a_importer, key2etudid = list_all(etudsapo_set)
|
||||||
etuds_noninscrits = etuds_aposco - inscrits_set
|
etuds_noninscrits = etuds_aposco - inscrits_set
|
||||||
etuds_nonapogee = inscrits_set - etudsapo_set
|
etuds_nonapogee = inscrits_set - etudsapo_set
|
||||||
# Etudiants ayant payé (avec balise <paiementinscription> true)
|
|
||||||
# note: si le portail ne renseigne pas cette balise, suppose que paiement ok
|
|
||||||
etuds_payes = set(
|
|
||||||
[x[EKEY_APO] for x in etudsapo if x.get("paiementinscription", True)]
|
|
||||||
)
|
|
||||||
#
|
#
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
|
|
||||||
@ -420,7 +425,7 @@ def list_synch(sem, anneeapogee=None):
|
|||||||
etud["inscrit"] = is_inscrit # checkbox state
|
etud["inscrit"] = is_inscrit # checkbox state
|
||||||
etud[
|
etud[
|
||||||
"datefinalisationinscription"
|
"datefinalisationinscription"
|
||||||
] = datefinalisationinscription_by_NIP.get(key, None)
|
] = date_finalisation_inscr_by_nip.get(key, None)
|
||||||
if key in etudsapo_ident:
|
if key in etudsapo_ident:
|
||||||
etud["etape"] = etudsapo_ident[key].get("etape", "")
|
etud["etape"] = etudsapo_ident[key].get("etape", "")
|
||||||
else:
|
else:
|
||||||
@ -827,12 +832,14 @@ def formsemestre_import_etud_admission(
|
|||||||
# Essaie de recuperer les etudiants des étapes, car
|
# Essaie de recuperer les etudiants des étapes, car
|
||||||
# la requete get_inscrits_etape est en général beaucoup plus
|
# la requete get_inscrits_etape est en général beaucoup plus
|
||||||
# rapide que les requetes individuelles get_etud_apogee
|
# rapide que les requetes individuelles get_etud_apogee
|
||||||
anneeapogee = str(
|
annee_apogee = str(
|
||||||
scu.annee_scolaire_debut(sem["annee_debut"], sem["mois_debut_ord"])
|
scu.annee_scolaire_debut(sem["annee_debut"], sem["mois_debut_ord"])
|
||||||
)
|
)
|
||||||
apo_etuds = {} # nip : etud apo
|
apo_etuds = {} # nip : etud apo
|
||||||
for etape in sem["etapes"]:
|
for etape in sem["etapes"]:
|
||||||
etudsapo = sco_portal_apogee.get_inscrits_etape(etape, anneeapogee=anneeapogee)
|
etudsapo = sco_portal_apogee.get_inscrits_etape(
|
||||||
|
etape, annee_apogee=annee_apogee
|
||||||
|
)
|
||||||
apo_etuds.update({e["nip"]: e for e in etudsapo})
|
apo_etuds.update({e["nip"]: e for e in etudsapo})
|
||||||
|
|
||||||
for i in ins:
|
for i in ins:
|
||||||
|
Loading…
Reference in New Issue
Block a user