refactoring (context)

This commit is contained in:
Emmanuel Viennet 2021-08-20 01:09:55 +02:00
parent ccbb021f50
commit 3a8474f12d
53 changed files with 424 additions and 542 deletions

View File

@ -107,17 +107,15 @@ def get_sem_ues_modimpls(context, formsemestre_id, modimpls=None):
(utilisé quand on ne peut pas construire nt et faire nt.get_ues()) (utilisé quand on ne peut pas construire nt et faire nt.get_ues())
""" """
if modimpls is None: if modimpls is None:
modimpls = sco_moduleimpl.do_moduleimpl_list( modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
uedict = {} uedict = {}
for modimpl in modimpls: for modimpl in modimpls:
mod = sco_edit_module.do_module_list( mod = sco_edit_module.do_module_list(args={"module_id": modimpl["module_id"]})[
context, args={"module_id": modimpl["module_id"]} 0
)[0] ]
modimpl["module"] = mod modimpl["module"] = mod
if not mod["ue_id"] in uedict: if not mod["ue_id"] in uedict:
ue = sco_edit_ue.do_ue_list(context, args={"ue_id": mod["ue_id"]})[0] ue = sco_edit_ue.do_ue_list(args={"ue_id": mod["ue_id"]})[0]
uedict[ue["ue_id"]] = ue uedict[ue["ue_id"]] = ue
ues = list(uedict.values()) ues = list(uedict.values())
ues.sort(key=lambda u: u["numero"]) ues.sort(key=lambda u: u["numero"])
@ -231,14 +229,14 @@ class NotesTable(object):
for modimpl in self._modimpls: for modimpl in self._modimpls:
mod = modimpl["module"] # has been added here by do_formsemestre_moyennes mod = modimpl["module"] # has been added here by do_formsemestre_moyennes
if not mod["ue_id"] in uedict: if not mod["ue_id"] in uedict:
ue = sco_edit_ue.do_ue_list(context, args={"ue_id": mod["ue_id"]})[0] ue = sco_edit_ue.do_ue_list(args={"ue_id": mod["ue_id"]})[0]
uedict[ue["ue_id"]] = ue uedict[ue["ue_id"]] = ue
else: else:
ue = uedict[mod["ue_id"]] ue = uedict[mod["ue_id"]]
modimpl["ue"] = ue # add ue dict to moduleimpl modimpl["ue"] = ue # add ue dict to moduleimpl
self._matmoys[mod["matiere_id"]] = {} self._matmoys[mod["matiere_id"]] = {}
mat = sco_edit_matiere.do_matiere_list( mat = sco_edit_matiere.do_matiere_list(
context, args={"matiere_id": mod["matiere_id"]} args={"matiere_id": mod["matiere_id"]}
)[0] )[0]
modimpl["mat"] = mat # add matiere dict to moduleimpl modimpl["mat"] = mat # add matiere dict to moduleimpl
# calcul moyennes du module et stocke dans le module # calcul moyennes du module et stocke dans le module

View File

@ -1061,7 +1061,7 @@ def invalidate_abs_count_sem(sem):
"""Invalidate (clear) cached abs counts for all the students of this semestre""" """Invalidate (clear) cached abs counts for all the students of this semestre"""
inscriptions = ( inscriptions = (
sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
None, sem["formsemestre_id"] sem["formsemestre_id"]
) )
) )
for ins in inscriptions: for ins in inscriptions:

View File

@ -122,7 +122,7 @@ def doSignaleAbsence(
J = "NON " J = "NON "
M = "" M = ""
if moduleimpl_id and moduleimpl_id != "NULL": if moduleimpl_id and moduleimpl_id != "NULL":
mod = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] mod = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
formsemestre_id = mod["formsemestre_id"] formsemestre_id = mod["formsemestre_id"]
nt = sco_cache.NotesTableCache.get(formsemestre_id) nt = sco_cache.NotesTableCache.get(formsemestre_id)
ues = nt.get_ues(etudid=etudid) ues = nt.get_ues(etudid=etudid)
@ -967,7 +967,7 @@ def _TablesAbsEtud(
ex = [] ex = []
for ev in a["evals"]: for ev in a["evals"]:
mod = sco_moduleimpl.do_moduleimpl_withmodule_list( mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, moduleimpl_id=ev["moduleimpl_id"] moduleimpl_id=ev["moduleimpl_id"]
)[0] )[0]
if format == "html": if format == "html":
ex.append( ex.append(
@ -984,7 +984,7 @@ def _TablesAbsEtud(
ex = [] ex = []
for ev in a.get("absent", []): for ev in a.get("absent", []):
mod = sco_moduleimpl.do_moduleimpl_withmodule_list( mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, moduleimpl_id=ev["moduleimpl_id"] moduleimpl_id=ev["moduleimpl_id"]
)[0] )[0]
if format == "html": if format == "html":
ex.append( ex.append(

View File

@ -372,7 +372,7 @@ def formsemestre_bulletinetud_published_dict(
"decisions_ue" "decisions_ue"
]: # and sco_preferences.get_preference( 'bul_show_uevalid', formsemestre_id): always publish (car utile pour export Apogee) ]: # and sco_preferences.get_preference( 'bul_show_uevalid', formsemestre_id): always publish (car utile pour export Apogee)
for ue_id in decision["decisions_ue"].keys(): for ue_id in decision["decisions_ue"].keys():
ue = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] ue = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0]
d["decision_ue"].append( d["decision_ue"].append(
dict( dict(
ue_id=ue["ue_id"], ue_id=ue["ue_id"],

View File

@ -390,7 +390,7 @@ def make_xml_formsemestre_bulletinetud(
"decisions_ue" "decisions_ue"
]: # and sco_preferences.get_preference( 'bul_show_uevalid', formsemestre_id): always publish (car utile pour export Apogee) ]: # and sco_preferences.get_preference( 'bul_show_uevalid', formsemestre_id): always publish (car utile pour export Apogee)
for ue_id in decision["decisions_ue"].keys(): for ue_id in decision["decisions_ue"].keys():
ue = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] ue = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0]
doc.append( doc.append(
Element( Element(
"decision_ue", "decision_ue",

View File

@ -264,7 +264,7 @@ def invalidate_formsemestre( # was inval_cache( context, formsemestre_id=None,
else: else:
formsemestre_ids = [ formsemestre_ids = [
formsemestre_id formsemestre_id
] + sco_parcours_dut.list_formsemestre_utilisateurs_uecap(None, formsemestre_id) ] + sco_parcours_dut.list_formsemestre_utilisateurs_uecap(formsemestre_id)
log(f"----- invalidate_formsemestre: clearing {formsemestre_ids} -----") log(f"----- invalidate_formsemestre: clearing {formsemestre_ids} -----")
if not pdfonly: if not pdfonly:

View File

@ -79,9 +79,7 @@ def formsemestre_expressions_use_abscounts(context, formsemestre_id):
if expr and expr[0] != "#" and ab in expr: if expr and expr[0] != "#" and ab in expr:
return True return True
# 2- moyennes de modules # 2- moyennes de modules
for mod in sco_moduleimpl.do_moduleimpl_list( for mod in sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id):
context, formsemestre_id=formsemestre_id
):
if moduleimpl_has_expression(context, mod) and ab in mod["computation_expr"]: if moduleimpl_has_expression(context, mod) and ab in mod["computation_expr"]:
return True return True
return False return False
@ -203,7 +201,7 @@ def do_moduleimpl_moyennes(context, nt, mod):
is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS
sem = sco_formsemestre.get_formsemestre(mod["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(mod["formsemestre_id"])
etudids = sco_moduleimpl.do_moduleimpl_listeetuds( etudids = sco_moduleimpl.do_moduleimpl_listeetuds(
context, moduleimpl_id moduleimpl_id
) # tous, y compris demissions ) # tous, y compris demissions
# Inscrits au semestre (pour traiter les demissions): # Inscrits au semestre (pour traiter les demissions):
inssem_set = set( inssem_set = set(
@ -379,9 +377,7 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id):
# args={"formsemestre_id": formsemestre_id} # args={"formsemestre_id": formsemestre_id}
# ) # )
# etudids = [x["etudid"] for x in inscr] # etudids = [x["etudid"] for x in inscr]
modimpls = sco_moduleimpl.do_moduleimpl_list( modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
# recupere les moyennes des etudiants de tous les modules # recupere les moyennes des etudiants de tous les modules
D = {} D = {}
valid_evals = [] valid_evals = []
@ -389,9 +385,9 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id):
mods_att = [] mods_att = []
expr_diags = [] expr_diags = []
for modimpl in modimpls: for modimpl in modimpls:
mod = sco_edit_module.do_module_list( mod = sco_edit_module.do_module_list(args={"module_id": modimpl["module_id"]})[
context, args={"module_id": modimpl["module_id"]} 0
)[0] ]
modimpl["module"] = mod # add module dict to moduleimpl (used by nt) modimpl["module"] = mod # add module dict to moduleimpl (used by nt)
moduleimpl_id = modimpl["moduleimpl_id"] moduleimpl_id = modimpl["moduleimpl_id"]
assert moduleimpl_id not in D assert moduleimpl_id not in D

View File

@ -60,7 +60,7 @@ def formsemestre_table_estim_cost(
sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem = sco_formsemestre.get_formsemestre(formsemestre_id)
sco_formsemestre_status.fill_formsemestre(sem) sco_formsemestre_status.fill_formsemestre(sem)
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
T = [] T = []
for M in Mlist: for M in Mlist:

View File

@ -64,7 +64,6 @@ def report_debouche_date(context, start_year=None, format="html", REQUEST=None):
tab.caption = "Récapitulatif débouchés à partir du 1/1/%s." % start_year tab.caption = "Récapitulatif débouchés à partir du 1/1/%s." % start_year
tab.base_url = "%s?start_year=%s" % (REQUEST.URL0, start_year) tab.base_url = "%s?start_year=%s" % (REQUEST.URL0, start_year)
return tab.make_page( return tab.make_page(
context,
title="""<h2 class="formsemestre">Débouchés étudiants </h2>""", title="""<h2 class="formsemestre">Débouchés étudiants </h2>""",
init_qtip=True, init_qtip=True,
javascripts=["js/etud_info.js"], javascripts=["js/etud_info.js"],

View File

@ -47,7 +47,7 @@ from app.scodoc import sco_formsemestre
from app.scodoc import sco_news from app.scodoc import sco_news
def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST=None): def formation_delete(formation_id=None, dialog_confirmed=False, REQUEST=None):
"""Delete a formation""" """Delete a formation"""
F = sco_formations.formation_list(args={"formation_id": formation_id}) F = sco_formations.formation_list(args={"formation_id": formation_id})
if not F: if not F:
@ -84,7 +84,7 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST
parameters={"formation_id": formation_id}, parameters={"formation_id": formation_id},
) )
else: else:
do_formation_delete(context, F["formation_id"]) do_formation_delete(F["formation_id"])
H.append( H.append(
"""<p>OK, formation supprimée.</p> """<p>OK, formation supprimée.</p>
<p><a class="stdlink" href="%s">continuer</a></p>""" <p><a class="stdlink" href="%s">continuer</a></p>"""
@ -95,18 +95,18 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST
return "\n".join(H) return "\n".join(H)
def do_formation_delete(context, oid): def do_formation_delete(oid):
"""delete a formation (and all its UE, matieres, modules) """delete a formation (and all its UE, matieres, modules)
XXX delete all ues, will break if there are validations ! USE WITH CARE ! XXX delete all ues, will break if there are validations ! USE WITH CARE !
""" """
F = sco_formations.formation_list(args={"formation_id": oid})[0] F = sco_formations.formation_list(args={"formation_id": oid})[0]
if sco_formations.formation_has_locked_sems(context, oid): if sco_formations.formation_has_locked_sems(oid):
raise ScoLockedFormError() raise ScoLockedFormError()
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# delete all UE in this formation # delete all UE in this formation
ues = sco_edit_ue.do_ue_list(context, {"formation_id": oid}) ues = sco_edit_ue.do_ue_list({"formation_id": oid})
for ue in ues: for ue in ues:
sco_edit_ue.do_ue_delete(context, ue["ue_id"], force=True) sco_edit_ue.do_ue_delete(ue["ue_id"], force=True)
sco_formations._formationEditor.delete(cnx, oid) sco_formations._formationEditor.delete(cnx, oid)
@ -119,12 +119,12 @@ def do_formation_delete(context, oid):
) )
def formation_create(context, REQUEST=None): def formation_create(REQUEST=None):
"""Creation d'une formation""" """Creation d'une formation"""
return formation_edit(context, create=True, REQUEST=REQUEST) return formation_edit(create=True, REQUEST=REQUEST)
def formation_edit(context, formation_id=None, create=False, REQUEST=None): def formation_edit(formation_id=None, create=False, REQUEST=None):
"""Edit or create a formation""" """Edit or create a formation"""
if create: if create:
H = [ H = [
@ -147,7 +147,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None):
if not F: if not F:
raise ScoValueError("formation inexistante !") raise ScoValueError("formation inexistante !")
initvalues = F[0] initvalues = F[0]
is_locked = sco_formations.formation_has_locked_sems(context, formation_id) is_locked = sco_formations.formation_has_locked_sems(formation_id)
submitlabel = "Modifier les valeurs" submitlabel = "Modifier les valeurs"
H = [ H = [
html_sco_header.sco_header(page_title="Modification d'une formation"), html_sco_header.sco_header(page_title="Modification d'une formation"),
@ -247,9 +247,9 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None):
) )
# #
if create: if create:
formation_id = do_formation_create(context, tf[2]) formation_id = do_formation_create(tf[2])
else: else:
do_formation_edit(context, tf[2]) do_formation_edit(tf[2])
return flask.redirect( return flask.redirect(
url_for( url_for(
"notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=formation_id "notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=formation_id
@ -257,7 +257,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None):
) )
def do_formation_create(context, args): def do_formation_create(args):
"create a formation" "create a formation"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# check unique acronyme/titre/version # check unique acronyme/titre/version
@ -282,14 +282,14 @@ def do_formation_create(context, args):
return r return r
def do_formation_edit(context, args): def do_formation_edit(args):
"edit a formation" "edit a formation"
# log('do_formation_edit( args=%s )'%args) # log('do_formation_edit( args=%s )'%args)
# On autorise la modif de la formation meme si elle est verrouillee # On autorise la modif de la formation meme si elle est verrouillee
# car cela ne change que du cosmetique, (sauf eventuellement le code formation ?) # car cela ne change que du cosmetique, (sauf eventuellement le code formation ?)
# mais si verrouillée on ne peut changer le type de parcours # mais si verrouillée on ne peut changer le type de parcours
if sco_formations.formation_has_locked_sems(context, args["formation_id"]): if sco_formations.formation_has_locked_sems(args["formation_id"]):
if "type_parcours" in args: if "type_parcours" in args:
del args["type_parcours"] del args["type_parcours"]
# On ne peut jamais supprimer le code formation: # On ne peut jamais supprimer le code formation:
@ -311,17 +311,15 @@ def invalidate_sems_in_formation(formation_id):
) # > formation modif. ) # > formation modif.
def module_move(context, module_id, after=0, REQUEST=None, redirect=1): def module_move(module_id, after=0, REQUEST=None, redirect=1):
"""Move before/after previous one (decrement/increment numero)""" """Move before/after previous one (decrement/increment numero)"""
module = sco_edit_module.do_module_list(context, {"module_id": module_id})[0] module = sco_edit_module.do_module_list({"module_id": module_id})[0]
redirect = int(redirect) redirect = int(redirect)
after = int(after) # 0: deplace avant, 1 deplace apres after = int(after) # 0: deplace avant, 1 deplace apres
if after not in (0, 1): if after not in (0, 1):
raise ValueError('invalid value for "after"') raise ValueError('invalid value for "after"')
formation_id = module["formation_id"] formation_id = module["formation_id"]
others = sco_edit_module.do_module_list( others = sco_edit_module.do_module_list({"matiere_id": module["matiere_id"]})
context, {"matiere_id": module["matiere_id"]}
)
# log('others=%s' % others) # log('others=%s' % others)
if len(others) > 1: if len(others) > 1:
idx = [p["module_id"] for p in others].index(module_id) idx = [p["module_id"] for p in others].index(module_id)
@ -350,16 +348,16 @@ def module_move(context, module_id, after=0, REQUEST=None, redirect=1):
) )
def ue_move(context, ue_id, after=0, REQUEST=None, redirect=1): def ue_move(ue_id, after=0, REQUEST=None, redirect=1):
"""Move UE before/after previous one (decrement/increment numero)""" """Move UE before/after previous one (decrement/increment numero)"""
o = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] o = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0]
# log('ue_move %s (#%s) after=%s' % (ue_id, o['numero'], after)) # log('ue_move %s (#%s) after=%s' % (ue_id, o['numero'], after))
redirect = int(redirect) redirect = int(redirect)
after = int(after) # 0: deplace avant, 1 deplace apres after = int(after) # 0: deplace avant, 1 deplace apres
if after not in (0, 1): if after not in (0, 1):
raise ValueError('invalid value for "after"') raise ValueError('invalid value for "after"')
formation_id = o["formation_id"] formation_id = o["formation_id"]
others = sco_edit_ue.do_ue_list(context, {"formation_id": formation_id}) others = sco_edit_ue.do_ue_list({"formation_id": formation_id})
if len(others) > 1: if len(others) > 1:
idx = [p["ue_id"] for p in others].index(ue_id) idx = [p["ue_id"] for p in others].index(ue_id)
neigh = None # object to swap with neigh = None # object to swap with

View File

@ -47,31 +47,29 @@ _matiereEditor = ndb.EditableTable(
) )
def do_matiere_list(context, *args, **kw): def do_matiere_list(*args, **kw):
"list matieres" "list matieres"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
return _matiereEditor.list(cnx, *args, **kw) return _matiereEditor.list(cnx, *args, **kw)
def do_matiere_edit(context, *args, **kw): def do_matiere_edit(*args, **kw):
"edit a matiere" "edit a matiere"
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
from app.scodoc import sco_edit_formation from app.scodoc import sco_edit_formation
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# check # check
mat = do_matiere_list(context, {"matiere_id": args[0]["matiere_id"]})[0] mat = do_matiere_list({"matiere_id": args[0]["matiere_id"]})[0]
if matiere_is_locked(context, mat["matiere_id"]): if matiere_is_locked(mat["matiere_id"]):
raise ScoLockedFormError() raise ScoLockedFormError()
# edit # edit
_matiereEditor.edit(cnx, *args, **kw) _matiereEditor.edit(cnx, *args, **kw)
formation_id = sco_edit_ue.do_ue_list(None, {"ue_id": mat["ue_id"]})[0][ formation_id = sco_edit_ue.do_ue_list({"ue_id": mat["ue_id"]})[0]["formation_id"]
"formation_id"
]
sco_edit_formation.invalidate_sems_in_formation(formation_id) sco_edit_formation.invalidate_sems_in_formation(formation_id)
def do_matiere_create(context, args): def do_matiere_create(args):
"create a matiere" "create a matiere"
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
from app.scodoc import sco_formations from app.scodoc import sco_formations
@ -79,7 +77,7 @@ def do_matiere_create(context, args):
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# check # check
ue = sco_edit_ue.do_ue_list(context, {"ue_id": args["ue_id"]})[0] ue = sco_edit_ue.do_ue_list({"ue_id": args["ue_id"]})[0]
# create matiere # create matiere
r = _matiereEditor.create(cnx, args) r = _matiereEditor.create(cnx, args)
@ -94,11 +92,11 @@ def do_matiere_create(context, args):
return r return r
def matiere_create(context, ue_id=None, REQUEST=None): def matiere_create(ue_id=None, REQUEST=None):
"""Creation d'une matiere""" """Creation d'une matiere"""
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
UE = sco_edit_ue.do_ue_list(context, args={"ue_id": ue_id})[0] UE = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0]
H = [ H = [
html_sco_header.sco_header(page_title="Création d'une matière"), html_sco_header.sco_header(page_title="Création d'une matière"),
"""<h2>Création d'une matière dans l'UE %(titre)s (%(acronyme)s)</h2>""" % UE, """<h2>Création d'une matière dans l'UE %(titre)s (%(acronyme)s)</h2>""" % UE,
@ -145,7 +143,7 @@ associé.
return flask.redirect(dest_url) return flask.redirect(dest_url)
else: else:
# check unicity # check unicity
mats = do_matiere_list(context, args={"ue_id": ue_id, "titre": tf[2]["titre"]}) mats = do_matiere_list(args={"ue_id": ue_id, "titre": tf[2]["titre"]})
if mats: if mats:
return ( return (
"\n".join(H) "\n".join(H)
@ -153,11 +151,11 @@ associé.
+ tf[1] + tf[1]
+ html_sco_header.sco_footer() + html_sco_header.sco_footer()
) )
_ = do_matiere_create(context, tf[2]) _ = do_matiere_create(tf[2])
return flask.redirect(dest_url) return flask.redirect(dest_url)
def do_matiere_delete(context, oid): def do_matiere_delete(oid):
"delete matiere and attached modules" "delete matiere and attached modules"
from app.scodoc import sco_formations from app.scodoc import sco_formations
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
@ -166,9 +164,9 @@ def do_matiere_delete(context, oid):
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# check # check
mat = do_matiere_list(context, {"matiere_id": oid})[0] mat = do_matiere_list({"matiere_id": oid})[0]
ue = sco_edit_ue.do_ue_list(context, {"ue_id": mat["ue_id"]})[0] ue = sco_edit_ue.do_ue_list({"ue_id": mat["ue_id"]})[0]
locked = matiere_is_locked(context, mat["matiere_id"]) locked = matiere_is_locked(mat["matiere_id"])
if locked: if locked:
log("do_matiere_delete: mat=%s" % mat) log("do_matiere_delete: mat=%s" % mat)
log("do_matiere_delete: ue=%s" % ue) log("do_matiere_delete: ue=%s" % ue)
@ -176,9 +174,9 @@ def do_matiere_delete(context, oid):
raise ScoLockedFormError() raise ScoLockedFormError()
log("do_matiere_delete: matiere_id=%s" % oid) log("do_matiere_delete: matiere_id=%s" % oid)
# delete all modules in this matiere # delete all modules in this matiere
mods = sco_edit_module.do_module_list(context, {"matiere_id": oid}) mods = sco_edit_module.do_module_list({"matiere_id": oid})
for mod in mods: for mod in mods:
sco_edit_module.do_module_delete(context, mod["module_id"]) sco_edit_module.do_module_delete(mod["module_id"])
_matiereEditor.delete(cnx, oid) _matiereEditor.delete(cnx, oid)
# news # news
@ -191,12 +189,12 @@ def do_matiere_delete(context, oid):
) )
def matiere_delete(context, matiere_id=None, REQUEST=None): def matiere_delete(matiere_id=None, REQUEST=None):
"""Delete an UE""" """Delete an UE"""
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
M = do_matiere_list(context, args={"matiere_id": matiere_id})[0] M = do_matiere_list(args={"matiere_id": matiere_id})[0]
UE = sco_edit_ue.do_ue_list(context, args={"ue_id": M["ue_id"]})[0] UE = sco_edit_ue.do_ue_list(args={"ue_id": M["ue_id"]})[0]
H = [ H = [
html_sco_header.sco_header(page_title="Suppression d'une matière"), html_sco_header.sco_header(page_title="Suppression d'une matière"),
"<h2>Suppression de la matière %(titre)s" % M, "<h2>Suppression de la matière %(titre)s" % M,
@ -216,26 +214,26 @@ def matiere_delete(context, matiere_id=None, REQUEST=None):
elif tf[0] == -1: elif tf[0] == -1:
return flask.redirect(dest_url) return flask.redirect(dest_url)
else: else:
do_matiere_delete(context, matiere_id) do_matiere_delete(matiere_id)
return flask.redirect(dest_url) return flask.redirect(dest_url)
def matiere_edit(context, matiere_id=None, REQUEST=None): def matiere_edit(matiere_id=None, REQUEST=None):
"""Edit matiere""" """Edit matiere"""
from app.scodoc import sco_formations from app.scodoc import sco_formations
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
F = do_matiere_list(context, args={"matiere_id": matiere_id}) F = do_matiere_list(args={"matiere_id": matiere_id})
if not F: if not F:
raise ScoValueError("Matière inexistante !") raise ScoValueError("Matière inexistante !")
F = F[0] F = F[0]
U = sco_edit_ue.do_ue_list(context, args={"ue_id": F["ue_id"]}) U = sco_edit_ue.do_ue_list(args={"ue_id": F["ue_id"]})
if not F: if not F:
raise ScoValueError("UE inexistante !") raise ScoValueError("UE inexistante !")
U = U[0] U = U[0]
Fo = sco_formations.formation_list(args={"formation_id": U["formation_id"]})[0] Fo = sco_formations.formation_list(args={"formation_id": U["formation_id"]})[0]
ues = sco_edit_ue.do_ue_list(context, args={"formation_id": U["formation_id"]}) ues = sco_edit_ue.do_ue_list(args={"formation_id": U["formation_id"]})
ue_names = ["%(acronyme)s (%(titre)s)" % u for u in ues] ue_names = ["%(acronyme)s (%(titre)s)" % u for u in ues]
ue_ids = [u["ue_id"] for u in ues] ue_ids = [u["ue_id"] for u in ues]
H = [ H = [
@ -288,9 +286,7 @@ associé.
return flask.redirect(dest_url) return flask.redirect(dest_url)
else: else:
# check unicity # check unicity
mats = do_matiere_list( mats = do_matiere_list(args={"ue_id": tf[2]["ue_id"], "titre": tf[2]["titre"]})
context, args={"ue_id": tf[2]["ue_id"], "titre": tf[2]["titre"]}
)
if len(mats) > 1 or (len(mats) == 1 and mats[0]["matiere_id"] != matiere_id): if len(mats) > 1 or (len(mats) == 1 and mats[0]["matiere_id"] != matiere_id):
return ( return (
"\n".join(H) "\n".join(H)
@ -307,12 +303,12 @@ associé.
{"ue_id": tf[2]["ue_id"], "matiere_id": matiere_id}, {"ue_id": tf[2]["ue_id"], "matiere_id": matiere_id},
) )
do_matiere_edit(context, tf[2]) do_matiere_edit(tf[2])
return flask.redirect(dest_url) return flask.redirect(dest_url)
def matiere_is_locked(context, matiere_id): def matiere_is_locked(matiere_id):
"""True if matiere should not be modified """True if matiere should not be modified
(contains modules used in a locked formsemestre) (contains modules used in a locked formsemestre)
""" """

View File

@ -93,13 +93,13 @@ _moduleEditor = ndb.EditableTable(
) )
def do_module_list(context, *args, **kw): def do_module_list(*args, **kw):
"list modules" "list modules"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
return _moduleEditor.list(cnx, *args, **kw) return _moduleEditor.list(cnx, *args, **kw)
def do_module_create(context, args) -> int: def do_module_create(args) -> int:
"create a module" "create a module"
# create # create
from app.scodoc import sco_formations from app.scodoc import sco_formations
@ -118,15 +118,15 @@ def do_module_create(context, args) -> int:
return r return r
def module_create(context, matiere_id=None, REQUEST=None): def module_create(matiere_id=None, REQUEST=None):
"""Creation d'un module""" """Creation d'un module"""
from app.scodoc import sco_formations from app.scodoc import sco_formations
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
if matiere_id is None: if matiere_id is None:
raise ScoValueError("invalid matiere !") raise ScoValueError("invalid matiere !")
M = sco_edit_matiere.do_matiere_list(context, args={"matiere_id": matiere_id})[0] M = sco_edit_matiere.do_matiere_list(args={"matiere_id": matiere_id})[0]
UE = sco_edit_ue.do_ue_list(context, args={"ue_id": M["ue_id"]})[0] UE = sco_edit_ue.do_ue_list(args={"ue_id": M["ue_id"]})[0]
Fo = sco_formations.formation_list(args={"formation_id": UE["formation_id"]})[0] Fo = sco_formations.formation_list(args={"formation_id": UE["formation_id"]})[0]
parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"]) parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"])
semestres_indices = list(range(1, parcours.NB_SEM + 1)) semestres_indices = list(range(1, parcours.NB_SEM + 1))
@ -137,7 +137,7 @@ def module_create(context, matiere_id=None, REQUEST=None):
_MODULE_HELP, _MODULE_HELP,
] ]
# cherche le numero adequat (pour placer le module en fin de liste) # cherche le numero adequat (pour placer le module en fin de liste)
Mods = do_module_list(context, args={"matiere_id": matiere_id}) Mods = do_module_list(args={"matiere_id": matiere_id})
if Mods: if Mods:
default_num = max([m["numero"] for m in Mods]) + 10 default_num = max([m["numero"] for m in Mods]) + 10
else: else:
@ -154,7 +154,7 @@ def module_create(context, matiere_id=None, REQUEST=None):
"allow_null": False, "allow_null": False,
"validator": lambda val, field, formation_id=Fo[ "validator": lambda val, field, formation_id=Fo[
"formation_id" "formation_id"
]: check_module_code_unicity(val, field, formation_id, context), ]: check_module_code_unicity(val, field, formation_id),
}, },
), ),
("titre", {"size": 30, "explanation": "nom du module"}), ("titre", {"size": 30, "explanation": "nom du module"}),
@ -237,7 +237,7 @@ def module_create(context, matiere_id=None, REQUEST=None):
if tf[0] == 0: if tf[0] == 0:
return "\n".join(H) + tf[1] + html_sco_header.sco_footer() return "\n".join(H) + tf[1] + html_sco_header.sco_footer()
else: else:
do_module_create(context, tf[2]) do_module_create(tf[2])
return flask.redirect( return flask.redirect(
url_for( url_for(
"notes.ue_list", "notes.ue_list",
@ -247,16 +247,16 @@ def module_create(context, matiere_id=None, REQUEST=None):
) )
def do_module_delete(context, oid): def do_module_delete(oid):
"delete module" "delete module"
from app.scodoc import sco_formations from app.scodoc import sco_formations
mod = do_module_list(context, {"module_id": oid})[0] mod = do_module_list({"module_id": oid})[0]
if module_is_locked(context, mod["module_id"]): if module_is_locked(mod["module_id"]):
raise ScoLockedFormError() raise ScoLockedFormError()
# S'il y a des moduleimpls, on ne peut pas detruire le module ! # S'il y a des moduleimpls, on ne peut pas detruire le module !
mods = sco_moduleimpl.do_moduleimpl_list(context, module_id=oid) mods = sco_moduleimpl.do_moduleimpl_list(module_id=oid)
if mods: if mods:
err_page = scu.confirm_dialog( err_page = scu.confirm_dialog(
message="""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>""", message="""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>""",
@ -279,11 +279,11 @@ def do_module_delete(context, oid):
) )
def module_delete(context, module_id=None, REQUEST=None): def module_delete(module_id=None, REQUEST=None):
"""Delete a module""" """Delete a module"""
if not module_id: if not module_id:
raise ScoValueError("invalid module !") raise ScoValueError("invalid module !")
Mods = do_module_list(context, args={"module_id": module_id}) Mods = do_module_list(args={"module_id": module_id})
if not Mods: if not Mods:
raise ScoValueError("Module inexistant !") raise ScoValueError("Module inexistant !")
Mod = Mods[0] Mod = Mods[0]
@ -306,17 +306,17 @@ def module_delete(context, module_id=None, REQUEST=None):
elif tf[0] == -1: elif tf[0] == -1:
return flask.redirect(dest_url) return flask.redirect(dest_url)
else: else:
do_module_delete(context, module_id) do_module_delete(module_id)
return flask.redirect(dest_url) return flask.redirect(dest_url)
def do_module_edit(context, val): def do_module_edit(val):
"edit a module" "edit a module"
from app.scodoc import sco_edit_formation from app.scodoc import sco_edit_formation
# check # check
mod = do_module_list(context, {"module_id": val["module_id"]})[0] mod = do_module_list({"module_id": val["module_id"]})[0]
if module_is_locked(context, mod["module_id"]): if module_is_locked(mod["module_id"]):
# formation verrouillée: empeche de modifier certains champs: # formation verrouillée: empeche de modifier certains champs:
protected_fields = ("coefficient", "ue_id", "matiere_id", "semestre_id") protected_fields = ("coefficient", "ue_id", "matiere_id", "semestre_id")
for f in protected_fields: for f in protected_fields:
@ -328,27 +328,27 @@ def do_module_edit(context, val):
sco_edit_formation.invalidate_sems_in_formation(mod["formation_id"]) sco_edit_formation.invalidate_sems_in_formation(mod["formation_id"])
def check_module_code_unicity(code, field, formation_id, context, module_id=None): def check_module_code_unicity(code, field, formation_id, module_id=None):
"true si code module unique dans la formation" "true si code module unique dans la formation"
Mods = do_module_list(context, args={"code": code, "formation_id": formation_id}) Mods = do_module_list(args={"code": code, "formation_id": formation_id})
if module_id: # edition: supprime le module en cours if module_id: # edition: supprime le module en cours
Mods = [m for m in Mods if m["module_id"] != module_id] Mods = [m for m in Mods if m["module_id"] != module_id]
return len(Mods) == 0 return len(Mods) == 0
def module_edit(context, module_id=None, REQUEST=None): def module_edit(module_id=None, REQUEST=None):
"""Edit a module""" """Edit a module"""
from app.scodoc import sco_formations from app.scodoc import sco_formations
from app.scodoc import sco_tag_module from app.scodoc import sco_tag_module
if not module_id: if not module_id:
raise ScoValueError("invalid module !") raise ScoValueError("invalid module !")
Mod = do_module_list(context, args={"module_id": module_id}) Mod = do_module_list(args={"module_id": module_id})
if not Mod: if not Mod:
raise ScoValueError("invalid module !") raise ScoValueError("invalid module !")
Mod = Mod[0] Mod = Mod[0]
unlocked = not module_is_locked(context, module_id) unlocked = not module_is_locked(module_id)
Fo = sco_formations.formation_list(args={"formation_id": Mod["formation_id"]})[0] Fo = sco_formations.formation_list(args={"formation_id": Mod["formation_id"]})[0]
parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"]) parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"])
M = ndb.SimpleDictFetch( M = ndb.SimpleDictFetch(
@ -400,7 +400,7 @@ def module_edit(context, module_id=None, REQUEST=None):
"validator": lambda val, field, formation_id=Mod[ "validator": lambda val, field, formation_id=Mod[
"formation_id" "formation_id"
]: check_module_code_unicity( ]: check_module_code_unicity(
val, field, formation_id, context, module_id=module_id val, field, formation_id, module_id=module_id
), ),
}, },
), ),
@ -493,7 +493,7 @@ def module_edit(context, module_id=None, REQUEST=None):
), ),
), ),
html_foot_markup="""<div style="width: 90%;"><span class="sco_tag_edit"><textarea data-module_id="{}" class="module_tag_editor">{}</textarea></span></div>""".format( html_foot_markup="""<div style="width: 90%;"><span class="sco_tag_edit"><textarea data-module_id="{}" class="module_tag_editor">{}</textarea></span></div>""".format(
module_id, ",".join(sco_tag_module.module_tag_list(context, module_id)) module_id, ",".join(sco_tag_module.module_tag_list(module_id))
), ),
initvalues=Mod, initvalues=Mod,
submitlabel="Modifier ce module", submitlabel="Modifier ce module",
@ -508,28 +508,28 @@ def module_edit(context, module_id=None, REQUEST=None):
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!") tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
# Check unicité code module dans la formation # Check unicité code module dans la formation
do_module_edit(context, tf[2]) do_module_edit(tf[2])
return flask.redirect(dest_url) return flask.redirect(dest_url)
# Edition en ligne du code Apogee # Edition en ligne du code Apogee
def edit_module_set_code_apogee(context, id=None, value=None, REQUEST=None): def edit_module_set_code_apogee(id=None, value=None, REQUEST=None):
"Set UE code apogee" "Set UE code apogee"
module_id = id module_id = id
value = value.strip("-_ \t") value = value.strip("-_ \t")
log("edit_module_set_code_apogee: module_id=%s code_apogee=%s" % (module_id, value)) log("edit_module_set_code_apogee: module_id=%s code_apogee=%s" % (module_id, value))
modules = do_module_list(context, args={"module_id": module_id}) modules = do_module_list(args={"module_id": module_id})
if not modules: if not modules:
return "module invalide" # should not occur return "module invalide" # should not occur
do_module_edit(context, {"module_id": module_id, "code_apogee": value}) do_module_edit({"module_id": module_id, "code_apogee": value})
if not value: if not value:
value = scu.APO_MISSING_CODE_STR value = scu.APO_MISSING_CODE_STR
return value return value
def module_list(context, formation_id, REQUEST=None): def module_list(formation_id, REQUEST=None):
"""Liste des modules de la formation """Liste des modules de la formation
(XXX inutile ou a revoir) (XXX inutile ou a revoir)
""" """
@ -546,7 +546,7 @@ def module_list(context, formation_id, REQUEST=None):
] ]
editable = REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoChangeFormation) editable = REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoChangeFormation)
for Mod in do_module_list(context, args={"formation_id": formation_id}): for Mod in do_module_list(args={"formation_id": formation_id}):
H.append('<li class="notes_module_list">%s' % Mod) H.append('<li class="notes_module_list">%s' % Mod)
if editable: if editable:
H.append('<a href="module_edit?module_id=%(module_id)s">modifier</a>' % Mod) H.append('<a href="module_edit?module_id=%(module_id)s">modifier</a>' % Mod)
@ -559,7 +559,7 @@ def module_list(context, formation_id, REQUEST=None):
return "\n".join(H) return "\n".join(H)
def module_is_locked(context, module_id): def module_is_locked(module_id):
"""True if module should not be modified """True if module should not be modified
(used in a locked formsemestre) (used in a locked formsemestre)
""" """
@ -576,39 +576,39 @@ def module_is_locked(context, module_id):
return len(r) > 0 return len(r) > 0
def module_count_moduleimpls(context, module_id): def module_count_moduleimpls(module_id):
"Number of moduleimpls using this module" "Number of moduleimpls using this module"
mods = sco_moduleimpl.do_moduleimpl_list(context, module_id=module_id) mods = sco_moduleimpl.do_moduleimpl_list(module_id=module_id)
return len(mods) return len(mods)
def formation_add_malus_modules(context, formation_id, titre=None, REQUEST=None): def formation_add_malus_modules(formation_id, titre=None, REQUEST=None):
"""Création d'un module de "malus" dans chaque UE d'une formation""" """Création d'un module de "malus" dans chaque UE d'une formation"""
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
ue_list = sco_edit_ue.do_ue_list(context, args={"formation_id": formation_id}) ue_list = sco_edit_ue.do_ue_list(args={"formation_id": formation_id})
for ue in ue_list: for ue in ue_list:
# Un seul module de malus par UE: # Un seul module de malus par UE:
nb_mod_malus = len( nb_mod_malus = len(
[ [
mod mod
for mod in do_module_list(context, args={"ue_id": ue["ue_id"]}) for mod in do_module_list(args={"ue_id": ue["ue_id"]})
if mod["module_type"] == scu.MODULE_MALUS if mod["module_type"] == scu.MODULE_MALUS
] ]
) )
if nb_mod_malus == 0: if nb_mod_malus == 0:
ue_add_malus_module(context, ue["ue_id"], titre=titre, REQUEST=REQUEST) ue_add_malus_module(ue["ue_id"], titre=titre, REQUEST=REQUEST)
if REQUEST: if REQUEST:
return flask.redirect("ue_list?formation_id=" + str(formation_id)) return flask.redirect("ue_list?formation_id=" + str(formation_id))
def ue_add_malus_module(context, ue_id, titre=None, code=None, REQUEST=None): def ue_add_malus_module(ue_id, titre=None, code=None, REQUEST=None):
"""Add a malus module in this ue""" """Add a malus module in this ue"""
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
ue = sco_edit_ue.do_ue_list(context, args={"ue_id": ue_id})[0] ue = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0]
if titre is None: if titre is None:
titre = "" titre = ""
@ -616,7 +616,7 @@ def ue_add_malus_module(context, ue_id, titre=None, code=None, REQUEST=None):
code = "MALUS%d" % ue["numero"] code = "MALUS%d" % ue["numero"]
# Tout module doit avoir un semestre_id (indice 1, 2, ...) # Tout module doit avoir un semestre_id (indice 1, 2, ...)
semestre_ids = sco_edit_ue.ue_list_semestre_ids(context, ue) semestre_ids = sco_edit_ue.ue_list_semestre_ids(ue)
if semestre_ids: if semestre_ids:
semestre_id = semestre_ids[0] semestre_id = semestre_ids[0]
else: else:
@ -627,14 +627,13 @@ def ue_add_malus_module(context, ue_id, titre=None, code=None, REQUEST=None):
) )
# Matiere pour placer le module malus # Matiere pour placer le module malus
Matlist = sco_edit_matiere.do_matiere_list(context, args={"ue_id": ue_id}) Matlist = sco_edit_matiere.do_matiere_list(args={"ue_id": ue_id})
numero = max([mat["numero"] for mat in Matlist]) + 10 numero = max([mat["numero"] for mat in Matlist]) + 10
matiere_id = sco_edit_matiere.do_matiere_create( matiere_id = sco_edit_matiere.do_matiere_create(
context, {"ue_id": ue_id, "titre": "Malus", "numero": numero} {"ue_id": ue_id, "titre": "Malus", "numero": numero}
) )
module_id = do_module_create( module_id = do_module_create(
context,
{ {
"titre": titre, "titre": titre,
"code": code, "code": code,

View File

@ -84,20 +84,20 @@ _ueEditor = ndb.EditableTable(
) )
def do_ue_list(context, *args, **kw): def do_ue_list(*args, **kw):
"list UEs" "list UEs"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
return _ueEditor.list(cnx, *args, **kw) return _ueEditor.list(cnx, *args, **kw)
def do_ue_create(context, args): def do_ue_create(args):
"create an ue" "create an ue"
from app.scodoc import sco_formations from app.scodoc import sco_formations
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# check duplicates # check duplicates
ues = do_ue_list( ues = do_ue_list(
context, {"formation_id": args["formation_id"], "acronyme": args["acronyme"]} {"formation_id": args["formation_id"], "acronyme": args["acronyme"]}
) )
if ues: if ues:
raise ScoValueError('Acronyme d\'UE "%s" déjà utilisé !' % args["acronyme"]) raise ScoValueError('Acronyme d\'UE "%s" déjà utilisé !' % args["acronyme"])
@ -115,7 +115,7 @@ def do_ue_create(context, args):
return r return r
def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=False): def do_ue_delete(ue_id, delete_validations=False, REQUEST=None, force=False):
"delete UE and attached matieres (but not modules)" "delete UE and attached matieres (but not modules)"
from app.scodoc import sco_formations from app.scodoc import sco_formations
from app.scodoc import sco_parcours_dut from app.scodoc import sco_parcours_dut
@ -123,11 +123,11 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
log("do_ue_delete: ue_id=%s, delete_validations=%s" % (ue_id, delete_validations)) log("do_ue_delete: ue_id=%s, delete_validations=%s" % (ue_id, delete_validations))
# check # check
ue = do_ue_list(context, {"ue_id": ue_id}) ue = do_ue_list({"ue_id": ue_id})
if not ue: if not ue:
raise ScoValueError("UE inexistante !") raise ScoValueError("UE inexistante !")
ue = ue[0] ue = ue[0]
if ue_is_locked(context, ue["ue_id"]): if ue_is_locked(ue["ue_id"]):
raise ScoLockedFormError() raise ScoLockedFormError()
# Il y a-t-il des etudiants ayant validé cette UE ? # Il y a-t-il des etudiants ayant validé cette UE ?
# si oui, propose de supprimer les validations # si oui, propose de supprimer les validations
@ -151,9 +151,9 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F
) )
# delete all matiere in this UE # delete all matiere in this UE
mats = sco_edit_matiere.do_matiere_list(context, {"ue_id": ue_id}) mats = sco_edit_matiere.do_matiere_list({"ue_id": ue_id})
for mat in mats: for mat in mats:
sco_edit_matiere.do_matiere_delete(context, mat["matiere_id"]) sco_edit_matiere.do_matiere_delete(mat["matiere_id"])
# delete uecoef and events # delete uecoef and events
ndb.SimpleQuery( ndb.SimpleQuery(
"DELETE FROM notes_formsemestre_uecoef WHERE ue_id=%(ue_id)s", "DELETE FROM notes_formsemestre_uecoef WHERE ue_id=%(ue_id)s",
@ -185,18 +185,18 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F
return None return None
def ue_create(context, formation_id=None, REQUEST=None): def ue_create(formation_id=None, REQUEST=None):
"""Creation d'une UE""" """Creation d'une UE"""
return ue_edit(context, create=True, formation_id=formation_id, REQUEST=REQUEST) return ue_edit(create=True, formation_id=formation_id, REQUEST=REQUEST)
def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None): def ue_edit(ue_id=None, create=False, formation_id=None, REQUEST=None):
"""Modification ou creation d'une UE""" """Modification ou creation d'une UE"""
from app.scodoc import sco_formations from app.scodoc import sco_formations
create = int(create) create = int(create)
if not create: if not create:
U = do_ue_list(context, args={"ue_id": ue_id}) U = do_ue_list(args={"ue_id": ue_id})
if not U: if not U:
raise ScoValueError("UE inexistante !") raise ScoValueError("UE inexistante !")
U = U[0] U = U[0]
@ -341,19 +341,17 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None):
tf[2]["semestre_id"] = 0 tf[2]["semestre_id"] = 0
# numero regroupant par semestre ou année: # numero regroupant par semestre ou année:
tf[2]["numero"] = next_ue_numero( tf[2]["numero"] = next_ue_numero(
context, formation_id, int(tf[2]["semestre_id"] or 0) formation_id, int(tf[2]["semestre_id"] or 0)
) )
ue_id = do_ue_create(context, tf[2]) ue_id = do_ue_create(tf[2])
if parcours.UE_IS_MODULE or tf[2]["create_matiere"]: if parcours.UE_IS_MODULE or tf[2]["create_matiere"]:
matiere_id = sco_edit_matiere.do_matiere_create( matiere_id = sco_edit_matiere.do_matiere_create(
context,
{"ue_id": ue_id, "titre": tf[2]["titre"], "numero": 1}, {"ue_id": ue_id, "titre": tf[2]["titre"], "numero": 1},
) )
if parcours.UE_IS_MODULE: if parcours.UE_IS_MODULE:
# dans ce mode, crée un (unique) module dans l'UE: # dans ce mode, crée un (unique) module dans l'UE:
_ = sco_edit_module.do_module_create( _ = sco_edit_module.do_module_create(
context,
{ {
"titre": tf[2]["titre"], "titre": tf[2]["titre"],
"code": tf[2]["acronyme"], "code": tf[2]["acronyme"],
@ -365,7 +363,7 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None):
}, },
) )
else: else:
do_ue_edit(context, tf[2]) do_ue_edit(tf[2])
return flask.redirect( return flask.redirect(
url_for( url_for(
"notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=formation_id "notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=formation_id
@ -373,31 +371,31 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None):
) )
def _add_ue_semestre_id(context, ue_list): def _add_ue_semestre_id(ue_list):
"""ajoute semestre_id dans les ue, en regardant le premier module de chacune. """ajoute semestre_id dans les ue, en regardant le premier module de chacune.
Les UE sans modules se voient attribuer le numero UE_SEM_DEFAULT (1000000), Les UE sans modules se voient attribuer le numero UE_SEM_DEFAULT (1000000),
qui les place à la fin de la liste. qui les place à la fin de la liste.
""" """
for ue in ue_list: for ue in ue_list:
Modlist = sco_edit_module.do_module_list(context, args={"ue_id": ue["ue_id"]}) Modlist = sco_edit_module.do_module_list(args={"ue_id": ue["ue_id"]})
if Modlist: if Modlist:
ue["semestre_id"] = Modlist[0]["semestre_id"] ue["semestre_id"] = Modlist[0]["semestre_id"]
else: else:
ue["semestre_id"] = 1000000 ue["semestre_id"] = 1000000
def next_ue_numero(context, formation_id, semestre_id=None): def next_ue_numero(formation_id, semestre_id=None):
"""Numero d'une nouvelle UE dans cette formation. """Numero d'une nouvelle UE dans cette formation.
Si le semestre est specifie, cherche les UE ayant des modules de ce semestre Si le semestre est specifie, cherche les UE ayant des modules de ce semestre
""" """
ue_list = do_ue_list(context, args={"formation_id": formation_id}) ue_list = do_ue_list(args={"formation_id": formation_id})
if not ue_list: if not ue_list:
return 0 return 0
if semestre_id is None: if semestre_id is None:
return ue_list[-1]["numero"] + 1000 return ue_list[-1]["numero"] + 1000
else: else:
# Avec semestre: (prend le semestre du 1er module de l'UE) # Avec semestre: (prend le semestre du 1er module de l'UE)
_add_ue_semestre_id(context, ue_list) _add_ue_semestre_id(ue_list)
ue_list_semestre = [ue for ue in ue_list if ue["semestre_id"] == semestre_id] ue_list_semestre = [ue for ue in ue_list if ue["semestre_id"] == semestre_id]
if ue_list_semestre: if ue_list_semestre:
return ue_list_semestre[-1]["numero"] + 10 return ue_list_semestre[-1]["numero"] + 10
@ -406,10 +404,10 @@ def next_ue_numero(context, formation_id, semestre_id=None):
def ue_delete( def ue_delete(
context, ue_id=None, delete_validations=False, dialog_confirmed=False, REQUEST=None ue_id=None, delete_validations=False, dialog_confirmed=False, REQUEST=None
): ):
"""Delete an UE""" """Delete an UE"""
ue = do_ue_list(context, args={"ue_id": ue_id}) ue = do_ue_list(args={"ue_id": ue_id})
if not ue: if not ue:
raise ScoValueError("UE inexistante !") raise ScoValueError("UE inexistante !")
ue = ue[0] ue = ue[0]
@ -422,12 +420,10 @@ def ue_delete(
cancel_url="ue_list?formation_id=%s" % ue["formation_id"], cancel_url="ue_list?formation_id=%s" % ue["formation_id"],
) )
return do_ue_delete( return do_ue_delete(ue_id, delete_validations=delete_validations, REQUEST=REQUEST)
context, ue_id, delete_validations=delete_validations, REQUEST=REQUEST
)
def ue_list(context, formation_id=None, msg="", REQUEST=None): def ue_list(formation_id=None, msg="", REQUEST=None):
"""Liste des matières et modules d'une formation, avec liens pour """Liste des matières et modules d'une formation, avec liens pour
editer (si non verrouillée). editer (si non verrouillée).
""" """
@ -439,11 +435,11 @@ def ue_list(context, formation_id=None, msg="", REQUEST=None):
raise ScoValueError("invalid formation_id") raise ScoValueError("invalid formation_id")
F = F[0] F = F[0]
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"]) parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
locked = sco_formations.formation_has_locked_sems(context, formation_id) locked = sco_formations.formation_has_locked_sems(formation_id)
ue_list = do_ue_list(context, args={"formation_id": formation_id}) ue_list = do_ue_list(args={"formation_id": formation_id})
# tri par semestre et numero: # tri par semestre et numero:
_add_ue_semestre_id(context, ue_list) _add_ue_semestre_id(ue_list)
ue_list.sort(key=lambda u: (u["semestre_id"], u["numero"])) ue_list.sort(key=lambda u: (u["semestre_id"], u["numero"]))
has_duplicate_ue_codes = len(set([ue["ue_code"] for ue in ue_list])) != len(ue_list) has_duplicate_ue_codes = len(set([ue["ue_code"] for ue in ue_list])) != len(ue_list)
@ -612,7 +608,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
'<span class="ue_type">%s</span>' '<span class="ue_type">%s</span>'
% sco_codes_parcours.UE_TYPE_NAME[UE["type"]] % sco_codes_parcours.UE_TYPE_NAME[UE["type"]]
) )
ue_editable = editable and not ue_is_locked(context, UE["ue_id"]) ue_editable = editable and not ue_is_locked(UE["ue_id"])
if ue_editable: if ue_editable:
H.append( H.append(
'<a class="stdlink" href="ue_edit?ue_id=%(ue_id)s">modifier</a>' % UE '<a class="stdlink" href="ue_edit?ue_id=%(ue_id)s">modifier</a>' % UE
@ -621,12 +617,12 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
H.append('<span class="locked">[verrouillé]</span>') H.append('<span class="locked">[verrouillé]</span>')
if not parcours.UE_IS_MODULE: if not parcours.UE_IS_MODULE:
H.append('<ul class="notes_matiere_list">') H.append('<ul class="notes_matiere_list">')
Matlist = sco_edit_matiere.do_matiere_list(context, args={"ue_id": UE["ue_id"]}) Matlist = sco_edit_matiere.do_matiere_list(args={"ue_id": UE["ue_id"]})
for Mat in Matlist: for Mat in Matlist:
if not parcours.UE_IS_MODULE: if not parcours.UE_IS_MODULE:
H.append('<li class="notes_matiere_list">') H.append('<li class="notes_matiere_list">')
if editable and not sco_edit_matiere.matiere_is_locked( if editable and not sco_edit_matiere.matiere_is_locked(
context, Mat["matiere_id"] Mat["matiere_id"]
): ):
H.append( H.append(
f"""<a class="stdlink" href="{ f"""<a class="stdlink" href="{
@ -637,18 +633,18 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
) )
H.append("%(titre)s" % Mat) H.append("%(titre)s" % Mat)
if editable and not sco_edit_matiere.matiere_is_locked( if editable and not sco_edit_matiere.matiere_is_locked(
context, Mat["matiere_id"] Mat["matiere_id"]
): ):
H.append("</a>") H.append("</a>")
H.append('<ul class="notes_module_list">') H.append('<ul class="notes_module_list">')
Modlist = sco_edit_module.do_module_list( Modlist = sco_edit_module.do_module_list(
context, args={"matiere_id": Mat["matiere_id"]} args={"matiere_id": Mat["matiere_id"]}
) )
im = 0 im = 0
for Mod in Modlist: for Mod in Modlist:
Mod["nb_moduleimpls"] = sco_edit_module.module_count_moduleimpls( Mod["nb_moduleimpls"] = sco_edit_module.module_count_moduleimpls(
context, Mod["module_id"] Mod["module_id"]
) )
klass = "notes_module_list" klass = "notes_module_list"
if Mod["module_type"] == scu.MODULE_MALUS: if Mod["module_type"] == scu.MODULE_MALUS:
@ -680,7 +676,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
H.append(delete_disabled_icon) H.append(delete_disabled_icon)
H.append("</span>") H.append("</span>")
mod_editable = editable # and not sco_edit_module.module_is_locked(context, Mod['module_id']) mod_editable = editable # and not sco_edit_module.module_is_locked( Mod['module_id'])
if mod_editable: if mod_editable:
H.append( H.append(
'<a class="discretelink" title="Modifier le module numéro %(numero)s, utilisé par %(nb_moduleimpls)d sessions" href="module_edit?module_id=%(module_id)s">' '<a class="discretelink" title="Modifier le module numéro %(numero)s, utilisé par %(nb_moduleimpls)d sessions" href="module_edit?module_id=%(module_id)s">'
@ -714,7 +710,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
tag_edit = tag_mk.format( tag_edit = tag_mk.format(
Mod["module_id"], Mod["module_id"],
tag_cls, tag_cls,
",".join(sco_tag_module.module_tag_list(context, Mod["module_id"])), ",".join(sco_tag_module.module_tag_list(Mod["module_id"])),
) )
H.append( H.append(
" %s %s" % (parcours.SESSION_NAME, Mod["semestre_id"]) " %s %s" % (parcours.SESSION_NAME, Mod["semestre_id"])
@ -825,14 +821,14 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
) )
# <li>(debug) <a class="stdlink" href="check_form_integrity?formation_id=%(formation_id)s">Vérifier cohérence</a></li> # <li>(debug) <a class="stdlink" href="check_form_integrity?formation_id=%(formation_id)s">Vérifier cohérence</a></li>
warn, _ = sco_formsemestre_validation.check_formation_ues(context, formation_id) warn, _ = sco_formsemestre_validation.check_formation_ues(formation_id)
H.append(warn) H.append(warn)
H.append(html_sco_header.sco_footer()) H.append(html_sco_header.sco_footer())
return "".join(H) return "".join(H)
def ue_sharing_code(context, ue_code=None, ue_id=None, hide_ue_id=None): def ue_sharing_code(ue_code=None, ue_id=None, hide_ue_id=None):
"""HTML list of UE sharing this code """HTML list of UE sharing this code
Either ue_code or ue_id may be specified. Either ue_code or ue_id may be specified.
hide_ue_id spécifie un id à retirer de la liste. hide_ue_id spécifie un id à retirer de la liste.
@ -840,13 +836,13 @@ def ue_sharing_code(context, ue_code=None, ue_id=None, hide_ue_id=None):
from app.scodoc import sco_formations from app.scodoc import sco_formations
if ue_id: if ue_id:
ue = do_ue_list(context, args={"ue_id": ue_id})[0] ue = do_ue_list(args={"ue_id": ue_id})[0]
if not ue_code: if not ue_code:
ue_code = ue["ue_code"] ue_code = ue["ue_code"]
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0] F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
formation_code = F["formation_code"] formation_code = F["formation_code"]
ue_list_all = do_ue_list(context, args={"ue_code": ue_code}) ue_list_all = do_ue_list(args={"ue_code": ue_code})
if ue_id: if ue_id:
# retire les UE d'autres formations: # retire les UE d'autres formations:
# log('checking ucode %s formation %s' % (ue_code, formation_code)) # log('checking ucode %s formation %s' % (ue_code, formation_code))
@ -891,19 +887,17 @@ def ue_sharing_code(context, ue_code=None, ue_id=None, hide_ue_id=None):
return "\n".join(H) return "\n".join(H)
def do_ue_edit(context, args, bypass_lock=False, dont_invalidate_cache=False): def do_ue_edit(args, bypass_lock=False, dont_invalidate_cache=False):
"edit an UE" "edit an UE"
# check # check
ue_id = args["ue_id"] ue_id = args["ue_id"]
ue = do_ue_list(context, {"ue_id": ue_id})[0] ue = do_ue_list({"ue_id": ue_id})[0]
if (not bypass_lock) and ue_is_locked(context, ue["ue_id"]): if (not bypass_lock) and ue_is_locked(ue["ue_id"]):
raise ScoLockedFormError() raise ScoLockedFormError()
# check: acronyme unique dans cette formation # check: acronyme unique dans cette formation
if "acronyme" in args: if "acronyme" in args:
new_acro = args["acronyme"] new_acro = args["acronyme"]
ues = do_ue_list( ues = do_ue_list({"formation_id": ue["formation_id"], "acronyme": new_acro})
context, {"formation_id": ue["formation_id"], "acronyme": new_acro}
)
if ues and ues[0]["ue_id"] != ue_id: if ues and ues[0]["ue_id"] != ue_id:
raise ScoValueError('Acronyme d\'UE "%s" déjà utilisé !' % args["acronyme"]) raise ScoValueError('Acronyme d\'UE "%s" déjà utilisé !' % args["acronyme"])
@ -920,18 +914,17 @@ def do_ue_edit(context, args, bypass_lock=False, dont_invalidate_cache=False):
# essai edition en ligne: # essai edition en ligne:
def edit_ue_set_code_apogee(context, id=None, value=None, REQUEST=None): def edit_ue_set_code_apogee(id=None, value=None, REQUEST=None):
"set UE code apogee" "set UE code apogee"
ue_id = id ue_id = id
value = value.strip("-_ \t") value = value.strip("-_ \t")
log("edit_ue_set_code_apogee: ue_id=%s code_apogee=%s" % (ue_id, value)) log("edit_ue_set_code_apogee: ue_id=%s code_apogee=%s" % (ue_id, value))
ues = do_ue_list(context, args={"ue_id": ue_id}) ues = do_ue_list(args={"ue_id": ue_id})
if not ues: if not ues:
return "ue invalide" return "ue invalide"
do_ue_edit( do_ue_edit(
context,
{"ue_id": ue_id, "code_apogee": value}, {"ue_id": ue_id, "code_apogee": value},
bypass_lock=True, bypass_lock=True,
dont_invalidate_cache=False, dont_invalidate_cache=False,
@ -941,7 +934,7 @@ def edit_ue_set_code_apogee(context, id=None, value=None, REQUEST=None):
return value return value
def ue_is_locked(context, ue_id): def ue_is_locked(ue_id):
"""True if UE should not be modified """True if UE should not be modified
(contains modules used in a locked formsemestre) (contains modules used in a locked formsemestre)
""" """
@ -958,7 +951,7 @@ def ue_is_locked(context, ue_id):
# ---- Table recap formation # ---- Table recap formation
def formation_table_recap(context, formation_id, format="html", REQUEST=None): def formation_table_recap(formation_id, format="html", REQUEST=None):
"""Table recapitulant formation.""" """Table recapitulant formation."""
from app.scodoc import sco_formations from app.scodoc import sco_formations
@ -967,16 +960,16 @@ def formation_table_recap(context, formation_id, format="html", REQUEST=None):
raise ScoValueError("invalid formation_id") raise ScoValueError("invalid formation_id")
F = F[0] F = F[0]
T = [] T = []
ue_list = do_ue_list(context, args={"formation_id": formation_id}) ue_list = do_ue_list(args={"formation_id": formation_id})
for UE in ue_list: for UE in ue_list:
Matlist = sco_edit_matiere.do_matiere_list(context, args={"ue_id": UE["ue_id"]}) Matlist = sco_edit_matiere.do_matiere_list(args={"ue_id": UE["ue_id"]})
for Mat in Matlist: for Mat in Matlist:
Modlist = sco_edit_module.do_module_list( Modlist = sco_edit_module.do_module_list(
context, args={"matiere_id": Mat["matiere_id"]} args={"matiere_id": Mat["matiere_id"]}
) )
for Mod in Modlist: for Mod in Modlist:
Mod["nb_moduleimpls"] = sco_edit_module.module_count_moduleimpls( Mod["nb_moduleimpls"] = sco_edit_module.module_count_moduleimpls(
context, Mod["module_id"] Mod["module_id"]
) )
# #
T.append( T.append(
@ -1044,11 +1037,11 @@ def formation_table_recap(context, formation_id, format="html", REQUEST=None):
return tab.make_page(format=format, REQUEST=REQUEST) return tab.make_page(format=format, REQUEST=REQUEST)
def ue_list_semestre_ids(context, ue): def ue_list_semestre_ids(ue):
"""Liste triée des numeros de semestres des modules dans cette UE """Liste triée des numeros de semestres des modules dans cette UE
Il est recommandable que tous les modules d'une UE aient le même indice de semestre. Il est recommandable que tous les modules d'une UE aient le même indice de semestre.
Mais cela n'a pas toujours été le cas dans les programmes pédagogiques officiels, Mais cela n'a pas toujours été le cas dans les programmes pédagogiques officiels,
aussi ScoDoc laisse le choix. aussi ScoDoc laisse le choix.
""" """
Modlist = sco_edit_module.do_module_list(context, args={"ue_id": ue["ue_id"]}) Modlist = sco_edit_module.do_module_list(args={"ue_id": ue["ue_id"]})
return sorted(list(set([mod["semestre_id"] for mod in Modlist]))) return sorted(list(set([mod["semestre_id"] for mod in Modlist])))

View File

@ -179,7 +179,7 @@ def do_evaluation_list(args, sortkey=None):
def do_evaluation_list_in_formsemestre(formsemestre_id): def do_evaluation_list_in_formsemestre(formsemestre_id):
"list evaluations in this formsemestre" "list evaluations in this formsemestre"
context = None # #context context = None # #context
mods = sco_moduleimpl.do_moduleimpl_list(context, formsemestre_id=formsemestre_id) mods = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
evals = [] evals = []
for mod in mods: for mod in mods:
evals += do_evaluation_list(args={"moduleimpl_id": mod["moduleimpl_id"]}) evals += do_evaluation_list(args={"moduleimpl_id": mod["moduleimpl_id"]})
@ -214,7 +214,7 @@ def _check_evaluation_args(args):
jour = args.get("jour", None) jour = args.get("jour", None)
args["jour"] = jour args["jour"] = jour
if jour: if jour:
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
d, m, y = [int(x) for x in sem["date_debut"].split("/")] d, m, y = [int(x) for x in sem["date_debut"].split("/")]
date_debut = datetime.date(y, m, d) date_debut = datetime.date(y, m, d)
@ -304,8 +304,8 @@ def do_evaluation_create(
r = _evaluationEditor.create(cnx, args) r = _evaluationEditor.create(cnx, args)
# news # news
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
mod["moduleimpl_id"] = M["moduleimpl_id"] mod["moduleimpl_id"] = M["moduleimpl_id"]
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
sco_news.add( sco_news.add(
@ -336,7 +336,7 @@ def do_evaluation_edit(args):
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
_evaluationEditor.edit(cnx, args) _evaluationEditor.edit(cnx, args)
# inval cache pour ce semestre # inval cache pour ce semestre
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"]) sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"])
@ -362,10 +362,10 @@ def do_evaluation_delete(evaluation_id):
_evaluationEditor.delete(cnx, evaluation_id) _evaluationEditor.delete(cnx, evaluation_id)
# inval cache pour ce semestre # inval cache pour ce semestre
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"]) sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"])
# news # news
mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
mod["moduleimpl_id"] = M["moduleimpl_id"] mod["moduleimpl_id"] = M["moduleimpl_id"]
mod["url"] = ( mod["url"] = (
scu.NotesURL() + "/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod scu.NotesURL() + "/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
@ -418,8 +418,8 @@ def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=
last_modif = None last_modif = None
# ---- Liste des groupes complets et incomplets # ---- Liste des groupes complets et incomplets
E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0] E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
is_malus = Mod["module_type"] == scu.MODULE_MALUS # True si module de malus is_malus = Mod["module_type"] == scu.MODULE_MALUS # True si module de malus
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
# Si partition_id is None, prend 'all' ou bien la premiere: # Si partition_id is None, prend 'all' ou bien la premiere:
@ -438,7 +438,7 @@ def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=
formsemestre_id formsemestre_id
) )
insmod = sco_moduleimpl.do_moduleimpl_inscription_list( insmod = sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=E["moduleimpl_id"] moduleimpl_id=E["moduleimpl_id"]
) )
insmodset = set([x["etudid"] for x in insmod]) insmodset = set([x["etudid"] for x in insmod])
# retire de insem ceux qui ne sont pas inscrits au module # retire de insem ceux qui ne sont pas inscrits au module
@ -743,7 +743,7 @@ def formsemestre_evaluations_cal(formsemestre_id, REQUEST=None):
continue continue
day = e["jour"].strftime("%Y-%m-%d") day = e["jour"].strftime("%Y-%m-%d")
mod = sco_moduleimpl.do_moduleimpl_withmodule_list( mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, moduleimpl_id=e["moduleimpl_id"] moduleimpl_id=e["moduleimpl_id"]
)[0] )[0]
txt = mod["module"]["code"] or mod["module"]["abbrev"] or "eval" txt = mod["module"]["code"] or mod["module"]["abbrev"] or "eval"
if e["heure_debut"]: if e["heure_debut"]:
@ -821,10 +821,10 @@ def evaluation_date_first_completion(evaluation_id):
# (pour avoir l'etat et le groupe) et aussi les inscriptions # (pour avoir l'etat et le groupe) et aussi les inscriptions
# au module (pour gerer les modules optionnels correctement) # au module (pour gerer les modules optionnels correctement)
# E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0] # E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0]
# M = sco_moduleimpl.do_moduleimpl_list(context,moduleimpl_id=E["moduleimpl_id"])[0] # M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
# formsemestre_id = M["formsemestre_id"] # formsemestre_id = M["formsemestre_id"]
# insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( formsemestre_id) # insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( formsemestre_id)
# insmod = sco_moduleimpl.do_moduleimpl_inscription_list(context,moduleimpl_id=E["moduleimpl_id"]) # insmod = sco_moduleimpl.do_moduleimpl_inscription_list(moduleimpl_id=E["moduleimpl_id"])
# insmodset = set([x["etudid"] for x in insmod]) # insmodset = set([x["etudid"] for x in insmod])
# retire de insem ceux qui ne sont pas inscrits au module # retire de insem ceux qui ne sont pas inscrits au module
# ins = [i for i in insem if i["etudid"] in insmodset] # ins = [i for i in insem if i["etudid"] in insmodset]
@ -866,12 +866,8 @@ def formsemestre_evaluations_delai_correction(
evals = nt.get_sem_evaluation_etat_list() evals = nt.get_sem_evaluation_etat_list()
T = [] T = []
for e in evals: for e in evals:
M = sco_moduleimpl.do_moduleimpl_list( M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=e["moduleimpl_id"])[0]
context, moduleimpl_id=e["moduleimpl_id"] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
)[0]
Mod = sco_edit_module.do_module_list(
context, args={"module_id": M["module_id"]}
)[0]
if (e["evaluation_type"] != scu.EVALUATION_NORMALE) or ( if (e["evaluation_type"] != scu.EVALUATION_NORMALE) or (
Mod["module_type"] == scu.MODULE_MALUS Mod["module_type"] == scu.MODULE_MALUS
): ):
@ -1050,8 +1046,8 @@ def evaluation_describe(evaluation_id="", edit_in_place=True, REQUEST=None):
E = do_evaluation_list({"evaluation_id": evaluation_id})[0] E = do_evaluation_list({"evaluation_id": evaluation_id})[0]
moduleimpl_id = E["moduleimpl_id"] moduleimpl_id = E["moduleimpl_id"]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
u = sco_users.user_info(M["responsable_id"]) u = sco_users.user_info(M["responsable_id"])
resp = u["prenomnom"] resp = u["prenomnom"]
@ -1080,7 +1076,7 @@ def evaluation_describe(evaluation_id="", edit_in_place=True, REQUEST=None):
] ]
if Mod["module_type"] == scu.MODULE_MALUS: if Mod["module_type"] == scu.MODULE_MALUS:
# Indique l'UE # Indique l'UE
ue = sco_edit_ue.do_ue_list(context, args={"ue_id": Mod["ue_id"]})[0] ue = sco_edit_ue.do_ue_list(args={"ue_id": Mod["ue_id"]})[0]
H.append("<p><b>UE : %(acronyme)s</b></p>" % ue) H.append("<p><b>UE : %(acronyme)s</b></p>" % ue)
# store min/max values used by JS client-side checks: # store min/max values used by JS client-side checks:
H.append( H.append(
@ -1132,9 +1128,7 @@ def evaluation_create_form(
the_eval = do_evaluation_list({"evaluation_id": evaluation_id})[0] the_eval = do_evaluation_list({"evaluation_id": evaluation_id})[0]
moduleimpl_id = the_eval["moduleimpl_id"] moduleimpl_id = the_eval["moduleimpl_id"]
# #
M = sco_moduleimpl.do_moduleimpl_withmodule_list( M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
context, moduleimpl_id=moduleimpl_id
)[0]
is_malus = M["module"]["module_type"] == scu.MODULE_MALUS # True si module de malus is_malus = M["module"]["module_type"] == scu.MODULE_MALUS # True si module de malus
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
min_note_max = scu.NOTES_PRECISION # le plus petit bareme possible min_note_max = scu.NOTES_PRECISION # le plus petit bareme possible
@ -1193,7 +1187,7 @@ def evaluation_create_form(
else: else:
min_note_max_str = "0" min_note_max_str = "0"
# #
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
# #
help = """<div class="help"><p class="help"> help = """<div class="help"><p class="help">
Le coefficient d'une évaluation n'est utilisé que pour pondérer les évaluations au sein d'un module. Le coefficient d'une évaluation n'est utilisé que pour pondérer les évaluations au sein d'un module.

View File

@ -245,7 +245,7 @@ def scodoc_table_results(
) )
if format != "html": if format != "html":
return tab.make_page( return tab.make_page(
context, format=format, with_html_headers=False, REQUEST=REQUEST format=format, with_html_headers=False, REQUEST=REQUEST
) )
tab_html = tab.html() tab_html = tab.html()
nb_rows = tab.get_nb_rows() nb_rows = tab.get_nb_rows()

View File

@ -378,5 +378,5 @@ def search_inscr_etud_by_nip(context, code_nip, REQUEST=None, format="json"):
tab = GenTable(columns_ids=columns_ids, rows=T) tab = GenTable(columns_ids=columns_ids, rows=T)
return tab.make_page( return tab.make_page(
context, format=format, with_html_headers=False, REQUEST=REQUEST, publish=True format=format, with_html_headers=False, REQUEST=REQUEST, publish=True
) )

View File

@ -84,7 +84,7 @@ def formation_list(formation_id=None, args={}):
return r return r
def formation_has_locked_sems(context, formation_id): def formation_has_locked_sems(formation_id):
"True if there is a locked formsemestre in this formation" "True if there is a locked formsemestre in this formation"
sems = sco_formsemestre.do_formsemestre_list( sems = sco_formsemestre.do_formsemestre_list(
args={"formation_id": formation_id, "etat": False} args={"formation_id": formation_id, "etat": False}
@ -93,13 +93,13 @@ def formation_has_locked_sems(context, formation_id):
def formation_export( def formation_export(
context, formation_id, export_ids=False, export_tags=True, format=None, REQUEST=None formation_id, export_ids=False, export_tags=True, format=None, REQUEST=None
): ):
"""Get a formation, with UE, matieres, modules """Get a formation, with UE, matieres, modules
in desired format in desired format
""" """
F = formation_list(context, args={"formation_id": formation_id})[0] F = formation_list(args={"formation_id": formation_id})[0]
ues = sco_edit_ue.do_ue_list(context, {"formation_id": formation_id}) ues = sco_edit_ue.do_ue_list({"formation_id": formation_id})
F["ue"] = ues F["ue"] = ues
for ue in ues: for ue in ues:
ue_id = ue["ue_id"] ue_id = ue["ue_id"]
@ -108,21 +108,19 @@ def formation_export(
del ue["formation_id"] del ue["formation_id"]
if ue["ects"] is None: if ue["ects"] is None:
del ue["ects"] del ue["ects"]
mats = sco_edit_matiere.do_matiere_list(context, {"ue_id": ue_id}) mats = sco_edit_matiere.do_matiere_list({"ue_id": ue_id})
ue["matiere"] = mats ue["matiere"] = mats
for mat in mats: for mat in mats:
matiere_id = mat["matiere_id"] matiere_id = mat["matiere_id"]
if not export_ids: if not export_ids:
del mat["matiere_id"] del mat["matiere_id"]
del mat["ue_id"] del mat["ue_id"]
mods = sco_edit_module.do_module_list(context, {"matiere_id": matiere_id}) mods = sco_edit_module.do_module_list({"matiere_id": matiere_id})
mat["module"] = mods mat["module"] = mods
for mod in mods: for mod in mods:
if export_tags: if export_tags:
# mod['tags'] = sco_tag_module.module_tag_list(context, module_id=mod['module_id']) # mod['tags'] = sco_tag_module.module_tag_list( module_id=mod['module_id'])
tags = sco_tag_module.module_tag_list( tags = sco_tag_module.module_tag_list(module_id=mod["module_id"])
context, module_id=mod["module_id"]
)
if tags: if tags:
mod["tags"] = [{"name": x} for x in tags] mod["tags"] = [{"name": x} for x in tags]
if not export_ids: if not export_ids:
@ -138,7 +136,7 @@ def formation_export(
) )
def formation_import_xml(context, doc: str, import_tags=True): def formation_import_xml(doc: str, import_tags=True):
"""Create a formation from XML representation """Create a formation from XML representation
(format dumped by formation_export( format='xml' )) (format dumped by formation_export( format='xml' ))
XML may contain object (UE, modules) ids: this function returns two XML may contain object (UE, modules) ids: this function returns two
@ -188,7 +186,7 @@ def formation_import_xml(context, doc: str, import_tags=True):
# create formation # create formation
# F_unquoted = F.copy() # F_unquoted = F.copy()
# unescape_html_dict(F_unquoted) # unescape_html_dict(F_unquoted)
formation_id = sco_edit_formation.do_formation_create(context, F) formation_id = sco_edit_formation.do_formation_create(F)
log("formation %s created" % formation_id) log("formation %s created" % formation_id)
ues_old2new = {} # xml ue_id : new ue_id ues_old2new = {} # xml ue_id : new ue_id
modules_old2new = {} # xml module_id : new module_id modules_old2new = {} # xml module_id : new module_id
@ -202,14 +200,14 @@ def formation_import_xml(context, doc: str, import_tags=True):
del ue_info[1]["ue_id"] del ue_info[1]["ue_id"]
else: else:
xml_ue_id = None xml_ue_id = None
ue_id = sco_edit_ue.do_ue_create(context, ue_info[1]) ue_id = sco_edit_ue.do_ue_create(ue_info[1])
if xml_ue_id: if xml_ue_id:
ues_old2new[xml_ue_id] = ue_id ues_old2new[xml_ue_id] = ue_id
# -- create matieres # -- create matieres
for mat_info in ue_info[2]: for mat_info in ue_info[2]:
assert mat_info[0] == "matiere" assert mat_info[0] == "matiere"
mat_info[1]["ue_id"] = ue_id mat_info[1]["ue_id"] = ue_id
mat_id = sco_edit_matiere.do_matiere_create(context, mat_info[1]) mat_id = sco_edit_matiere.do_matiere_create(mat_info[1])
# -- create modules # -- create modules
for mod_info in mat_info[2]: for mod_info in mat_info[2]:
assert mod_info[0] == "module" assert mod_info[0] == "module"
@ -221,23 +219,23 @@ def formation_import_xml(context, doc: str, import_tags=True):
mod_info[1]["formation_id"] = formation_id mod_info[1]["formation_id"] = formation_id
mod_info[1]["matiere_id"] = mat_id mod_info[1]["matiere_id"] = mat_id
mod_info[1]["ue_id"] = ue_id mod_info[1]["ue_id"] = ue_id
mod_id = sco_edit_module.do_module_create(context, mod_info[1]) mod_id = sco_edit_module.do_module_create(mod_info[1])
if xml_module_id: if xml_module_id:
modules_old2new[int(xml_module_id)] = mod_id modules_old2new[int(xml_module_id)] = mod_id
if import_tags: if import_tags:
if len(mod_info) > 2: if len(mod_info) > 2:
tag_names = [t[1]["name"] for t in mod_info[2]] tag_names = [t[1]["name"] for t in mod_info[2]]
sco_tag_module.module_tag_set(context, mod_id, tag_names) sco_tag_module.module_tag_set(mod_id, tag_names)
return formation_id, modules_old2new, ues_old2new return formation_id, modules_old2new, ues_old2new
def formation_list_table(context, formation_id=None, args={}, REQUEST=None): def formation_list_table(formation_id=None, args={}, REQUEST=None):
"""List formation, grouped by titre and sorted by versions """List formation, grouped by titre and sorted by versions
and listing associated semestres and listing associated semestres
returns a table returns a table
""" """
formations = formation_list(context, formation_id=formation_id, args=args) formations = formation_list(formation_id=formation_id, args=args)
title = "Programmes pédagogiques" title = "Programmes pédagogiques"
lockicon = scu.icontag( lockicon = scu.icontag(
"lock32_img", title="Comporte des semestres verrouillés", border="0" "lock32_img", title="Comporte des semestres verrouillés", border="0"
@ -285,7 +283,7 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
else: else:
f["date_fin_dernier_sem"] = "" f["date_fin_dernier_sem"] = ""
f["annee_dernier_sem"] = "" f["annee_dernier_sem"] = ""
locked = formation_has_locked_sems(context, f["formation_id"]) locked = formation_has_locked_sems(f["formation_id"])
# #
if locked: if locked:
but_locked = lockicon but_locked = lockicon
@ -354,12 +352,12 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
) )
def formation_create_new_version(context, formation_id, redirect=True, REQUEST=None): def formation_create_new_version(formation_id, redirect=True, REQUEST=None):
"duplicate formation, with new version number" "duplicate formation, with new version number"
xml = formation_export(context, formation_id, export_ids=True, format="xml") xml = formation_export(formation_id, export_ids=True, format="xml")
new_id, modules_old2new, ues_old2new = formation_import_xml(context, xml) new_id, modules_old2new, ues_old2new = formation_import_xml(xml)
# news # news
F = formation_list(context, args={"formation_id": new_id})[0] F = formation_list(args={"formation_id": new_id})[0]
sco_news.add( sco_news.add(
typ=sco_news.NEWS_FORM, typ=sco_news.NEWS_FORM,
object=new_id, object=new_id,

View File

@ -122,7 +122,7 @@ def formsemestre_editwithmodules(context, REQUEST, formsemestre_id):
return "\n".join(H) + html_sco_header.sco_footer() return "\n".join(H) + html_sco_header.sco_footer()
def can_edit_sem(context, REQUEST, formsemestre_id="", sem=None): def can_edit_sem(REQUEST, formsemestre_id="", sem=None):
"""Return sem if user can edit it, False otherwise""" """Return sem if user can edit it, False otherwise"""
sem = sem or sco_formsemestre.get_formsemestre(formsemestre_id) sem = sem or sco_formsemestre.get_formsemestre(formsemestre_id)
if not current_user.has_permission(Permission.ScoImplement): # pas chef if not current_user.has_permission(Permission.ScoImplement): # pas chef
@ -168,9 +168,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
initvalues = sem initvalues = sem
semestre_id = initvalues["semestre_id"] semestre_id = initvalues["semestre_id"]
# add associated modules to tf-checked: # add associated modules to tf-checked:
ams = sco_moduleimpl.do_moduleimpl_list( ams = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
sem_module_ids = set([x["module_id"] for x in ams]) sem_module_ids = set([x["module_id"] for x in ams])
initvalues["tf-checked"] = ["MI" + str(x["module_id"]) for x in ams] initvalues["tf-checked"] = ["MI" + str(x["module_id"]) for x in ams]
for x in ams: for x in ams:
@ -203,13 +201,11 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
# on pourrait faire un simple module_list( ) # on pourrait faire un simple module_list( )
# mais si on veut l'ordre du PPN (groupe par UE et matieres) il faut: # mais si on veut l'ordre du PPN (groupe par UE et matieres) il faut:
mods = [] # liste de dicts mods = [] # liste de dicts
uelist = sco_edit_ue.do_ue_list(context, {"formation_id": formation_id}) uelist = sco_edit_ue.do_ue_list({"formation_id": formation_id})
for ue in uelist: for ue in uelist:
matlist = sco_edit_matiere.do_matiere_list(context, {"ue_id": ue["ue_id"]}) matlist = sco_edit_matiere.do_matiere_list({"ue_id": ue["ue_id"]})
for mat in matlist: for mat in matlist:
modsmat = sco_edit_module.do_module_list( modsmat = sco_edit_module.do_module_list({"matiere_id": mat["matiere_id"]})
context, {"matiere_id": mat["matiere_id"]}
)
# XXX debug checks # XXX debug checks
for m in modsmat: for m in modsmat:
if m["ue_id"] != ue["ue_id"]: if m["ue_id"] != ue["ue_id"]:
@ -736,7 +732,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
"formsemestre_id": formsemestre_id, "formsemestre_id": formsemestre_id,
"responsable_id": tf[2][module_id], "responsable_id": tf[2][module_id],
} }
_ = sco_moduleimpl.do_moduleimpl_create(context, modargs) _ = sco_moduleimpl.do_moduleimpl_create(modargs)
return flask.redirect( return flask.redirect(
"formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé" "formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé"
% formsemestre_id % formsemestre_id
@ -751,9 +747,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
# (retire le "MI" du début du nom de champs) # (retire le "MI" du début du nom de champs)
checkedmods = [int(x[2:]) for x in tf[2]["tf-checked"]] checkedmods = [int(x[2:]) for x in tf[2]["tf-checked"]]
sco_formsemestre.do_formsemestre_edit(tf[2]) sco_formsemestre.do_formsemestre_edit(tf[2])
ams = sco_moduleimpl.do_moduleimpl_list( ams = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
existingmods = [x["module_id"] for x in ams] existingmods = [x["module_id"] for x in ams]
mods_tocreate = [x for x in checkedmods if not x in existingmods] mods_tocreate = [x for x in checkedmods if not x in existingmods]
# modules a existants a modifier # modules a existants a modifier
@ -768,10 +762,8 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
"formsemestre_id": formsemestre_id, "formsemestre_id": formsemestre_id,
"responsable_id": tf[2]["MI" + str(module_id)], "responsable_id": tf[2]["MI" + str(module_id)],
} }
moduleimpl_id = sco_moduleimpl.do_moduleimpl_create(context, modargs) moduleimpl_id = sco_moduleimpl.do_moduleimpl_create(modargs)
mod = sco_edit_module.do_module_list(context, {"module_id": module_id})[ mod = sco_edit_module.do_module_list({"module_id": module_id})[0]
0
]
msg += ["création de %s (%s)" % (mod["code"], mod["titre"])] msg += ["création de %s (%s)" % (mod["code"], mod["titre"])]
# INSCRIPTIONS DES ETUDIANTS # INSCRIPTIONS DES ETUDIANTS
log( log(
@ -788,7 +780,6 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
% (module_id, moduleimpl_id, etudids) % (module_id, moduleimpl_id, etudids)
) )
sco_moduleimpl.do_moduleimpl_inscrit_etuds( sco_moduleimpl.do_moduleimpl_inscrit_etuds(
context,
moduleimpl_id, moduleimpl_id,
formsemestre_id, formsemestre_id,
etudids, etudids,
@ -804,13 +795,11 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
% (module_id, moduleimpl_id) % (module_id, moduleimpl_id)
) )
# #
ok, diag = formsemestre_delete_moduleimpls( ok, diag = formsemestre_delete_moduleimpls(formsemestre_id, mods_todelete)
context, formsemestre_id, mods_todelete
)
msg += diag msg += diag
for module_id in mods_toedit: for module_id in mods_toedit:
moduleimpl_id = sco_moduleimpl.do_moduleimpl_list( moduleimpl_id = sco_moduleimpl.do_moduleimpl_list(
context, formsemestre_id=formsemestre_id, module_id=module_id formsemestre_id=formsemestre_id, module_id=module_id
)[0]["moduleimpl_id"] )[0]["moduleimpl_id"]
modargs = { modargs = {
"moduleimpl_id": moduleimpl_id, "moduleimpl_id": moduleimpl_id,
@ -819,11 +808,9 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
"responsable_id": tf[2]["MI" + str(module_id)], "responsable_id": tf[2]["MI" + str(module_id)],
} }
sco_moduleimpl.do_moduleimpl_edit( sco_moduleimpl.do_moduleimpl_edit(
context, modargs, formsemestre_id=formsemestre_id modargs, formsemestre_id=formsemestre_id
) )
mod = sco_edit_module.do_module_list(context, {"module_id": module_id})[ mod = sco_edit_module.do_module_list({"module_id": module_id})[0]
0
]
if msg: if msg:
msg_html = ( msg_html = (
@ -847,7 +834,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
) )
def formsemestre_delete_moduleimpls(context, formsemestre_id, module_ids_to_del): def formsemestre_delete_moduleimpls(formsemestre_id, module_ids_to_del):
"""Delete moduleimpls """Delete moduleimpls
module_ids_to_del: list of module_id (warning: not moduleimpl) module_ids_to_del: list of module_id (warning: not moduleimpl)
Moduleimpls must have no associated evaluations. Moduleimpls must have no associated evaluations.
@ -857,9 +844,9 @@ def formsemestre_delete_moduleimpls(context, formsemestre_id, module_ids_to_del)
for module_id in module_ids_to_del: for module_id in module_ids_to_del:
# get id # get id
moduleimpl_id = sco_moduleimpl.do_moduleimpl_list( moduleimpl_id = sco_moduleimpl.do_moduleimpl_list(
context, formsemestre_id=formsemestre_id, module_id=module_id formsemestre_id=formsemestre_id, module_id=module_id
)[0]["moduleimpl_id"] )[0]["moduleimpl_id"]
mod = sco_edit_module.do_module_list(context, {"module_id": module_id})[0] mod = sco_edit_module.do_module_list({"module_id": module_id})[0]
# Evaluations dans ce module ? # Evaluations dans ce module ?
evals = sco_evaluations.do_evaluation_list({"moduleimpl_id": moduleimpl_id}) evals = sco_evaluations.do_evaluation_list({"moduleimpl_id": moduleimpl_id})
if evals: if evals:
@ -871,7 +858,7 @@ def formsemestre_delete_moduleimpls(context, formsemestre_id, module_ids_to_del)
else: else:
msg += ["suppression de %s (%s)" % (mod["code"], mod["titre"])] msg += ["suppression de %s (%s)" % (mod["code"], mod["titre"])]
sco_moduleimpl.do_moduleimpl_delete( sco_moduleimpl.do_moduleimpl_delete(
context, moduleimpl_id, formsemestre_id=formsemestre_id moduleimpl_id, formsemestre_id=formsemestre_id
) )
return ok, msg return ok, msg
@ -990,7 +977,6 @@ def formsemestre_clone(context, formsemestre_id, REQUEST=None):
) )
else: else:
new_formsemestre_id = do_formsemestre_clone( new_formsemestre_id = do_formsemestre_clone(
context,
formsemestre_id, formsemestre_id,
User.get_user_id_from_nomplogin(tf[2]["responsable_id"]), User.get_user_id_from_nomplogin(tf[2]["responsable_id"]),
tf[2]["date_debut"], tf[2]["date_debut"],
@ -1006,7 +992,6 @@ def formsemestre_clone(context, formsemestre_id, REQUEST=None):
def do_formsemestre_clone( def do_formsemestre_clone(
context,
orig_formsemestre_id, orig_formsemestre_id,
responsable_id, # new resp. responsable_id, # new resp.
date_debut, date_debut,
@ -1031,21 +1016,19 @@ def do_formsemestre_clone(
formsemestre_id = sco_formsemestre.do_formsemestre_create(args) formsemestre_id = sco_formsemestre.do_formsemestre_create(args)
log("created formsemestre %s" % formsemestre_id) log("created formsemestre %s" % formsemestre_id)
# 2- create moduleimpls # 2- create moduleimpls
mods_orig = sco_moduleimpl.do_moduleimpl_list( mods_orig = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=orig_formsemestre_id)
context, formsemestre_id=orig_formsemestre_id
)
for mod_orig in mods_orig: for mod_orig in mods_orig:
args = mod_orig.copy() args = mod_orig.copy()
args["formsemestre_id"] = formsemestre_id args["formsemestre_id"] = formsemestre_id
mid = sco_moduleimpl.do_moduleimpl_create(context, args) mid = sco_moduleimpl.do_moduleimpl_create(args)
# copy notes_modules_enseignants # copy notes_modules_enseignants
ens = sco_moduleimpl.do_ens_list( ens = sco_moduleimpl.do_ens_list(
context, args={"moduleimpl_id": mod_orig["moduleimpl_id"]} args={"moduleimpl_id": mod_orig["moduleimpl_id"]}
) )
for e in ens: for e in ens:
args = e.copy() args = e.copy()
args["moduleimpl_id"] = mid args["moduleimpl_id"] = mid
sco_moduleimpl.do_ens_create(context, args) sco_moduleimpl.do_ens_create(args)
# optionally, copy evaluations # optionally, copy evaluations
if clone_evaluations: if clone_evaluations:
evals = sco_evaluations.do_evaluation_list( evals = sco_evaluations.do_evaluation_list(
@ -1209,7 +1192,7 @@ def do_formsemestres_associate_new_version(context, formsemestre_ids, REQUEST=No
modules_old2new, modules_old2new,
ues_old2new, ues_old2new,
) = sco_formations.formation_create_new_version( ) = sco_formations.formation_create_new_version(
context, formation_id, redirect=False, REQUEST=REQUEST formation_id, redirect=False, REQUEST=REQUEST
) )
for formsemestre_id in formsemestre_ids: for formsemestre_id in formsemestre_ids:
@ -1230,12 +1213,10 @@ def _reassociate_moduleimpls(
et met à jour les décisions de jury (validations d'UE). et met à jour les décisions de jury (validations d'UE).
""" """
# re-associate moduleimpls to new modules: # re-associate moduleimpls to new modules:
modimpls = sco_moduleimpl.do_moduleimpl_list( modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
for mod in modimpls: for mod in modimpls:
mod["module_id"] = modules_old2new[mod["module_id"]] mod["module_id"] = modules_old2new[mod["module_id"]]
sco_moduleimpl.do_moduleimpl_edit(context, mod, formsemestre_id=formsemestre_id) sco_moduleimpl.do_moduleimpl_edit(mod, formsemestre_id=formsemestre_id)
# update decisions: # update decisions:
events = sco_etud.scolar_events_list(cnx, args={"formsemestre_id": formsemestre_id}) events = sco_etud.scolar_events_list(cnx, args={"formsemestre_id": formsemestre_id})
for e in events: for e in events:
@ -1353,7 +1334,7 @@ def do_formsemestre_delete(context, formsemestre_id):
sco_cache.EvaluationCache.invalidate_sem(formsemestre_id) sco_cache.EvaluationCache.invalidate_sem(formsemestre_id)
# --- Destruction des modules de ce semestre # --- Destruction des modules de ce semestre
mods = sco_moduleimpl.do_moduleimpl_list(context, formsemestre_id=formsemestre_id) mods = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
for mod in mods: for mod in mods:
# evaluations # evaluations
evals = sco_evaluations.do_evaluation_list( evals = sco_evaluations.do_evaluation_list(
@ -1374,7 +1355,7 @@ def do_formsemestre_delete(context, formsemestre_id):
) )
sco_moduleimpl.do_moduleimpl_delete( sco_moduleimpl.do_moduleimpl_delete(
context, mod["moduleimpl_id"], formsemestre_id=formsemestre_id mod["moduleimpl_id"], formsemestre_id=formsemestre_id
) )
# --- Desinscription des etudiants # --- Desinscription des etudiants
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)

View File

@ -441,7 +441,7 @@ def _list_ue_with_coef_and_validations(context, sem, etudid):
""" """
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
formsemestre_id = sem["formsemestre_id"] formsemestre_id = sem["formsemestre_id"]
ue_list = sco_edit_ue.do_ue_list(context, {"formation_id": sem["formation_id"]}) ue_list = sco_edit_ue.do_ue_list({"formation_id": sem["formation_id"]})
for ue in ue_list: for ue in ue_list:
# add coefficient # add coefficient
uecoef = sco_formsemestre.formsemestre_uecoef_list( uecoef = sco_formsemestre.formsemestre_uecoef_list(

View File

@ -170,7 +170,7 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non
moduleimpl_inscription_ids = [x[0] for x in res] moduleimpl_inscription_ids = [x[0] for x in res]
for moduleimpl_inscription_id in moduleimpl_inscription_ids: for moduleimpl_inscription_id in moduleimpl_inscription_ids:
sco_moduleimpl.do_moduleimpl_inscription_delete( sco_moduleimpl.do_moduleimpl_inscription_delete(
context, moduleimpl_inscription_id, formsemestre_id=formsemestre_id moduleimpl_inscription_id, formsemestre_id=formsemestre_id
) )
# -- desincription du semestre # -- desincription du semestre
do_formsemestre_inscription_delete( do_formsemestre_inscription_delete(
@ -235,12 +235,11 @@ def do_formsemestre_inscription_with_modules(
# inscription a tous les modules de ce semestre # inscription a tous les modules de ce semestre
modimpls = sco_moduleimpl.do_moduleimpl_withmodule_list( modimpls = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
for mod in modimpls: for mod in modimpls:
if mod["ue"]["type"] != UE_SPORT: if mod["ue"]["type"] != UE_SPORT:
sco_moduleimpl.do_moduleimpl_inscription_create( sco_moduleimpl.do_moduleimpl_inscription_create(
context,
{"moduleimpl_id": mod["moduleimpl_id"], "etudid": etudid}, {"moduleimpl_id": mod["moduleimpl_id"], "etudid": etudid},
REQUEST=REQUEST, REQUEST=REQUEST,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
@ -454,10 +453,8 @@ def formsemestre_inscription_option(context, etudid, formsemestre_id, REQUEST=No
] ]
# Cherche les moduleimpls et les inscriptions # Cherche les moduleimpls et les inscriptions
mods = sco_moduleimpl.do_moduleimpl_withmodule_list( mods = sco_moduleimpl.do_moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id inscr = sco_moduleimpl.do_moduleimpl_inscription_list(etudid=etudid)
)
inscr = sco_moduleimpl.do_moduleimpl_inscription_list(context, etudid=etudid)
# Formulaire # Formulaire
modimpls_by_ue_ids = scu.DictDefault(defaultvalue=[]) # ue_id : [ moduleimpl_id ] modimpls_by_ue_ids = scu.DictDefault(defaultvalue=[]) # ue_id : [ moduleimpl_id ]
modimpls_by_ue_names = scu.DictDefault( modimpls_by_ue_names = scu.DictDefault(
@ -680,14 +677,13 @@ def do_moduleimpl_incription_options(
# inscriptions # inscriptions
for moduleimpl_id in a_inscrire: for moduleimpl_id in a_inscrire:
# verifie que ce module existe bien # verifie que ce module existe bien
mods = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id) mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
if len(mods) != 1: if len(mods) != 1:
raise ScoValueError( raise ScoValueError(
"inscription: invalid moduleimpl_id: %s" % moduleimpl_id "inscription: invalid moduleimpl_id: %s" % moduleimpl_id
) )
mod = mods[0] mod = mods[0]
sco_moduleimpl.do_moduleimpl_inscription_create( sco_moduleimpl.do_moduleimpl_inscription_create(
context,
{"moduleimpl_id": moduleimpl_id, "etudid": etudid}, {"moduleimpl_id": moduleimpl_id, "etudid": etudid},
REQUEST=REQUEST, REQUEST=REQUEST,
formsemestre_id=mod["formsemestre_id"], formsemestre_id=mod["formsemestre_id"],
@ -695,14 +691,14 @@ def do_moduleimpl_incription_options(
# desinscriptions # desinscriptions
for moduleimpl_id in a_desinscrire: for moduleimpl_id in a_desinscrire:
# verifie que ce module existe bien # verifie que ce module existe bien
mods = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id) mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
if len(mods) != 1: if len(mods) != 1:
raise ScoValueError( raise ScoValueError(
"desinscription: invalid moduleimpl_id: %s" % moduleimpl_id "desinscription: invalid moduleimpl_id: %s" % moduleimpl_id
) )
mod = mods[0] mod = mods[0]
inscr = sco_moduleimpl.do_moduleimpl_inscription_list( inscr = sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=moduleimpl_id, etudid=etudid moduleimpl_id=moduleimpl_id, etudid=etudid
) )
if not inscr: if not inscr:
raise ScoValueError( raise ScoValueError(
@ -711,7 +707,7 @@ def do_moduleimpl_incription_options(
) )
oid = inscr[0]["moduleimpl_inscription_id"] oid = inscr[0]["moduleimpl_inscription_id"]
sco_moduleimpl.do_moduleimpl_inscription_delete( sco_moduleimpl.do_moduleimpl_inscription_delete(
context, oid, formsemestre_id=mod["formsemestre_id"] oid, formsemestre_id=mod["formsemestre_id"]
) )
if REQUEST: if REQUEST:

View File

@ -464,9 +464,7 @@ def retreive_formsemestre_from_request():
if "formsemestre_id" in args: if "formsemestre_id" in args:
formsemestre_id = args["formsemestre_id"] formsemestre_id = args["formsemestre_id"]
elif "moduleimpl_id" in args and args["moduleimpl_id"]: elif "moduleimpl_id" in args and args["moduleimpl_id"]:
modimpl = sco_moduleimpl.do_moduleimpl_list( modimpl = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=args["moduleimpl_id"])
context, moduleimpl_id=args["moduleimpl_id"]
)
if not modimpl: if not modimpl:
return None # suppressed ? return None # suppressed ?
modimpl = modimpl[0] modimpl = modimpl[0]
@ -476,9 +474,7 @@ def retreive_formsemestre_from_request():
if not E: if not E:
return None # evaluation suppressed ? return None # evaluation suppressed ?
E = E[0] E = E[0]
modimpl = sco_moduleimpl.do_moduleimpl_list( modimpl = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
context, moduleimpl_id=E["moduleimpl_id"]
)[0]
formsemestre_id = modimpl["formsemestre_id"] formsemestre_id = modimpl["formsemestre_id"]
elif "group_id" in args: elif "group_id" in args:
group = sco_groups.get_group(args["group_id"]) group = sco_groups.get_group(args["group_id"])
@ -596,7 +592,7 @@ def formsemestre_description_table(
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0] F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"]) parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
R = [] R = []
@ -625,7 +621,7 @@ def formsemestre_description_table(
R.append(ue_info) R.append(ue_info)
ModInscrits = sco_moduleimpl.do_moduleimpl_inscription_list( ModInscrits = sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=M["moduleimpl_id"] moduleimpl_id=M["moduleimpl_id"]
) )
enseignants = ", ".join( enseignants = ", ".join(
[sco_users.user_info(m["ens_id"], REQUEST)["nomprenom"] for m in M["ens"]] [sco_users.user_info(m["ens_id"], REQUEST)["nomprenom"] for m in M["ens"]]
@ -891,7 +887,7 @@ def html_expr_diagnostic(context, diagnostics):
for diag in diagnostics: for diag in diagnostics:
if "moduleimpl_id" in diag: if "moduleimpl_id" in diag:
mod = sco_moduleimpl.do_moduleimpl_withmodule_list( mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, moduleimpl_id=diag["moduleimpl_id"] moduleimpl_id=diag["moduleimpl_id"]
)[0] )[0]
H.append( H.append(
'<li>module <a href="moduleimpl_status?moduleimpl_id=%s">%s</a>: %s</li>' '<li>module <a href="moduleimpl_status?moduleimpl_id=%s">%s</a>: %s</li>'
@ -903,7 +899,7 @@ def html_expr_diagnostic(context, diagnostics):
) )
else: else:
if diag["ue_id"] != last_id or diag["msg"] != last_msg: if diag["ue_id"] != last_id or diag["msg"] != last_msg:
ue = sco_edit_ue.do_ue_list(context, {"ue_id": diag["ue_id"]})[0] ue = sco_edit_ue.do_ue_list({"ue_id": diag["ue_id"]})[0]
H.append( H.append(
'<li>UE "%s": %s</li>' '<li>UE "%s": %s</li>'
% (ue["acronyme"] or ue["titre"] or "?", diag["msg"]) % (ue["acronyme"] or ue["titre"] or "?", diag["msg"])
@ -987,16 +983,14 @@ def formsemestre_status(context, formsemestre_id=None, REQUEST=None):
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem = sco_formsemestre.get_formsemestre(formsemestre_id)
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
# inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list( # inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
# args={"formsemestre_id": formsemestre_id} # args={"formsemestre_id": formsemestre_id}
# ) # )
prev_ue_id = None prev_ue_id = None
can_edit = sco_formsemestre_edit.can_edit_sem( can_edit = sco_formsemestre_edit.can_edit_sem(REQUEST, formsemestre_id, sem=sem)
context, REQUEST, formsemestre_id, sem=sem
)
H = [ H = [
html_sco_header.sco_header(page_title="Semestre %s" % sem["titreannee"]), html_sco_header.sco_header(page_title="Semestre %s" % sem["titreannee"]),
@ -1040,7 +1034,7 @@ def formsemestre_status(context, formsemestre_id=None, REQUEST=None):
[sco_users.user_info(e["ens_id"])["nomcomplet"] for e in M["ens"]] [sco_users.user_info(e["ens_id"])["nomcomplet"] for e in M["ens"]]
) )
ModInscrits = sco_moduleimpl.do_moduleimpl_inscription_list( ModInscrits = sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=M["moduleimpl_id"] moduleimpl_id=M["moduleimpl_id"]
) )
mails_enseignants.add( mails_enseignants.add(
sco_users.user_info(M["responsable_id"], REQUEST)["email"] sco_users.user_info(M["responsable_id"], REQUEST)["email"]

View File

@ -1018,7 +1018,7 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
] ]
# Toutes les UE de cette formation sont présentées (même celles des autres semestres) # Toutes les UE de cette formation sont présentées (même celles des autres semestres)
ues = sco_edit_ue.do_ue_list(context, {"formation_id": Fo["formation_id"]}) ues = sco_edit_ue.do_ue_list({"formation_id": Fo["formation_id"]})
ue_names = ["Choisir..."] + ["%(acronyme)s %(titre)s" % ue for ue in ues] ue_names = ["Choisir..."] + ["%(acronyme)s %(titre)s" % ue for ue in ues]
ue_ids = [""] + [ue["ue_id"] for ue in ues] ue_ids = [""] + [ue["ue_id"] for ue in ues]
tf = TrivialFormulator( tf = TrivialFormulator(
@ -1076,7 +1076,7 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
<div id="ue_list_etud_validations"><!-- filled by get_etud_ue_cap_html --></div> <div id="ue_list_etud_validations"><!-- filled by get_etud_ue_cap_html --></div>
<div id="ue_list_code"><!-- filled by ue_sharing_code --></div> <div id="ue_list_code"><!-- filled by ue_sharing_code --></div>
""" """
warn, ue_multiples = check_formation_ues(context, Fo["formation_id"]) warn, ue_multiples = check_formation_ues(Fo["formation_id"])
return "\n".join(H) + tf[1] + X + warn + html_sco_header.sco_footer() return "\n".join(H) + tf[1] + X + warn + html_sco_header.sco_footer()
elif tf[0] == -1: elif tf[0] == -1:
return flask.redirect( return flask.redirect(
@ -1228,13 +1228,13 @@ def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST
) )
def check_formation_ues(context, formation_id): def check_formation_ues(formation_id):
"""Verifie que les UE d'une formation sont chacune utilisée dans un seul semestre_id """Verifie que les UE d'une formation sont chacune utilisée dans un seul semestre_id
Si ce n'est pas le cas, c'est probablement (mais pas forcément) une erreur de Si ce n'est pas le cas, c'est probablement (mais pas forcément) une erreur de
définition du programme: cette fonction retourne un bout de HTML définition du programme: cette fonction retourne un bout de HTML
à afficher pour prévenir l'utilisateur, ou '' si tout est ok. à afficher pour prévenir l'utilisateur, ou '' si tout est ok.
""" """
ues = sco_edit_ue.do_ue_list(context, {"formation_id": formation_id}) ues = sco_edit_ue.do_ue_list({"formation_id": formation_id})
ue_multiples = {} # { ue_id : [ liste des formsemestre ] } ue_multiples = {} # { ue_id : [ liste des formsemestre ] }
for ue in ues: for ue in ues:
# formsemestres utilisant cette ue ? # formsemestres utilisant cette ue ?

View File

@ -319,9 +319,7 @@ class DisplayedGroupsInfos(object):
else: else:
group_ids = [] group_ids = []
if not formsemestre_id and moduleimpl_id: if not formsemestre_id and moduleimpl_id:
mods = sco_moduleimpl.do_moduleimpl_list( mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
context, moduleimpl_id=moduleimpl_id
)
if len(mods) != 1: if len(mods) != 1:
raise ValueError("invalid moduleimpl_id") raise ValueError("invalid moduleimpl_id")
formsemestre_id = mods[0]["formsemestre_id"] formsemestre_id = mods[0]["formsemestre_id"]

View File

@ -234,8 +234,8 @@ def _make_table_notes(
return "<p>Aucune évaluation !</p>" return "<p>Aucune évaluation !</p>"
E = evals[0] E = evals[0]
moduleimpl_id = E["moduleimpl_id"] moduleimpl_id = E["moduleimpl_id"]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
# (debug) check that all evals are in same module: # (debug) check that all evals are in same module:
for e in evals: for e in evals:
@ -888,7 +888,7 @@ def formsemestre_check_absences_html(context, formsemestre_id, REQUEST=None):
] ]
# Modules, dans l'ordre # Modules, dans l'ordre
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
for M in Mlist: for M in Mlist:
evals = sco_evaluations.do_evaluation_list( evals = sco_evaluations.do_evaluation_list(

View File

@ -63,7 +63,7 @@ _modules_enseignantsEditor = ndb.EditableTable(
) )
def do_moduleimpl_create(context, args): def do_moduleimpl_create(args):
"create a moduleimpl" "create a moduleimpl"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
r = _moduleimplEditor.create(cnx, args) r = _moduleimplEditor.create(cnx, args)
@ -73,7 +73,7 @@ def do_moduleimpl_create(context, args):
return r return r
def do_moduleimpl_delete(context, oid, formsemestre_id=None): def do_moduleimpl_delete(oid, formsemestre_id=None):
"delete moduleimpl (desinscrit tous les etudiants)" "delete moduleimpl (desinscrit tous les etudiants)"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# --- desinscription des etudiants # --- desinscription des etudiants
@ -100,7 +100,7 @@ def do_moduleimpl_delete(context, oid, formsemestre_id=None):
def do_moduleimpl_list( def do_moduleimpl_list(
context, moduleimpl_id=None, formsemestre_id=None, module_id=None, REQUEST=None moduleimpl_id=None, formsemestre_id=None, module_id=None, REQUEST=None
): ):
"list moduleimpls" "list moduleimpls"
args = locals() args = locals()
@ -108,11 +108,11 @@ def do_moduleimpl_list(
modimpls = _moduleimplEditor.list(cnx, args) modimpls = _moduleimplEditor.list(cnx, args)
# Ajoute la liste des enseignants # Ajoute la liste des enseignants
for mo in modimpls: for mo in modimpls:
mo["ens"] = do_ens_list(context, args={"moduleimpl_id": mo["moduleimpl_id"]}) mo["ens"] = do_ens_list(args={"moduleimpl_id": mo["moduleimpl_id"]})
return scu.return_text_if_published(modimpls, REQUEST) return scu.return_text_if_published(modimpls, REQUEST)
def do_moduleimpl_edit(context, args, formsemestre_id=None, cnx=None): def do_moduleimpl_edit(args, formsemestre_id=None, cnx=None):
"edit a moduleimpl" "edit a moduleimpl"
if not cnx: if not cnx:
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
@ -124,7 +124,7 @@ def do_moduleimpl_edit(context, args, formsemestre_id=None, cnx=None):
def do_moduleimpl_withmodule_list( def do_moduleimpl_withmodule_list(
context, moduleimpl_id=None, formsemestre_id=None, module_id=None, REQUEST=None moduleimpl_id=None, formsemestre_id=None, module_id=None, REQUEST=None
): ):
"""Liste les moduleimpls et ajoute dans chacun le module correspondant """Liste les moduleimpls et ajoute dans chacun le module correspondant
Tri la liste par semestre/UE/numero_matiere/numero_module. Tri la liste par semestre/UE/numero_matiere/numero_module.
@ -136,10 +136,8 @@ def do_moduleimpl_withmodule_list(
from app.scodoc import sco_edit_module from app.scodoc import sco_edit_module
args = locals() args = locals()
del args["context"]
del args["REQUEST"] del args["REQUEST"]
modimpls = do_moduleimpl_list( modimpls = do_moduleimpl_list(
context,
**{ **{
"moduleimpl_id": moduleimpl_id, "moduleimpl_id": moduleimpl_id,
"formsemestre_id": formsemestre_id, "formsemestre_id": formsemestre_id,
@ -148,13 +146,11 @@ def do_moduleimpl_withmodule_list(
) )
for mo in modimpls: for mo in modimpls:
mo["module"] = sco_edit_module.do_module_list( mo["module"] = sco_edit_module.do_module_list(
context, args={"module_id": mo["module_id"]} args={"module_id": mo["module_id"]}
)[0]
mo["ue"] = sco_edit_ue.do_ue_list(
context, args={"ue_id": mo["module"]["ue_id"]}
)[0] )[0]
mo["ue"] = sco_edit_ue.do_ue_list(args={"ue_id": mo["module"]["ue_id"]})[0]
mo["matiere"] = sco_edit_matiere.do_matiere_list( mo["matiere"] = sco_edit_matiere.do_matiere_list(
context, args={"matiere_id": mo["module"]["matiere_id"]} args={"matiere_id": mo["module"]["matiere_id"]}
)[0] )[0]
# tri par semestre/UE/numero_matiere/numero_module # tri par semestre/UE/numero_matiere/numero_module
@ -172,9 +168,7 @@ def do_moduleimpl_withmodule_list(
return scu.return_text_if_published(modimpls, REQUEST) return scu.return_text_if_published(modimpls, REQUEST)
def do_moduleimpl_inscription_list( def do_moduleimpl_inscription_list(moduleimpl_id=None, etudid=None, REQUEST=None):
context, moduleimpl_id=None, etudid=None, REQUEST=None
):
"list moduleimpl_inscriptions" "list moduleimpl_inscriptions"
args = locals() args = locals()
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
@ -183,7 +177,7 @@ def do_moduleimpl_inscription_list(
) )
def do_moduleimpl_listeetuds(context, moduleimpl_id): def do_moduleimpl_listeetuds(moduleimpl_id):
"retourne liste des etudids inscrits a ce module" "retourne liste des etudids inscrits a ce module"
req = """SELECT DISTINCT Im.etudid req = """SELECT DISTINCT Im.etudid
FROM notes_moduleimpl_inscription Im, FROM notes_moduleimpl_inscription Im,
@ -200,7 +194,7 @@ def do_moduleimpl_listeetuds(context, moduleimpl_id):
return [x[0] for x in res] return [x[0] for x in res]
def do_moduleimpl_inscrit_tout_semestre(context, moduleimpl_id, formsemestre_id): def do_moduleimpl_inscrit_tout_semestre(moduleimpl_id, formsemestre_id):
"inscrit tous les etudiants inscrit au semestre a ce module" "inscrit tous les etudiants inscrit au semestre a ce module"
# UNUSED # UNUSED
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
@ -223,7 +217,7 @@ _moduleimpl_inscriptionEditor = ndb.EditableTable(
) )
def do_moduleimpl_inscription_create(context, args, REQUEST=None, formsemestre_id=None): def do_moduleimpl_inscription_create(args, REQUEST=None, formsemestre_id=None):
"create a moduleimpl_inscription" "create a moduleimpl_inscription"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
log("do_moduleimpl_inscription_create: " + str(args)) log("do_moduleimpl_inscription_create: " + str(args))
@ -242,7 +236,7 @@ def do_moduleimpl_inscription_create(context, args, REQUEST=None, formsemestre_i
return r return r
def do_moduleimpl_inscription_delete(context, oid, formsemestre_id=None): def do_moduleimpl_inscription_delete(oid, formsemestre_id=None):
"delete moduleimpl_inscription" "delete moduleimpl_inscription"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
_moduleimpl_inscriptionEditor.delete(cnx, oid) _moduleimpl_inscriptionEditor.delete(cnx, oid)
@ -252,7 +246,7 @@ def do_moduleimpl_inscription_delete(context, oid, formsemestre_id=None):
def do_moduleimpl_inscrit_etuds( def do_moduleimpl_inscrit_etuds(
context, moduleimpl_id, formsemestre_id, etudids, reset=False, REQUEST=None moduleimpl_id, formsemestre_id, etudids, reset=False, REQUEST=None
): ):
"""Inscrit les etudiants (liste d'etudids) a ce module. """Inscrit les etudiants (liste d'etudids) a ce module.
Si reset, desinscrit tous les autres. Si reset, desinscrit tous les autres.
@ -280,16 +274,13 @@ def do_moduleimpl_inscrit_etuds(
[ [
# hum ? # hum ?
x["etudid"] x["etudid"]
for x in do_moduleimpl_inscription_list( for x in do_moduleimpl_inscription_list(moduleimpl_id=moduleimpl_id)
context, moduleimpl_id=moduleimpl_id
)
] ]
) )
for etudid in etudids: for etudid in etudids:
# deja inscrit ? # deja inscrit ?
if not etudid in inmod_set: if not etudid in inmod_set:
do_moduleimpl_inscription_create( do_moduleimpl_inscription_create(
context,
{"moduleimpl_id": moduleimpl_id, "etudid": etudid}, {"moduleimpl_id": moduleimpl_id, "etudid": etudid},
REQUEST=REQUEST, REQUEST=REQUEST,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
@ -300,31 +291,31 @@ def do_moduleimpl_inscrit_etuds(
) # > moduleimpl_inscrit_etuds ) # > moduleimpl_inscrit_etuds
def do_ens_list(context, *args, **kw): def do_ens_list(*args, **kw):
"liste les enseignants d'un moduleimpl (pas le responsable)" "liste les enseignants d'un moduleimpl (pas le responsable)"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
ens = _modules_enseignantsEditor.list(cnx, *args, **kw) ens = _modules_enseignantsEditor.list(cnx, *args, **kw)
return ens return ens
def do_ens_edit(context, *args, **kw): def do_ens_edit(*args, **kw):
"edit ens" "edit ens"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
_modules_enseignantsEditor.edit(cnx, *args, **kw) _modules_enseignantsEditor.edit(cnx, *args, **kw)
def do_ens_create(context, args): def do_ens_create(args):
"create ens" "create ens"
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
r = _modules_enseignantsEditor.create(cnx, args) r = _modules_enseignantsEditor.create(cnx, args)
return r return r
def can_change_module_resp(context, REQUEST, moduleimpl_id): def can_change_module_resp(REQUEST, moduleimpl_id):
"""Check if current user can modify module resp. (raise exception if not). """Check if current user can modify module resp. (raise exception if not).
= Admin, et dir des etud. (si option l'y autorise) = Admin, et dir des etud. (si option l'y autorise)
""" """
M = do_moduleimpl_withmodule_list(context, moduleimpl_id=moduleimpl_id)[0] M = do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
# -- check lock # -- check lock
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
if not sem["etat"]: if not sem["etat"]:
@ -340,9 +331,9 @@ def can_change_module_resp(context, REQUEST, moduleimpl_id):
return M, sem return M, sem
def can_change_ens(context, REQUEST, moduleimpl_id, raise_exc=True): def can_change_ens(REQUEST, moduleimpl_id, raise_exc=True):
"check if current user can modify ens list (raise exception if not)" "check if current user can modify ens list (raise exception if not)"
M = do_moduleimpl_withmodule_list(context, moduleimpl_id=moduleimpl_id)[0] M = do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
# -- check lock # -- check lock
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
if not sem["etat"]: if not sem["etat"]:

View File

@ -64,9 +64,9 @@ def moduleimpl_inscriptions_edit(
* Si pas les droits: idem en readonly * Si pas les droits: idem en readonly
""" """
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem = sco_formsemestre.get_formsemestre(formsemestre_id)
# -- check lock # -- check lock
if not sem["etat"]: if not sem["etat"]:
@ -108,7 +108,7 @@ def moduleimpl_inscriptions_edit(
ins["etud"] = etuds_info[0] ins["etud"] = etuds_info[0]
inscrits.sort(key=lambda x: x["etud"]["nom"]) inscrits.sort(key=lambda x: x["etud"]["nom"])
in_m = sco_moduleimpl.do_moduleimpl_inscription_list( in_m = sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=M["moduleimpl_id"] moduleimpl_id=M["moduleimpl_id"]
) )
in_module = set([x["etudid"] for x in in_m]) in_module = set([x["etudid"] for x in in_m])
# #
@ -199,7 +199,7 @@ def moduleimpl_inscriptions_edit(
else: # SUBMISSION else: # SUBMISSION
# inscrit a ce module tous les etuds selectionnes # inscrit a ce module tous les etuds selectionnes
sco_moduleimpl.do_moduleimpl_inscrit_etuds( sco_moduleimpl.do_moduleimpl_inscrit_etuds(
context, moduleimpl_id, formsemestre_id, etuds, reset=True, REQUEST=REQUEST moduleimpl_id, formsemestre_id, etuds, reset=True, REQUEST=REQUEST
) )
return flask.redirect("moduleimpl_status?moduleimpl_id=%s" % (moduleimpl_id)) return flask.redirect("moduleimpl_status?moduleimpl_id=%s" % (moduleimpl_id))
# #
@ -265,7 +265,7 @@ def moduleimpl_inscriptions_stats(context, formsemestre_id, REQUEST=None):
# Liste des modules # Liste des modules
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
# Decrit les inscriptions aux modules: # Decrit les inscriptions aux modules:
commons = [] # modules communs a tous les etuds du semestre commons = [] # modules communs a tous les etuds du semestre
@ -347,10 +347,7 @@ def moduleimpl_inscriptions_stats(context, formsemestre_id, REQUEST=None):
UECaps = get_etuds_with_capitalized_ue(context, formsemestre_id) UECaps = get_etuds_with_capitalized_ue(context, formsemestre_id)
if UECaps: if UECaps:
H.append('<h3>Etudiants avec UEs capitalisées:</h3><ul class="ue_inscr_list">') H.append('<h3>Etudiants avec UEs capitalisées:</h3><ul class="ue_inscr_list">')
ues = [ ues = [sco_edit_ue.do_ue_list({"ue_id": ue_id})[0] for ue_id in UECaps.keys()]
sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0]
for ue_id in UECaps.keys()
]
ues.sort(key=lambda u: u["numero"]) ues.sort(key=lambda u: u["numero"])
for ue in ues: for ue in ues:
H.append( H.append(
@ -428,9 +425,7 @@ def descr_inscrs_module(
context, sem, moduleimpl_id, set_all, partitions, partitions_etud_groups context, sem, moduleimpl_id, set_all, partitions, partitions_etud_groups
): ):
"""returns tous_inscrits, nb_inscrits, descr""" """returns tous_inscrits, nb_inscrits, descr"""
ins = sco_moduleimpl.do_moduleimpl_inscription_list( ins = sco_moduleimpl.do_moduleimpl_inscription_list(moduleimpl_id=moduleimpl_id)
context, moduleimpl_id=moduleimpl_id
)
set_m = set([x["etudid"] for x in ins]) # ens. des inscrits au module set_m = set([x["etudid"] for x in ins]) # ens. des inscrits au module
non_inscrits = set_all - set_m non_inscrits = set_all - set_m
if len(non_inscrits) == 0: if len(non_inscrits) == 0:
@ -589,7 +584,6 @@ def do_etud_inscrit_ue(context, etudid, formsemestre_id, ue_id, REQUEST=None):
res = cursor.dictfetchall() res = cursor.dictfetchall()
for moduleimpl_id in [x["moduleimpl_id"] for x in res]: for moduleimpl_id in [x["moduleimpl_id"] for x in res]:
sco_moduleimpl.do_moduleimpl_inscription_create( sco_moduleimpl.do_moduleimpl_inscription_create(
context,
{"moduleimpl_id": moduleimpl_id, "etudid": etudid}, {"moduleimpl_id": moduleimpl_id, "etudid": etudid},
REQUEST=REQUEST, REQUEST=REQUEST,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,

View File

@ -57,9 +57,7 @@ from app.scodoc import sco_users
def moduleimpl_evaluation_menu(context, evaluation_id, nbnotes=0, REQUEST=None): def moduleimpl_evaluation_menu(context, evaluation_id, nbnotes=0, REQUEST=None):
"Menu avec actions sur une evaluation" "Menu avec actions sur une evaluation"
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
modimpl = sco_moduleimpl.do_moduleimpl_list( modimpl = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
context, moduleimpl_id=E["moduleimpl_id"]
)[0]
group_id = sco_groups.get_default_group(modimpl["formsemestre_id"]) group_id = sco_groups.get_default_group(modimpl["formsemestre_id"])
@ -158,13 +156,13 @@ def moduleimpl_evaluation_menu(context, evaluation_id, nbnotes=0, REQUEST=None):
def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=None): def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=None):
"""Tableau de bord module (liste des evaluations etc)""" """Tableau de bord module (liste des evaluations etc)"""
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem = sco_formsemestre.get_formsemestre(formsemestre_id)
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0] F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
ModInscrits = sco_moduleimpl.do_moduleimpl_inscription_list( ModInscrits = sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=M["moduleimpl_id"] moduleimpl_id=M["moduleimpl_id"]
) )
nt = sco_cache.NotesTableCache.get(formsemestre_id) nt = sco_cache.NotesTableCache.get(formsemestre_id)
@ -193,7 +191,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
"""<span class="blacktt">(%(responsable_id)s)</span>""" % M, """<span class="blacktt">(%(responsable_id)s)</span>""" % M,
] ]
try: try:
sco_moduleimpl.can_change_module_resp(context, REQUEST, moduleimpl_id) sco_moduleimpl.can_change_module_resp(REQUEST, moduleimpl_id)
H.append( H.append(
"""<a class="stdlink" href="edit_moduleimpl_resp?moduleimpl_id=%s">modifier</a>""" """<a class="stdlink" href="edit_moduleimpl_resp?moduleimpl_id=%s">modifier</a>"""
% moduleimpl_id % moduleimpl_id
@ -206,7 +204,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
) )
H.append("""</td><td>""") H.append("""</td><td>""")
try: try:
sco_moduleimpl.can_change_ens(context, REQUEST, moduleimpl_id) sco_moduleimpl.can_change_ens(REQUEST, moduleimpl_id)
H.append( H.append(
"""<a class="stdlink" href="edit_enseignants_form?moduleimpl_id=%s">modifier les enseignants</a>""" """<a class="stdlink" href="edit_enseignants_form?moduleimpl_id=%s">modifier les enseignants</a>"""
% moduleimpl_id % moduleimpl_id
@ -249,9 +247,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
'<tr><td class="fichetitre2" colspan="4">Règle de calcul: <span class="formula" title="mode de calcul de la moyenne du module">moyenne=<tt>%s</tt></span>' '<tr><td class="fichetitre2" colspan="4">Règle de calcul: <span class="formula" title="mode de calcul de la moyenne du module">moyenne=<tt>%s</tt></span>'
% M["computation_expr"] % M["computation_expr"]
) )
if sco_moduleimpl.can_change_ens( if sco_moduleimpl.can_change_ens(REQUEST, moduleimpl_id, raise_exc=False):
context, REQUEST, moduleimpl_id, raise_exc=False
):
H.append( H.append(
'<span class="fl"><a class="stdlink" href="edit_moduleimpl_expr?moduleimpl_id=%s">modifier</a></span>' '<span class="fl"><a class="stdlink" href="edit_moduleimpl_expr?moduleimpl_id=%s">modifier</a></span>'
% moduleimpl_id % moduleimpl_id
@ -261,9 +257,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
H.append( H.append(
'<tr><td colspan="4"><em title="mode de calcul de la moyenne du module">règle de calcul standard</em>' '<tr><td colspan="4"><em title="mode de calcul de la moyenne du module">règle de calcul standard</em>'
) )
if sco_moduleimpl.can_change_ens( if sco_moduleimpl.can_change_ens(REQUEST, moduleimpl_id, raise_exc=False):
context, REQUEST, moduleimpl_id, raise_exc=False
):
H.append( H.append(
' (<a class="stdlink" href="edit_moduleimpl_expr?moduleimpl_id=%s">changer</a>)' ' (<a class="stdlink" href="edit_moduleimpl_expr?moduleimpl_id=%s">changer</a>)'
% moduleimpl_id % moduleimpl_id

View File

@ -178,7 +178,7 @@ def _get_formsemestre_infos_from_news(context, n):
formsemestre_id = n["object"] formsemestre_id = n["object"]
elif n["type"] == NEWS_NOTE: elif n["type"] == NEWS_NOTE:
moduleimpl_id = n["object"] moduleimpl_id = n["object"]
mods = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id) mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
if not mods: if not mods:
return {} # module does not exists anymore return {} # module does not exists anymore
mod = mods[0] mod = mods[0]

View File

@ -1093,7 +1093,7 @@ def formsemestre_get_etud_capitalisation(context, sem, etudid):
return cursor.dictfetchall() return cursor.dictfetchall()
def list_formsemestre_utilisateurs_uecap(context, formsemestre_id): def list_formsemestre_utilisateurs_uecap(formsemestre_id):
"""Liste des formsemestres pouvant utiliser une UE capitalisee de ce semestre """Liste des formsemestres pouvant utiliser une UE capitalisee de ce semestre
(et qui doivent donc etre sortis du cache si l'on modifie ce (et qui doivent donc etre sortis du cache si l'on modifie ce
semestre): meme code formation, meme semestre_id, date posterieure""" semestre): meme code formation, meme semestre_id, date posterieure"""

View File

@ -26,7 +26,7 @@ def can_edit_notes(authuser, moduleimpl_id, allow_ens=True):
context = None # XXX #context context = None # XXX #context
uid = str(authuser) uid = str(authuser)
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
if not sem["etat"]: if not sem["etat"]:
return False # semestre verrouillé return False # semestre verrouillé
@ -68,7 +68,7 @@ def can_edit_evaluation(moduleimpl_id=None):
if moduleimpl_id is None: if moduleimpl_id is None:
raise ValueError("no moduleimpl specified") # bug raise ValueError("no moduleimpl specified") # bug
uid = current_user.user_name uid = current_user.user_name
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
if ( if (

View File

@ -65,7 +65,7 @@ def do_placement_selectetuds(REQUEST):
if not E: if not E:
raise ScoValueError("invalid evaluation_id") raise ScoValueError("invalid evaluation_id")
E = E[0] E = E[0]
# M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] # M = sco_moduleimpl.do_moduleimpl_list( moduleimpl_id=E["moduleimpl_id"])[0]
# groupes # groupes
groups = sco_groups.do_evaluation_listegroupes(evaluation_id, include_default=True) groups = sco_groups.do_evaluation_listegroupes(evaluation_id, include_default=True)
grlabs = [g["group_name"] or "tous" for g in groups] # legendes des boutons grlabs = [g["group_name"] or "tous" for g in groups] # legendes des boutons
@ -283,8 +283,8 @@ def do_placement(context, REQUEST):
if not etudids: if not etudids:
return "<p>Aucun groupe sélectionné !</p>" return "<p>Aucun groupe sélectionné !</p>"
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
evalname = "%s-%s" % (Mod["code"], ndb.DateDMYtoISO(E["jour"])) evalname = "%s-%s" % (Mod["code"], ndb.DateDMYtoISO(E["jour"]))
if E["description"]: if E["description"]:
@ -395,9 +395,7 @@ def do_placement(context, REQUEST):
preferences=sco_preferences.SemPreferences(M["formsemestre_id"]), preferences=sco_preferences.SemPreferences(M["formsemestre_id"]),
# html_generate_cells=False # la derniere ligne (moyennes) est incomplete # html_generate_cells=False # la derniere ligne (moyennes) est incomplete
) )
t = tab.make_page( t = tab.make_page(format="pdf", with_html_headers=False, REQUEST=REQUEST)
context, format="pdf", with_html_headers=False, REQUEST=REQUEST
)
return t return t

View File

@ -215,7 +215,6 @@ def formsemestre_poursuite_report(
tab.html_caption = "Récapitulatif %s." % sem["titreannee"] tab.html_caption = "Récapitulatif %s." % sem["titreannee"]
tab.base_url = "%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id) tab.base_url = "%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id)
return tab.make_page( return tab.make_page(
context,
title="""<h2 class="formsemestre">Poursuite d'études</h2>""", title="""<h2 class="formsemestre">Poursuite d'études</h2>""",
init_qtip=True, init_qtip=True,
javascripts=["js/etud_info.js"], javascripts=["js/etud_info.js"],

View File

@ -92,7 +92,7 @@ def _descr_decisions_ues(context, nt, etudid, decisions_ue, decision_sem):
and sco_codes_parcours.code_semestre_validant(decision_sem["code"]) and sco_codes_parcours.code_semestre_validant(decision_sem["code"])
) )
): ):
ue = sco_edit_ue.do_ue_list(context, args={"ue_id": ue_id})[0] ue = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0]
uelist.append(ue) uelist.append(ue)
except: except:
log("descr_decisions_ues: ue_id=%s decisions_ue=%s" % (ue_id, decisions_ue)) log("descr_decisions_ues: ue_id=%s decisions_ue=%s" % (ue_id, decisions_ue))
@ -543,7 +543,6 @@ def formsemestre_pvjury(
) )
if format != "html": if format != "html":
return tab.make_page( return tab.make_page(
context,
format=format, format=format,
with_html_headers=False, with_html_headers=False,
REQUEST=REQUEST, REQUEST=REQUEST,

View File

@ -357,7 +357,6 @@ def formsemestre_report_counts(
F.append("</p></form>") F.append("</p></form>")
t = tab.make_page( t = tab.make_page(
context,
title="""<h2 class="formsemestre">Comptes croisés</h2>""", title="""<h2 class="formsemestre">Comptes croisés</h2>""",
format=format, format=format,
REQUEST=REQUEST, REQUEST=REQUEST,

View File

@ -171,9 +171,9 @@ def do_evaluation_upload_xls(context, REQUEST):
evaluation_id = int(REQUEST.form["evaluation_id"]) evaluation_id = int(REQUEST.form["evaluation_id"])
comment = REQUEST.form["comment"] comment = REQUEST.form["comment"]
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_withmodule_list( M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[
context, moduleimpl_id=E["moduleimpl_id"] 0
)[0] ]
# Check access # Check access
# (admin, respformation, and responsable_id) # (admin, respformation, and responsable_id)
if not sco_permissions_check.can_edit_notes(authuser, E["moduleimpl_id"]): if not sco_permissions_check.can_edit_notes(authuser, E["moduleimpl_id"]):
@ -248,12 +248,8 @@ def do_evaluation_upload_xls(context, REQUEST):
) )
# news # news
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_list( M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
context, moduleimpl_id=E["moduleimpl_id"] mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
)[0]
mod = sco_edit_module.do_module_list(
context, args={"module_id": M["module_id"]}
)[0]
mod["moduleimpl_id"] = M["moduleimpl_id"] mod["moduleimpl_id"] = M["moduleimpl_id"]
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
sco_news.add( sco_news.add(
@ -289,9 +285,9 @@ def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
# ? evaluation_id = REQUEST.form["evaluation_id"] # ? evaluation_id = REQUEST.form["evaluation_id"]
context = None # XXX #context context = None # XXX #context
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_withmodule_list( M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[
context, moduleimpl_id=E["moduleimpl_id"] 0
)[0] ]
# Check access # Check access
# (admin, respformation, and responsable_id) # (admin, respformation, and responsable_id)
if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]): if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]):
@ -337,8 +333,8 @@ def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
comment = "Initialisation notes manquantes" comment = "Initialisation notes manquantes"
nb_changed, _, _ = _notes_add(context, current_user, evaluation_id, L, comment) nb_changed, _, _ = _notes_add(context, current_user, evaluation_id, L, comment)
# news # news
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
mod["moduleimpl_id"] = M["moduleimpl_id"] mod["moduleimpl_id"] = M["moduleimpl_id"]
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
sco_news.add( sco_news.add(
@ -415,8 +411,8 @@ def evaluation_suppress_alln(evaluation_id, dialog_confirmed=False):
% E["moduleimpl_id"] % E["moduleimpl_id"]
] ]
# news # news
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
mod["moduleimpl_id"] = M["moduleimpl_id"] mod["moduleimpl_id"] = M["moduleimpl_id"]
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
sco_news.add( sco_news.add(
@ -464,7 +460,7 @@ def _notes_add(
nb_changed = 0 nb_changed = 0
nb_suppress = 0 nb_suppress = 0
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
existing_decisions = ( existing_decisions = (
[] []
) # etudids pour lesquels il y a une decision de jury et que la note change ) # etudids pour lesquels il y a une decision de jury et que la note change
@ -586,7 +582,7 @@ def saisie_notes_tableur(context, evaluation_id, group_ids=[], REQUEST=None):
if not evals: if not evals:
raise ScoValueError("invalid evaluation_id") raise ScoValueError("invalid evaluation_id")
E = evals[0] E = evals[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
if not sco_permissions_check.can_edit_notes(authuser, E["moduleimpl_id"]): if not sco_permissions_check.can_edit_notes(authuser, E["moduleimpl_id"]):
return ( return (
@ -760,9 +756,9 @@ def feuille_saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
if not evals: if not evals:
raise ScoValueError("invalid evaluation_id") raise ScoValueError("invalid evaluation_id")
E = evals[0] E = evals[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
mod_responsable = sco_users.user_info(M["responsable_id"]) mod_responsable = sco_users.user_info(M["responsable_id"])
if E["jour"]: if E["jour"]:
@ -841,7 +837,7 @@ def has_existing_decision(context, M, E, etudid):
return True return True
dec_ues = nt.get_etud_decision_ues(etudid) dec_ues = nt.get_etud_decision_ues(etudid)
if dec_ues: if dec_ues:
mod = sco_edit_module.do_module_list(context, {"module_id": M["module_id"]})[0] mod = sco_edit_module.do_module_list({"module_id": M["module_id"]})[0]
ue_id = mod["ue_id"] ue_id = mod["ue_id"]
if ue_id in dec_ues: if ue_id in dec_ues:
return True # decision pour l'UE a laquelle appartient cette evaluation return True # decision pour l'UE a laquelle appartient cette evaluation
@ -862,9 +858,9 @@ def saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
if not evals: if not evals:
raise ScoValueError("invalid evaluation_id") raise ScoValueError("invalid evaluation_id")
E = evals[0] E = evals[0]
M = sco_moduleimpl.do_moduleimpl_withmodule_list( M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[
context, moduleimpl_id=E["moduleimpl_id"] 0
)[0] ]
formsemestre_id = M["formsemestre_id"] formsemestre_id = M["formsemestre_id"]
# Check access # Check access
# (admin, respformation, and responsable_id) # (admin, respformation, and responsable_id)
@ -1225,8 +1221,8 @@ def save_note(
% (evaluation_id, etudid, authuser, value) % (evaluation_id, etudid, authuser, value)
) )
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
Mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % M Mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % M
result = {"nbchanged": 0} # JSON result = {"nbchanged": 0} # JSON
# Check access: admin, respformation, or responsable_id # Check access: admin, respformation, or responsable_id

View File

@ -212,7 +212,7 @@ def module_tag_search(context, term, REQUEST=None):
return scu.sendJSON(REQUEST, data) return scu.sendJSON(REQUEST, data)
def module_tag_list(context, module_id=""): def module_tag_list(module_id=""):
"""les noms de tags associés à ce module""" """les noms de tags associés à ce module"""
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
"""SELECT t.title """SELECT t.title
@ -225,11 +225,12 @@ def module_tag_list(context, module_id=""):
return [x["title"] for x in r] return [x["title"] for x in r]
def module_tag_set(context, module_id="", taglist=None): def module_tag_set(module_id="", taglist=None):
"""taglist may either be: """taglist may either be:
a string with tag names separated by commas ("un;deux") a string with tag names separated by commas ("un;deux")
or a list of strings (["un", "deux"]) or a list of strings (["un", "deux"])
""" """
context = None # #context
if not taglist: if not taglist:
taglist = [] taglist = []
elif isinstance(taglist, str): elif isinstance(taglist, str):
@ -237,12 +238,12 @@ def module_tag_set(context, module_id="", taglist=None):
taglist = [t.strip() for t in taglist] taglist = [t.strip() for t in taglist]
# log("module_tag_set: module_id=%s taglist=%s" % (module_id, taglist)) # log("module_tag_set: module_id=%s taglist=%s" % (module_id, taglist))
# Sanity check: # Sanity check:
Mod = sco_edit_module.do_module_list(context, args={"module_id": module_id}) Mod = sco_edit_module.do_module_list(args={"module_id": module_id})
if not Mod: if not Mod:
raise ScoValueError("invalid module !") raise ScoValueError("invalid module !")
newtags = set(taglist) newtags = set(taglist)
oldtags = set(module_tag_list(context, module_id)) oldtags = set(module_tag_list(module_id))
to_del = oldtags - newtags to_del = oldtags - newtags
to_add = newtags - oldtags to_add = newtags - oldtags
@ -267,7 +268,7 @@ def get_etud_tagged_modules(context, etudid, tagname):
nt = sco_cache.NotesTableCache.get(sem["formsemestre_id"]) nt = sco_cache.NotesTableCache.get(sem["formsemestre_id"])
modimpls = nt.get_modimpls() modimpls = nt.get_modimpls()
for modimpl in modimpls: for modimpl in modimpls:
tags = module_tag_list(context, module_id=modimpl["module_id"]) tags = module_tag_list(module_id=modimpl["module_id"])
if tagname in tags: if tagname in tags:
moy = nt.get_etud_mod_moy( moy = nt.get_etud_mod_moy(
modimpl["moduleimpl_id"], etudid modimpl["moduleimpl_id"], etudid

View File

@ -95,11 +95,8 @@ def external_ue_create(
formation_id = sem["formation_id"] formation_id = sem["formation_id"]
log("creating external UE in %s: %s" % (formsemestre_id, acronyme)) log("creating external UE in %s: %s" % (formsemestre_id, acronyme))
numero = sco_edit_ue.next_ue_numero( numero = sco_edit_ue.next_ue_numero(formation_id, semestre_id=sem["semestre_id"])
context, formation_id, semestre_id=sem["semestre_id"]
)
ue_id = sco_edit_ue.do_ue_create( ue_id = sco_edit_ue.do_ue_create(
context,
{ {
"formation_id": formation_id, "formation_id": formation_id,
"titre": titre, "titre": titre,
@ -112,11 +109,10 @@ def external_ue_create(
) )
matiere_id = sco_edit_matiere.do_matiere_create( matiere_id = sco_edit_matiere.do_matiere_create(
context, {"ue_id": ue_id, "titre": titre or acronyme, "numero": 1} {"ue_id": ue_id, "titre": titre or acronyme, "numero": 1}
) )
module_id = sco_edit_module.do_module_create( module_id = sco_edit_module.do_module_create(
context,
{ {
"titre": "UE extérieure", "titre": "UE extérieure",
"code": acronyme, "code": acronyme,
@ -129,7 +125,6 @@ def external_ue_create(
) )
moduleimpl_id = sco_moduleimpl.do_moduleimpl_create( moduleimpl_id = sco_moduleimpl.do_moduleimpl_create(
context,
{ {
"module_id": module_id, "module_id": module_id,
"formsemestre_id": formsemestre_id, "formsemestre_id": formsemestre_id,
@ -151,7 +146,6 @@ def external_ue_inscrit_et_note(
) )
# Inscription des étudiants # Inscription des étudiants
sco_moduleimpl.do_moduleimpl_inscrit_etuds( sco_moduleimpl.do_moduleimpl_inscrit_etuds(
context,
moduleimpl_id, moduleimpl_id,
formsemestre_id, formsemestre_id,
list(notes_etuds.keys()), list(notes_etuds.keys()),
@ -188,7 +182,7 @@ def external_ue_inscrit_et_note(
def get_existing_external_ue(context, formation_id): def get_existing_external_ue(context, formation_id):
"la liste de toutes les UE externes définies dans cette formation" "la liste de toutes les UE externes définies dans cette formation"
return sco_edit_ue.do_ue_list( return sco_edit_ue.do_ue_list(
context, args={"formation_id": formation_id, "is_external": True} args={"formation_id": formation_id, "is_external": True}
) )

View File

@ -147,7 +147,7 @@ def list_operations(context, evaluation_id):
def evaluation_list_operations(context, REQUEST, evaluation_id): def evaluation_list_operations(context, REQUEST, evaluation_id):
"""Page listing operations on evaluation""" """Page listing operations on evaluation"""
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0] E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
Ops = list_operations(context, evaluation_id) Ops = list_operations(context, evaluation_id)

View File

@ -214,9 +214,7 @@ def list_users(
preferences=sco_preferences.SemPreferences(context), preferences=sco_preferences.SemPreferences(context),
) )
return tab.make_page( return tab.make_page(format=format, with_html_headers=False, REQUEST=REQUEST)
context, format=format, with_html_headers=False, REQUEST=REQUEST
)
def get_user_list(dept=None, with_inactives=False): def get_user_list(dept=None, with_inactives=False):

View File

@ -353,7 +353,7 @@ def SignaleAbsenceGrHebdo(
[ [
x["etudid"] x["etudid"]
for x in sco_moduleimpl.do_moduleimpl_inscription_list( for x in sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=moduleimpl_id moduleimpl_id=moduleimpl_id
) )
] ]
) )
@ -512,7 +512,7 @@ def SignaleAbsenceGrSemestre(
[ [
x["etudid"] x["etudid"]
for x in sco_moduleimpl.do_moduleimpl_inscription_list( for x in sco_moduleimpl.do_moduleimpl_inscription_list(
context, moduleimpl_id=moduleimpl_id moduleimpl_id=moduleimpl_id
) )
] ]
) )

View File

@ -394,7 +394,7 @@ def index_html(context, REQUEST=None):
"""<h2>Programmes pédagogiques</h2> """<h2>Programmes pédagogiques</h2>
""", """,
] ]
T = sco_formations.formation_list_table(context, REQUEST=REQUEST) T = sco_formations.formation_list_table(REQUEST=REQUEST)
H.append(T.html()) H.append(T.html())
@ -437,7 +437,7 @@ sco_publish(
@scodoc @scodoc
@permission_required(Permission.ScoView) @permission_required(Permission.ScoView)
@scodoc7func(context) @scodoc7func(context)
def formation_list(context, format=None, REQUEST=None, formation_id=None, args={}): def formation_list(format=None, REQUEST=None, formation_id=None, args={}):
"""List formation(s) with given id, or matching args """List formation(s) with given id, or matching args
(when args is given, formation_id is ignored). (when args is given, formation_id is ignored).
""" """
@ -454,7 +454,7 @@ def formation_export(
): ):
"Export de la formation au format indiqué (xml ou json)" "Export de la formation au format indiqué (xml ou json)"
return sco_formations.formation_export( return sco_formations.formation_export(
context, formation_id, export_ids=export_ids, format=format, REQUEST=REQUEST formation_id, export_ids=export_ids, format=format, REQUEST=REQUEST
) )
@ -462,11 +462,11 @@ def formation_export(
@scodoc @scodoc
@permission_required(Permission.ScoChangeFormation) @permission_required(Permission.ScoChangeFormation)
@scodoc7func(context) @scodoc7func(context)
def formation_import_xml(context, file): def formation_import_xml(file):
"import d'une formation en XML" "import d'une formation en XML"
log("formation_import_xml") log("formation_import_xml")
doc = file.read() doc = file.read()
return sco_formations.formation_import_xml(context, doc) return sco_formations.formation_import_xml(doc)
@bp.route("/formation_import_xml_form", methods=["GET", "POST"]) @bp.route("/formation_import_xml_form", methods=["GET", "POST"])
@ -681,7 +681,7 @@ def formsemestre_custommenu_edit(context, REQUEST, formsemestre_id):
@scodoc7func(context) @scodoc7func(context)
def edit_enseignants_form(context, REQUEST, moduleimpl_id): def edit_enseignants_form(context, REQUEST, moduleimpl_id):
"modif liste enseignants/moduleimpl" "modif liste enseignants/moduleimpl"
M, sem = sco_moduleimpl.can_change_ens(context, REQUEST, moduleimpl_id) M, sem = sco_moduleimpl.can_change_ens(REQUEST, moduleimpl_id)
# -- # --
header = html_sco_header.html_sem_header( header = html_sco_header.html_sem_header(
context, context,
@ -778,7 +778,7 @@ def edit_enseignants_form(context, REQUEST, moduleimpl_id):
) )
else: else:
sco_moduleimpl.do_ens_create( sco_moduleimpl.do_ens_create(
context, {"moduleimpl_id": moduleimpl_id, "ens_id": ens_id} {"moduleimpl_id": moduleimpl_id, "ens_id": ens_id}
) )
return flask.redirect( return flask.redirect(
"edit_enseignants_form?moduleimpl_id=%s" % moduleimpl_id "edit_enseignants_form?moduleimpl_id=%s" % moduleimpl_id
@ -794,7 +794,7 @@ def edit_moduleimpl_resp(context, REQUEST, moduleimpl_id):
"""Changement d'un enseignant responsable de module """Changement d'un enseignant responsable de module
Accessible par Admin et dir des etud si flag resp_can_change_ens Accessible par Admin et dir des etud si flag resp_can_change_ens
""" """
M, sem = sco_moduleimpl.can_change_module_resp(context, REQUEST, moduleimpl_id) M, sem = sco_moduleimpl.can_change_module_resp(REQUEST, moduleimpl_id)
H = [ H = [
html_sco_header.html_sem_header( html_sco_header.html_sem_header(
context, context,
@ -861,7 +861,6 @@ def edit_moduleimpl_resp(context, REQUEST, moduleimpl_id):
): # presque impossible: tf verifie les valeurs (mais qui peuvent changer entre temps) ): # presque impossible: tf verifie les valeurs (mais qui peuvent changer entre temps)
return flask.redirect("moduleimpl_status?moduleimpl_id=" + moduleimpl_id) return flask.redirect("moduleimpl_status?moduleimpl_id=" + moduleimpl_id)
sco_moduleimpl.do_moduleimpl_edit( sco_moduleimpl.do_moduleimpl_edit(
context,
{"moduleimpl_id": moduleimpl_id, "responsable_id": responsable_id}, {"moduleimpl_id": moduleimpl_id, "responsable_id": responsable_id},
formsemestre_id=sem["formsemestre_id"], formsemestre_id=sem["formsemestre_id"],
) )
@ -902,7 +901,7 @@ def edit_moduleimpl_expr(context, REQUEST, moduleimpl_id):
"""Edition formule calcul moyenne module """Edition formule calcul moyenne module
Accessible par Admin, dir des etud et responsable module Accessible par Admin, dir des etud et responsable module
""" """
M, sem = sco_moduleimpl.can_change_ens(context, REQUEST, moduleimpl_id) M, sem = sco_moduleimpl.can_change_ens(REQUEST, moduleimpl_id)
H = [ H = [
html_sco_header.html_sem_header( html_sco_header.html_sem_header(
context, context,
@ -946,7 +945,6 @@ def edit_moduleimpl_expr(context, REQUEST, moduleimpl_id):
return flask.redirect("moduleimpl_status?moduleimpl_id=" + moduleimpl_id) return flask.redirect("moduleimpl_status?moduleimpl_id=" + moduleimpl_id)
else: else:
sco_moduleimpl.do_moduleimpl_edit( sco_moduleimpl.do_moduleimpl_edit(
context,
{ {
"moduleimpl_id": moduleimpl_id, "moduleimpl_id": moduleimpl_id,
"computation_expr": tf[2]["computation_expr"], "computation_expr": tf[2]["computation_expr"],
@ -969,13 +967,11 @@ def edit_moduleimpl_expr(context, REQUEST, moduleimpl_id):
@scodoc7func(context) @scodoc7func(context)
def view_module_abs(context, REQUEST, moduleimpl_id, format="html"): def view_module_abs(context, REQUEST, moduleimpl_id, format="html"):
"""Visualisation des absences a un module""" """Visualisation des absences a un module"""
M = sco_moduleimpl.do_moduleimpl_withmodule_list( M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
context, moduleimpl_id=moduleimpl_id
)[0]
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
debut_sem = ndb.DateDMYtoISO(sem["date_debut"]) debut_sem = ndb.DateDMYtoISO(sem["date_debut"])
fin_sem = ndb.DateDMYtoISO(sem["date_fin"]) fin_sem = ndb.DateDMYtoISO(sem["date_fin"])
list_insc = sco_moduleimpl.do_moduleimpl_listeetuds(context, moduleimpl_id) list_insc = sco_moduleimpl.do_moduleimpl_listeetuds(moduleimpl_id)
T = [] T = []
for etudid in list_insc: for etudid in list_insc:
@ -1051,12 +1047,12 @@ def view_module_abs(context, REQUEST, moduleimpl_id, format="html"):
def edit_ue_expr(context, REQUEST, formsemestre_id, ue_id): def edit_ue_expr(context, REQUEST, formsemestre_id, ue_id):
"""Edition formule calcul moyenne UE""" """Edition formule calcul moyenne UE"""
# Check access # Check access
sem = sco_formsemestre_edit.can_edit_sem(context, REQUEST, formsemestre_id) sem = sco_formsemestre_edit.can_edit_sem(REQUEST, formsemestre_id)
if not sem: if not sem:
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération") raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
# #
ue = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] ue = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0]
H = [ H = [
html_sco_header.html_sem_header( html_sco_header.html_sem_header(
context, context,
@ -1129,9 +1125,7 @@ def formsemestre_enseignants_list(context, REQUEST, formsemestre_id, format="htm
""" """
sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem = sco_formsemestre.get_formsemestre(formsemestre_id)
# resp. de modules: # resp. de modules:
mods = sco_moduleimpl.do_moduleimpl_withmodule_list( mods = sco_moduleimpl.do_moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
sem_ens = {} sem_ens = {}
for mod in mods: for mod in mods:
if not mod["responsable_id"] in sem_ens: if not mod["responsable_id"] in sem_ens:
@ -1210,7 +1204,7 @@ def formsemestre_enseignants_list(context, REQUEST, formsemestre_id, format="htm
preferences=sco_preferences.SemPreferences(formsemestre_id), preferences=sco_preferences.SemPreferences(formsemestre_id),
) )
return T.make_page( return T.make_page(
context, page_title=title, title=title, REQUEST=REQUEST, format=format page_title=title, title=title, REQUEST=REQUEST, format=format
) )
@ -1223,7 +1217,7 @@ def edit_enseignants_form_delete(context, REQUEST, moduleimpl_id, ens_id: int):
ens_id: user.id ens_id: user.id
""" """
M, _ = sco_moduleimpl.can_change_ens(context, REQUEST, moduleimpl_id) M, _ = sco_moduleimpl.can_change_ens(REQUEST, moduleimpl_id)
# search ens_id # search ens_id
ok = False ok = False
for ens in M["ens"]: for ens in M["ens"]:
@ -1268,7 +1262,7 @@ sco_publish(
@permission_required(Permission.ScoView) @permission_required(Permission.ScoView)
@scodoc7func(context) @scodoc7func(context)
def do_formsemestre_inscription_listinscrits( def do_formsemestre_inscription_listinscrits(
context, formsemestre_id, format=None, REQUEST=None formsemestre_id, format=None, REQUEST=None
): ):
"""Liste les inscrits (état I) à ce semestre et cache le résultat""" """Liste les inscrits (état I) à ce semestre et cache le résultat"""
r = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( r = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
@ -1454,8 +1448,8 @@ def evaluation_delete(context, REQUEST, evaluation_id):
if not El: if not El:
raise ValueError("Evalution inexistante ! (%s)" % evaluation_id) raise ValueError("Evalution inexistante ! (%s)" % evaluation_id)
E = El[0] E = El[0]
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
Mod = sco_edit_module.do_module_list(context, args={"module_id": M["module_id"]})[0] Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
tit = "Suppression de l'évaluation %(description)s (%(jour)s)" % E tit = "Suppression de l'évaluation %(description)s (%(jour)s)" % E
etat = sco_evaluations.do_evaluation_etat(evaluation_id) etat = sco_evaluations.do_evaluation_etat(evaluation_id)
H = [ H = [
@ -2378,18 +2372,14 @@ def check_sem_integrity(context, formsemestre_id, REQUEST, fix=False):
""" """
sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem = sco_formsemestre.get_formsemestre(formsemestre_id)
modimpls = sco_moduleimpl.do_moduleimpl_list( modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
context, formsemestre_id=formsemestre_id
)
bad_ue = [] bad_ue = []
bad_sem = [] bad_sem = []
formations_set = set() # les formations mentionnées dans les UE et modules formations_set = set() # les formations mentionnées dans les UE et modules
for modimpl in modimpls: for modimpl in modimpls:
mod = sco_edit_module.do_module_list( mod = sco_edit_module.do_module_list({"module_id": modimpl["module_id"]})[0]
context, {"module_id": modimpl["module_id"]}
)[0]
formations_set.add(mod["formation_id"]) formations_set.add(mod["formation_id"])
ue = sco_edit_ue.do_ue_list(context, {"ue_id": mod["ue_id"]})[0] ue = sco_edit_ue.do_ue_list({"ue_id": mod["ue_id"]})[0]
formations_set.add(ue["formation_id"]) formations_set.add(ue["formation_id"])
if ue["formation_id"] != mod["formation_id"]: if ue["formation_id"] != mod["formation_id"]:
modimpl["mod"] = mod modimpl["mod"] = mod
@ -2448,14 +2438,12 @@ def check_sem_integrity(context, formsemestre_id, REQUEST, fix=False):
def check_form_integrity(context, formation_id, fix=False, REQUEST=None): def check_form_integrity(context, formation_id, fix=False, REQUEST=None):
"debug" "debug"
log("check_form_integrity: formation_id=%s fix=%s" % (formation_id, fix)) log("check_form_integrity: formation_id=%s fix=%s" % (formation_id, fix))
ues = sco_edit_ue.do_ue_list(context, args={"formation_id": formation_id}) ues = sco_edit_ue.do_ue_list(args={"formation_id": formation_id})
bad = [] bad = []
for ue in ues: for ue in ues:
mats = sco_edit_matiere.do_matiere_list(context, args={"ue_id": ue["ue_id"]}) mats = sco_edit_matiere.do_matiere_list(args={"ue_id": ue["ue_id"]})
for mat in mats: for mat in mats:
mods = sco_edit_module.do_module_list( mods = sco_edit_module.do_module_list({"matiere_id": mat["matiere_id"]})
context, {"matiere_id": mat["matiere_id"]}
)
for mod in mods: for mod in mods:
if mod["ue_id"] != ue["ue_id"]: if mod["ue_id"] != ue["ue_id"]:
if fix: if fix:
@ -2464,7 +2452,7 @@ def check_form_integrity(context, formation_id, fix=False, REQUEST=None):
"fix: mod.ue_id = %s (was %s)" % (ue["ue_id"], mod["ue_id"]) "fix: mod.ue_id = %s (was %s)" % (ue["ue_id"], mod["ue_id"])
) )
mod["ue_id"] = ue["ue_id"] mod["ue_id"] = ue["ue_id"]
sco_edit_module.do_module_edit(context, mod) sco_edit_module.do_module_edit(mod)
bad.append(mod) bad.append(mod)
if mod["formation_id"] != formation_id: if mod["formation_id"] != formation_id:
bad.append(mod) bad.append(mod)
@ -2495,7 +2483,7 @@ def check_formsemestre_integrity(context, formsemestre_id, REQUEST=None):
diag = [] diag = []
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )
for mod in Mlist: for mod in Mlist:
if mod["module"]["ue_id"] != mod["matiere"]["ue_id"]: if mod["module"]["ue_id"] != mod["matiere"]["ue_id"]:

View File

@ -20,7 +20,7 @@ file.close()
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(doc=doc, context=context.Notes) f = sco_formations.formation_import_xml(doc=doc)
# --- Création des semestres # --- Création des semestres
@ -222,9 +222,7 @@ load_lif = json.loads(lif)
assert len(load_lif) == 1 assert len(load_lif) == 1
assert load_lif[0]["formation_id"] == f[0] assert load_lif[0]["formation_id"] == f[0]
exp = sco_formations.formation_export( exp = sco_formations.formation_export(formation_id=f[0], format="json", REQUEST=REQUEST)
context.Notes, formation_id=f[0], format="json", REQUEST=REQUEST
)
load_exp = json.loads(exp) load_exp = json.loads(exp)
assert load_exp["acronyme"] == "DUT Info" assert load_exp["acronyme"] == "DUT Info"
assert load_exp["titre_officiel"] == "DUT Informatique" assert load_exp["titre_officiel"] == "DUT Informatique"

View File

@ -48,8 +48,7 @@ sem, eval_list = G.setup_formsemestre(
) )
# --- Recupère le module de malus # --- Recupère le module de malus
modimpls = sco_moduleimpl.do_moduleimpl_list( modimpls = sco_moduleimpl.do_moduleimpl_list( # pylint: disable=undefined-variable
context, # pylint: disable=undefined-variable
formsemestre_id=sem["formsemestre_id"], formsemestre_id=sem["formsemestre_id"],
) )
# de façon tout à fait inefficace ;-) # de façon tout à fait inefficace ;-)

View File

@ -19,7 +19,7 @@ print(doc)
print("\n \n \n") print("\n \n \n")
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(doc=doc, context=context.Notes) f = sco_formations.formation_import_xml(doc=doc)
# --- Création des semestres # --- Création des semestres
@ -76,7 +76,7 @@ for mod in li_module:
# --- Test de export_formation format xml # --- Test de export_formation format xml
form_exp = context.Notes.formation_export( form_exp = sco_formations.formation_export(
formation_id=f[0], format="xml", REQUEST=REQUEST formation_id=f[0], format="xml", REQUEST=REQUEST
) )
print(form_exp[39:]) print(form_exp[39:])

View File

@ -18,7 +18,7 @@ file.close()
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(doc=doc, context=context.Notes) f = sco_formations.formation_import_xml(doc=doc)
# --- Création des semestres # --- Création des semestres

View File

@ -19,7 +19,7 @@ file.close()
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(doc=doc, context=context.Notes) f = sco_formations.formation_import_xml(doc=doc)
# --- Création des semestres # --- Création des semestres

View File

@ -19,7 +19,7 @@ file.close()
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(doc=doc, context=context.Notes) f = sco_formations.formation_import_xml(doc=doc)
# --- Création des semestres # --- Création des semestres

View File

@ -33,7 +33,7 @@ def run_scenario1():
doc = f.read() doc = f.read()
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(doc=doc, context=context) f = sco_formations.formation_import_xml(doc=doc)
# --- Création des semestres # --- Création des semestres
formation_id = f[0] formation_id = f[0]
@ -54,7 +54,7 @@ def run_scenario1():
] ]
# --- Implémentation des modules # --- Implémentation des modules
modules = sco_edit_module.do_module_list(context, {"formation_id": formation_id}) modules = sco_edit_module.do_module_list({"formation_id": formation_id})
mods_imp = [] mods_imp = []
for mod in modules: for mod in modules:
mi = G.create_moduleimpl( mi = G.create_moduleimpl(

View File

@ -153,7 +153,7 @@ class ScoFake(object):
"""Crée une formation""" """Crée une formation"""
if not acronyme: if not acronyme:
acronyme = "TEST" + str(random.randint(100000, 999999)) acronyme = "TEST" + str(random.randint(100000, 999999))
oid = sco_edit_formation.do_formation_create(context, locals()) oid = sco_edit_formation.do_formation_create(locals())
oids = sco_formations.formation_list(formation_id=oid) oids = sco_formations.formation_list(formation_id=oid)
if not oids: if not oids:
raise ScoValueError("formation not created !") raise ScoValueError("formation not created !")
@ -175,17 +175,17 @@ class ScoFake(object):
): ):
"""Crée une UE""" """Crée une UE"""
if numero is None: if numero is None:
numero = sco_edit_ue.next_ue_numero(context, formation_id, 0) numero = sco_edit_ue.next_ue_numero(formation_id, 0)
oid = sco_edit_ue.do_ue_create(context, locals()) oid = sco_edit_ue.do_ue_create(locals())
oids = sco_edit_ue.do_ue_list(context, args={"ue_id": oid}) oids = sco_edit_ue.do_ue_list(args={"ue_id": oid})
if not oids: if not oids:
raise ScoValueError("ue not created !") raise ScoValueError("ue not created !")
return oids[0] return oids[0]
@logging_meth @logging_meth
def create_matiere(self, ue_id=None, titre=None, numero=None): def create_matiere(self, ue_id=None, titre=None, numero=None):
oid = sco_edit_matiere.do_matiere_create(context, locals()) oid = sco_edit_matiere.do_matiere_create(locals())
oids = sco_edit_matiere.do_matiere_list(context, args={"matiere_id": oid}) oids = sco_edit_matiere.do_matiere_list(args={"matiere_id": oid})
if not oids: if not oids:
raise ScoValueError("matiere not created !") raise ScoValueError("matiere not created !")
return oids[0] return oids[0]
@ -209,8 +209,8 @@ class ScoFake(object):
code_apogee=None, code_apogee=None,
module_type=None, module_type=None,
): ):
oid = sco_edit_module.do_module_create(context, locals()) oid = sco_edit_module.do_module_create(locals())
oids = sco_edit_module.do_module_list(context, args={"module_id": oid}) oids = sco_edit_module.do_module_list(args={"module_id": oid})
if not oids: if not oids:
raise ScoValueError("module not created ! (oid=%s)" % oid) raise ScoValueError("module not created ! (oid=%s)" % oid)
return oids[0] return oids[0]
@ -256,10 +256,8 @@ class ScoFake(object):
): ):
if not responsable_id: if not responsable_id:
responsable_id = self.default_user.id responsable_id = self.default_user.id
oid = sco_moduleimpl.do_moduleimpl_create(context, locals()) oid = sco_moduleimpl.do_moduleimpl_create(locals())
oids = sco_moduleimpl.do_moduleimpl_list( oids = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=oid) # API inconsistency
context, moduleimpl_id=oid
) # API inconsistency
if not oids: if not oids:
raise ScoValueError("moduleimpl not created !") raise ScoValueError("moduleimpl not created !")
return oids[0] return oids[0]

View File

@ -54,7 +54,7 @@ def test_cache_evaluations(test_client):
# prépare le département avec quelques semestres: # prépare le département avec quelques semestres:
run_sco_basic() run_sco_basic()
# #
sems = sco_formsemestre.do_formsemestre_list(None) sems = sco_formsemestre.do_formsemestre_list()
assert len(sems) assert len(sems)
sem_evals = [] sem_evals = []
for sem in sems: for sem in sems:

View File

@ -16,6 +16,8 @@ from app.scodoc import sco_formsemestre
from app.scodoc import sco_preferences from app.scodoc import sco_preferences
from tests.unit import test_sco_basic from tests.unit import test_sco_basic
context = None # #context
def test_preferences_orm(test_client): def test_preferences_orm(test_client):
"""preferences, via ORM and legacy ScoDoc""" """preferences, via ORM and legacy ScoDoc"""
@ -59,7 +61,7 @@ def test_preferences(test_client):
.value .value
) )
# Compare valeurs # Compare valeurs
sco_val = prefs.get(None, "abs_notification_mail_tmpl") sco_val = prefs.get(context, "abs_notification_mail_tmpl")
assert orm_val.strip() == sco_val.strip() assert orm_val.strip() == sco_val.strip()
# nb: I don't understand why SQLAlchemy strips the string ?! # nb: I don't understand why SQLAlchemy strips the string ?!
@ -71,9 +73,9 @@ def test_preferences(test_client):
app.set_sco_dept("D2") app.set_sco_dept("D2")
prefs2 = sco_preferences.get_base_preferences() prefs2 = sco_preferences.get_base_preferences()
assert len(prefs2) == len(prefs) assert len(prefs2) == len(prefs)
prefs2.set(None, "abs_notification_mail_tmpl", "toto") prefs2.set(context, "abs_notification_mail_tmpl", "toto")
assert prefs2.get(None, "abs_notification_mail_tmpl") == "toto" assert prefs2.get(context, "abs_notification_mail_tmpl") == "toto"
assert prefs.get(None, "abs_notification_mail_tmpl") != "toto" assert prefs.get(context, "abs_notification_mail_tmpl") != "toto"
orm_val = ( orm_val = (
ScoPreference.query.filter_by(dept_id=d.id, name="abs_notification_mail_tmpl") ScoPreference.query.filter_by(dept_id=d.id, name="abs_notification_mail_tmpl")
.first() .first()
@ -83,7 +85,7 @@ def test_preferences(test_client):
# --- Preferences d'un semestre # --- Preferences d'un semestre
# rejoure ce test pour avoir un semestre créé # rejoure ce test pour avoir un semestre créé
test_sco_basic.run_sco_basic() test_sco_basic.run_sco_basic()
sem = sco_formsemestre.do_formsemestre_list(None)[0] sem = sco_formsemestre.do_formsemestre_list()[0]
formsemestre_id = sem["formsemestre_id"] formsemestre_id = sem["formsemestre_id"]
semp = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id) semp = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id)
assert semp["abs_notification_mail_tmpl"] == "toto" assert semp["abs_notification_mail_tmpl"] == "toto"

View File

@ -98,7 +98,7 @@ def test_export_xml(test_client):
# test du sendXML compatible ScoDoc7 # test du sendXML compatible ScoDoc7
etuds = [{"x": 1, "etuds": ["allo", "mama"]}, {"x": 2, "etuds": ["un", "deux"]}] etuds = [{"x": 1, "etuds": ["allo", "mama"]}, {"x": 2, "etuds": ["un", "deux"]}]
# Le résultat de l'ancien print(sendXML(None, etuds, tagname="etudiants")) # Le résultat de l'ancien print(sendXML(etuds, tagname="etudiants"))
expected_result = """ expected_result = """
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<etudiants_list> <etudiants_list>

View File

@ -164,7 +164,7 @@ def test_formations(test_client):
# --- Afficher la liste des formations # --- Afficher la liste des formations
lif = notes.formation_list(context, format="json", formation_id=f["formation_id"]) lif = notes.formation_list(format="json", formation_id=f["formation_id"])
# lif est une Response car on a appelé une vue (1er appel) # lif est une Response car on a appelé une vue (1er appel)
assert isinstance(lif, flask.Response) assert isinstance(lif, flask.Response)
load_lif = json.loads(lif.get_data().decode("utf-8")) load_lif = json.loads(lif.get_data().decode("utf-8"))
@ -174,7 +174,7 @@ def test_formations(test_client):
assert load_lif[0]["formation_id"] == f["formation_id"] assert load_lif[0]["formation_id"] == f["formation_id"]
assert load_lif[0]["titre"] == f["titre"] assert load_lif[0]["titre"] == f["titre"]
lif2 = notes.formation_list(context, format="json") lif2 = notes.formation_list(format="json")
# lif2 est un chaine # lif2 est un chaine
assert isinstance(lif2, str) assert isinstance(lif2, str)
load_lif2 = json.loads(lif2) load_lif2 = json.loads(lif2)
@ -184,9 +184,7 @@ def test_formations(test_client):
# --- Export de formation_id # --- Export de formation_id
exp = sco_formations.formation_export( exp = sco_formations.formation_export(formation_id=f["formation_id"], format="json")
context, formation_id=f["formation_id"], format="json"
)
assert isinstance(exp, str) assert isinstance(exp, str)
load_exp = json.loads(exp) load_exp = json.loads(exp)
@ -235,19 +233,19 @@ def test_formations(test_client):
# --- Liste des modules # --- Liste des modules
lim_sem1 = sco_moduleimpl.do_moduleimpl_list( lim_sem1 = sco_moduleimpl.do_moduleimpl_list(
context, formsemestre_id=sem1["formsemestre_id"] formsemestre_id=sem1["formsemestre_id"]
) )
assert len(lim_sem1) == 2 assert len(lim_sem1) == 2
assert mod["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"]) assert mod["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"])
assert mod2["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"]) assert mod2["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"])
lim_modid = sco_moduleimpl.do_moduleimpl_list(context, module_id=mod["module_id"]) lim_modid = sco_moduleimpl.do_moduleimpl_list(module_id=mod["module_id"])
assert len(lim_modid) == 1 assert len(lim_modid) == 1
lim_modimpl_id = sco_moduleimpl.do_moduleimpl_list( lim_modimpl_id = sco_moduleimpl.do_moduleimpl_list(
context, moduleimpl_id=mi["moduleimpl_id"] moduleimpl_id=mi["moduleimpl_id"]
) )
# print(lim_modimpl_id) # print(lim_modimpl_id)
@ -256,7 +254,7 @@ def test_formations(test_client):
assert lim_modid == lim_modimpl_id # doit etre le meme resultat assert lim_modid == lim_modimpl_id # doit etre le meme resultat
liimp_sem1 = sco_moduleimpl.do_moduleimpl_withmodule_list( liimp_sem1 = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=sem1["formsemestre_id"] formsemestre_id=sem1["formsemestre_id"]
) )
assert len(liimp_sem1) == 2 assert len(liimp_sem1) == 2
@ -266,16 +264,16 @@ def test_formations(test_client):
liimp_sem1[1]["module_id"], liimp_sem1[1]["module_id"],
) )
liimp_sem2 = sco_moduleimpl.do_moduleimpl_withmodule_list( liimp_sem2 = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, formsemestre_id=sem2["formsemestre_id"] formsemestre_id=sem2["formsemestre_id"]
) )
assert modt["module_id"] == liimp_sem2[0]["module_id"] assert modt["module_id"] == liimp_sem2[0]["module_id"]
liimp_modid = sco_moduleimpl.do_moduleimpl_withmodule_list( liimp_modid = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, module_id=mod["module_id"] module_id=mod["module_id"]
) )
assert len(liimp_modid) == 1 assert len(liimp_modid) == 1
liimp_modimplid = sco_moduleimpl.do_moduleimpl_withmodule_list( liimp_modimplid = sco_moduleimpl.do_moduleimpl_withmodule_list(
context, moduleimpl_id=mi["moduleimpl_id"] moduleimpl_id=mi["moduleimpl_id"]
) )
assert liimp_modid == liimp_modimplid assert liimp_modid == liimp_modimplid
@ -299,35 +297,31 @@ def test_formations(test_client):
# RIEN NE SE PASSE AVEC CES FONCTIONS # RIEN NE SE PASSE AVEC CES FONCTIONS
li_module = sco_edit_module.do_module_list(context) li_module = sco_edit_module.do_module_list()
assert len(li_module) == 4 assert len(li_module) == 4
sco_edit_module.do_module_delete( sco_edit_module.do_module_delete(oid=modt["module_id"]) # on supprime le semestre
context, oid=modt["module_id"]
) # on supprime le semestre
# sco_formsemestre_edit.formsemestre_delete_moduleimpls(context.Notes, formsemestre_id=sem2["formsemestre_id"], module_ids_to_del=[modt["module_id"]]) # sco_formsemestre_edit.formsemestre_delete_moduleimpls(context.Notes, formsemestre_id=sem2["formsemestre_id"], module_ids_to_del=[modt["module_id"]])
# deuxieme methode de supression d'un module # deuxieme methode de supression d'un module
li_module2 = sco_edit_module.do_module_list(context) li_module2 = sco_edit_module.do_module_list()
assert len(li_module2) == 3 # verification de la suppression du module assert len(li_module2) == 3 # verification de la suppression du module
lim_sem2 = sco_moduleimpl.do_moduleimpl_list( lim_sem2 = sco_moduleimpl.do_moduleimpl_list(
context, formsemestre_id=sem2["formsemestre_id"] formsemestre_id=sem2["formsemestre_id"]
) )
assert len(lim_sem2) == 0 # deuxieme vérification si le module s'est bien sup assert len(lim_sem2) == 0 # deuxieme vérification si le module s'est bien sup
li_mat = sco_edit_matiere.do_matiere_list(context) li_mat = sco_edit_matiere.do_matiere_list()
assert len(li_mat) == 4 assert len(li_mat) == 4
sco_edit_matiere.do_matiere_delete( sco_edit_matiere.do_matiere_delete(oid=matt["matiere_id"]) # on supprime la matiere
context, oid=matt["matiere_id"] li_mat2 = sco_edit_matiere.do_matiere_list()
) # on supprime la matiere
li_mat2 = sco_edit_matiere.do_matiere_list(context)
assert len(li_mat2) == 3 # verification de la suppression de la matiere assert len(li_mat2) == 3 # verification de la suppression de la matiere
li_ue = sco_edit_ue.do_ue_list(context) li_ue = sco_edit_ue.do_ue_list()
assert len(li_ue) == 4 assert len(li_ue) == 4
sco_edit_ue.ue_delete(context, ue_id=uet["ue_id"], dialog_confirmed=True) sco_edit_ue.ue_delete(ue_id=uet["ue_id"], dialog_confirmed=True)
li_ue2 = sco_edit_ue.do_ue_list(context) li_ue2 = sco_edit_ue.do_ue_list()
assert len(li_ue2) == 3 # verification de la suppression de l'UE assert len(li_ue2) == 3 # verification de la suppression de l'UE
# --- Suppression d'une formation # --- Suppression d'une formation
@ -336,8 +330,8 @@ def test_formations(test_client):
context, formsemestre_id=semt["formsemestre_id"] context, formsemestre_id=semt["formsemestre_id"]
) )
sco_edit_formation.do_formation_delete(context, oid=f2["formation_id"]) sco_edit_formation.do_formation_delete(oid=f2["formation_id"])
lif3 = notes.formation_list(context, format="json") lif3 = notes.formation_list(format="json")
assert isinstance(lif3, str) assert isinstance(lif3, str)
load_lif3 = json.loads(lif3) load_lif3 = json.loads(lif3)
assert len(load_lif3) == 1 assert len(load_lif3) == 1
@ -351,7 +345,7 @@ def test_import_formation(test_client):
doc = f.read() doc = f.read()
# --- Création de la formation # --- Création de la formation
f = sco_formations.formation_import_xml(context, doc) f = sco_formations.formation_import_xml(doc)
assert len(f) == 3 # 3-uple assert len(f) == 3 # 3-uple
formation_id = f[0] formation_id = f[0]
# --- Mise en place de 4 semestres # --- Mise en place de 4 semestres
@ -370,7 +364,7 @@ def test_import_formation(test_client):
) )
] ]
# et les modules # et les modules
modules = sco_edit_module.do_module_list(context, {"formation_id": formation_id}) modules = sco_edit_module.do_module_list({"formation_id": formation_id})
for mod in modules: for mod in modules:
mi = G.create_moduleimpl( mi = G.create_moduleimpl(
module_id=mod["module_id"], module_id=mod["module_id"],
@ -380,5 +374,5 @@ def test_import_formation(test_client):
assert mi["module_id"] == mod["module_id"] assert mi["module_id"] == mod["module_id"]
# --- Export formation en XML # --- Export formation en XML
doc1 = sco_formations.formation_export(context, formation_id, format="xml") doc1 = sco_formations.formation_export(formation_id, format="xml")
assert isinstance(doc1, str) assert isinstance(doc1, str)