forked from ScoDoc/ScoDoc
refactoring (context)
This commit is contained in:
parent
cfd54fbc88
commit
24416e256d
@ -112,11 +112,11 @@ def scodoc(func):
|
|||||||
def scodoc_function(*args, **kwargs):
|
def scodoc_function(*args, **kwargs):
|
||||||
if "scodoc_dept" in kwargs:
|
if "scodoc_dept" in kwargs:
|
||||||
dept_acronym = kwargs["scodoc_dept"]
|
dept_acronym = kwargs["scodoc_dept"]
|
||||||
current_app.logger.info("setting dept to " + dept_acronym)
|
# current_app.logger.info("setting dept to " + dept_acronym)
|
||||||
app.set_sco_dept(dept_acronym)
|
app.set_sco_dept(dept_acronym)
|
||||||
del kwargs["scodoc_dept"]
|
del kwargs["scodoc_dept"]
|
||||||
elif not hasattr(g, "scodoc_dept"):
|
elif not hasattr(g, "scodoc_dept"):
|
||||||
current_app.logger.info("setting dept to None")
|
# current_app.logger.info("setting dept to None")
|
||||||
g.scodoc_dept = None
|
g.scodoc_dept = None
|
||||||
g.scodoc_dept_id = -1 # invalide
|
g.scodoc_dept_id = -1 # invalide
|
||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
|
@ -604,7 +604,6 @@ class GenTable(object):
|
|||||||
|
|
||||||
def make_page(
|
def make_page(
|
||||||
self,
|
self,
|
||||||
context,
|
|
||||||
title="",
|
title="",
|
||||||
format="html",
|
format="html",
|
||||||
page_title="",
|
page_title="",
|
||||||
@ -644,7 +643,7 @@ class GenTable(object):
|
|||||||
elif format == "pdf":
|
elif format == "pdf":
|
||||||
objects = self.pdf()
|
objects = self.pdf()
|
||||||
doc = sco_pdf.pdf_basic_page(
|
doc = sco_pdf.pdf_basic_page(
|
||||||
objects, title=title, preferences=self.preferences, context=context
|
objects, title=title, preferences=self.preferences
|
||||||
)
|
)
|
||||||
if publish:
|
if publish:
|
||||||
return scu.sendPDFFile(REQUEST, doc, filename + ".pdf")
|
return scu.sendPDFFile(REQUEST, doc, filename + ".pdf")
|
||||||
@ -731,5 +730,5 @@ if __name__ == "__main__":
|
|||||||
document.build(objects)
|
document.build(objects)
|
||||||
data = doc.getvalue()
|
data = doc.getvalue()
|
||||||
open("/tmp/gen_table.pdf", "wb").write(data)
|
open("/tmp/gen_table.pdf", "wb").write(data)
|
||||||
p = T.make_page(None, format="pdf", REQUEST=None)
|
p = T.make_page(format="pdf", REQUEST=None)
|
||||||
open("toto.pdf", "wb").write(p)
|
open("toto.pdf", "wb").write(p)
|
||||||
|
@ -182,7 +182,7 @@ class NotesTable(object):
|
|||||||
self.context = context
|
self.context = context
|
||||||
self.formsemestre_id = formsemestre_id
|
self.formsemestre_id = formsemestre_id
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
self.sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
self.sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
self.moduleimpl_stats = {} # { moduleimpl_id : {stats} }
|
self.moduleimpl_stats = {} # { moduleimpl_id : {stats} }
|
||||||
self._uecoef = {} # { ue_id : coef } cache coef manuels ue cap
|
self._uecoef = {} # { ue_id : coef } cache coef manuels ue cap
|
||||||
self._evaluations_etats = None # liste des evaluations avec état
|
self._evaluations_etats = None # liste des evaluations avec état
|
||||||
@ -191,7 +191,7 @@ class NotesTable(object):
|
|||||||
)
|
)
|
||||||
# Infos sur les etudiants
|
# Infos sur les etudiants
|
||||||
self.inscrlist = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
self.inscrlist = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
# infos identite etudiant
|
# infos identite etudiant
|
||||||
# xxx sous-optimal: 1/select par etudiant -> 0.17" pour identdict sur GTR1 !
|
# xxx sous-optimal: 1/select par etudiant -> 0.17" pour identdict sur GTR1 !
|
||||||
@ -245,7 +245,7 @@ class NotesTable(object):
|
|||||||
# nb_inscrits, nb_notes, nb_abs, nb_neutre, moy, median, last_modif=
|
# nb_inscrits, nb_notes, nb_abs, nb_neutre, moy, median, last_modif=
|
||||||
|
|
||||||
self.formation = sco_formations.formation_list(
|
self.formation = sco_formations.formation_list(
|
||||||
context, args={"formation_id": self.sem["formation_id"]}
|
args={"formation_id": self.sem["formation_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
self.parcours = sco_codes_parcours.get_parcours_from_code(
|
self.parcours = sco_codes_parcours.get_parcours_from_code(
|
||||||
self.formation["type_parcours"]
|
self.formation["type_parcours"]
|
||||||
|
@ -67,9 +67,7 @@ def comp_nom_semestre_dans_parcours(context, sem):
|
|||||||
"""
|
"""
|
||||||
from app.scodoc import sco_formations
|
from app.scodoc import sco_formations
|
||||||
|
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, 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"])
|
||||||
return "%s %s %s %s" % (
|
return "%s %s %s %s" % (
|
||||||
parcours.SESSION_NAME, # eg "semestre"
|
parcours.SESSION_NAME, # eg "semestre"
|
||||||
@ -1240,8 +1238,8 @@ def get_cosemestres_diplomants(context, semBase, avec_meme_formation=False):
|
|||||||
> dont la formation est la même (optionnel)
|
> dont la formation est la même (optionnel)
|
||||||
> ne prenant en compte que les etudiants sans redoublement
|
> ne prenant en compte que les etudiants sans redoublement
|
||||||
"""
|
"""
|
||||||
tousLesSems = sco_formsemestre.do_formsemestre_list(
|
tousLesSems = (
|
||||||
context
|
sco_formsemestre.do_formsemestre_list()
|
||||||
) # tous les semestres memorisés dans scodoc
|
) # tous les semestres memorisés dans scodoc
|
||||||
diplome = get_annee_diplome_semestre(semBase)
|
diplome = get_annee_diplome_semestre(semBase)
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ def pe_view_sem_recap(
|
|||||||
return _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=REQUEST)
|
return _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=REQUEST)
|
||||||
prefs = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id)
|
prefs = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id)
|
||||||
|
|
||||||
semBase = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
semBase = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
jury = pe_jurype.JuryPE(context, semBase)
|
jury = pe_jurype.JuryPE(context, semBase)
|
||||||
|
|
||||||
|
@ -28,14 +28,12 @@
|
|||||||
"""Fonctions sur les absences
|
"""Fonctions sur les absences
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Anciennement dans ZAbscences.py, séparé pour migration
|
import calendar
|
||||||
|
import datetime
|
||||||
|
import html
|
||||||
import string
|
import string
|
||||||
import time
|
import time
|
||||||
import types
|
import types
|
||||||
import datetime
|
|
||||||
import calendar
|
|
||||||
import cgi
|
|
||||||
|
|
||||||
from app.scodoc import notesdb as ndb
|
from app.scodoc import notesdb as ndb
|
||||||
from app.scodoc.notes_log import log
|
from app.scodoc.notes_log import log
|
||||||
@ -896,7 +894,7 @@ def MonthTableBody(
|
|||||||
if href:
|
if href:
|
||||||
href = 'href="%s"' % href
|
href = 'href="%s"' % href
|
||||||
if descr:
|
if descr:
|
||||||
descr = 'title="%s"' % cgi.escape(descr, quote=True)
|
descr = 'title="%s"' % html.escape(descr, quote=True)
|
||||||
if href or descr:
|
if href or descr:
|
||||||
cc.append("<a %s %s>" % (href, descr))
|
cc.append("<a %s %s>" % (href, descr))
|
||||||
|
|
||||||
@ -990,7 +988,7 @@ def MonthTableBody(
|
|||||||
if href:
|
if href:
|
||||||
href = 'href="%s"' % href
|
href = 'href="%s"' % href
|
||||||
if descr:
|
if descr:
|
||||||
descr = 'title="%s"' % cgi.escape(descr, quote=True)
|
descr = 'title="%s"' % html.escape(descr, quote=True)
|
||||||
if href or descr:
|
if href or descr:
|
||||||
cc.append("<a %s %s>" % (href, descr))
|
cc.append("<a %s %s>" % (href, descr))
|
||||||
if legend or d == 1:
|
if legend or d == 1:
|
||||||
|
@ -284,7 +284,7 @@ def retreive_current_formsemestre(context, etudid, cur_date):
|
|||||||
if not r:
|
if not r:
|
||||||
return None
|
return None
|
||||||
# s'il y a plusieurs semestres, prend le premier (rarissime et non significatif):
|
# s'il y a plusieurs semestres, prend le premier (rarissime et non significatif):
|
||||||
sem = sco_formsemestre.get_formsemestre(context, r[0]["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(r[0]["formsemestre_id"])
|
||||||
return sem
|
return sem
|
||||||
|
|
||||||
|
|
||||||
|
@ -700,15 +700,15 @@ def formChoixSemestreGroupe(context, all=False):
|
|||||||
"""
|
"""
|
||||||
# XXX assez primitif, à ameliorer TOTALEMENT OBSOLETE !
|
# XXX assez primitif, à ameliorer TOTALEMENT OBSOLETE !
|
||||||
if all:
|
if all:
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context)
|
sems = sco_formsemestre.do_formsemestre_list()
|
||||||
else:
|
else:
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context, args={"etat": "1"})
|
sems = sco_formsemestre.do_formsemestre_list(args={"etat": "1"})
|
||||||
if not sems:
|
if not sems:
|
||||||
raise ScoValueError("aucun semestre !")
|
raise ScoValueError("aucun semestre !")
|
||||||
H = ['<select name="group_ids">']
|
H = ['<select name="group_ids">']
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
for p in sco_groups.get_partitions_list(context, sem["formsemestre_id"]):
|
for p in sco_groups.get_partitions_list(sem["formsemestre_id"]):
|
||||||
for group in sco_groups.get_partition_groups(context, p):
|
for group in sco_groups.get_partition_groups(p):
|
||||||
if group["group_name"]:
|
if group["group_name"]:
|
||||||
group_tit = "%s %s" % (p["partition_name"], group["group_name"])
|
group_tit = "%s %s" % (p["partition_name"], group["group_name"])
|
||||||
else:
|
else:
|
||||||
@ -855,9 +855,9 @@ def ListeAbsEtud(
|
|||||||
# Formats non HTML et demande d'une seule table:
|
# Formats non HTML et demande d'une seule table:
|
||||||
if format != "html" and format != "text":
|
if format != "html" and format != "text":
|
||||||
if absjust_only == 1:
|
if absjust_only == 1:
|
||||||
return tab_absjust.make_page(context, format=format, REQUEST=REQUEST)
|
return tab_absjust.make_page(format=format, REQUEST=REQUEST)
|
||||||
else:
|
else:
|
||||||
return tab_absnonjust.make_page(context, format=format, REQUEST=REQUEST)
|
return tab_absnonjust.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
if format == "html":
|
if format == "html":
|
||||||
# Mise en forme HTML:
|
# Mise en forme HTML:
|
||||||
|
@ -420,7 +420,7 @@ class ApoEtud(dict):
|
|||||||
if (not export_res_etape) and cur_sem:
|
if (not export_res_etape) and cur_sem:
|
||||||
# exporte toujours le résultat de l'étape si l'étudiant est diplômé
|
# exporte toujours le résultat de l'étape si l'étudiant est diplômé
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(
|
Se = sco_parcours_dut.SituationEtudParcours(
|
||||||
context, self.etud, cur_sem["formsemestre_id"]
|
self.etud, cur_sem["formsemestre_id"]
|
||||||
)
|
)
|
||||||
export_res_etape = Se.all_other_validated()
|
export_res_etape = Se.all_other_validated()
|
||||||
|
|
||||||
@ -572,9 +572,7 @@ class ApoEtud(dict):
|
|||||||
(sem["semestre_id"] == apo_data.cur_semestre_id)
|
(sem["semestre_id"] == apo_data.cur_semestre_id)
|
||||||
and (apo_data.etape in sem["etapes"])
|
and (apo_data.etape in sem["etapes"])
|
||||||
and (
|
and (
|
||||||
sco_formsemestre.sem_in_annee_scolaire(
|
sco_formsemestre.sem_in_annee_scolaire(sem, apo_data.annee_scolaire)
|
||||||
context, sem, apo_data.annee_scolaire
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
@ -1123,7 +1121,7 @@ def comp_apo_sems(context, etape_apogee, annee_scolaire):
|
|||||||
:return: list of sems for etape_apogee in annee_scolaire
|
:return: list of sems for etape_apogee in annee_scolaire
|
||||||
"""
|
"""
|
||||||
return sco_formsemestre.list_formsemestre_by_etape(
|
return sco_formsemestre.list_formsemestre_by_etape(
|
||||||
context, etape_apo=str(etape_apogee), annee_scolaire=annee_scolaire
|
etape_apo=str(etape_apogee), annee_scolaire=annee_scolaire
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -381,7 +381,7 @@ def formsemestre_archive(context, REQUEST, formsemestre_id, group_ids=[]):
|
|||||||
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
||||||
)
|
)
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not group_ids:
|
if not group_ids:
|
||||||
# tous les inscrits du semestre
|
# tous les inscrits du semestre
|
||||||
group_ids = [sco_groups.get_default_group(formsemestre_id)]
|
group_ids = [sco_groups.get_default_group(formsemestre_id)]
|
||||||
@ -512,7 +512,7 @@ def formsemestre_list_archives(context, REQUEST, formsemestre_id):
|
|||||||
}
|
}
|
||||||
L.append(a)
|
L.append(a)
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context, REQUEST, "Archive des PV et résultats ", sem
|
context, REQUEST, "Archive des PV et résultats ", sem
|
||||||
@ -563,9 +563,7 @@ def formsemestre_delete_archive(
|
|||||||
raise AccessDenied(
|
raise AccessDenied(
|
||||||
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
||||||
)
|
)
|
||||||
_ = sco_formsemestre.get_formsemestre(
|
_ = sco_formsemestre.get_formsemestre(formsemestre_id) # check formsemestre_id
|
||||||
context, formsemestre_id
|
|
||||||
) # check formsemestre_id
|
|
||||||
archive_id = PVArchive.get_id_from_name(context, formsemestre_id, archive_name)
|
archive_id = PVArchive.get_id_from_name(context, formsemestre_id, archive_name)
|
||||||
|
|
||||||
dest_url = "formsemestre_list_archives?formsemestre_id=%s" % (formsemestre_id)
|
dest_url = "formsemestre_list_archives?formsemestre_id=%s" % (formsemestre_id)
|
||||||
|
@ -312,7 +312,7 @@ def etudarchive_import_files_form(context, group_id, REQUEST=None):
|
|||||||
return "\n".join(H) + tf[1] + "</li></ol>" + F
|
return "\n".join(H) + tf[1] + "</li></ol>" + F
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
# retrouve le semestre à partir du groupe:
|
# retrouve le semestre à partir du groupe:
|
||||||
group = sco_groups.get_group(context, group_id)
|
group = sco_groups.get_group(group_id)
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
url_for(
|
url_for(
|
||||||
"notes.formsemestre_status",
|
"notes.formsemestre_status",
|
||||||
|
@ -106,7 +106,7 @@ def make_context_dict(context, sem, etud):
|
|||||||
C[name] = sco_preferences.get_preference(name, sem["formsemestre_id"])
|
C[name] = sco_preferences.get_preference(name, sem["formsemestre_id"])
|
||||||
|
|
||||||
# ajoute groupes et group_0, group_1, ...
|
# ajoute groupes et group_0, group_1, ...
|
||||||
sco_groups.etud_add_group_infos(context, etud, sem)
|
sco_groups.etud_add_group_infos(etud, sem)
|
||||||
C["groupes"] = etud["groupes"]
|
C["groupes"] = etud["groupes"]
|
||||||
n = 0
|
n = 0
|
||||||
for partition_id in etud["partitions"]:
|
for partition_id in etud["partitions"]:
|
||||||
@ -150,7 +150,7 @@ def formsemestre_bulletinetud_dict(
|
|||||||
|
|
||||||
# Formation et parcours
|
# Formation et parcours
|
||||||
I["formation"] = sco_formations.formation_list(
|
I["formation"] = sco_formations.formation_list(
|
||||||
context, args={"formation_id": I["sem"]["formation_id"]}
|
args={"formation_id": I["sem"]["formation_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
I["parcours"] = sco_codes_parcours.get_parcours_from_code(
|
I["parcours"] = sco_codes_parcours.get_parcours_from_code(
|
||||||
I["formation"]["type_parcours"]
|
I["formation"]["type_parcours"]
|
||||||
@ -169,15 +169,11 @@ def formsemestre_bulletinetud_dict(
|
|||||||
else:
|
else:
|
||||||
I["descr_situation_html"] = I["descr_situation"]
|
I["descr_situation_html"] = I["descr_situation"]
|
||||||
# Groupes:
|
# Groupes:
|
||||||
partitions = sco_groups.get_partitions_list(
|
partitions = sco_groups.get_partitions_list(formsemestre_id, with_default=False)
|
||||||
context, formsemestre_id, with_default=False
|
|
||||||
)
|
|
||||||
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
pid = partition["partition_id"]
|
pid = partition["partition_id"]
|
||||||
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(
|
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(pid)
|
||||||
context, pid
|
|
||||||
)
|
|
||||||
# --- Absences
|
# --- Absences
|
||||||
I["nbabs"], I["nbabsjust"] = sco_abs.get_abs_count(etudid, nt.sem)
|
I["nbabs"], I["nbabsjust"] = sco_abs.get_abs_count(etudid, nt.sem)
|
||||||
|
|
||||||
@ -337,9 +333,7 @@ def formsemestre_bulletinetud_dict(
|
|||||||
"modules_capitalized"
|
"modules_capitalized"
|
||||||
] = [] # modules de l'UE capitalisée (liste vide si pas capitalisée)
|
] = [] # modules de l'UE capitalisée (liste vide si pas capitalisée)
|
||||||
if ue_status["is_capitalized"]:
|
if ue_status["is_capitalized"]:
|
||||||
sem_origin = sco_formsemestre.get_formsemestre(
|
sem_origin = sco_formsemestre.get_formsemestre(ue_status["formsemestre_id"])
|
||||||
context, ue_status["formsemestre_id"]
|
|
||||||
)
|
|
||||||
u["ue_descr_txt"] = "Capitalisée le %s" % ndb.DateISOtoDMY(
|
u["ue_descr_txt"] = "Capitalisée le %s" % ndb.DateISOtoDMY(
|
||||||
ue_status["event_date"]
|
ue_status["event_date"]
|
||||||
)
|
)
|
||||||
@ -427,7 +421,7 @@ def _ue_mod_bulletin(context, etudid, formsemestre_id, ue_id, modimpls, nt, vers
|
|||||||
"bul_show_abs_modules", formsemestre_id
|
"bul_show_abs_modules", formsemestre_id
|
||||||
)
|
)
|
||||||
if bul_show_abs_modules:
|
if bul_show_abs_modules:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(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"])
|
||||||
|
|
||||||
@ -801,7 +795,7 @@ def formsemestre_bulletinetud(
|
|||||||
if format not in {"html", "pdfmail"}:
|
if format not in {"html", "pdfmail"}:
|
||||||
return bulletin
|
return bulletin
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
_formsemestre_bulletinetud_header_html(
|
_formsemestre_bulletinetud_header_html(
|
||||||
context, etud, etudid, sem, formsemestre_id, format, version, REQUEST
|
context, etud, etudid, sem, formsemestre_id, format, version, REQUEST
|
||||||
@ -849,7 +843,7 @@ def formsemestre_bulletinetud(
|
|||||||
|
|
||||||
def can_send_bulletin_by_mail(context, formsemestre_id):
|
def can_send_bulletin_by_mail(context, formsemestre_id):
|
||||||
"""True if current user is allowed to send a bulletin by mail"""
|
"""True if current user is allowed to send a bulletin by mail"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
return (
|
return (
|
||||||
sco_preferences.get_preference("bul_mail_allowed_for_all", formsemestre_id)
|
sco_preferences.get_preference("bul_mail_allowed_for_all", formsemestre_id)
|
||||||
or current_user.has_permission(Permission.ScoImplement)
|
or current_user.has_permission(Permission.ScoImplement)
|
||||||
|
@ -220,7 +220,6 @@ class BulletinGenerator(object):
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
sco_pdf.ScolarsPageTemplate(
|
sco_pdf.ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context=self.context,
|
|
||||||
author="%s %s (E. Viennet) [%s]"
|
author="%s %s (E. Viennet) [%s]"
|
||||||
% (VERSION.SCONAME, VERSION.SCOVERSION, self.description),
|
% (VERSION.SCONAME, VERSION.SCOVERSION, self.description),
|
||||||
title="Bulletin %s de %s"
|
title="Bulletin %s de %s"
|
||||||
|
@ -93,7 +93,7 @@ def formsemestre_bulletinetud_published_dict(
|
|||||||
|
|
||||||
d = {}
|
d = {}
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if (not sem["bul_hide_xml"]) or force_publishing:
|
if (not sem["bul_hide_xml"]) or force_publishing:
|
||||||
published = 1
|
published = 1
|
||||||
else:
|
else:
|
||||||
@ -141,15 +141,11 @@ def formsemestre_bulletinetud_published_dict(
|
|||||||
return d # stop !
|
return d # stop !
|
||||||
|
|
||||||
# Groupes:
|
# Groupes:
|
||||||
partitions = sco_groups.get_partitions_list(
|
partitions = sco_groups.get_partitions_list(formsemestre_id, with_default=False)
|
||||||
context, formsemestre_id, with_default=False
|
|
||||||
)
|
|
||||||
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
pid = partition["partition_id"]
|
pid = partition["partition_id"]
|
||||||
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(
|
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(pid)
|
||||||
context, pid
|
|
||||||
)
|
|
||||||
|
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > toutes notes
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > toutes notes
|
||||||
ues = nt.get_ues()
|
ues = nt.get_ues()
|
||||||
|
@ -91,7 +91,7 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator):
|
|||||||
"bul_show_abs_modules", formsemestre_id
|
"bul_show_abs_modules", formsemestre_id
|
||||||
)
|
)
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if sem["bul_bgcolor"]:
|
if sem["bul_bgcolor"]:
|
||||||
bgcolor = sem["bul_bgcolor"]
|
bgcolor = sem["bul_bgcolor"]
|
||||||
else:
|
else:
|
||||||
|
@ -94,7 +94,6 @@ def pdfassemblebulletins(
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
sco_pdf.ScolarsPageTemplate(
|
sco_pdf.ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context=context,
|
|
||||||
author="%s %s (E. Viennet)" % (VERSION.SCONAME, VERSION.SCOVERSION),
|
author="%s %s (E. Viennet)" % (VERSION.SCONAME, VERSION.SCOVERSION),
|
||||||
title="Bulletin %s" % bul_title,
|
title="Bulletin %s" % bul_title,
|
||||||
subject="Bulletin de note",
|
subject="Bulletin de note",
|
||||||
@ -176,7 +175,7 @@ def get_formsemestre_bulletins_pdf(
|
|||||||
if cached:
|
if cached:
|
||||||
return cached[1], cached[0]
|
return cached[1], cached[0]
|
||||||
fragments = []
|
fragments = []
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# Make each bulletin
|
# Make each bulletin
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etudids, get_sexnom
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etudids, get_sexnom
|
||||||
bookmarks = {}
|
bookmarks = {}
|
||||||
|
@ -393,7 +393,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):
|
|||||||
P.append(t)
|
P.append(t)
|
||||||
|
|
||||||
# Rangs dans les partitions:
|
# Rangs dans les partitions:
|
||||||
partitions, _ = sco_groups.get_formsemestre_groups(context, formsemestre_id)
|
partitions, _ = sco_groups.get_formsemestre_groups(formsemestre_id)
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
if partition["bul_show_rank"]:
|
if partition["bul_show_rank"]:
|
||||||
partition_id = partition["partition_id"]
|
partition_id = partition["partition_id"]
|
||||||
|
@ -81,7 +81,7 @@ def make_xml_formsemestre_bulletinetud(
|
|||||||
if REQUEST:
|
if REQUEST:
|
||||||
REQUEST.RESPONSE.setHeader("content-type", scu.XML_MIMETYPE)
|
REQUEST.RESPONSE.setHeader("content-type", scu.XML_MIMETYPE)
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if (not sem["bul_hide_xml"]) or force_publishing:
|
if (not sem["bul_hide_xml"]) or force_publishing:
|
||||||
published = "1"
|
published = "1"
|
||||||
else:
|
else:
|
||||||
@ -134,15 +134,11 @@ def make_xml_formsemestre_bulletinetud(
|
|||||||
return doc # stop !
|
return doc # stop !
|
||||||
|
|
||||||
# Groupes:
|
# Groupes:
|
||||||
partitions = sco_groups.get_partitions_list(
|
partitions = sco_groups.get_partitions_list(formsemestre_id, with_default=False)
|
||||||
context, formsemestre_id, with_default=False
|
|
||||||
)
|
|
||||||
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
pid = partition["partition_id"]
|
pid = partition["partition_id"]
|
||||||
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(
|
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(pid)
|
||||||
context, pid
|
|
||||||
)
|
|
||||||
|
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > toutes notes
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > toutes notes
|
||||||
ues = nt.get_ues()
|
ues = nt.get_ues()
|
||||||
|
@ -201,7 +201,7 @@ def do_moduleimpl_moyennes(context, nt, mod):
|
|||||||
diag_info = {} # message d'erreur formule
|
diag_info = {} # message d'erreur formule
|
||||||
moduleimpl_id = mod["moduleimpl_id"]
|
moduleimpl_id = mod["moduleimpl_id"]
|
||||||
is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS
|
is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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
|
context, moduleimpl_id
|
||||||
) # tous, y compris demissions
|
) # tous, y compris demissions
|
||||||
@ -210,7 +210,7 @@ def do_moduleimpl_moyennes(context, nt, mod):
|
|||||||
[
|
[
|
||||||
x["etudid"]
|
x["etudid"]
|
||||||
for x in sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
for x in sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
||||||
context, mod["formsemestre_id"]
|
mod["formsemestre_id"]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@ -374,8 +374,8 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id):
|
|||||||
la liste des moduleimpls, la liste des evaluations valides,
|
la liste des moduleimpls, la liste des evaluations valides,
|
||||||
liste des moduleimpls avec notes en attente.
|
liste des moduleimpls avec notes en attente.
|
||||||
"""
|
"""
|
||||||
# sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
# sem = sco_formsemestre.get_formsemestre( formsemestre_id)
|
||||||
# inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context,
|
# inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
# args={"formsemestre_id": formsemestre_id}
|
# args={"formsemestre_id": formsemestre_id}
|
||||||
# )
|
# )
|
||||||
# etudids = [x["etudid"] for x in inscr]
|
# etudids = [x["etudid"] for x in inscr]
|
||||||
|
@ -57,7 +57,7 @@ def formsemestre_table_estim_cost(
|
|||||||
peut conduire à une sur-estimation du coût s'il y a des modules optionnels
|
peut conduire à une sur-estimation du coût s'il y a des modules optionnels
|
||||||
(dans ce cas, retoucher le tableau excel exporté).
|
(dans ce cas, retoucher le tableau excel exporté).
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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
|
context, formsemestre_id=formsemestre_id
|
||||||
@ -198,4 +198,4 @@ def formsemestre_estim_cost(
|
|||||||
coef_tp,
|
coef_tp,
|
||||||
)
|
)
|
||||||
|
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
@ -56,7 +56,7 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0):
|
|||||||
H.append(sco_up_to_date.html_up_to_date_box(context))
|
H.append(sco_up_to_date.html_up_to_date_box(context))
|
||||||
|
|
||||||
# Liste de toutes les sessions:
|
# Liste de toutes les sessions:
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context)
|
sems = sco_formsemestre.do_formsemestre_list()
|
||||||
cursems = [] # semestres "courants"
|
cursems = [] # semestres "courants"
|
||||||
othersems = [] # autres (verrouillés)
|
othersems = [] # autres (verrouillés)
|
||||||
# icon image:
|
# icon image:
|
||||||
@ -74,7 +74,7 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0):
|
|||||||
sem["lockimg"] = lockicon
|
sem["lockimg"] = lockicon
|
||||||
othersems.append(sem)
|
othersems.append(sem)
|
||||||
# Responsable de formation:
|
# Responsable de formation:
|
||||||
sco_formsemestre.sem_set_responsable_name(context, sem)
|
sco_formsemestre.sem_set_responsable_name(sem)
|
||||||
|
|
||||||
if showcodes == "1":
|
if showcodes == "1":
|
||||||
sem["tmpcode"] = "<td><tt>%s</tt></td>" % sem["formsemestre_id"]
|
sem["tmpcode"] = "<td><tt>%s</tt></td>" % sem["formsemestre_id"]
|
||||||
@ -82,9 +82,7 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0):
|
|||||||
sem["tmpcode"] = ""
|
sem["tmpcode"] = ""
|
||||||
# Nombre d'inscrits:
|
# Nombre d'inscrits:
|
||||||
args = {"formsemestre_id": sem["formsemestre_id"]}
|
args = {"formsemestre_id": sem["formsemestre_id"]}
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(args=args)
|
||||||
context, args=args
|
|
||||||
)
|
|
||||||
nb = len(ins) # nb etudiants
|
nb = len(ins) # nb etudiants
|
||||||
sem["nb_inscrits"] = nb
|
sem["nb_inscrits"] = nb
|
||||||
if nb > 0:
|
if nb > 0:
|
||||||
|
@ -49,7 +49,7 @@ from app.scodoc import sco_news
|
|||||||
|
|
||||||
def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST=None):
|
def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST=None):
|
||||||
"""Delete a formation"""
|
"""Delete a formation"""
|
||||||
F = sco_formations.formation_list(context, args={"formation_id": formation_id})
|
F = sco_formations.formation_list(args={"formation_id": formation_id})
|
||||||
if not F:
|
if not F:
|
||||||
raise ScoValueError("formation inexistante !")
|
raise ScoValueError("formation inexistante !")
|
||||||
F = F[0]
|
F = F[0]
|
||||||
@ -59,9 +59,7 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST
|
|||||||
"""<h2>Suppression de la formation %(titre)s (%(acronyme)s)</h2>""" % F,
|
"""<h2>Suppression de la formation %(titre)s (%(acronyme)s)</h2>""" % F,
|
||||||
]
|
]
|
||||||
|
|
||||||
sems = sco_formsemestre.do_formsemestre_list(
|
sems = sco_formsemestre.do_formsemestre_list({"formation_id": formation_id})
|
||||||
context, {"formation_id": formation_id}
|
|
||||||
)
|
|
||||||
if sems:
|
if sems:
|
||||||
H.append(
|
H.append(
|
||||||
"""<p class="warning">Impossible de supprimer cette formation, car les sessions suivantes l'utilisent:</p>
|
"""<p class="warning">Impossible de supprimer cette formation, car les sessions suivantes l'utilisent:</p>
|
||||||
@ -101,7 +99,7 @@ def do_formation_delete(context, 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(context, 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(context, oid):
|
||||||
raise ScoLockedFormError()
|
raise ScoLockedFormError()
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
@ -145,7 +143,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None):
|
|||||||
is_locked = False
|
is_locked = False
|
||||||
else:
|
else:
|
||||||
# edit an existing formation
|
# edit an existing formation
|
||||||
F = sco_formations.formation_list(context, args={"formation_id": formation_id})
|
F = sco_formations.formation_list(args={"formation_id": formation_id})
|
||||||
if not F:
|
if not F:
|
||||||
raise ScoValueError("formation inexistante !")
|
raise ScoValueError("formation inexistante !")
|
||||||
initvalues = F[0]
|
initvalues = F[0]
|
||||||
@ -237,7 +235,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None):
|
|||||||
"version": version,
|
"version": version,
|
||||||
}
|
}
|
||||||
ndb.quote_dict(args)
|
ndb.quote_dict(args)
|
||||||
others = sco_formations.formation_list(context, args=args)
|
others = sco_formations.formation_list(args=args)
|
||||||
if others and ((len(others) > 1) or others[0]["formation_id"] != formation_id):
|
if others and ((len(others) > 1) or others[0]["formation_id"] != formation_id):
|
||||||
return (
|
return (
|
||||||
"\n".join(H)
|
"\n".join(H)
|
||||||
@ -266,7 +264,7 @@ def do_formation_create(context, args):
|
|||||||
a = args.copy()
|
a = args.copy()
|
||||||
if "formation_id" in a:
|
if "formation_id" in a:
|
||||||
del a["formation_id"]
|
del a["formation_id"]
|
||||||
F = sco_formations.formation_list(context, args=a)
|
F = sco_formations.formation_list(args=a)
|
||||||
if len(F) > 0:
|
if len(F) > 0:
|
||||||
log("do_formation_create: error: %d formations matching args=%s" % (len(F), a))
|
log("do_formation_create: error: %d formations matching args=%s" % (len(F), a))
|
||||||
raise ScoValueError("Formation non unique (%s) !" % str(a))
|
raise ScoValueError("Formation non unique (%s) !" % str(a))
|
||||||
|
@ -84,9 +84,7 @@ def do_matiere_create(context, args):
|
|||||||
r = _matiereEditor.create(cnx, args)
|
r = _matiereEditor.create(cnx, args)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
|
||||||
context, args={"formation_id": ue["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
typ=sco_news.NEWS_FORM,
|
typ=sco_news.NEWS_FORM,
|
||||||
object=ue["formation_id"],
|
object=ue["formation_id"],
|
||||||
@ -184,9 +182,7 @@ def do_matiere_delete(context, oid):
|
|||||||
_matiereEditor.delete(cnx, oid)
|
_matiereEditor.delete(cnx, oid)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
|
||||||
context, args={"formation_id": ue["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
typ=sco_news.NEWS_FORM,
|
typ=sco_news.NEWS_FORM,
|
||||||
object=ue["formation_id"],
|
object=ue["formation_id"],
|
||||||
@ -237,9 +233,7 @@ def matiere_edit(context, matiere_id=None, REQUEST=None):
|
|||||||
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(
|
Fo = sco_formations.formation_list(args={"formation_id": U["formation_id"]})[0]
|
||||||
context, 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(context, 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]
|
||||||
|
@ -108,9 +108,7 @@ def do_module_create(context, args) -> int:
|
|||||||
r = _moduleEditor.create(cnx, args)
|
r = _moduleEditor.create(cnx, args)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": args["formation_id"]})[0]
|
||||||
context, args={"formation_id": args["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
typ=sco_news.NEWS_FORM,
|
typ=sco_news.NEWS_FORM,
|
||||||
object=args["formation_id"],
|
object=args["formation_id"],
|
||||||
@ -129,9 +127,7 @@ def module_create(context, matiere_id=None, REQUEST=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(context, 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(context, args={"ue_id": M["ue_id"]})[0]
|
||||||
Fo = sco_formations.formation_list(
|
Fo = sco_formations.formation_list(args={"formation_id": UE["formation_id"]})[0]
|
||||||
context, 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))
|
||||||
H = [
|
H = [
|
||||||
@ -274,9 +270,7 @@ def do_module_delete(context, oid):
|
|||||||
_moduleEditor.delete(cnx, oid)
|
_moduleEditor.delete(cnx, oid)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": mod["formation_id"]})[0]
|
||||||
context, args={"formation_id": mod["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
typ=sco_news.NEWS_FORM,
|
typ=sco_news.NEWS_FORM,
|
||||||
object=mod["formation_id"],
|
object=mod["formation_id"],
|
||||||
@ -355,9 +349,7 @@ def module_edit(context, module_id=None, REQUEST=None):
|
|||||||
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(context, module_id)
|
||||||
Fo = sco_formations.formation_list(
|
Fo = sco_formations.formation_list(args={"formation_id": Mod["formation_id"]})[0]
|
||||||
context, 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(
|
||||||
"""SELECT ue.acronyme, mat.*, mat.id AS matiere_id
|
"""SELECT ue.acronyme, mat.*, mat.id AS matiere_id
|
||||||
@ -545,7 +537,7 @@ def module_list(context, formation_id, REQUEST=None):
|
|||||||
|
|
||||||
if not formation_id:
|
if not formation_id:
|
||||||
raise ScoValueError("invalid formation !")
|
raise ScoValueError("invalid formation !")
|
||||||
F = sco_formations.formation_list(context, args={"formation_id": formation_id})[0]
|
F = sco_formations.formation_list(args={"formation_id": formation_id})[0]
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(page_title="Liste des modules de %(titre)s" % F),
|
html_sco_header.sco_header(page_title="Liste des modules de %(titre)s" % F),
|
||||||
"""<h2>Listes des modules dans la formation %(titre)s (%(acronyme)s)</h2>"""
|
"""<h2>Listes des modules dans la formation %(titre)s (%(acronyme)s)</h2>"""
|
||||||
|
@ -105,9 +105,7 @@ def do_ue_create(context, args):
|
|||||||
r = _ueEditor.create(cnx, args)
|
r = _ueEditor.create(cnx, args)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": args["formation_id"]})[0]
|
||||||
context, args={"formation_id": args["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
typ=sco_news.NEWS_FORM,
|
typ=sco_news.NEWS_FORM,
|
||||||
object=args["formation_id"],
|
object=args["formation_id"],
|
||||||
@ -167,9 +165,7 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F
|
|||||||
# > UE delete + supr. validations associées etudiants (cas compliqué, mais rarement utilisé: acceptable de tout invalider ?):
|
# > UE delete + supr. validations associées etudiants (cas compliqué, mais rarement utilisé: acceptable de tout invalider ?):
|
||||||
sco_cache.invalidate_formsemestre()
|
sco_cache.invalidate_formsemestre()
|
||||||
# news
|
# news
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
|
||||||
context, args={"formation_id": ue["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
typ=sco_news.NEWS_FORM,
|
typ=sco_news.NEWS_FORM,
|
||||||
object=ue["formation_id"],
|
object=ue["formation_id"],
|
||||||
@ -212,7 +208,7 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None):
|
|||||||
title = "Création d'une UE"
|
title = "Création d'une UE"
|
||||||
initvalues = {}
|
initvalues = {}
|
||||||
submitlabel = "Créer cette UE"
|
submitlabel = "Créer cette UE"
|
||||||
Fol = sco_formations.formation_list(context, args={"formation_id": formation_id})
|
Fol = sco_formations.formation_list(args={"formation_id": formation_id})
|
||||||
if not Fol:
|
if not Fol:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
"Formation %s inexistante ! (si vous avez suivi un lien valide, merci de signaler le problème)"
|
"Formation %s inexistante ! (si vous avez suivi un lien valide, merci de signaler le problème)"
|
||||||
@ -438,7 +434,7 @@ def ue_list(context, formation_id=None, msg="", REQUEST=None):
|
|||||||
from app.scodoc import sco_formations
|
from app.scodoc import sco_formations
|
||||||
from app.scodoc import sco_formsemestre_validation
|
from app.scodoc import sco_formsemestre_validation
|
||||||
|
|
||||||
F = sco_formations.formation_list(context, args={"formation_id": formation_id})
|
F = sco_formations.formation_list(args={"formation_id": formation_id})
|
||||||
if not F:
|
if not F:
|
||||||
raise ScoValueError("invalid formation_id")
|
raise ScoValueError("invalid formation_id")
|
||||||
F = F[0]
|
F = F[0]
|
||||||
@ -802,7 +798,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
|
|||||||
<p><ul>"""
|
<p><ul>"""
|
||||||
)
|
)
|
||||||
for sem in sco_formsemestre.do_formsemestre_list(
|
for sem in sco_formsemestre.do_formsemestre_list(
|
||||||
context, args={"formation_id": formation_id}
|
args={"formation_id": formation_id}
|
||||||
):
|
):
|
||||||
H.append(
|
H.append(
|
||||||
'<li><a class="stdlink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titremois)s</a>'
|
'<li><a class="stdlink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titremois)s</a>'
|
||||||
@ -847,9 +843,7 @@ def ue_sharing_code(context, ue_code=None, ue_id=None, hide_ue_id=None):
|
|||||||
ue = do_ue_list(context, args={"ue_id": ue_id})[0]
|
ue = do_ue_list(context, 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(
|
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
|
||||||
context, 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(context, args={"ue_code": ue_code})
|
||||||
@ -859,7 +853,7 @@ def ue_sharing_code(context, ue_code=None, ue_id=None, hide_ue_id=None):
|
|||||||
ue_list = []
|
ue_list = []
|
||||||
for ue in ue_list_all:
|
for ue in ue_list_all:
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(
|
||||||
context, args={"formation_id": ue["formation_id"]}
|
args={"formation_id": ue["formation_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
if formation_code == F["formation_code"]:
|
if formation_code == F["formation_code"]:
|
||||||
ue_list.append(ue)
|
ue_list.append(ue)
|
||||||
@ -881,9 +875,7 @@ def ue_sharing_code(context, ue_code=None, ue_id=None, hide_ue_id=None):
|
|||||||
H.append('<span class="ue_share">UE avec le code %s:</span>' % ue_code)
|
H.append('<span class="ue_share">UE avec le code %s:</span>' % ue_code)
|
||||||
H.append("<ul>")
|
H.append("<ul>")
|
||||||
for ue in ue_list:
|
for ue in ue_list:
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
|
||||||
context, args={"formation_id": ue["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
H.append(
|
H.append(
|
||||||
'<li>%s (%s) dans <a class="stdlink" href="ue_list?formation_id=%s">%s (%s)</a>, version %s</li>'
|
'<li>%s (%s) dans <a class="stdlink" href="ue_list?formation_id=%s">%s (%s)</a>, version %s</li>'
|
||||||
% (
|
% (
|
||||||
@ -970,7 +962,7 @@ def formation_table_recap(context, formation_id, format="html", REQUEST=None):
|
|||||||
"""Table recapitulant formation."""
|
"""Table recapitulant formation."""
|
||||||
from app.scodoc import sco_formations
|
from app.scodoc import sco_formations
|
||||||
|
|
||||||
F = sco_formations.formation_list(context, args={"formation_id": formation_id})
|
F = sco_formations.formation_list(args={"formation_id": formation_id})
|
||||||
if not F:
|
if not F:
|
||||||
raise ScoValueError("invalid formation_id")
|
raise ScoValueError("invalid formation_id")
|
||||||
F = F[0]
|
F = F[0]
|
||||||
@ -1049,7 +1041,7 @@ def formation_table_recap(context, formation_id, format="html", REQUEST=None):
|
|||||||
pdf_title=title,
|
pdf_title=title,
|
||||||
preferences=sco_preferences.SemPreferences(),
|
preferences=sco_preferences.SemPreferences(),
|
||||||
)
|
)
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
def ue_list_semestre_ids(context, ue):
|
def ue_list_semestre_ids(context, ue):
|
||||||
|
@ -129,8 +129,8 @@ def group_edt_json(context, group_id, start="", end="", REQUEST=None):
|
|||||||
TODO: utiliser start et end (2 dates au format ISO YYYY-MM-DD)
|
TODO: utiliser start et end (2 dates au format ISO YYYY-MM-DD)
|
||||||
TODO: cacher
|
TODO: cacher
|
||||||
"""
|
"""
|
||||||
group = sco_groups.get_group(context, group_id)
|
group = sco_groups.get_group(group_id)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, group["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(group["formsemestre_id"])
|
||||||
edt2sco, sco2edt, msg = get_edt_transcodage_groups(
|
edt2sco, sco2edt, msg = get_edt_transcodage_groups(
|
||||||
context, group["formsemestre_id"]
|
context, group["formsemestre_id"]
|
||||||
)
|
)
|
||||||
|
@ -346,8 +346,7 @@ def apo_semset_maq_status(
|
|||||||
if missing:
|
if missing:
|
||||||
formation_ids = {sem["formation_id"] for sem in semset.sems}
|
formation_ids = {sem["formation_id"] for sem in semset.sems}
|
||||||
formations = [
|
formations = [
|
||||||
sco_formations.formation_list(context, formation_id=i)[0]
|
sco_formations.formation_list(formation_id=i)[0] for i in formation_ids
|
||||||
for i in formation_ids
|
|
||||||
]
|
]
|
||||||
# log('formations=%s' % formations)
|
# log('formations=%s' % formations)
|
||||||
H.append(
|
H.append(
|
||||||
@ -593,7 +592,7 @@ def _view_etuds_page(
|
|||||||
preferences=sco_preferences.SemPreferences(),
|
preferences=sco_preferences.SemPreferences(),
|
||||||
)
|
)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
H.append(tab.html())
|
H.append(tab.html())
|
||||||
|
|
||||||
@ -772,7 +771,7 @@ def view_apo_csv(context, etape_apo="", semset_id="", format="html", REQUEST=Non
|
|||||||
)
|
)
|
||||||
|
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
H += [
|
H += [
|
||||||
tab.html(),
|
tab.html(),
|
||||||
|
@ -925,13 +925,13 @@ def fill_etuds_info(etuds):
|
|||||||
|
|
||||||
# Semestres dans lesquel il est inscrit
|
# Semestres dans lesquel il est inscrit
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid}
|
{"etudid": etudid}
|
||||||
)
|
)
|
||||||
etud["ins"] = ins
|
etud["ins"] = ins
|
||||||
sems = []
|
sems = []
|
||||||
cursem = None # semestre "courant" ou il est inscrit
|
cursem = None # semestre "courant" ou il est inscrit
|
||||||
for i in ins:
|
for i in ins:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, i["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(i["formsemestre_id"])
|
||||||
if sco_formsemestre.sem_est_courant(context, sem):
|
if sco_formsemestre.sem_est_courant(context, sem):
|
||||||
cursem = sem
|
cursem = sem
|
||||||
curi = i
|
curi = i
|
||||||
@ -948,7 +948,7 @@ def fill_etuds_info(etuds):
|
|||||||
etud["inscription_formsemestre_id"] = cursem["formsemestre_id"]
|
etud["inscription_formsemestre_id"] = cursem["formsemestre_id"]
|
||||||
etud["etatincursem"] = curi["etat"]
|
etud["etatincursem"] = curi["etat"]
|
||||||
etud["situation"] = descr_situation_etud(context, etudid, etud["ne"])
|
etud["situation"] = descr_situation_etud(context, etudid, etud["ne"])
|
||||||
# XXX est-ce utile ? sco_groups.etud_add_group_infos(context, etud, cursem)
|
# XXX est-ce utile ? sco_groups.etud_add_group_infos( etud, cursem)
|
||||||
else:
|
else:
|
||||||
if etud["sems"]:
|
if etud["sems"]:
|
||||||
if etud["sems"][0]["dateord"] > time.strftime(
|
if etud["sems"][0]["dateord"] > time.strftime(
|
||||||
@ -1023,7 +1023,7 @@ def descr_situation_etud(context, etudid, ne=""):
|
|||||||
if not r:
|
if not r:
|
||||||
situation = "non inscrit"
|
situation = "non inscrit"
|
||||||
else:
|
else:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, r["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(r["formsemestre_id"])
|
||||||
if r["etat"] == "I":
|
if r["etat"] == "I":
|
||||||
situation = "inscrit%s en %s" % (ne, sem["titremois"])
|
situation = "inscrit%s en %s" % (ne, sem["titremois"])
|
||||||
# Cherche la date d'inscription dans scolar_events:
|
# Cherche la date d'inscription dans scolar_events:
|
||||||
|
@ -215,7 +215,7 @@ def _check_evaluation_args(args):
|
|||||||
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(context, moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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)
|
||||||
d, m, y = [int(x) for x in sem["date_fin"].split("/")]
|
d, m, y = [int(x) for x in sem["date_fin"].split("/")]
|
||||||
@ -425,17 +425,17 @@ def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=
|
|||||||
# Si partition_id is None, prend 'all' ou bien la premiere:
|
# Si partition_id is None, prend 'all' ou bien la premiere:
|
||||||
if partition_id is None:
|
if partition_id is None:
|
||||||
if select_first_partition:
|
if select_first_partition:
|
||||||
partitions = sco_groups.get_partitions_list(context, formsemestre_id)
|
partitions = sco_groups.get_partitions_list(formsemestre_id)
|
||||||
partition = partitions[0]
|
partition = partitions[0]
|
||||||
else:
|
else:
|
||||||
partition = sco_groups.get_default_partition(context, formsemestre_id)
|
partition = sco_groups.get_default_partition(formsemestre_id)
|
||||||
partition_id = partition["partition_id"]
|
partition_id = partition["partition_id"]
|
||||||
|
|
||||||
# Il faut considerer les inscriptions au semestre
|
# Il faut considerer les inscriptions au semestre
|
||||||
# (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)
|
||||||
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
insmod = sco_moduleimpl.do_moduleimpl_inscription_list(
|
insmod = sco_moduleimpl.do_moduleimpl_inscription_list(
|
||||||
context, moduleimpl_id=E["moduleimpl_id"]
|
context, moduleimpl_id=E["moduleimpl_id"]
|
||||||
@ -456,7 +456,7 @@ def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=
|
|||||||
TotalNbMissing = 0
|
TotalNbMissing = 0
|
||||||
TotalNbAtt = 0
|
TotalNbAtt = 0
|
||||||
groups = {} # group_id : group
|
groups = {} # group_id : group
|
||||||
etud_groups = sco_groups.get_etud_groups_in_partition(context, partition_id)
|
etud_groups = sco_groups.get_etud_groups_in_partition(partition_id)
|
||||||
|
|
||||||
for i in ins:
|
for i in ins:
|
||||||
group = etud_groups.get(i["etudid"], None)
|
group = etud_groups.get(i["etudid"], None)
|
||||||
@ -721,7 +721,7 @@ def do_evaluation_etat_in_mod(nt, moduleimpl_id):
|
|||||||
def formsemestre_evaluations_cal(formsemestre_id, REQUEST=None):
|
def formsemestre_evaluations_cal(formsemestre_id, REQUEST=None):
|
||||||
"""Page avec calendrier de toutes les evaluations de ce semestre"""
|
"""Page avec calendrier de toutes les evaluations de ce semestre"""
|
||||||
context = None # #context
|
context = None # #context
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations
|
||||||
|
|
||||||
evals = nt.get_sem_evaluation_etat_list()
|
evals = nt.get_sem_evaluation_etat_list()
|
||||||
@ -823,7 +823,7 @@ def evaluation_date_first_completion(evaluation_id):
|
|||||||
# 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(context,moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
# formsemestre_id = M["formsemestre_id"]
|
# formsemestre_id = M["formsemestre_id"]
|
||||||
# insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(context, 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(context,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
|
||||||
@ -860,7 +860,7 @@ def formsemestre_evaluations_delai_correction(
|
|||||||
N'indique pas les évaluations de ratrapage ni celles des modules de bonus/malus.
|
N'indique pas les évaluations de ratrapage ni celles des modules de bonus/malus.
|
||||||
"""
|
"""
|
||||||
context = None # #context
|
context = None # #context
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations
|
||||||
|
|
||||||
evals = nt.get_sem_evaluation_etat_list()
|
evals = nt.get_sem_evaluation_etat_list()
|
||||||
@ -931,7 +931,7 @@ def formsemestre_evaluations_delai_correction(
|
|||||||
origin="Généré par %s le " % VERSION.SCONAME + scu.timedate_human_repr() + "",
|
origin="Généré par %s le " % VERSION.SCONAME + scu.timedate_human_repr() + "",
|
||||||
filename=scu.make_filename("evaluations_delais_" + sem["titreannee"]),
|
filename=scu.make_filename("evaluations_delais_" + sem["titreannee"]),
|
||||||
)
|
)
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
def module_evaluation_insert_before(ModEvals, next_eval):
|
def module_evaluation_insert_before(ModEvals, next_eval):
|
||||||
|
@ -63,7 +63,7 @@ def _build_results_table(context, start_date=None, end_date=None, types_parcours
|
|||||||
semlist_parcours = []
|
semlist_parcours = []
|
||||||
for sem in semlist:
|
for sem in semlist:
|
||||||
sem["formation"] = sco_formations.formation_list(
|
sem["formation"] = sco_formations.formation_list(
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
args={"formation_id": sem["formation_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
sem["parcours"] = sco_codes_parcours.get_parcours_from_code(
|
sem["parcours"] = sco_codes_parcours.get_parcours_from_code(
|
||||||
sem["formation"]["type_parcours"]
|
sem["formation"]["type_parcours"]
|
||||||
|
@ -156,7 +156,7 @@ def search_etud_in_dept(context, expnom="", REQUEST=None):
|
|||||||
e["_nomprenom_target"] = target
|
e["_nomprenom_target"] = target
|
||||||
e["inscription_target"] = target
|
e["inscription_target"] = target
|
||||||
e["_nomprenom_td_attrs"] = 'id="%s" class="etudinfo"' % (e["etudid"])
|
e["_nomprenom_td_attrs"] = 'id="%s" class="etudinfo"' % (e["etudid"])
|
||||||
sco_groups.etud_add_group_infos(context, e, e["cursem"])
|
sco_groups.etud_add_group_infos(e, e["cursem"])
|
||||||
|
|
||||||
tab = GenTable(
|
tab = GenTable(
|
||||||
columns_ids=("nomprenom", "code_nip", "inscription", "groupes"),
|
columns_ids=("nomprenom", "code_nip", "inscription", "groupes"),
|
||||||
|
@ -69,7 +69,7 @@ _formationEditor = ndb.EditableTable(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def formation_list(context, formation_id=None, args={}):
|
def formation_list(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).
|
||||||
"""
|
"""
|
||||||
@ -87,7 +87,7 @@ def formation_list(context, formation_id=None, args={}):
|
|||||||
def formation_has_locked_sems(context, formation_id):
|
def formation_has_locked_sems(context, 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(
|
||||||
context, args={"formation_id": formation_id, "etat": False}
|
args={"formation_id": formation_id, "etat": False}
|
||||||
)
|
)
|
||||||
return sems
|
return sems
|
||||||
|
|
||||||
@ -264,7 +264,7 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
|
|||||||
f["_titre_id"] = "titre-%s" % f["acronyme"].lower().replace(" ", "-")
|
f["_titre_id"] = "titre-%s" % f["acronyme"].lower().replace(" ", "-")
|
||||||
# Ajoute les semestres associés à chaque formation:
|
# Ajoute les semestres associés à chaque formation:
|
||||||
f["sems"] = sco_formsemestre.do_formsemestre_list(
|
f["sems"] = sco_formsemestre.do_formsemestre_list(
|
||||||
context, args={"formation_id": f["formation_id"]}
|
args={"formation_id": f["formation_id"]}
|
||||||
)
|
)
|
||||||
f["sems_list_txt"] = ", ".join([s["session_id"] for s in f["sems"]])
|
f["sems_list_txt"] = ", ".join([s["session_id"] for s in f["sems"]])
|
||||||
f["_sems_list_txt_html"] = ", ".join(
|
f["_sems_list_txt_html"] = ", ".join(
|
||||||
|
@ -88,19 +88,17 @@ _formsemestreEditor = ndb.EditableTable(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_formsemestre(context, formsemestre_id):
|
def get_formsemestre(formsemestre_id):
|
||||||
"list ONE formsemestre"
|
"list ONE formsemestre"
|
||||||
try:
|
try:
|
||||||
sem = do_formsemestre_list(context, args={"formsemestre_id": formsemestre_id})[
|
sem = do_formsemestre_list(args={"formsemestre_id": formsemestre_id})[0]
|
||||||
0
|
|
||||||
]
|
|
||||||
return sem
|
return sem
|
||||||
except:
|
except:
|
||||||
log("get_formsemestre: invalid formsemestre_id (%s)" % formsemestre_id)
|
log("get_formsemestre: invalid formsemestre_id (%s)" % formsemestre_id)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_list(context, *a, **kw):
|
def do_formsemestre_list(*a, **kw):
|
||||||
"list formsemestres"
|
"list formsemestres"
|
||||||
# log('do_formsemestre_list: a=%s kw=%s' % (str(a),str(kw)))
|
# log('do_formsemestre_list: a=%s kw=%s' % (str(a),str(kw)))
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
@ -109,10 +107,8 @@ def do_formsemestre_list(context, *a, **kw):
|
|||||||
|
|
||||||
# Ajoute les étapes Apogee et les responsables:
|
# Ajoute les étapes Apogee et les responsables:
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
sem["etapes"] = read_formsemestre_etapes(context, sem["formsemestre_id"])
|
sem["etapes"] = read_formsemestre_etapes(sem["formsemestre_id"])
|
||||||
sem["responsables"] = read_formsemestre_responsables(
|
sem["responsables"] = read_formsemestre_responsables(sem["formsemestre_id"])
|
||||||
context, sem["formsemestre_id"]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Filtre sur code etape si indiqué:
|
# Filtre sur code etape si indiqué:
|
||||||
if "args" in kw:
|
if "args" in kw:
|
||||||
@ -121,7 +117,7 @@ def do_formsemestre_list(context, *a, **kw):
|
|||||||
sems = [sem for sem in sems if etape in sem["etapes"]]
|
sems = [sem for sem in sems if etape in sem["etapes"]]
|
||||||
|
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
formsemestre_enrich(context, sem)
|
_formsemestre_enrich(sem)
|
||||||
|
|
||||||
# tri par date, le plus récent d'abord
|
# tri par date, le plus récent d'abord
|
||||||
sems.sort(key=itemgetter("dateord", "semestre_id"), reverse=True)
|
sems.sort(key=itemgetter("dateord", "semestre_id"), reverse=True)
|
||||||
@ -129,15 +125,13 @@ def do_formsemestre_list(context, *a, **kw):
|
|||||||
return sems
|
return sems
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_enrich(context, sem):
|
def _formsemestre_enrich(sem):
|
||||||
"""Ajoute champs souvent utiles: titre + annee et dateord (pour tris)"""
|
"""Ajoute champs souvent utiles: titre + annee et dateord (pour tris)"""
|
||||||
# imports ici pour eviter refs circulaires
|
# imports ici pour eviter refs circulaires
|
||||||
from app.scodoc import sco_formsemestre_edit
|
from app.scodoc import sco_formsemestre_edit
|
||||||
from app.scodoc import sco_etud
|
from app.scodoc import sco_etud
|
||||||
|
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, 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"])
|
||||||
# 'S1', 'S2', ... ou '' pour les monosemestres
|
# 'S1', 'S2', ... ou '' pour les monosemestres
|
||||||
if sem["semestre_id"] != NO_SEMESTRE_ID:
|
if sem["semestre_id"] != NO_SEMESTRE_ID:
|
||||||
@ -203,13 +197,11 @@ def formsemestre_enrich(context, sem):
|
|||||||
sem["mois_fin"],
|
sem["mois_fin"],
|
||||||
)
|
)
|
||||||
sem["session_id"] = sco_formsemestre_edit.get_formsemestre_session_id(
|
sem["session_id"] = sco_formsemestre_edit.get_formsemestre_session_id(
|
||||||
context, sem, F, parcours
|
sem, F, parcours
|
||||||
)
|
)
|
||||||
sem["etapes"] = read_formsemestre_etapes(context, sem["formsemestre_id"])
|
sem["etapes"] = read_formsemestre_etapes(sem["formsemestre_id"])
|
||||||
sem["etapes_apo_str"] = formsemestre_etape_apo_str(sem)
|
sem["etapes_apo_str"] = formsemestre_etape_apo_str(sem)
|
||||||
sem["responsables"] = read_formsemestre_responsables(
|
sem["responsables"] = read_formsemestre_responsables(sem["formsemestre_id"])
|
||||||
context, sem["formsemestre_id"]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_etape_apo_str(sem):
|
def formsemestre_etape_apo_str(sem):
|
||||||
@ -232,19 +224,18 @@ def do_formsemestre_create(args, silent=False):
|
|||||||
formsemestre_id = _formsemestreEditor.create(cnx, args)
|
formsemestre_id = _formsemestreEditor.create(cnx, args)
|
||||||
if args["etapes"]:
|
if args["etapes"]:
|
||||||
args["formsemestre_id"] = formsemestre_id
|
args["formsemestre_id"] = formsemestre_id
|
||||||
write_formsemestre_etapes(context, args)
|
write_formsemestre_etapes(args)
|
||||||
if args["responsables"]:
|
if args["responsables"]:
|
||||||
args["formsemestre_id"] = formsemestre_id
|
args["formsemestre_id"] = formsemestre_id
|
||||||
write_formsemestre_responsables(context, args)
|
write_formsemestre_responsables(args)
|
||||||
|
|
||||||
# create default partition
|
# create default partition
|
||||||
partition_id = sco_groups.partition_create(
|
partition_id = sco_groups.partition_create(
|
||||||
context,
|
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
default=True,
|
default=True,
|
||||||
redirect=0,
|
redirect=0,
|
||||||
)
|
)
|
||||||
_group_id = sco_groups.createGroup(context, partition_id, default=True)
|
_group_id = sco_groups.createGroup(partition_id, default=True)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
if "titre" not in args:
|
if "titre" not in args:
|
||||||
@ -260,22 +251,22 @@ def do_formsemestre_create(args, silent=False):
|
|||||||
return formsemestre_id
|
return formsemestre_id
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_edit(context, sem, cnx=None, **kw):
|
def do_formsemestre_edit(sem, cnx=None, **kw):
|
||||||
"""Apply modifications to formsemestre.
|
"""Apply modifications to formsemestre.
|
||||||
Update etapes and resps. Invalidate cache."""
|
Update etapes and resps. Invalidate cache."""
|
||||||
if not cnx:
|
if not cnx:
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
|
|
||||||
_formsemestreEditor.edit(cnx, sem, **kw)
|
_formsemestreEditor.edit(cnx, sem, **kw)
|
||||||
write_formsemestre_etapes(context, sem)
|
write_formsemestre_etapes(sem)
|
||||||
write_formsemestre_responsables(context, sem)
|
write_formsemestre_responsables(sem)
|
||||||
|
|
||||||
sco_cache.invalidate_formsemestre(
|
sco_cache.invalidate_formsemestre(
|
||||||
formsemestre_id=sem["formsemestre_id"]
|
formsemestre_id=sem["formsemestre_id"]
|
||||||
) # > modif formsemestre
|
) # > modif formsemestre
|
||||||
|
|
||||||
|
|
||||||
def read_formsemestre_responsables(context, formsemestre_id):
|
def read_formsemestre_responsables(formsemestre_id):
|
||||||
"""recupere liste des responsables de ce semestre
|
"""recupere liste des responsables de ce semestre
|
||||||
:returns: liste de chaines
|
:returns: liste de chaines
|
||||||
"""
|
"""
|
||||||
@ -289,8 +280,8 @@ def read_formsemestre_responsables(context, formsemestre_id):
|
|||||||
return [x["responsable_id"] for x in r]
|
return [x["responsable_id"] for x in r]
|
||||||
|
|
||||||
|
|
||||||
def write_formsemestre_responsables(context, sem):
|
def write_formsemestre_responsables(sem):
|
||||||
return _write_formsemestre_aux(context, sem, "responsables", "responsable_id")
|
return _write_formsemestre_aux(sem, "responsables", "responsable_id")
|
||||||
|
|
||||||
|
|
||||||
# ---------------------- Coefs des UE
|
# ---------------------- Coefs des UE
|
||||||
@ -307,7 +298,7 @@ formsemestre_uecoef_list = _formsemestre_uecoef_editor.list
|
|||||||
formsemestre_uecoef_delete = _formsemestre_uecoef_editor.delete
|
formsemestre_uecoef_delete = _formsemestre_uecoef_editor.delete
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_uecoef_edit_or_create(context, cnx, formsemestre_id, ue_id, coef):
|
def do_formsemestre_uecoef_edit_or_create(cnx, formsemestre_id, ue_id, coef):
|
||||||
"modify or create the coef"
|
"modify or create the coef"
|
||||||
coefs = formsemestre_uecoef_list(
|
coefs = formsemestre_uecoef_list(
|
||||||
cnx, args={"formsemestre_id": formsemestre_id, "ue_id": ue_id}
|
cnx, args={"formsemestre_id": formsemestre_id, "ue_id": ue_id}
|
||||||
@ -331,7 +322,7 @@ def do_formsemestre_uecoef_edit_or_create(context, cnx, formsemestre_id, ue_id,
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_uecoef_delete(context, cnx, formsemestre_id, ue_id):
|
def do_formsemestre_uecoef_delete(cnx, formsemestre_id, ue_id):
|
||||||
"delete coef for this (ue,sem)"
|
"delete coef for this (ue,sem)"
|
||||||
coefs = formsemestre_uecoef_list(
|
coefs = formsemestre_uecoef_list(
|
||||||
cnx, args={"formsemestre_id": formsemestre_id, "ue_id": ue_id}
|
cnx, args={"formsemestre_id": formsemestre_id, "ue_id": ue_id}
|
||||||
@ -340,7 +331,7 @@ def do_formsemestre_uecoef_delete(context, cnx, formsemestre_id, ue_id):
|
|||||||
formsemestre_uecoef_delete(cnx, coefs[0]["formsemestre_uecoef_id"])
|
formsemestre_uecoef_delete(cnx, coefs[0]["formsemestre_uecoef_id"])
|
||||||
|
|
||||||
|
|
||||||
def read_formsemestre_etapes(context, formsemestre_id):
|
def read_formsemestre_etapes(formsemestre_id):
|
||||||
"""recupere liste des codes etapes associés à ce semestre
|
"""recupere liste des codes etapes associés à ce semestre
|
||||||
:returns: liste d'instance de ApoEtapeVDI
|
:returns: liste d'instance de ApoEtapeVDI
|
||||||
"""
|
"""
|
||||||
@ -354,11 +345,11 @@ def read_formsemestre_etapes(context, formsemestre_id):
|
|||||||
return [ApoEtapeVDI(x["etape_apo"]) for x in r if x["etape_apo"]]
|
return [ApoEtapeVDI(x["etape_apo"]) for x in r if x["etape_apo"]]
|
||||||
|
|
||||||
|
|
||||||
def write_formsemestre_etapes(context, sem):
|
def write_formsemestre_etapes(sem):
|
||||||
return _write_formsemestre_aux(context, sem, "etapes", "etape_apo")
|
return _write_formsemestre_aux(sem, "etapes", "etape_apo")
|
||||||
|
|
||||||
|
|
||||||
def _write_formsemestre_aux(context, sem, fieldname, valuename):
|
def _write_formsemestre_aux(sem, fieldname, valuename):
|
||||||
"""fieldname: 'etapes' ou 'responsables'
|
"""fieldname: 'etapes' ou 'responsables'
|
||||||
valuename: 'etape_apo' ou 'responsable_id'
|
valuename: 'etape_apo' ou 'responsable_id'
|
||||||
"""
|
"""
|
||||||
@ -394,7 +385,7 @@ def _write_formsemestre_aux(context, sem, fieldname, valuename):
|
|||||||
cnx.commit()
|
cnx.commit()
|
||||||
|
|
||||||
|
|
||||||
def sem_set_responsable_name(context, sem):
|
def sem_set_responsable_name(sem):
|
||||||
"ajoute champs responsable_name"
|
"ajoute champs responsable_name"
|
||||||
sem["responsable_name"] = ", ".join(
|
sem["responsable_name"] = ", ".join(
|
||||||
[
|
[
|
||||||
@ -404,7 +395,7 @@ def sem_set_responsable_name(context, sem):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def sem_in_semestre_scolaire(context, sem, year=False, saison=0, REQUEST=None):
|
def sem_in_semestre_scolaire(sem, year=False, saison=0):
|
||||||
"""n'utilise que la date de debut, pivot au 1er aout
|
"""n'utilise que la date de debut, pivot au 1er aout
|
||||||
si annee non specifiée, année scolaire courante
|
si annee non specifiée, année scolaire courante
|
||||||
Patch Jmp: ajout du parametre optionnel saison
|
Patch Jmp: ajout du parametre optionnel saison
|
||||||
@ -435,7 +426,7 @@ def sem_in_semestre_scolaire(context, sem, year=False, saison=0, REQUEST=None):
|
|||||||
return sem["mois_debut_ord"] <= 7 or sem["mois_debut_ord"] == 12
|
return sem["mois_debut_ord"] <= 7 or sem["mois_debut_ord"] == 12
|
||||||
|
|
||||||
|
|
||||||
def sem_in_annee_scolaire(context, sem, year=False, REQUEST=None):
|
def sem_in_annee_scolaire(sem, year=False):
|
||||||
"""Test si sem appartient à l'année scolaire year (int).
|
"""Test si sem appartient à l'année scolaire year (int).
|
||||||
N'utilise que la date de debut, pivot au 1er août.
|
N'utilise que la date de debut, pivot au 1er août.
|
||||||
Si annee non specifiée, année scolaire courante
|
Si annee non specifiée, année scolaire courante
|
||||||
@ -485,28 +476,22 @@ def scodoc_get_all_unlocked_sems():
|
|||||||
try:
|
try:
|
||||||
for dept in depts:
|
for dept in depts:
|
||||||
app.set_sco_dept(dept.acronym)
|
app.set_sco_dept(dept.acronym)
|
||||||
semdepts += [
|
semdepts += [(sem, dept) for sem in do_formsemestre_list() if sem["etat"]]
|
||||||
(sem, dept)
|
|
||||||
for sem in do_formsemestre_list(dept.Scolarite.Notes)
|
|
||||||
if sem["etat"]
|
|
||||||
]
|
|
||||||
finally:
|
finally:
|
||||||
app.set_sco_dept(cur_dept)
|
app.set_sco_dept(cur_dept)
|
||||||
return semdepts
|
return semdepts
|
||||||
|
|
||||||
|
|
||||||
def table_formsemestres(
|
def table_formsemestres(
|
||||||
context,
|
|
||||||
sems,
|
sems,
|
||||||
columns_ids=(),
|
columns_ids=(),
|
||||||
sup_columns_ids=(),
|
sup_columns_ids=(),
|
||||||
html_title="<h2>Semestres</h2>",
|
html_title="<h2>Semestres</h2>",
|
||||||
html_next_section="",
|
html_next_section="",
|
||||||
REQUEST=None,
|
|
||||||
):
|
):
|
||||||
"""Une table presentant des semestres"""
|
"""Une table presentant des semestres"""
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
sem_set_responsable_name(context, sem)
|
sem_set_responsable_name(sem)
|
||||||
sem["_titre_num_target"] = (
|
sem["_titre_num_target"] = (
|
||||||
"formsemestre_status?formsemestre_id=%s" % sem["formsemestre_id"]
|
"formsemestre_status?formsemestre_id=%s" % sem["formsemestre_id"]
|
||||||
)
|
)
|
||||||
@ -550,36 +535,30 @@ def table_formsemestres(
|
|||||||
return tab
|
return tab
|
||||||
|
|
||||||
|
|
||||||
def list_formsemestre_by_etape(
|
def list_formsemestre_by_etape(etape_apo=False, annee_scolaire=False):
|
||||||
context, etape_apo=False, annee_scolaire=False, REQUEST=None
|
|
||||||
):
|
|
||||||
"""Liste des semestres de cette etape, pour l'annee scolaire indiquée (sinon, pour toutes)"""
|
"""Liste des semestres de cette etape, pour l'annee scolaire indiquée (sinon, pour toutes)"""
|
||||||
ds = {} # formsemestre_id : sem
|
ds = {} # formsemestre_id : sem
|
||||||
if etape_apo:
|
if etape_apo:
|
||||||
sems = do_formsemestre_list(context, args={"etape_apo": etape_apo})
|
sems = do_formsemestre_list(args={"etape_apo": etape_apo})
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
if annee_scolaire: # restriction annee scolaire
|
if annee_scolaire: # restriction annee scolaire
|
||||||
if sem_in_annee_scolaire(
|
if sem_in_annee_scolaire(sem, year=int(annee_scolaire)):
|
||||||
context, sem, year=int(annee_scolaire), REQUEST=REQUEST
|
|
||||||
):
|
|
||||||
ds[sem["formsemestre_id"]] = sem
|
ds[sem["formsemestre_id"]] = sem
|
||||||
sems = list(ds.values())
|
sems = list(ds.values())
|
||||||
else:
|
else:
|
||||||
sems = do_formsemestre_list(context)
|
sems = do_formsemestre_list()
|
||||||
if annee_scolaire:
|
if annee_scolaire:
|
||||||
sems = [
|
sems = [
|
||||||
sem
|
sem
|
||||||
for sem in sems
|
for sem in sems
|
||||||
if sem_in_annee_scolaire(
|
if sem_in_annee_scolaire(sem, year=int(annee_scolaire))
|
||||||
context, sem, year=int(annee_scolaire), REQUEST=REQUEST
|
|
||||||
)
|
|
||||||
]
|
]
|
||||||
|
|
||||||
sems.sort(key=lambda s: (s["modalite"], s["dateord"]))
|
sems.sort(key=lambda s: (s["modalite"], s["dateord"]))
|
||||||
return sems
|
return sems
|
||||||
|
|
||||||
|
|
||||||
def view_formsemestre_by_etape(context, etape_apo=None, format="html", REQUEST=None):
|
def view_formsemestre_by_etape(etape_apo=None, format="html", REQUEST=None):
|
||||||
"""Affiche table des semestres correspondants à l'étape"""
|
"""Affiche table des semestres correspondants à l'étape"""
|
||||||
if etape_apo:
|
if etape_apo:
|
||||||
html_title = (
|
html_title = (
|
||||||
@ -588,18 +567,16 @@ def view_formsemestre_by_etape(context, etape_apo=None, format="html", REQUEST=N
|
|||||||
else:
|
else:
|
||||||
html_title = """<h2>Semestres courants</h2>"""
|
html_title = """<h2>Semestres courants</h2>"""
|
||||||
tab = table_formsemestres(
|
tab = table_formsemestres(
|
||||||
context,
|
|
||||||
list_formsemestre_by_etape(
|
list_formsemestre_by_etape(
|
||||||
context, etape_apo=etape_apo, annee_scolaire=scu.AnneeScolaire()
|
etape_apo=etape_apo, annee_scolaire=scu.AnneeScolaire()
|
||||||
),
|
),
|
||||||
html_title=html_title,
|
html_title=html_title,
|
||||||
html_next_section="""<form action="view_formsemestre_by_etape">
|
html_next_section="""<form action="view_formsemestre_by_etape">
|
||||||
Etape: <input name="etape_apo" type="text" size="8"></input>
|
Etape: <input name="etape_apo" type="text" size="8"></input>
|
||||||
</form>""",
|
</form>""",
|
||||||
REQUEST=REQUEST,
|
|
||||||
)
|
)
|
||||||
tab.base_url = "%s?etape_apo=%s" % (REQUEST.URL0, etape_apo or "")
|
tab.base_url = "%s?etape_apo=%s" % (REQUEST.URL0, etape_apo or "")
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
def sem_has_etape(sem, code_etape):
|
def sem_has_etape(sem, code_etape):
|
||||||
|
@ -62,7 +62,7 @@ def formsemestre_custommenu_html(context, formsemestre_id):
|
|||||||
"HTML code for custom menu"
|
"HTML code for custom menu"
|
||||||
menu = []
|
menu = []
|
||||||
# Calendrier électronique ?
|
# Calendrier électronique ?
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
ics_url = sco_edt_cal.formsemestre_get_ics_url(context, sem)
|
ics_url = sco_edt_cal.formsemestre_get_ics_url(context, sem)
|
||||||
if ics_url:
|
if ics_url:
|
||||||
menu.append({"title": "Emploi du temps (ics)", "url": ics_url})
|
menu.append({"title": "Emploi du temps (ics)", "url": ics_url})
|
||||||
@ -79,7 +79,7 @@ def formsemestre_custommenu_html(context, formsemestre_id):
|
|||||||
|
|
||||||
def formsemestre_custommenu_edit(context, formsemestre_id, REQUEST=None):
|
def formsemestre_custommenu_edit(context, formsemestre_id, REQUEST=None):
|
||||||
"""Dialog to edit the custom menu"""
|
"""Dialog to edit the custom menu"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
dest_url = (
|
dest_url = (
|
||||||
scu.NotesURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
scu.NotesURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
||||||
)
|
)
|
||||||
|
@ -88,7 +88,7 @@ def formsemestre_createwithmodules(context, REQUEST=None):
|
|||||||
def formsemestre_editwithmodules(context, REQUEST, formsemestre_id):
|
def formsemestre_editwithmodules(context, REQUEST, formsemestre_id):
|
||||||
"""Page modification semestre"""
|
"""Page modification semestre"""
|
||||||
# portage from dtml
|
# portage from dtml
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context,
|
context,
|
||||||
@ -124,7 +124,7 @@ def formsemestre_editwithmodules(context, REQUEST, formsemestre_id):
|
|||||||
|
|
||||||
def can_edit_sem(context, REQUEST, formsemestre_id="", sem=None):
|
def can_edit_sem(context, 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(context, 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
|
||||||
if not sem["resp_can_edit"] or current_user.id not in sem["responsables"]:
|
if not sem["resp_can_edit"] or current_user.id not in sem["responsables"]:
|
||||||
return False
|
return False
|
||||||
@ -136,7 +136,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
|||||||
# Fonction accessible à tous, controle acces à la main:
|
# Fonction accessible à tous, controle acces à la main:
|
||||||
if edit:
|
if edit:
|
||||||
formsemestre_id = int(REQUEST.form["formsemestre_id"])
|
formsemestre_id = int(REQUEST.form["formsemestre_id"])
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not current_user.has_permission(Permission.ScoImplement):
|
if not current_user.has_permission(Permission.ScoImplement):
|
||||||
if not edit:
|
if not edit:
|
||||||
# il faut ScoImplement pour creer un semestre
|
# il faut ScoImplement pour creer un semestre
|
||||||
@ -155,7 +155,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
|||||||
allowed_user_names = list(uid2display.values()) + [""]
|
allowed_user_names = list(uid2display.values()) + [""]
|
||||||
#
|
#
|
||||||
formation_id = int(REQUEST.form["formation_id"])
|
formation_id = int(REQUEST.form["formation_id"])
|
||||||
F = sco_formations.formation_list(context, args={"formation_id": formation_id})
|
F = sco_formations.formation_list(args={"formation_id": formation_id})
|
||||||
if not F:
|
if not F:
|
||||||
raise ScoValueError("Formation inexistante !")
|
raise ScoValueError("Formation inexistante !")
|
||||||
F = F[0]
|
F = F[0]
|
||||||
@ -551,9 +551,9 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
|||||||
opt_selected(default_group_id),
|
opt_selected(default_group_id),
|
||||||
)
|
)
|
||||||
fcg += '<option value="" %s>Aucun</option>' % opt_selected("")
|
fcg += '<option value="" %s>Aucun</option>' % opt_selected("")
|
||||||
for p in sco_groups.get_partitions_list(context, formsemestre_id):
|
for p in sco_groups.get_partitions_list(formsemestre_id):
|
||||||
if p["partition_name"] != None:
|
if p["partition_name"] != None:
|
||||||
for group in sco_groups.get_partition_groups(context, p):
|
for group in sco_groups.get_partition_groups(p):
|
||||||
fcg += '<option value="%s" %s>%s %s</option>' % (
|
fcg += '<option value="%s" %s>%s %s</option>' % (
|
||||||
group["group_id"],
|
group["group_id"],
|
||||||
opt_selected(group["group_id"]),
|
opt_selected(group["group_id"]),
|
||||||
@ -750,7 +750,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
|||||||
# nouveaux modules
|
# nouveaux modules
|
||||||
# (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(context, tf[2])
|
sco_formsemestre.do_formsemestre_edit(tf[2])
|
||||||
ams = sco_moduleimpl.do_moduleimpl_list(
|
ams = sco_moduleimpl.do_moduleimpl_list(
|
||||||
context, formsemestre_id=formsemestre_id
|
context, formsemestre_id=formsemestre_id
|
||||||
)
|
)
|
||||||
@ -781,8 +781,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
|||||||
group_id = tf[2]["%s!group_id" % module_id]
|
group_id = tf[2]["%s!group_id" % module_id]
|
||||||
if group_id:
|
if group_id:
|
||||||
etudids = [
|
etudids = [
|
||||||
x["etudid"]
|
x["etudid"] for x in sco_groups.get_group_members(group_id)
|
||||||
for x in sco_groups.get_group_members(context, group_id)
|
|
||||||
]
|
]
|
||||||
log(
|
log(
|
||||||
"inscription module:module_id=%s,moduleimpl_id=%s: %s"
|
"inscription module:module_id=%s,moduleimpl_id=%s: %s"
|
||||||
@ -882,7 +881,7 @@ def formsemestre_clone(context, formsemestre_id, REQUEST=None):
|
|||||||
"""
|
"""
|
||||||
Formulaire clonage d'un semestre
|
Formulaire clonage d'un semestre
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# Liste des enseignants avec forme pour affichage / saisie avec suggestion
|
# Liste des enseignants avec forme pour affichage / saisie avec suggestion
|
||||||
userlist = sco_users.get_user_list()
|
userlist = sco_users.get_user_list()
|
||||||
uid2display = {} # user_name : forme pour affichage = "NOM Prenom (login)"
|
uid2display = {} # user_name : forme pour affichage = "NOM Prenom (login)"
|
||||||
@ -1020,7 +1019,7 @@ def do_formsemestre_clone(
|
|||||||
New dates, responsable_id
|
New dates, responsable_id
|
||||||
"""
|
"""
|
||||||
log("cloning %s" % orig_formsemestre_id)
|
log("cloning %s" % orig_formsemestre_id)
|
||||||
orig_sem = sco_formsemestre.get_formsemestre(context, orig_formsemestre_id)
|
orig_sem = sco_formsemestre.get_formsemestre(orig_formsemestre_id)
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
# 1- create sem
|
# 1- create sem
|
||||||
args = orig_sem.copy()
|
args = orig_sem.copy()
|
||||||
@ -1098,30 +1097,27 @@ def do_formsemestre_clone(
|
|||||||
listgroups = []
|
listgroups = []
|
||||||
listnamegroups = []
|
listnamegroups = []
|
||||||
# Création des partitions:
|
# Création des partitions:
|
||||||
for part in sco_groups.get_partitions_list(context, orig_formsemestre_id):
|
for part in sco_groups.get_partitions_list(orig_formsemestre_id):
|
||||||
if part["partition_name"] != None:
|
if part["partition_name"] != None:
|
||||||
partname = part["partition_name"]
|
partname = part["partition_name"]
|
||||||
new_partition_id = sco_groups.partition_create(
|
new_partition_id = sco_groups.partition_create(
|
||||||
context,
|
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
partition_name=partname,
|
partition_name=partname,
|
||||||
redirect=0,
|
redirect=0,
|
||||||
)
|
)
|
||||||
for g in sco_groups.get_partition_groups(context, part):
|
for g in sco_groups.get_partition_groups(part):
|
||||||
if g["group_name"] != None:
|
if g["group_name"] != None:
|
||||||
listnamegroups.append(g["group_name"])
|
listnamegroups.append(g["group_name"])
|
||||||
listgroups.append([new_partition_id, listnamegroups])
|
listgroups.append([new_partition_id, listnamegroups])
|
||||||
listnamegroups = []
|
listnamegroups = []
|
||||||
|
|
||||||
# Création des groupes dans les nouvelles partitions:
|
# Création des groupes dans les nouvelles partitions:
|
||||||
for newpart in sco_groups.get_partitions_list(context, formsemestre_id):
|
for newpart in sco_groups.get_partitions_list(formsemestre_id):
|
||||||
for g in listgroups:
|
for g in listgroups:
|
||||||
if newpart["partition_id"] == g[0]:
|
if newpart["partition_id"] == g[0]:
|
||||||
part_id = g[0]
|
part_id = g[0]
|
||||||
for group_name in g[1]:
|
for group_name in g[1]:
|
||||||
_ = sco_groups.createGroup(
|
_ = sco_groups.createGroup(part_id, group_name=group_name)
|
||||||
context, part_id, group_name=group_name
|
|
||||||
)
|
|
||||||
|
|
||||||
return formsemestre_id
|
return formsemestre_id
|
||||||
|
|
||||||
@ -1139,12 +1135,9 @@ def formsemestre_associate_new_version(
|
|||||||
"""Formulaire changement formation d'un semestre"""
|
"""Formulaire changement formation d'un semestre"""
|
||||||
if not dialog_confirmed:
|
if not dialog_confirmed:
|
||||||
# dresse le liste des semestres de la meme formation et version
|
# dresse le liste des semestres de la meme formation et version
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
othersems = sco_formsemestre.do_formsemestre_list(
|
othersems = sco_formsemestre.do_formsemestre_list(
|
||||||
context,
|
|
||||||
args={
|
args={
|
||||||
"formation_id": F["formation_id"],
|
"formation_id": F["formation_id"],
|
||||||
"version": F["version"],
|
"version": F["version"],
|
||||||
@ -1202,10 +1195,10 @@ def do_formsemestres_associate_new_version(context, formsemestre_ids, REQUEST=No
|
|||||||
if not formsemestre_ids:
|
if not formsemestre_ids:
|
||||||
return
|
return
|
||||||
# Check: tous de la même formation
|
# Check: tous de la même formation
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_ids[0])
|
sem = sco_formsemestre.get_formsemestre(formsemestre_ids[0])
|
||||||
formation_id = sem["formation_id"]
|
formation_id = sem["formation_id"]
|
||||||
for formsemestre_id in formsemestre_ids[1:]:
|
for formsemestre_id in formsemestre_ids[1:]:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if formation_id != sem["formation_id"]:
|
if formation_id != sem["formation_id"]:
|
||||||
raise ScoValueError("les semestres ne sont pas tous de la même formation !")
|
raise ScoValueError("les semestres ne sont pas tous de la même formation !")
|
||||||
|
|
||||||
@ -1220,9 +1213,9 @@ def do_formsemestres_associate_new_version(context, formsemestre_ids, REQUEST=No
|
|||||||
)
|
)
|
||||||
|
|
||||||
for formsemestre_id in formsemestre_ids:
|
for formsemestre_id in formsemestre_ids:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
sem["formation_id"] = formation_id
|
sem["formation_id"] = formation_id
|
||||||
sco_formsemestre.do_formsemestre_edit(context, sem, cnx=cnx, html_quote=False)
|
sco_formsemestre.do_formsemestre_edit(sem, cnx=cnx, html_quote=False)
|
||||||
_reassociate_moduleimpls(
|
_reassociate_moduleimpls(
|
||||||
context, cnx, formsemestre_id, ues_old2new, modules_old2new
|
context, cnx, formsemestre_id, ues_old2new, modules_old2new
|
||||||
)
|
)
|
||||||
@ -1261,10 +1254,8 @@ def _reassociate_moduleimpls(
|
|||||||
|
|
||||||
def formsemestre_delete(context, formsemestre_id, REQUEST=None):
|
def formsemestre_delete(context, formsemestre_id, REQUEST=None):
|
||||||
"""Delete a formsemestre (affiche avertissements)"""
|
"""Delete a formsemestre (affiche avertissements)"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context, REQUEST, "Suppression du semestre", sem
|
context, REQUEST, "Suppression du semestre", sem
|
||||||
@ -1357,7 +1348,7 @@ def do_formsemestre_delete(context, formsemestre_id):
|
|||||||
No checks, no warnings: erase all !
|
No checks, no warnings: erase all !
|
||||||
"""
|
"""
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
sco_cache.EvaluationCache.invalidate_sem(formsemestre_id)
|
sco_cache.EvaluationCache.invalidate_sem(formsemestre_id)
|
||||||
|
|
||||||
@ -1478,7 +1469,7 @@ def formsemestre_change_lock(
|
|||||||
ok, err = sco_permissions_check.check_access_diretud(formsemestre_id)
|
ok, err = sco_permissions_check.check_access_diretud(formsemestre_id)
|
||||||
if not ok:
|
if not ok:
|
||||||
return err
|
return err
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etat = not sem["etat"]
|
etat = not sem["etat"]
|
||||||
|
|
||||||
if REQUEST and not dialog_confirmed:
|
if REQUEST and not dialog_confirmed:
|
||||||
@ -1500,7 +1491,7 @@ def formsemestre_change_lock(
|
|||||||
)
|
)
|
||||||
|
|
||||||
args = {"formsemestre_id": formsemestre_id, "etat": etat}
|
args = {"formsemestre_id": formsemestre_id, "etat": etat}
|
||||||
sco_formsemestre.do_formsemestre_edit(context, args)
|
sco_formsemestre.do_formsemestre_edit(args)
|
||||||
if REQUEST:
|
if REQUEST:
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
"formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
"formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
||||||
@ -1514,7 +1505,7 @@ def formsemestre_change_publication_bul(
|
|||||||
ok, err = sco_permissions_check.check_access_diretud(formsemestre_id)
|
ok, err = sco_permissions_check.check_access_diretud(formsemestre_id)
|
||||||
if not ok:
|
if not ok:
|
||||||
return err
|
return err
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etat = not sem["bul_hide_xml"]
|
etat = not sem["bul_hide_xml"]
|
||||||
|
|
||||||
if REQUEST and not dialog_confirmed:
|
if REQUEST and not dialog_confirmed:
|
||||||
@ -1535,7 +1526,7 @@ def formsemestre_change_publication_bul(
|
|||||||
)
|
)
|
||||||
|
|
||||||
args = {"formsemestre_id": formsemestre_id, "bul_hide_xml": etat}
|
args = {"formsemestre_id": formsemestre_id, "bul_hide_xml": etat}
|
||||||
sco_formsemestre.do_formsemestre_edit(context, args)
|
sco_formsemestre.do_formsemestre_edit(args)
|
||||||
if REQUEST:
|
if REQUEST:
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
"formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
"formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
||||||
@ -1550,7 +1541,7 @@ def formsemestre_edit_uecoefs(context, formsemestre_id, err_ue_id=None, REQUEST=
|
|||||||
ok, err = sco_permissions_check.check_access_diretud(formsemestre_id)
|
ok, err = sco_permissions_check.check_access_diretud(formsemestre_id)
|
||||||
if not ok:
|
if not ok:
|
||||||
return err
|
return err
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
footer = html_sco_header.sco_footer()
|
footer = html_sco_header.sco_footer()
|
||||||
help = """<p class="help">
|
help = """<p class="help">
|
||||||
@ -1664,11 +1655,11 @@ def formsemestre_edit_uecoefs(context, formsemestre_id, err_ue_id=None, REQUEST=
|
|||||||
# apply modifications
|
# apply modifications
|
||||||
for ue in ue_modified:
|
for ue in ue_modified:
|
||||||
sco_formsemestre.do_formsemestre_uecoef_edit_or_create(
|
sco_formsemestre.do_formsemestre_uecoef_edit_or_create(
|
||||||
context, cnx, formsemestre_id, ue["ue_id"], ue["coef"]
|
cnx, formsemestre_id, ue["ue_id"], ue["coef"]
|
||||||
)
|
)
|
||||||
for ue in ue_deleted:
|
for ue in ue_deleted:
|
||||||
sco_formsemestre.do_formsemestre_uecoef_delete(
|
sco_formsemestre.do_formsemestre_uecoef_delete(
|
||||||
context, cnx, formsemestre_id, ue["ue_id"]
|
cnx, formsemestre_id, ue["ue_id"]
|
||||||
)
|
)
|
||||||
|
|
||||||
if ue_modified or ue_deleted:
|
if ue_modified or ue_deleted:
|
||||||
@ -1702,7 +1693,7 @@ def formsemestre_edit_uecoefs(context, formsemestre_id, err_ue_id=None, REQUEST=
|
|||||||
|
|
||||||
|
|
||||||
# ----- identification externe des sessions (pour SOJA et autres logiciels)
|
# ----- identification externe des sessions (pour SOJA et autres logiciels)
|
||||||
def get_formsemestre_session_id(context, sem, F, parcours):
|
def get_formsemestre_session_id(sem, F, parcours):
|
||||||
"""Identifiant de session pour ce semestre
|
"""Identifiant de session pour ce semestre
|
||||||
Exemple: RT-DUT-FI-S1-ANNEE
|
Exemple: RT-DUT-FI-S1-ANNEE
|
||||||
|
|
||||||
@ -1716,8 +1707,8 @@ def get_formsemestre_session_id(context, sem, F, parcours):
|
|||||||
ANNEE=annee universitaire de debut (exemple: un S2 de 2013-2014 sera S2-2013)
|
ANNEE=annee universitaire de debut (exemple: un S2 de 2013-2014 sera S2-2013)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
# sem = sco_formsemestre.get_formsemestre( formsemestre_id)
|
||||||
# F = sco_formations.formation_list(context, 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'])
|
||||||
|
|
||||||
ImputationDept = sco_preferences.get_preference(
|
ImputationDept = sco_preferences.get_preference(
|
||||||
|
@ -57,7 +57,7 @@ def formsemestre_ext_create(context, etudid, sem_params, REQUEST=None):
|
|||||||
"""
|
"""
|
||||||
# Check args
|
# Check args
|
||||||
_formation = sco_formations.formation_list(
|
_formation = sco_formations.formation_list(
|
||||||
context, args={"formation_id": sem_params["formation_id"]}
|
args={"formation_id": sem_params["formation_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
if etudid:
|
if etudid:
|
||||||
_etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
_etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
||||||
@ -105,17 +105,15 @@ def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None)
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
F = html_sco_header.sco_footer()
|
F = html_sco_header.sco_footer()
|
||||||
orig_sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
orig_sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# Ne propose que des semestres de semestre_id strictement inférieur au semestre courant
|
# Ne propose que des semestres de semestre_id strictement inférieur au semestre courant
|
||||||
# et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc.
|
# et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc.
|
||||||
# Les autres situations (eg redoublements en changeant d'établissement)
|
# Les autres situations (eg redoublements en changeant d'établissement)
|
||||||
# doivent être gérées par les validations de semestres "antérieurs"
|
# doivent être gérées par les validations de semestres "antérieurs"
|
||||||
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"etudid": etudid, "etat": "I"}
|
args={"etudid": etudid, "etat": "I"}
|
||||||
)
|
)
|
||||||
semlist = [
|
semlist = [sco_formsemestre.get_formsemestre(i["formsemestre_id"]) for i in insem]
|
||||||
sco_formsemestre.get_formsemestre(context, i["formsemestre_id"]) for i in insem
|
|
||||||
]
|
|
||||||
existing_semestre_ids = set([s["semestre_id"] for s in semlist])
|
existing_semestre_ids = set([s["semestre_id"] for s in semlist])
|
||||||
min_semestre_id = 1
|
min_semestre_id = 1
|
||||||
max_semestre_id = orig_sem["semestre_id"]
|
max_semestre_id = orig_sem["semestre_id"]
|
||||||
@ -223,7 +221,7 @@ def formsemestre_ext_edit_ue_validations(
|
|||||||
La moyenne générale du semestre est calculée et affichée,
|
La moyenne générale du semestre est calculée et affichée,
|
||||||
mais pas enregistrée.
|
mais pas enregistrée.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
ue_list = _list_ue_with_coef_and_validations(context, sem, etudid)
|
ue_list = _list_ue_with_coef_and_validations(context, sem, etudid)
|
||||||
descr = _ue_form_description(context, ue_list, REQUEST.form)
|
descr = _ue_form_description(context, ue_list, REQUEST.form)
|
||||||
|
@ -58,19 +58,19 @@ _formsemestre_inscriptionEditor = ndb.EditableTable(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_inscription_list(context, *args, **kw):
|
def do_formsemestre_inscription_list(*args, **kw):
|
||||||
"list formsemestre_inscriptions"
|
"list formsemestre_inscriptions"
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
return _formsemestre_inscriptionEditor.list(cnx, *args, **kw)
|
return _formsemestre_inscriptionEditor.list(cnx, *args, **kw)
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_inscription_listinscrits(context, formsemestre_id):
|
def do_formsemestre_inscription_listinscrits(formsemestre_id):
|
||||||
"""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_cache.SemInscriptionsCache.get(formsemestre_id)
|
r = sco_cache.SemInscriptionsCache.get(formsemestre_id)
|
||||||
if r is None:
|
if r is None:
|
||||||
# retreive list
|
# retreive list
|
||||||
r = do_formsemestre_inscription_list(
|
r = do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id, "etat": "I"}
|
args={"formsemestre_id": formsemestre_id, "etat": "I"}
|
||||||
)
|
)
|
||||||
sco_cache.SemInscriptionsCache.set(formsemestre_id, r)
|
sco_cache.SemInscriptionsCache.set(formsemestre_id, r)
|
||||||
return r
|
return r
|
||||||
@ -81,7 +81,7 @@ def do_formsemestre_inscription_create(context, args, REQUEST, method=None):
|
|||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
log("do_formsemestre_inscription_create: args=%s" % str(args))
|
log("do_formsemestre_inscription_create: args=%s" % str(args))
|
||||||
sems = sco_formsemestre.do_formsemestre_list(
|
sems = sco_formsemestre.do_formsemestre_list(
|
||||||
context, {"formsemestre_id": args["formsemestre_id"]}
|
{"formsemestre_id": args["formsemestre_id"]}
|
||||||
)
|
)
|
||||||
if len(sems) != 1:
|
if len(sems) != 1:
|
||||||
raise ScoValueError("code de semestre invalide: %s" % args["formsemestre_id"])
|
raise ScoValueError("code de semestre invalide: %s" % args["formsemestre_id"])
|
||||||
@ -141,7 +141,7 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non
|
|||||||
"""
|
"""
|
||||||
from app.scodoc import sco_formsemestre_edit
|
from app.scodoc import sco_formsemestre_edit
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# -- check lock
|
# -- check lock
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("desinscription impossible: semestre verrouille")
|
raise ScoValueError("desinscription impossible: semestre verrouille")
|
||||||
@ -154,7 +154,7 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non
|
|||||||
)
|
)
|
||||||
|
|
||||||
insem = do_formsemestre_inscription_list(
|
insem = do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id, "etudid": etudid}
|
args={"formsemestre_id": formsemestre_id, "etudid": etudid}
|
||||||
)
|
)
|
||||||
if not insem:
|
if not insem:
|
||||||
raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid)
|
raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid)
|
||||||
@ -179,7 +179,7 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non
|
|||||||
# --- Semestre extérieur
|
# --- Semestre extérieur
|
||||||
if sem["modalite"] == "EXT":
|
if sem["modalite"] == "EXT":
|
||||||
inscrits = do_formsemestre_inscription_list(
|
inscrits = do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
nbinscrits = len(inscrits)
|
nbinscrits = len(inscrits)
|
||||||
if nbinscrits == 0:
|
if nbinscrits == 0:
|
||||||
@ -224,13 +224,13 @@ def do_formsemestre_inscription_with_modules(
|
|||||||
# inscriptions aux groupes
|
# inscriptions aux groupes
|
||||||
# 1- inscrit au groupe 'tous'
|
# 1- inscrit au groupe 'tous'
|
||||||
group_id = sco_groups.get_default_group(formsemestre_id)
|
group_id = sco_groups.get_default_group(formsemestre_id)
|
||||||
sco_groups.set_group(context, etudid, group_id)
|
sco_groups.set_group(etudid, group_id)
|
||||||
gdone = {group_id: 1} # empeche doublons
|
gdone = {group_id: 1} # empeche doublons
|
||||||
|
|
||||||
# 2- inscrit aux groupes
|
# 2- inscrit aux groupes
|
||||||
for group_id in group_ids:
|
for group_id in group_ids:
|
||||||
if group_id and not group_id in gdone:
|
if group_id and not group_id in gdone:
|
||||||
sco_groups.set_group(context, etudid, group_id)
|
sco_groups.set_group(etudid, group_id)
|
||||||
gdone[group_id] = 1
|
gdone[group_id] = 1
|
||||||
|
|
||||||
# inscription a tous les modules de ce semestre
|
# inscription a tous les modules de ce semestre
|
||||||
@ -289,10 +289,8 @@ def formsemestre_inscription_with_modules_form(
|
|||||||
<h3>Choisir un semestre:</h3>"""
|
<h3>Choisir un semestre:</h3>"""
|
||||||
)
|
)
|
||||||
F = html_sco_header.sco_footer()
|
F = html_sco_header.sco_footer()
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context, args={"etat": "1"})
|
sems = sco_formsemestre.do_formsemestre_list(args={"etat": "1"})
|
||||||
insem = do_formsemestre_inscription_list(
|
insem = do_formsemestre_inscription_list(args={"etudid": etudid, "etat": "I"})
|
||||||
context, args={"etudid": etudid, "etat": "I"}
|
|
||||||
)
|
|
||||||
if sems:
|
if sems:
|
||||||
H.append("<ul>")
|
H.append("<ul>")
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
@ -335,7 +333,7 @@ def formsemestre_inscription_with_modules(
|
|||||||
)
|
)
|
||||||
if multiple_ok:
|
if multiple_ok:
|
||||||
multiple_ok = int(multiple_ok)
|
multiple_ok = int(multiple_ok)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
@ -347,7 +345,7 @@ def formsemestre_inscription_with_modules(
|
|||||||
]
|
]
|
||||||
F = html_sco_header.sco_footer()
|
F = html_sco_header.sco_footer()
|
||||||
# Check 1: déjà inscrit ici ?
|
# Check 1: déjà inscrit ici ?
|
||||||
ins = do_formsemestre_inscription_list(context, {"etudid": etudid})
|
ins = do_formsemestre_inscription_list({"etudid": etudid})
|
||||||
already = False
|
already = False
|
||||||
for i in ins:
|
for i in ins:
|
||||||
if i["formsemestre_id"] == formsemestre_id:
|
if i["formsemestre_id"] == formsemestre_id:
|
||||||
@ -426,9 +424,7 @@ def formsemestre_inscription_with_modules(
|
|||||||
% (REQUEST.URL0, etudid, formsemestre_id)
|
% (REQUEST.URL0, etudid, formsemestre_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
H.append(
|
H.append(sco_groups.form_group_choice(formsemestre_id, allow_none=True))
|
||||||
sco_groups.form_group_choice(context, formsemestre_id, allow_none=True)
|
|
||||||
)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
H.append(
|
H.append(
|
||||||
@ -443,7 +439,7 @@ def formsemestre_inscription_with_modules(
|
|||||||
|
|
||||||
def formsemestre_inscription_option(context, etudid, formsemestre_id, REQUEST=None):
|
def formsemestre_inscription_option(context, etudid, formsemestre_id, REQUEST=None):
|
||||||
"""Dialogue pour (dés)inscription à des modules optionnels."""
|
"""Dialogue pour (dés)inscription à des modules optionnels."""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
|
|
||||||
@ -502,9 +498,7 @@ def formsemestre_inscription_option(context, etudid, formsemestre_id, REQUEST=No
|
|||||||
ue_descr += " <em>%s</em>" % UE_TYPE_NAME[ue["type"]]
|
ue_descr += " <em>%s</em>" % UE_TYPE_NAME[ue["type"]]
|
||||||
ue_status = nt.get_etud_ue_status(etudid, ue_id)
|
ue_status = nt.get_etud_ue_status(etudid, ue_id)
|
||||||
if ue_status["is_capitalized"]:
|
if ue_status["is_capitalized"]:
|
||||||
sem_origin = sco_formsemestre.get_formsemestre(
|
sem_origin = sco_formsemestre.get_formsemestre(ue_status["formsemestre_id"])
|
||||||
context, ue_status["formsemestre_id"]
|
|
||||||
)
|
|
||||||
ue_descr += ' <a class="discretelink" href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s">(capitalisée le %s)' % (
|
ue_descr += ' <a class="discretelink" href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s">(capitalisée le %s)' % (
|
||||||
sem_origin["formsemestre_id"],
|
sem_origin["formsemestre_id"],
|
||||||
etudid,
|
etudid,
|
||||||
@ -739,7 +733,7 @@ def est_inscrit_ailleurs(context, etudid, formsemestre_id):
|
|||||||
Retourne la liste des semestres concernés (ou liste vide).
|
Retourne la liste des semestres concernés (ou liste vide).
|
||||||
"""
|
"""
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
debut_s = sem["dateord"]
|
debut_s = sem["dateord"]
|
||||||
fin_s = ndb.DateDMYtoISO(sem["date_fin"])
|
fin_s = ndb.DateDMYtoISO(sem["date_fin"])
|
||||||
r = []
|
r = []
|
||||||
@ -769,7 +763,7 @@ def formsemestre_inscrits_ailleurs(context, formsemestre_id, REQUEST=None):
|
|||||||
"""Page listant les étudiants inscrits dans un autre semestre
|
"""Page listant les étudiants inscrits dans un autre semestre
|
||||||
dont les dates recouvrent le semestre indiqué.
|
dont les dates recouvrent le semestre indiqué.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context,
|
context,
|
||||||
|
@ -130,9 +130,7 @@ def formsemestre_status_menubar(context, sem):
|
|||||||
else:
|
else:
|
||||||
change_lock_msg = "Déverrouiller"
|
change_lock_msg = "Déverrouiller"
|
||||||
|
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
|
|
||||||
menuSemestre = [
|
menuSemestre = [
|
||||||
{
|
{
|
||||||
@ -336,9 +334,7 @@ def formsemestre_status_menubar(context, sem):
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
# 1 item / partition:
|
# 1 item / partition:
|
||||||
partitions = sco_groups.get_partitions_list(
|
partitions = sco_groups.get_partitions_list(formsemestre_id, with_default=False)
|
||||||
context, formsemestre_id, with_default=False
|
|
||||||
)
|
|
||||||
submenu = []
|
submenu = []
|
||||||
enabled = (
|
enabled = (
|
||||||
sco_groups.sco_permissions_check.can_change_groups(formsemestre_id)
|
sco_groups.sco_permissions_check.can_change_groups(formsemestre_id)
|
||||||
@ -485,7 +481,7 @@ def retreive_formsemestre_from_request():
|
|||||||
)[0]
|
)[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(context, args["group_id"])
|
group = sco_groups.get_group(args["group_id"])
|
||||||
formsemestre_id = group["formsemestre_id"]
|
formsemestre_id = group["formsemestre_id"]
|
||||||
elif group_ids:
|
elif group_ids:
|
||||||
if group_ids:
|
if group_ids:
|
||||||
@ -494,10 +490,10 @@ def retreive_formsemestre_from_request():
|
|||||||
else:
|
else:
|
||||||
# prend le semestre du 1er groupe de la liste:
|
# prend le semestre du 1er groupe de la liste:
|
||||||
group_id = group_ids[0]
|
group_id = group_ids[0]
|
||||||
group = sco_groups.get_group(context, group_id)
|
group = sco_groups.get_group(group_id)
|
||||||
formsemestre_id = group["formsemestre_id"]
|
formsemestre_id = group["formsemestre_id"]
|
||||||
elif "partition_id" in args:
|
elif "partition_id" in args:
|
||||||
partition = sco_groups.get_partition(context, args["partition_id"])
|
partition = sco_groups.get_partition(args["partition_id"])
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
else:
|
else:
|
||||||
return None # no current formsemestre
|
return None # no current formsemestre
|
||||||
@ -515,7 +511,7 @@ def formsemestre_page_title(context):
|
|||||||
if not formsemestre_id:
|
if not formsemestre_id:
|
||||||
return ""
|
return ""
|
||||||
try:
|
try:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id).copy()
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id).copy()
|
||||||
except:
|
except:
|
||||||
log("can't find formsemestre_id %s" % formsemestre_id)
|
log("can't find formsemestre_id %s" % formsemestre_id)
|
||||||
return ""
|
return ""
|
||||||
@ -560,9 +556,7 @@ def fill_formsemestre(sem):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
sem["eyelink"] = ""
|
sem["eyelink"] = ""
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
sem["formation"] = F
|
sem["formation"] = F
|
||||||
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
|
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
|
||||||
if sem["semestre_id"] != -1:
|
if sem["semestre_id"] != -1:
|
||||||
@ -579,7 +573,7 @@ def fill_formsemestre(sem):
|
|||||||
)
|
)
|
||||||
|
|
||||||
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
sem["nbinscrits"] = len(inscrits)
|
sem["nbinscrits"] = len(inscrits)
|
||||||
uresps = [
|
uresps = [
|
||||||
@ -596,12 +590,10 @@ def formsemestre_description_table(
|
|||||||
"""Description du semestre sous forme de table exportable
|
"""Description du semestre sous forme de table exportable
|
||||||
Liste des modules et de leurs coefficients
|
Liste des modules et de leurs coefficients
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations
|
||||||
use_ue_coefs = sco_preferences.get_preference("use_ue_coefs", formsemestre_id)
|
use_ue_coefs = sco_preferences.get_preference("use_ue_coefs", formsemestre_id)
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, 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
|
context, formsemestre_id=formsemestre_id
|
||||||
@ -752,7 +744,7 @@ def formsemestre_description(
|
|||||||
tab.html_before_table += "checked"
|
tab.html_before_table += "checked"
|
||||||
tab.html_before_table += ">indiquer les évaluations</input></form>"
|
tab.html_before_table += ">indiquer les évaluations</input></form>"
|
||||||
|
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
# genere liste html pour accès aux groupes de ce semestre
|
# genere liste html pour accès aux groupes de ce semestre
|
||||||
@ -809,18 +801,16 @@ def _make_listes_sem(context, sem, REQUEST=None, with_absences=True):
|
|||||||
#
|
#
|
||||||
H.append('<div id="grouplists">')
|
H.append('<div id="grouplists">')
|
||||||
# Genere liste pour chaque partition (categorie de groupes)
|
# Genere liste pour chaque partition (categorie de groupes)
|
||||||
for partition in sco_groups.get_partitions_list(context, sem["formsemestre_id"]):
|
for partition in sco_groups.get_partitions_list(sem["formsemestre_id"]):
|
||||||
if not partition["partition_name"]:
|
if not partition["partition_name"]:
|
||||||
H.append("<h4>Tous les étudiants</h4>" % partition)
|
H.append("<h4>Tous les étudiants</h4>" % partition)
|
||||||
else:
|
else:
|
||||||
H.append("<h4>Groupes de %(partition_name)s</h4>" % partition)
|
H.append("<h4>Groupes de %(partition_name)s</h4>" % partition)
|
||||||
groups = sco_groups.get_partition_groups(context, partition)
|
groups = sco_groups.get_partition_groups(partition)
|
||||||
if groups:
|
if groups:
|
||||||
H.append("<table>")
|
H.append("<table>")
|
||||||
for group in groups:
|
for group in groups:
|
||||||
n_members = len(
|
n_members = len(sco_groups.get_group_members(group["group_id"]))
|
||||||
sco_groups.get_group_members(context, group["group_id"])
|
|
||||||
)
|
|
||||||
group["url_etat"] = url_for(
|
group["url_etat"] = url_for(
|
||||||
"absences.EtatAbsencesGr",
|
"absences.EtatAbsencesGr",
|
||||||
group_ids=group["group_id"],
|
group_ids=group["group_id"],
|
||||||
@ -929,14 +919,12 @@ def formsemestre_status_head(
|
|||||||
):
|
):
|
||||||
"""En-tête HTML des pages "semestre" """
|
"""En-tête HTML des pages "semestre" """
|
||||||
semlist = sco_formsemestre.do_formsemestre_list(
|
semlist = sco_formsemestre.do_formsemestre_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
if not semlist:
|
if not semlist:
|
||||||
raise ScoValueError("Session inexistante (elle a peut être été supprimée ?)")
|
raise ScoValueError("Session inexistante (elle a peut être été supprimée ?)")
|
||||||
sem = semlist[0]
|
sem = semlist[0]
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, 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"])
|
||||||
|
|
||||||
page_title = page_title or "Modules de "
|
page_title = page_title or "Modules de "
|
||||||
@ -997,11 +985,11 @@ def formsemestre_status(context, formsemestre_id=None, REQUEST=None):
|
|||||||
"""Tableau de bord semestre HTML"""
|
"""Tableau de bord semestre HTML"""
|
||||||
# porté du DTML
|
# porté du DTML
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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
|
context, formsemestre_id=formsemestre_id
|
||||||
)
|
)
|
||||||
# inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context,
|
# 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
|
||||||
|
@ -101,7 +101,7 @@ def formsemestre_validation_etud_form(
|
|||||||
check = True
|
check = True
|
||||||
|
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
if not Se.sem["etat"]:
|
if not Se.sem["etat"]:
|
||||||
raise ScoValueError("validation: semestre verrouille")
|
raise ScoValueError("validation: semestre verrouille")
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ def formsemestre_validation_etud(
|
|||||||
):
|
):
|
||||||
"""Enregistre validation"""
|
"""Enregistre validation"""
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
# retrouve la decision correspondant au code:
|
# retrouve la decision correspondant au code:
|
||||||
choices = Se.get_possible_choices(assiduite=True)
|
choices = Se.get_possible_choices(assiduite=True)
|
||||||
choices += Se.get_possible_choices(assiduite=False)
|
choices += Se.get_possible_choices(assiduite=False)
|
||||||
@ -377,7 +377,7 @@ def formsemestre_validation_etud_manu(
|
|||||||
if assidu:
|
if assidu:
|
||||||
assidu = True
|
assidu = True
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
if code_etat in Se.parcours.UNUSED_CODES:
|
if code_etat in Se.parcours.UNUSED_CODES:
|
||||||
raise ScoValueError("code decision invalide dans ce parcours")
|
raise ScoValueError("code decision invalide dans ce parcours")
|
||||||
# Si code ADC, extrait le semestre utilisé:
|
# Si code ADC, extrait le semestre utilisé:
|
||||||
@ -581,7 +581,7 @@ def formsemestre_recap_parcours_table(
|
|||||||
# indique le semestre compensé par celui ci:
|
# indique le semestre compensé par celui ci:
|
||||||
if decision_sem and decision_sem["compense_formsemestre_id"]:
|
if decision_sem and decision_sem["compense_formsemestre_id"]:
|
||||||
csem = sco_formsemestre.get_formsemestre(
|
csem = sco_formsemestre.get_formsemestre(
|
||||||
context, decision_sem["compense_formsemestre_id"]
|
decision_sem["compense_formsemestre_id"]
|
||||||
)
|
)
|
||||||
H.append("<td><em>compense S%s</em></td>" % csem["semestre_id"])
|
H.append("<td><em>compense S%s</em></td>" % csem["semestre_id"])
|
||||||
else:
|
else:
|
||||||
@ -827,7 +827,7 @@ def form_decision_manuelle(
|
|||||||
# -----------
|
# -----------
|
||||||
def formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
def formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
||||||
"Formulaire saisie automatisee des decisions d'un semestre"
|
"Formulaire saisie automatisee des decisions d'un semestre"
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context, REQUEST, "Saisie automatique des décisions du semestre", sem
|
context, REQUEST, "Saisie automatique des décisions du semestre", sem
|
||||||
@ -857,7 +857,7 @@ def formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
|||||||
|
|
||||||
def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
||||||
"Saisie automatisee des decisions d'un semestre"
|
"Saisie automatisee des decisions d'un semestre"
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
next_semestre_id = sem["semestre_id"] + 1
|
next_semestre_id = sem["semestre_id"] + 1
|
||||||
nt = sco_cache.NotesTableCache.get(
|
nt = sco_cache.NotesTableCache.get(
|
||||||
formsemestre_id
|
formsemestre_id
|
||||||
@ -867,9 +867,9 @@ def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
|||||||
conflicts = [] # liste des etudiants avec decision differente déjà saisie
|
conflicts = [] # liste des etudiants avec decision differente déjà saisie
|
||||||
for etudid in etudids:
|
for etudid in etudids:
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid, "formsemestre_id": formsemestre_id}
|
{"etudid": etudid, "formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
|
|
||||||
# Conditions pour validation automatique:
|
# Conditions pour validation automatique:
|
||||||
@ -971,7 +971,7 @@ def formsemestre_validation_suppress_etud(context, formsemestre_id, etudid):
|
|||||||
cnx.rollback()
|
cnx.rollback()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
_invalidate_etud_formation_caches(
|
_invalidate_etud_formation_caches(
|
||||||
context, etudid, sem["formation_id"]
|
context, etudid, sem["formation_id"]
|
||||||
) # > suppr. decision jury (peut affecter de plusieurs semestres utilisant UE capitalisée)
|
) # > suppr. decision jury (peut affecter de plusieurs semestres utilisant UE capitalisée)
|
||||||
@ -984,10 +984,8 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
|
|||||||
from app.scodoc import sco_formations
|
from app.scodoc import sco_formations
|
||||||
|
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
Fo = sco_formations.formation_list(
|
Fo = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
|
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(
|
html_sco_header.sco_header(
|
||||||
@ -1124,17 +1122,15 @@ def do_formsemestre_validate_previous_ue(
|
|||||||
Si le coefficient est spécifié, modifie le coefficient de
|
Si le coefficient est spécifié, modifie le coefficient de
|
||||||
cette UE (utile seulement pour les semestres extérieurs).
|
cette UE (utile seulement pour les semestres extérieurs).
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
cnx = ndb.GetDBConnexion(autocommit=False)
|
cnx = ndb.GetDBConnexion(autocommit=False)
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etud_ue_status
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etud_ue_status
|
||||||
if ue_coefficient != None:
|
if ue_coefficient != None:
|
||||||
sco_formsemestre.do_formsemestre_uecoef_edit_or_create(
|
sco_formsemestre.do_formsemestre_uecoef_edit_or_create(
|
||||||
context, cnx, formsemestre_id, ue_id, ue_coefficient
|
cnx, formsemestre_id, ue_id, ue_coefficient
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
sco_formsemestre.do_formsemestre_uecoef_delete(
|
sco_formsemestre.do_formsemestre_uecoef_delete(cnx, formsemestre_id, ue_id)
|
||||||
context, cnx, formsemestre_id, ue_id
|
|
||||||
)
|
|
||||||
sco_parcours_dut.do_formsemestre_validate_ue(
|
sco_parcours_dut.do_formsemestre_validate_ue(
|
||||||
cnx,
|
cnx,
|
||||||
nt,
|
nt,
|
||||||
@ -1197,7 +1193,7 @@ def get_etud_ue_cap_html(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
|||||||
else:
|
else:
|
||||||
valid["m"] = ""
|
valid["m"] = ""
|
||||||
if valid["formsemestre_id"]:
|
if valid["formsemestre_id"]:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, valid["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(valid["formsemestre_id"])
|
||||||
valid["s"] = ", du semestre %s" % sem["titreannee"]
|
valid["s"] = ", du semestre %s" % sem["titreannee"]
|
||||||
else:
|
else:
|
||||||
valid["s"] = " enregistrée d'un parcours antérieur (hors ScoDoc)"
|
valid["s"] = " enregistrée d'un parcours antérieur (hors ScoDoc)"
|
||||||
@ -1222,7 +1218,7 @@ def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST
|
|||||||
{"etudid": etudid, "ue_id": ue_id},
|
{"etudid": etudid, "ue_id": ue_id},
|
||||||
)
|
)
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
_invalidate_etud_formation_caches(context, etudid, sem["formation_id"])
|
_invalidate_etud_formation_caches(context, etudid, sem["formation_id"])
|
||||||
|
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
@ -1275,7 +1271,7 @@ def check_formation_ues(context, formation_id):
|
|||||||
for ue in ues:
|
for ue in ues:
|
||||||
if ue["ue_id"] in ue_multiples:
|
if ue["ue_id"] in ue_multiples:
|
||||||
sems = [
|
sems = [
|
||||||
sco_formsemestre.get_formsemestre(context, x["formsemestre_id"])
|
sco_formsemestre.get_formsemestre(x["formsemestre_id"])
|
||||||
for x in ue_multiples[ue["ue_id"]]
|
for x in ue_multiples[ue["ue_id"]]
|
||||||
]
|
]
|
||||||
slist = ", ".join(
|
slist = ", ".join(
|
||||||
|
@ -99,7 +99,7 @@ groupEditor = ndb.EditableTable(
|
|||||||
group_list = groupEditor.list
|
group_list = groupEditor.list
|
||||||
|
|
||||||
|
|
||||||
def get_group(context, group_id):
|
def get_group(group_id):
|
||||||
"""Returns group object, with partition"""
|
"""Returns group object, with partition"""
|
||||||
r = ndb.SimpleDictFetch(
|
r = ndb.SimpleDictFetch(
|
||||||
"""SELECT gd.id AS group_id, gd.*, p.id AS partition_id, p.*
|
"""SELECT gd.id AS group_id, gd.*, p.id AS partition_id, p.*
|
||||||
@ -114,7 +114,7 @@ def get_group(context, group_id):
|
|||||||
return r[0]
|
return r[0]
|
||||||
|
|
||||||
|
|
||||||
def group_delete(context, group, force=False):
|
def group_delete(group, force=False):
|
||||||
"""Delete a group."""
|
"""Delete a group."""
|
||||||
# if not group['group_name'] and not force:
|
# if not group['group_name'] and not force:
|
||||||
# raise ValueError('cannot suppress this group')
|
# raise ValueError('cannot suppress this group')
|
||||||
@ -124,7 +124,7 @@ def group_delete(context, group, force=False):
|
|||||||
ndb.SimpleQuery("DELETE FROM group_descr WHERE id=%(group_id)s", group)
|
ndb.SimpleQuery("DELETE FROM group_descr WHERE id=%(group_id)s", group)
|
||||||
|
|
||||||
|
|
||||||
def get_partition(context, partition_id):
|
def get_partition(partition_id):
|
||||||
r = ndb.SimpleDictFetch(
|
r = ndb.SimpleDictFetch(
|
||||||
"""SELECT p.id AS partition_id, p.*
|
"""SELECT p.id AS partition_id, p.*
|
||||||
FROM partition p
|
FROM partition p
|
||||||
@ -137,7 +137,7 @@ def get_partition(context, partition_id):
|
|||||||
return r[0]
|
return r[0]
|
||||||
|
|
||||||
|
|
||||||
def get_partitions_list(context, formsemestre_id, with_default=True):
|
def get_partitions_list(formsemestre_id, with_default=True):
|
||||||
"""Liste des partitions pour ce semestre (list of dicts)"""
|
"""Liste des partitions pour ce semestre (list of dicts)"""
|
||||||
partitions = ndb.SimpleDictFetch(
|
partitions = ndb.SimpleDictFetch(
|
||||||
"""SELECT p.id AS partition_id, p.*
|
"""SELECT p.id AS partition_id, p.*
|
||||||
@ -153,7 +153,7 @@ def get_partitions_list(context, formsemestre_id, with_default=True):
|
|||||||
return R
|
return R
|
||||||
|
|
||||||
|
|
||||||
def get_default_partition(context, formsemestre_id):
|
def get_default_partition(formsemestre_id):
|
||||||
"""Get partition for 'all' students (this one always exists, with NULL name)"""
|
"""Get partition for 'all' students (this one always exists, with NULL name)"""
|
||||||
r = ndb.SimpleDictFetch(
|
r = ndb.SimpleDictFetch(
|
||||||
"""SELECT p.id AS partition_id, p.* FROM partition p
|
"""SELECT p.id AS partition_id, p.* FROM partition p
|
||||||
@ -170,19 +170,17 @@ def get_default_partition(context, formsemestre_id):
|
|||||||
return r[0]
|
return r[0]
|
||||||
|
|
||||||
|
|
||||||
def get_formsemestre_groups(context, formsemestre_id, with_default=False):
|
def get_formsemestre_groups(formsemestre_id, with_default=False):
|
||||||
"""Returns ( partitions, { partition_id : { etudid : group } } )."""
|
"""Returns ( partitions, { partition_id : { etudid : group } } )."""
|
||||||
partitions = get_partitions_list(
|
partitions = get_partitions_list(formsemestre_id, with_default=with_default)
|
||||||
context, formsemestre_id, with_default=with_default
|
|
||||||
)
|
|
||||||
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
partitions_etud_groups = {} # { partition_id : { etudid : group } }
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
pid = partition["partition_id"]
|
pid = partition["partition_id"]
|
||||||
partitions_etud_groups[pid] = get_etud_groups_in_partition(context, pid)
|
partitions_etud_groups[pid] = get_etud_groups_in_partition(pid)
|
||||||
return partitions, partitions_etud_groups
|
return partitions, partitions_etud_groups
|
||||||
|
|
||||||
|
|
||||||
def get_partition_groups(context, partition):
|
def get_partition_groups(partition):
|
||||||
"""List of groups in this partition (list of dicts).
|
"""List of groups in this partition (list of dicts).
|
||||||
Some groups may be empty."""
|
Some groups may be empty."""
|
||||||
return ndb.SimpleDictFetch(
|
return ndb.SimpleDictFetch(
|
||||||
@ -198,7 +196,6 @@ def get_partition_groups(context, partition):
|
|||||||
|
|
||||||
def get_default_group(formsemestre_id, fix_if_missing=False):
|
def get_default_group(formsemestre_id, fix_if_missing=False):
|
||||||
"""Returns group_id for default ('tous') group"""
|
"""Returns group_id for default ('tous') group"""
|
||||||
context = None # #context
|
|
||||||
r = ndb.SimpleDictFetch(
|
r = ndb.SimpleDictFetch(
|
||||||
"""SELECT gd.id AS group_id
|
"""SELECT gd.id AS group_id
|
||||||
FROM group_descr gd, partition p
|
FROM group_descr gd, partition p
|
||||||
@ -216,15 +213,13 @@ def get_default_group(formsemestre_id, fix_if_missing=False):
|
|||||||
% formsemestre_id
|
% formsemestre_id
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
partition_id = get_default_partition(context, formsemestre_id)[
|
partition_id = get_default_partition(formsemestre_id)["partition_id"]
|
||||||
"partition_id"
|
|
||||||
]
|
|
||||||
except ScoException:
|
except ScoException:
|
||||||
log("creating default partition for %s" % formsemestre_id)
|
log("creating default partition for %s" % formsemestre_id)
|
||||||
partition_id = partition_create(
|
partition_id = partition_create(
|
||||||
context, formsemestre_id, default=True, redirect=False
|
formsemestre_id, default=True, redirect=False
|
||||||
)
|
)
|
||||||
group_id = createGroup(context, partition_id, default=True)
|
group_id = createGroup(partition_id, default=True)
|
||||||
return group_id
|
return group_id
|
||||||
# debug check
|
# debug check
|
||||||
if len(r) != 1:
|
if len(r) != 1:
|
||||||
@ -233,7 +228,7 @@ def get_default_group(formsemestre_id, fix_if_missing=False):
|
|||||||
return group_id
|
return group_id
|
||||||
|
|
||||||
|
|
||||||
def get_sem_groups(context, formsemestre_id):
|
def get_sem_groups(formsemestre_id):
|
||||||
"""Returns groups for this sem (in all partitions)."""
|
"""Returns groups for this sem (in all partitions)."""
|
||||||
return ndb.SimpleDictFetch(
|
return ndb.SimpleDictFetch(
|
||||||
"""SELECT gd.id AS group_id, p.id AS partition_id, gd.*, p.*
|
"""SELECT gd.id AS group_id, p.id AS partition_id, gd.*, p.*
|
||||||
@ -245,7 +240,7 @@ def get_sem_groups(context, formsemestre_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_group_members(context, group_id, etat=None):
|
def get_group_members(group_id, etat=None):
|
||||||
"""Liste des etudiants d'un groupe.
|
"""Liste des etudiants d'un groupe.
|
||||||
Si etat, filtre selon l'état de l'inscription
|
Si etat, filtre selon l'état de l'inscription
|
||||||
Trié par nom_usuel (ou nom) puis prénom
|
Trié par nom_usuel (ou nom) puis prénom
|
||||||
@ -279,14 +274,14 @@ def get_group_members(context, group_id, etat=None):
|
|||||||
|
|
||||||
|
|
||||||
# obsolete: sco_groups_view.DisplayedGroupsInfos
|
# obsolete: sco_groups_view.DisplayedGroupsInfos
|
||||||
# def get_groups_members(context, group_ids, etat=None):
|
# def get_groups_members(group_ids, etat=None):
|
||||||
# """Liste les étudiants d'une liste de groupes
|
# """Liste les étudiants d'une liste de groupes
|
||||||
# chaque étudiant n'apparait qu'une seule fois dans le résultat.
|
# chaque étudiant n'apparait qu'une seule fois dans le résultat.
|
||||||
# La liste est triée par nom / prenom
|
# La liste est triée par nom / prenom
|
||||||
# """
|
# """
|
||||||
# D = {} # { etudid : etud }
|
# D = {} # { etudid : etud }
|
||||||
# for group_id in group_ids:
|
# for group_id in group_ids:
|
||||||
# members = get_group_members(context, group_id, etat=etat)
|
# members = get_group_members(group_id, etat=etat)
|
||||||
# for m in members:
|
# for m in members:
|
||||||
# D[m['etudid']] = m
|
# D[m['etudid']] = m
|
||||||
# r = D.values()
|
# r = D.values()
|
||||||
@ -295,15 +290,15 @@ def get_group_members(context, group_id, etat=None):
|
|||||||
# return r
|
# return r
|
||||||
|
|
||||||
|
|
||||||
def get_group_infos(context, group_id, etat=None): # was _getlisteetud
|
def get_group_infos(group_id, etat=None): # was _getlisteetud
|
||||||
"""legacy code: used by group_list and trombino"""
|
"""legacy code: used by group_list and trombino"""
|
||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
group = get_group(context, group_id)
|
group = get_group(group_id)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, group["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(group["formsemestre_id"])
|
||||||
|
|
||||||
members = get_group_members(context, group_id, etat=etat)
|
members = get_group_members(group_id, etat=etat)
|
||||||
# add human readable description of state:
|
# add human readable description of state:
|
||||||
nbdem = 0
|
nbdem = 0
|
||||||
for t in members:
|
for t in members:
|
||||||
@ -333,7 +328,7 @@ def get_group_infos(context, group_id, etat=None): # was _getlisteetud
|
|||||||
t["etath"] = t["etat"]
|
t["etath"] = t["etat"]
|
||||||
# Add membership for all partitions, 'partition_id' : group
|
# Add membership for all partitions, 'partition_id' : group
|
||||||
for etud in members: # long: comment eviter ces boucles ?
|
for etud in members: # long: comment eviter ces boucles ?
|
||||||
etud_add_group_infos(context, etud, sem)
|
etud_add_group_infos(etud, sem)
|
||||||
|
|
||||||
if group["group_name"] != None:
|
if group["group_name"] != None:
|
||||||
group_tit = "%s %s" % (group["partition_name"], group["group_name"])
|
group_tit = "%s %s" % (group["partition_name"], group["group_name"])
|
||||||
@ -343,19 +338,19 @@ def get_group_infos(context, group_id, etat=None): # was _getlisteetud
|
|||||||
return members, group, group_tit, sem, nbdem
|
return members, group, group_tit, sem, nbdem
|
||||||
|
|
||||||
|
|
||||||
def get_group_other_partitions(context, group):
|
def get_group_other_partitions(group):
|
||||||
"""Liste des partitions du même semestre que ce groupe,
|
"""Liste des partitions du même semestre que ce groupe,
|
||||||
sans celle qui contient ce groupe.
|
sans celle qui contient ce groupe.
|
||||||
"""
|
"""
|
||||||
other_partitions = [
|
other_partitions = [
|
||||||
p
|
p
|
||||||
for p in get_partitions_list(context, group["formsemestre_id"])
|
for p in get_partitions_list(group["formsemestre_id"])
|
||||||
if p["partition_id"] != group["partition_id"] and p["partition_name"]
|
if p["partition_id"] != group["partition_id"] and p["partition_name"]
|
||||||
]
|
]
|
||||||
return other_partitions
|
return other_partitions
|
||||||
|
|
||||||
|
|
||||||
def get_etud_groups(context, etudid, sem, exclude_default=False):
|
def get_etud_groups(etudid, sem, exclude_default=False):
|
||||||
"""Infos sur groupes de l'etudiant dans ce semestre
|
"""Infos sur groupes de l'etudiant dans ce semestre
|
||||||
[ group + partition_name ]
|
[ group + partition_name ]
|
||||||
"""
|
"""
|
||||||
@ -375,23 +370,23 @@ def get_etud_groups(context, etudid, sem, exclude_default=False):
|
|||||||
return _sortgroups(groups)
|
return _sortgroups(groups)
|
||||||
|
|
||||||
|
|
||||||
def get_etud_main_group(context, etudid, sem):
|
def get_etud_main_group(etudid, sem):
|
||||||
"""Return main group (the first one) for etud, or default one if no groups"""
|
"""Return main group (the first one) for etud, or default one if no groups"""
|
||||||
groups = get_etud_groups(context, etudid, sem, exclude_default=True)
|
groups = get_etud_groups(etudid, sem, exclude_default=True)
|
||||||
if groups:
|
if groups:
|
||||||
return groups[0]
|
return groups[0]
|
||||||
else:
|
else:
|
||||||
return get_group(context, get_default_group(sem["formsemestre_id"]))
|
return get_group(get_default_group(sem["formsemestre_id"]))
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_get_main_partition(context, formsemestre_id):
|
def formsemestre_get_main_partition(formsemestre_id):
|
||||||
"""Return main partition (the first one) for sem, or default one if no groups
|
"""Return main partition (the first one) for sem, or default one if no groups
|
||||||
(rappel: default == tous, main == principale (groupes TD habituellement)
|
(rappel: default == tous, main == principale (groupes TD habituellement)
|
||||||
"""
|
"""
|
||||||
return get_partitions_list(context, formsemestre_id, with_default=True)[0]
|
return get_partitions_list(formsemestre_id, with_default=True)[0]
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_get_etud_groupnames(context, formsemestre_id, attr="group_name"):
|
def formsemestre_get_etud_groupnames(formsemestre_id, attr="group_name"):
|
||||||
"""Recupere les groupes de tous les etudiants d'un semestre
|
"""Recupere les groupes de tous les etudiants d'un semestre
|
||||||
{ etudid : { partition_id : group_name }} (attr=group_name or group_id)
|
{ etudid : { partition_id : group_name }} (attr=group_name or group_id)
|
||||||
"""
|
"""
|
||||||
@ -418,7 +413,7 @@ def formsemestre_get_etud_groupnames(context, formsemestre_id, attr="group_name"
|
|||||||
return R
|
return R
|
||||||
|
|
||||||
|
|
||||||
def etud_add_group_infos(context, etud, sem, sep=" "):
|
def etud_add_group_infos(etud, sem, sep=" "):
|
||||||
"""Add informations on partitions and group memberships to etud (a dict with an etudid)"""
|
"""Add informations on partitions and group memberships to etud (a dict with an etudid)"""
|
||||||
etud[
|
etud[
|
||||||
"partitions"
|
"partitions"
|
||||||
@ -457,7 +452,7 @@ def etud_add_group_infos(context, etud, sem, sep=" "):
|
|||||||
return etud
|
return etud
|
||||||
|
|
||||||
|
|
||||||
def get_etud_groups_in_partition(context, partition_id):
|
def get_etud_groups_in_partition(partition_id):
|
||||||
"""Returns { etudid : group }, with all students in this partition"""
|
"""Returns { etudid : group }, with all students in this partition"""
|
||||||
infos = ndb.SimpleDictFetch(
|
infos = ndb.SimpleDictFetch(
|
||||||
"""SELECT gd.id AS group_id, gd.*, etudid
|
"""SELECT gd.id AS group_id, gd.*, etudid
|
||||||
@ -473,19 +468,19 @@ def get_etud_groups_in_partition(context, partition_id):
|
|||||||
return R
|
return R
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_partition_list(context, formsemestre_id, format="xml", REQUEST=None):
|
def formsemestre_partition_list(formsemestre_id, format="xml", REQUEST=None):
|
||||||
"""Get partitions and groups in this semestre
|
"""Get partitions and groups in this semestre
|
||||||
Supported formats: xml, json
|
Supported formats: xml, json
|
||||||
"""
|
"""
|
||||||
partitions = get_partitions_list(context, formsemestre_id, with_default=True)
|
partitions = get_partitions_list(formsemestre_id, with_default=True)
|
||||||
# Ajoute les groupes
|
# Ajoute les groupes
|
||||||
for p in partitions:
|
for p in partitions:
|
||||||
p["group"] = get_partition_groups(context, p)
|
p["group"] = get_partition_groups(p)
|
||||||
return scu.sendResult(REQUEST, partitions, name="partition", format=format)
|
return scu.sendResult(REQUEST, partitions, name="partition", format=format)
|
||||||
|
|
||||||
|
|
||||||
# Encore utilisé par groupmgr.js
|
# Encore utilisé par groupmgr.js
|
||||||
def XMLgetGroupsInPartition(context, partition_id, REQUEST=None): # was XMLgetGroupesTD
|
def XMLgetGroupsInPartition(partition_id, REQUEST=None): # was XMLgetGroupesTD
|
||||||
"""
|
"""
|
||||||
Deprecated: use group_list
|
Deprecated: use group_list
|
||||||
Liste des étudiants dans chaque groupe de cette partition.
|
Liste des étudiants dans chaque groupe de cette partition.
|
||||||
@ -498,10 +493,10 @@ def XMLgetGroupsInPartition(context, partition_id, REQUEST=None): # was XMLgetG
|
|||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
groups = get_partition_groups(context, partition)
|
groups = get_partition_groups(partition)
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > inscrdict
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > inscrdict
|
||||||
etuds_set = set(nt.inscrdict)
|
etuds_set = set(nt.inscrdict)
|
||||||
# XML response:
|
# XML response:
|
||||||
@ -518,7 +513,7 @@ def XMLgetGroupsInPartition(context, partition_id, REQUEST=None): # was XMLgetG
|
|||||||
group_name=group["group_name"],
|
group_name=group["group_name"],
|
||||||
)
|
)
|
||||||
x_response.append(x_group)
|
x_response.append(x_group)
|
||||||
for e in get_group_members(context, group["group_id"]):
|
for e in get_group_members(group["group_id"]):
|
||||||
etud = sco_etud.get_etud_info(etudid=e["etudid"], filled=1)[0]
|
etud = sco_etud.get_etud_info(etudid=e["etudid"], filled=1)[0]
|
||||||
x_group.append(
|
x_group.append(
|
||||||
Element(
|
Element(
|
||||||
@ -581,7 +576,7 @@ def comp_origin(etud, cur_sem):
|
|||||||
return "" # parcours normal, ne le signale pas
|
return "" # parcours normal, ne le signale pas
|
||||||
|
|
||||||
|
|
||||||
def set_group(context, etudid, group_id):
|
def set_group(etudid, group_id):
|
||||||
"""Inscrit l'étudiant au groupe.
|
"""Inscrit l'étudiant au groupe.
|
||||||
Return True if ok, False si deja inscrit.
|
Return True if ok, False si deja inscrit.
|
||||||
Warning: don't check if group_id exists (the caller should check).
|
Warning: don't check if group_id exists (the caller should check).
|
||||||
@ -606,14 +601,12 @@ def set_group(context, etudid, group_id):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def change_etud_group_in_partition(
|
def change_etud_group_in_partition(etudid, group_id, partition=None, REQUEST=None):
|
||||||
context, etudid, group_id, partition=None, REQUEST=None
|
|
||||||
):
|
|
||||||
"""Inscrit etud au groupe de cette partition, et le desinscrit d'autres groupes de cette partition."""
|
"""Inscrit etud au groupe de cette partition, et le desinscrit d'autres groupes de cette partition."""
|
||||||
log("change_etud_group_in_partition: etudid=%s group_id=%s" % (etudid, group_id))
|
log("change_etud_group_in_partition: etudid=%s group_id=%s" % (etudid, group_id))
|
||||||
|
|
||||||
# 0- La partition
|
# 0- La partition
|
||||||
group = get_group(context, group_id)
|
group = get_group(group_id)
|
||||||
if partition:
|
if partition:
|
||||||
# verifie que le groupe est bien dans cette partition:
|
# verifie que le groupe est bien dans cette partition:
|
||||||
if group["partition_id"] != partition["partition_id"]:
|
if group["partition_id"] != partition["partition_id"]:
|
||||||
@ -622,7 +615,7 @@ def change_etud_group_in_partition(
|
|||||||
% (group_id, partition["partition_id"])
|
% (group_id, partition["partition_id"])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
partition = get_partition(context, group["partition_id"])
|
partition = get_partition(group["partition_id"])
|
||||||
# 1- Supprime membership dans cette partition
|
# 1- Supprime membership dans cette partition
|
||||||
ndb.SimpleQuery(
|
ndb.SimpleQuery(
|
||||||
"""DELETE FROM group_membership gm
|
"""DELETE FROM group_membership gm
|
||||||
@ -635,7 +628,7 @@ def change_etud_group_in_partition(
|
|||||||
{"etudid": etudid, "partition_id": partition["partition_id"]},
|
{"etudid": etudid, "partition_id": partition["partition_id"]},
|
||||||
)
|
)
|
||||||
# 2- associe au nouveau groupe
|
# 2- associe au nouveau groupe
|
||||||
set_group(context, etudid, group_id)
|
set_group(etudid, group_id)
|
||||||
|
|
||||||
# 3- log
|
# 3- log
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
@ -656,7 +649,6 @@ def change_etud_group_in_partition(
|
|||||||
|
|
||||||
|
|
||||||
def setGroups(
|
def setGroups(
|
||||||
context,
|
|
||||||
partition_id,
|
partition_id,
|
||||||
groupsLists="", # members of each existing group
|
groupsLists="", # members of each existing group
|
||||||
groupsToCreate="", # name and members of new groups
|
groupsToCreate="", # name and members of new groups
|
||||||
@ -670,7 +662,7 @@ def setGroups(
|
|||||||
"""
|
"""
|
||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -678,23 +670,21 @@ def setGroups(
|
|||||||
log("groupsLists=%s" % groupsLists)
|
log("groupsLists=%s" % groupsLists)
|
||||||
log("groupsToCreate=%s" % groupsToCreate)
|
log("groupsToCreate=%s" % groupsToCreate)
|
||||||
log("groupsToDelete=%s" % groupsToDelete)
|
log("groupsToDelete=%s" % groupsToDelete)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise AccessDenied("Modification impossible: semestre verrouillé")
|
raise AccessDenied("Modification impossible: semestre verrouillé")
|
||||||
|
|
||||||
groupsToDelete = [g for g in groupsToDelete.split(";") if g]
|
groupsToDelete = [g for g in groupsToDelete.split(";") if g]
|
||||||
|
|
||||||
etud_groups = formsemestre_get_etud_groupnames(
|
etud_groups = formsemestre_get_etud_groupnames(formsemestre_id, attr="group_id")
|
||||||
context, formsemestre_id, attr="group_id"
|
|
||||||
)
|
|
||||||
for line in groupsLists.split("\n"): # for each group_id (one per line)
|
for line in groupsLists.split("\n"): # for each group_id (one per line)
|
||||||
fs = line.split(";")
|
fs = line.split(";")
|
||||||
group_id = fs[0].strip()
|
group_id = fs[0].strip()
|
||||||
if not group_id:
|
if not group_id:
|
||||||
continue
|
continue
|
||||||
group = get_group(context, group_id)
|
group = get_group(group_id)
|
||||||
# Anciens membres du groupe:
|
# Anciens membres du groupe:
|
||||||
old_members = get_group_members(context, group_id)
|
old_members = get_group_members(group_id)
|
||||||
old_members_set = set([x["etudid"] for x in old_members])
|
old_members_set = set([x["etudid"] for x in old_members])
|
||||||
# Place dans ce groupe les etudiants indiqués:
|
# Place dans ce groupe les etudiants indiqués:
|
||||||
for etudid_str in fs[1:-1]:
|
for etudid_str in fs[1:-1]:
|
||||||
@ -707,7 +697,7 @@ def setGroups(
|
|||||||
group_id != etud_groups[etudid].get(partition_id, "")
|
group_id != etud_groups[etudid].get(partition_id, "")
|
||||||
): # pas le meme groupe qu'actuel
|
): # pas le meme groupe qu'actuel
|
||||||
change_etud_group_in_partition(
|
change_etud_group_in_partition(
|
||||||
context, etudid, group_id, partition, REQUEST=REQUEST
|
etudid, group_id, partition, REQUEST=REQUEST
|
||||||
)
|
)
|
||||||
# Retire les anciens membres:
|
# Retire les anciens membres:
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
@ -729,7 +719,7 @@ def setGroups(
|
|||||||
|
|
||||||
# Supprime les groupes indiqués comme supprimés:
|
# Supprime les groupes indiqués comme supprimés:
|
||||||
for group_id in groupsToDelete:
|
for group_id in groupsToDelete:
|
||||||
suppressGroup(context, group_id, partition_id=partition_id, REQUEST=REQUEST)
|
suppressGroup(group_id, partition_id=partition_id, REQUEST=REQUEST)
|
||||||
|
|
||||||
# Crée les nouveaux groupes
|
# Crée les nouveaux groupes
|
||||||
for line in groupsToCreate.split("\n"): # for each group_name (one per line)
|
for line in groupsToCreate.split("\n"): # for each group_name (one per line)
|
||||||
@ -741,12 +731,10 @@ def setGroups(
|
|||||||
# group_name = six.text_type(group_name, "utf-8").encode(
|
# group_name = six.text_type(group_name, "utf-8").encode(
|
||||||
# scu.SCO_ENCODING
|
# scu.SCO_ENCODING
|
||||||
# ) # #py3 #sco8
|
# ) # #py3 #sco8
|
||||||
group_id = createGroup(context, partition_id, group_name)
|
group_id = createGroup(partition_id, group_name)
|
||||||
# Place dans ce groupe les etudiants indiqués:
|
# Place dans ce groupe les etudiants indiqués:
|
||||||
for etudid in fs[1:-1]:
|
for etudid in fs[1:-1]:
|
||||||
change_etud_group_in_partition(
|
change_etud_group_in_partition(etudid, group_id, partition, REQUEST=REQUEST)
|
||||||
context, etudid, group_id, partition, REQUEST=REQUEST
|
|
||||||
)
|
|
||||||
|
|
||||||
REQUEST.RESPONSE.setHeader("content-type", scu.XML_MIMETYPE)
|
REQUEST.RESPONSE.setHeader("content-type", scu.XML_MIMETYPE)
|
||||||
return (
|
return (
|
||||||
@ -754,9 +742,9 @@ def setGroups(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def createGroup(context, partition_id, group_name="", default=False):
|
def createGroup(partition_id, group_name="", default=False):
|
||||||
"""Create a new group in this partition"""
|
"""Create a new group in this partition"""
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -766,9 +754,7 @@ def createGroup(context, partition_id, group_name="", default=False):
|
|||||||
if not group_name and not default:
|
if not group_name and not default:
|
||||||
raise ValueError("invalid group name: ()")
|
raise ValueError("invalid group name: ()")
|
||||||
# checkGroupName(group_name)
|
# checkGroupName(group_name)
|
||||||
if group_name in [
|
if group_name in [g["group_name"] for g in get_partition_groups(partition)]:
|
||||||
g["group_name"] for g in get_partition_groups(context, partition)
|
|
||||||
]:
|
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"group_name %s already exists in partition" % group_name
|
"group_name %s already exists in partition" % group_name
|
||||||
) # XXX FIX: incorrect error handling (in AJAX)
|
) # XXX FIX: incorrect error handling (in AJAX)
|
||||||
@ -781,31 +767,30 @@ def createGroup(context, partition_id, group_name="", default=False):
|
|||||||
return group_id
|
return group_id
|
||||||
|
|
||||||
|
|
||||||
def suppressGroup(context, group_id, partition_id=None, REQUEST=None):
|
def suppressGroup(group_id, partition_id=None, REQUEST=None):
|
||||||
"""form suppression d'un groupe.
|
"""form suppression d'un groupe.
|
||||||
(ne desinscrit pas les etudiants, change juste leur
|
(ne desinscrit pas les etudiants, change juste leur
|
||||||
affectation aux groupes)
|
affectation aux groupes)
|
||||||
partition_id est optionnel et ne sert que pour verifier que le groupe
|
partition_id est optionnel et ne sert que pour verifier que le groupe
|
||||||
est bien dans cette partition.
|
est bien dans cette partition.
|
||||||
"""
|
"""
|
||||||
group = get_group(context, group_id)
|
group = get_group(group_id)
|
||||||
if partition_id:
|
if partition_id:
|
||||||
if partition_id != group["partition_id"]:
|
if partition_id != group["partition_id"]:
|
||||||
raise ValueError("inconsistent partition/group")
|
raise ValueError("inconsistent partition/group")
|
||||||
else:
|
else:
|
||||||
partition_id = group["partition_id"]
|
partition_id = group["partition_id"]
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
if not sco_permissions_check.can_change_groups(partition["formsemestre_id"]):
|
if not sco_permissions_check.can_change_groups(partition["formsemestre_id"]):
|
||||||
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 !")
|
||||||
log(
|
log(
|
||||||
"suppressGroup: group_id=%s group_name=%s partition_name=%s"
|
"suppressGroup: group_id=%s group_name=%s partition_name=%s"
|
||||||
% (group_id, group["group_name"], partition["partition_name"])
|
% (group_id, group["group_name"], partition["partition_name"])
|
||||||
)
|
)
|
||||||
group_delete(context, group)
|
group_delete(group)
|
||||||
|
|
||||||
|
|
||||||
def partition_create(
|
def partition_create(
|
||||||
context,
|
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
partition_name="",
|
partition_name="",
|
||||||
default=False,
|
default=False,
|
||||||
@ -824,7 +809,7 @@ def partition_create(
|
|||||||
redirect = int(redirect)
|
redirect = int(redirect)
|
||||||
# checkGroupName(partition_name)
|
# checkGroupName(partition_name)
|
||||||
if partition_name in [
|
if partition_name in [
|
||||||
p["partition_name"] for p in get_partitions_list(context, formsemestre_id)
|
p["partition_name"] for p in get_partitions_list(formsemestre_id)
|
||||||
]:
|
]:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
"Il existe déjà une partition %s dans ce semestre" % partition_name
|
"Il existe déjà une partition %s dans ce semestre" % partition_name
|
||||||
@ -858,12 +843,12 @@ def getArrowIconsTags():
|
|||||||
return arrow_up, arrow_down, arrow_none
|
return arrow_up, arrow_down, arrow_none
|
||||||
|
|
||||||
|
|
||||||
def editPartitionForm(context, formsemestre_id=None, REQUEST=None):
|
def editPartitionForm(formsemestre_id=None, REQUEST=None):
|
||||||
"""Form to create/suppress partitions"""
|
"""Form to create/suppress partitions"""
|
||||||
# ad-hoc form
|
# ad-hoc form
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
partitions = get_partitions_list(context, formsemestre_id)
|
partitions = get_partitions_list(formsemestre_id)
|
||||||
arrow_up, arrow_down, arrow_none = getArrowIconsTags()
|
arrow_up, arrow_down, arrow_none = getArrowIconsTags()
|
||||||
suppricon = scu.icontag(
|
suppricon = scu.icontag(
|
||||||
"delete_small_img", border="0", alt="supprimer", title="Supprimer"
|
"delete_small_img", border="0", alt="supprimer", title="Supprimer"
|
||||||
@ -918,9 +903,9 @@ def editPartitionForm(context, formsemestre_id=None, REQUEST=None):
|
|||||||
"%s (%d)"
|
"%s (%d)"
|
||||||
% (
|
% (
|
||||||
group["group_name"],
|
group["group_name"],
|
||||||
len(get_group_members(context, group["group_id"])),
|
len(get_group_members(group["group_id"])),
|
||||||
)
|
)
|
||||||
for group in get_partition_groups(context, p)
|
for group in get_partition_groups(p)
|
||||||
]
|
]
|
||||||
H.append(", ".join(lg))
|
H.append(", ".join(lg))
|
||||||
H.append(
|
H.append(
|
||||||
@ -986,12 +971,12 @@ def editPartitionForm(context, formsemestre_id=None, REQUEST=None):
|
|||||||
return "\n".join(H) + html_sco_header.sco_footer()
|
return "\n".join(H) + html_sco_header.sco_footer()
|
||||||
|
|
||||||
|
|
||||||
def partition_set_attr(context, partition_id, attr, value, REQUEST=None):
|
def partition_set_attr(partition_id, attr, value, REQUEST=None):
|
||||||
"""Set partition attribute: bul_show_rank or show_in_lists"""
|
"""Set partition attribute: bul_show_rank or show_in_lists"""
|
||||||
if attr not in {"bul_show_rank", "show_in_lists"}:
|
if attr not in {"bul_show_rank", "show_in_lists"}:
|
||||||
raise ValueError("invalid partition attribute: %s" % attr)
|
raise ValueError("invalid partition attribute: %s" % attr)
|
||||||
|
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -1010,11 +995,11 @@ def partition_set_attr(context, partition_id, attr, value, REQUEST=None):
|
|||||||
|
|
||||||
|
|
||||||
def partition_delete(
|
def partition_delete(
|
||||||
context, partition_id, REQUEST=None, force=False, redirect=1, dialog_confirmed=False
|
partition_id, REQUEST=None, force=False, redirect=1, dialog_confirmed=False
|
||||||
):
|
):
|
||||||
"""Suppress a partition (and all groups within).
|
"""Suppress a partition (and all groups within).
|
||||||
default partition cannot be suppressed (unless force)"""
|
default partition cannot be suppressed (unless force)"""
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -1023,7 +1008,7 @@ def partition_delete(
|
|||||||
raise ValueError("cannot suppress this partition")
|
raise ValueError("cannot suppress this partition")
|
||||||
redirect = int(redirect)
|
redirect = int(redirect)
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
groups = get_partition_groups(context, partition)
|
groups = get_partition_groups(partition)
|
||||||
|
|
||||||
if not dialog_confirmed:
|
if not dialog_confirmed:
|
||||||
if groups:
|
if groups:
|
||||||
@ -1043,7 +1028,7 @@ def partition_delete(
|
|||||||
log("partition_delete: partition_id=%s" % partition_id)
|
log("partition_delete: partition_id=%s" % partition_id)
|
||||||
# 1- groups
|
# 1- groups
|
||||||
for group in groups:
|
for group in groups:
|
||||||
group_delete(context, group, force=force)
|
group_delete(group, force=force)
|
||||||
# 2- partition
|
# 2- partition
|
||||||
partitionEditor.delete(cnx, partition_id)
|
partitionEditor.delete(cnx, partition_id)
|
||||||
|
|
||||||
@ -1054,9 +1039,9 @@ def partition_delete(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def partition_move(context, partition_id, after=0, REQUEST=None, redirect=1):
|
def partition_move(partition_id, after=0, REQUEST=None, redirect=1):
|
||||||
"""Move before/after previous one (decrement/increment numero)"""
|
"""Move before/after previous one (decrement/increment numero)"""
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -1065,7 +1050,7 @@ def partition_move(context, partition_id, after=0, REQUEST=None, redirect=1):
|
|||||||
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"')
|
||||||
others = get_partitions_list(context, formsemestre_id)
|
others = get_partitions_list(formsemestre_id)
|
||||||
if len(others) > 1:
|
if len(others) > 1:
|
||||||
pidx = [p["partition_id"] for p in others].index(partition_id)
|
pidx = [p["partition_id"] for p in others].index(partition_id)
|
||||||
log("partition_move: after=%s pidx=%s" % (after, pidx))
|
log("partition_move: after=%s pidx=%s" % (after, pidx))
|
||||||
@ -1089,9 +1074,9 @@ def partition_move(context, partition_id, after=0, REQUEST=None, redirect=1):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def partition_rename(context, partition_id, REQUEST=None):
|
def partition_rename(partition_id, REQUEST=None):
|
||||||
"""Form to rename a partition"""
|
"""Form to rename a partition"""
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -1129,16 +1114,16 @@ def partition_rename(context, partition_id, REQUEST=None):
|
|||||||
else:
|
else:
|
||||||
# form submission
|
# form submission
|
||||||
return partition_set_name(
|
return partition_set_name(
|
||||||
context, partition_id, tf[2]["partition_name"], REQUEST=REQUEST, redirect=1
|
partition_id, tf[2]["partition_name"], REQUEST=REQUEST, redirect=1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def partition_set_name(context, partition_id, partition_name, REQUEST=None, redirect=1):
|
def partition_set_name(partition_id, partition_name, REQUEST=None, redirect=1):
|
||||||
"""Set partition name"""
|
"""Set partition name"""
|
||||||
partition_name = partition_name.strip()
|
partition_name = partition_name.strip()
|
||||||
if not partition_name:
|
if not partition_name:
|
||||||
raise ValueError("partition name must be non empty")
|
raise ValueError("partition name must be non empty")
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
if partition["partition_name"] is None:
|
if partition["partition_name"] is None:
|
||||||
raise ValueError("can't set a name to default partition")
|
raise ValueError("can't set a name to default partition")
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
@ -1171,13 +1156,13 @@ def partition_set_name(context, partition_id, partition_name, REQUEST=None, redi
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def group_set_name(context, group_id, group_name, REQUEST=None, redirect=1):
|
def group_set_name(group_id, group_name, REQUEST=None, redirect=1):
|
||||||
"""Set group name"""
|
"""Set group name"""
|
||||||
if group_name:
|
if group_name:
|
||||||
group_name = group_name.strip()
|
group_name = group_name.strip()
|
||||||
if not group_name:
|
if not group_name:
|
||||||
raise ScoValueError("nom de groupe vide !")
|
raise ScoValueError("nom de groupe vide !")
|
||||||
group = get_group(context, group_id)
|
group = get_group(group_id)
|
||||||
if group["group_name"] is None:
|
if group["group_name"] is None:
|
||||||
raise ValueError("can't set a name to default group")
|
raise ValueError("can't set a name to default group")
|
||||||
formsemestre_id = group["formsemestre_id"]
|
formsemestre_id = group["formsemestre_id"]
|
||||||
@ -1198,9 +1183,9 @@ def group_set_name(context, group_id, group_name, REQUEST=None, redirect=1):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def group_rename(context, group_id, REQUEST=None):
|
def group_rename(group_id, REQUEST=None):
|
||||||
"""Form to rename a group"""
|
"""Form to rename a group"""
|
||||||
group = get_group(context, group_id)
|
group = get_group(group_id)
|
||||||
formsemestre_id = group["formsemestre_id"]
|
formsemestre_id = group["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
@ -1242,17 +1227,17 @@ def group_rename(context, group_id, REQUEST=None):
|
|||||||
else:
|
else:
|
||||||
# form submission
|
# form submission
|
||||||
return group_set_name(
|
return group_set_name(
|
||||||
context, group_id, tf[2]["group_name"], REQUEST=REQUEST, redirect=1
|
group_id, tf[2]["group_name"], REQUEST=REQUEST, redirect=1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def groups_auto_repartition(context, partition_id=None, REQUEST=None):
|
def groups_auto_repartition(partition_id=None, REQUEST=None):
|
||||||
"""Reparti les etudiants dans des groupes dans une partition, en respectant le niveau
|
"""Reparti les etudiants dans des groupes dans une partition, en respectant le niveau
|
||||||
et la mixité.
|
et la mixité.
|
||||||
"""
|
"""
|
||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
partition = get_partition(context, partition_id)
|
partition = get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
# renvoie sur page édition groupes
|
# renvoie sur page édition groupes
|
||||||
dest_url = url_for(
|
dest_url = url_for(
|
||||||
@ -1260,7 +1245,7 @@ def groups_auto_repartition(context, partition_id=None, REQUEST=None):
|
|||||||
)
|
)
|
||||||
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
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 !")
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
descr = [
|
descr = [
|
||||||
("partition_id", {"input_type": "hidden"}),
|
("partition_id", {"input_type": "hidden"}),
|
||||||
@ -1308,8 +1293,8 @@ def groups_auto_repartition(context, partition_id=None, REQUEST=None):
|
|||||||
groupNames = tf[2]["groupNames"]
|
groupNames = tf[2]["groupNames"]
|
||||||
group_names = sorted(set([x.strip() for x in groupNames.split(",")]))
|
group_names = sorted(set([x.strip() for x in groupNames.split(",")]))
|
||||||
# Détruit les groupes existant de cette partition
|
# Détruit les groupes existant de cette partition
|
||||||
for old_group in get_partition_groups(context, partition):
|
for old_group in get_partition_groups(partition):
|
||||||
group_delete(context, old_group)
|
group_delete(old_group)
|
||||||
# Crée les nouveaux groupes
|
# Crée les nouveaux groupes
|
||||||
group_ids = []
|
group_ids = []
|
||||||
for group_name in group_names:
|
for group_name in group_names:
|
||||||
@ -1318,7 +1303,7 @@ def groups_auto_repartition(context, partition_id=None, REQUEST=None):
|
|||||||
# except:
|
# except:
|
||||||
# H.append('<p class="warning">Nom de groupe invalide: %s</p>'%group_name)
|
# H.append('<p class="warning">Nom de groupe invalide: %s</p>'%group_name)
|
||||||
# return '\n'.join(H) + tf[1] + html_sco_header.sco_footer( REQUEST)
|
# return '\n'.join(H) + tf[1] + html_sco_header.sco_footer( REQUEST)
|
||||||
group_ids.append(createGroup(context, partition_id, group_name))
|
group_ids.append(createGroup(partition_id, group_name))
|
||||||
#
|
#
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > identdict
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > identdict
|
||||||
identdict = nt.identdict
|
identdict = nt.identdict
|
||||||
@ -1327,7 +1312,7 @@ def groups_auto_repartition(context, partition_id=None, REQUEST=None):
|
|||||||
listes = {}
|
listes = {}
|
||||||
for civilite in civilites:
|
for civilite in civilites:
|
||||||
listes[civilite] = [
|
listes[civilite] = [
|
||||||
(get_prev_moy(context, x["etudid"], formsemestre_id), x["etudid"])
|
(_get_prev_moy(x["etudid"], formsemestre_id), x["etudid"])
|
||||||
for x in identdict.values()
|
for x in identdict.values()
|
||||||
if x["civilite"] == civilite
|
if x["civilite"] == civilite
|
||||||
]
|
]
|
||||||
@ -1345,13 +1330,13 @@ def groups_auto_repartition(context, partition_id=None, REQUEST=None):
|
|||||||
group_id = group_ids[igroup]
|
group_id = group_ids[igroup]
|
||||||
igroup = (igroup + 1) % nbgroups
|
igroup = (igroup + 1) % nbgroups
|
||||||
change_etud_group_in_partition(
|
change_etud_group_in_partition(
|
||||||
context, etudid, group_id, partition, REQUEST=REQUEST
|
etudid, group_id, partition, REQUEST=REQUEST
|
||||||
)
|
)
|
||||||
log("%s in group %s" % (etudid, group_id))
|
log("%s in group %s" % (etudid, group_id))
|
||||||
return flask.redirect(dest_url)
|
return flask.redirect(dest_url)
|
||||||
|
|
||||||
|
|
||||||
def get_prev_moy(context, etudid, formsemestre_id):
|
def _get_prev_moy(etudid, formsemestre_id):
|
||||||
"""Donne la derniere moyenne generale calculee pour cette étudiant,
|
"""Donne la derniere moyenne generale calculee pour cette étudiant,
|
||||||
ou 0 si on n'en trouve pas (nouvel inscrit,...).
|
ou 0 si on n'en trouve pas (nouvel inscrit,...).
|
||||||
"""
|
"""
|
||||||
@ -1361,7 +1346,7 @@ def get_prev_moy(context, etudid, formsemestre_id):
|
|||||||
if not info:
|
if not info:
|
||||||
raise ScoValueError("etudiant invalide: etudid=%s" % etudid)
|
raise ScoValueError("etudiant invalide: etudid=%s" % etudid)
|
||||||
etud = info[0]
|
etud = info[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
if Se.prev:
|
if Se.prev:
|
||||||
nt = sco_cache.NotesTableCache.get(
|
nt = sco_cache.NotesTableCache.get(
|
||||||
Se.prev["formsemestre_id"]
|
Se.prev["formsemestre_id"]
|
||||||
@ -1371,7 +1356,7 @@ def get_prev_moy(context, etudid, formsemestre_id):
|
|||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
|
|
||||||
def create_etapes_partition(context, formsemestre_id, partition_name="apo_etapes"):
|
def create_etapes_partition(formsemestre_id, partition_name="apo_etapes"):
|
||||||
"""Crée une partition "apo_etapes" avec un groupe par étape Apogée.
|
"""Crée une partition "apo_etapes" avec un groupe par étape Apogée.
|
||||||
Cette partition n'est crée que si plusieurs étapes différentes existent dans ce
|
Cette partition n'est crée que si plusieurs étapes différentes existent dans ce
|
||||||
semestre.
|
semestre.
|
||||||
@ -1382,10 +1367,10 @@ def create_etapes_partition(context, formsemestre_id, partition_name="apo_etapes
|
|||||||
|
|
||||||
log("create_etapes_partition(%s)" % formsemestre_id)
|
log("create_etapes_partition(%s)" % formsemestre_id)
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
etapes = {i["etape"] for i in ins if i["etape"]}
|
etapes = {i["etape"] for i in ins if i["etape"]}
|
||||||
partitions = get_partitions_list(context, formsemestre_id, with_default=False)
|
partitions = get_partitions_list(formsemestre_id, with_default=False)
|
||||||
partition = None
|
partition = None
|
||||||
for p in partitions:
|
for p in partitions:
|
||||||
if p["partition_name"] == partition_name:
|
if p["partition_name"] == partition_name:
|
||||||
@ -1397,21 +1382,21 @@ def create_etapes_partition(context, formsemestre_id, partition_name="apo_etapes
|
|||||||
pid = partition["partition_id"]
|
pid = partition["partition_id"]
|
||||||
else:
|
else:
|
||||||
pid = partition_create(
|
pid = partition_create(
|
||||||
context, formsemestre_id, partition_name=partition_name, redirect=False
|
formsemestre_id, partition_name=partition_name, redirect=False
|
||||||
)
|
)
|
||||||
partition = get_partition(context, pid)
|
partition = get_partition(pid)
|
||||||
groups = get_partition_groups(context, partition)
|
groups = get_partition_groups(partition)
|
||||||
groups_by_names = {g["group_name"]: g for g in groups}
|
groups_by_names = {g["group_name"]: g for g in groups}
|
||||||
for etape in etapes:
|
for etape in etapes:
|
||||||
if not (etape in groups_by_names):
|
if not (etape in groups_by_names):
|
||||||
gid = createGroup(context, pid, etape)
|
gid = createGroup(pid, etape)
|
||||||
g = get_group(context, gid)
|
g = get_group(gid)
|
||||||
groups_by_names[etape] = g
|
groups_by_names[etape] = g
|
||||||
# Place les etudiants dans les groupes
|
# Place les etudiants dans les groupes
|
||||||
for i in ins:
|
for i in ins:
|
||||||
if i["etape"]:
|
if i["etape"]:
|
||||||
change_etud_group_in_partition(
|
change_etud_group_in_partition(
|
||||||
context, i["etudid"], groups_by_names[i["etape"]]["group_id"], partition
|
i["etudid"], groups_by_names[i["etape"]]["group_id"], partition
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1466,7 +1451,7 @@ def do_evaluation_listeetuds_groups(
|
|||||||
return [x[0] for x in res]
|
return [x[0] for x in res]
|
||||||
|
|
||||||
|
|
||||||
def do_evaluation_listegroupes(context, evaluation_id, include_default=False):
|
def do_evaluation_listegroupes(evaluation_id, include_default=False):
|
||||||
"""Donne la liste des groupes dans lesquels figurent des etudiants inscrits
|
"""Donne la liste des groupes dans lesquels figurent des etudiants inscrits
|
||||||
au module/semestre auquel appartient cette evaluation.
|
au module/semestre auquel appartient cette evaluation.
|
||||||
Si include_default, inclue aussi le groupe par defaut ('tous')
|
Si include_default, inclue aussi le groupe par defaut ('tous')
|
||||||
@ -1493,10 +1478,10 @@ def do_evaluation_listegroupes(context, evaluation_id, include_default=False):
|
|||||||
)
|
)
|
||||||
res = cursor.fetchall()
|
res = cursor.fetchall()
|
||||||
group_ids = [x[0] for x in res]
|
group_ids = [x[0] for x in res]
|
||||||
return listgroups(context, group_ids)
|
return listgroups(group_ids)
|
||||||
|
|
||||||
|
|
||||||
def listgroups(context, group_ids):
|
def listgroups(group_ids):
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
||||||
groups = []
|
groups = []
|
||||||
@ -1540,7 +1525,6 @@ def listgroups_abbrev(groups):
|
|||||||
|
|
||||||
# form_group_choice replaces formChoixGroupe
|
# form_group_choice replaces formChoixGroupe
|
||||||
def form_group_choice(
|
def form_group_choice(
|
||||||
context,
|
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
allow_none=True, # offre un choix vide dans chaque partition
|
allow_none=True, # offre un choix vide dans chaque partition
|
||||||
select_default=True, # Le groupe par defaut est mentionné (hidden).
|
select_default=True, # Le groupe par defaut est mentionné (hidden).
|
||||||
@ -1551,26 +1535,26 @@ def form_group_choice(
|
|||||||
"""
|
"""
|
||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if display_sem_title:
|
if display_sem_title:
|
||||||
sem_title = "%s: " % sem["titremois"]
|
sem_title = "%s: " % sem["titremois"]
|
||||||
else:
|
else:
|
||||||
sem_title = ""
|
sem_title = ""
|
||||||
#
|
#
|
||||||
H = ["""<table>"""]
|
H = ["""<table>"""]
|
||||||
for p in get_partitions_list(context, formsemestre_id):
|
for p in get_partitions_list(formsemestre_id):
|
||||||
if p["partition_name"] is None:
|
if p["partition_name"] is None:
|
||||||
if select_default:
|
if select_default:
|
||||||
H.append(
|
H.append(
|
||||||
'<input type="hidden" name="group_ids:list" value="%s"/>'
|
'<input type="hidden" name="group_ids:list" value="%s"/>'
|
||||||
% get_partition_groups(context, p)[0]["group_id"]
|
% get_partition_groups(p)[0]["group_id"]
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
H.append("<tr><td>Groupe de %(partition_name)s</td><td>" % p)
|
H.append("<tr><td>Groupe de %(partition_name)s</td><td>" % p)
|
||||||
H.append('<select name="group_ids:list">')
|
H.append('<select name="group_ids:list">')
|
||||||
if allow_none:
|
if allow_none:
|
||||||
H.append('<option value="">aucun</option>')
|
H.append('<option value="">aucun</option>')
|
||||||
for group in get_partition_groups(context, p):
|
for group in get_partition_groups(p):
|
||||||
H.append(
|
H.append(
|
||||||
'<option value="%s">%s %s</option>'
|
'<option value="%s">%s %s</option>'
|
||||||
% (group["group_id"], sem_title, group["group_name"])
|
% (group["group_id"], sem_title, group["group_name"])
|
||||||
@ -1596,8 +1580,8 @@ class GroupIdInferer(object):
|
|||||||
partition_name:group_name
|
partition_name:group_name
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, context, formsemestre_id):
|
def __init__(self, formsemestre_id):
|
||||||
groups = get_sem_groups(context, formsemestre_id)
|
groups = get_sem_groups(formsemestre_id)
|
||||||
self.name2group_id = {}
|
self.name2group_id = {}
|
||||||
self.partitionname2group_id = {}
|
self.partitionname2group_id = {}
|
||||||
for group in groups:
|
for group in groups:
|
||||||
|
@ -38,7 +38,7 @@ def affectGroups(context, partition_id, REQUEST=None):
|
|||||||
Permet aussi la creation et la suppression de groupes.
|
Permet aussi la creation et la suppression de groupes.
|
||||||
"""
|
"""
|
||||||
# Ported from DTML and adapted to new group management (nov 2009)
|
# Ported from DTML and adapted to new group management (nov 2009)
|
||||||
partition = sco_groups.get_partition(context, partition_id)
|
partition = sco_groups.get_partition(partition_id)
|
||||||
formsemestre_id = partition["formsemestre_id"]
|
formsemestre_id = partition["formsemestre_id"]
|
||||||
if not sco_groups.sco_permissions_check.can_change_groups(formsemestre_id):
|
if not sco_groups.sco_permissions_check.can_change_groups(formsemestre_id):
|
||||||
raise AccessDenied("vous n'avez pas la permission d'effectuer cette opération")
|
raise AccessDenied("vous n'avez pas la permission d'effectuer cette opération")
|
||||||
@ -73,9 +73,7 @@ Editer groupes de
|
|||||||
<select name="other_partition_id" onchange="GotoAnother();">"""
|
<select name="other_partition_id" onchange="GotoAnother();">"""
|
||||||
% formsemestre_id,
|
% formsemestre_id,
|
||||||
]
|
]
|
||||||
for p in sco_groups.get_partitions_list(
|
for p in sco_groups.get_partitions_list(formsemestre_id, with_default=False):
|
||||||
context, formsemestre_id, with_default=False
|
|
||||||
):
|
|
||||||
H.append('<option value="%s"' % p["partition_id"])
|
H.append('<option value="%s"' % p["partition_id"])
|
||||||
if p["partition_id"] == partition_id:
|
if p["partition_id"] == partition_id:
|
||||||
H.append(" selected")
|
H.append(" selected")
|
||||||
|
@ -212,7 +212,7 @@ def menu_groups_choice(context, groups_infos, submit_on_change=False):
|
|||||||
% (klass,)
|
% (klass,)
|
||||||
]
|
]
|
||||||
|
|
||||||
n_members = len(sco_groups.get_group_members(context, default_group_id))
|
n_members = len(sco_groups.get_group_members(default_group_id))
|
||||||
if default_group_id in groups_infos.group_ids:
|
if default_group_id in groups_infos.group_ids:
|
||||||
selected = "selected"
|
selected = "selected"
|
||||||
else:
|
else:
|
||||||
@ -225,13 +225,13 @@ def menu_groups_choice(context, groups_infos, submit_on_change=False):
|
|||||||
for partition in groups_infos.partitions:
|
for partition in groups_infos.partitions:
|
||||||
H.append('<optgroup label="%s">' % partition["partition_name"])
|
H.append('<optgroup label="%s">' % partition["partition_name"])
|
||||||
# Les groupes dans cette partition:
|
# Les groupes dans cette partition:
|
||||||
for g in sco_groups.get_partition_groups(context, partition):
|
for g in sco_groups.get_partition_groups(partition):
|
||||||
if g["group_id"] in groups_infos.group_ids:
|
if g["group_id"] in groups_infos.group_ids:
|
||||||
selected = "selected"
|
selected = "selected"
|
||||||
else:
|
else:
|
||||||
selected = ""
|
selected = ""
|
||||||
if g["group_name"]:
|
if g["group_name"]:
|
||||||
n_members = len(sco_groups.get_group_members(context, g["group_id"]))
|
n_members = len(sco_groups.get_group_members(g["group_id"]))
|
||||||
H.append(
|
H.append(
|
||||||
'<option value="%s" %s>%s (%s)</option>'
|
'<option value="%s" %s>%s (%s)</option>'
|
||||||
% (g["group_id"], selected, g["group_name"], n_members)
|
% (g["group_id"], selected, g["group_name"], n_members)
|
||||||
@ -247,7 +247,7 @@ def menu_group_choice(context, group_id=None, formsemestre_id=None):
|
|||||||
Si aucun groupe selectionné, utilise formsemestre_id pour lister les groupes.
|
Si aucun groupe selectionné, utilise formsemestre_id pour lister les groupes.
|
||||||
"""
|
"""
|
||||||
if group_id:
|
if group_id:
|
||||||
group = sco_groups.get_group(context, group_id)
|
group = sco_groups.get_group(group_id)
|
||||||
formsemestre_id = group["formsemestre_id"]
|
formsemestre_id = group["formsemestre_id"]
|
||||||
elif not formsemestre_id:
|
elif not formsemestre_id:
|
||||||
raise ValueError("missing formsemestre_id")
|
raise ValueError("missing formsemestre_id")
|
||||||
@ -258,17 +258,17 @@ def menu_group_choice(context, group_id=None, formsemestre_id=None):
|
|||||||
]
|
]
|
||||||
if not group_id:
|
if not group_id:
|
||||||
H.append('<option value="">choisir...</option>')
|
H.append('<option value="">choisir...</option>')
|
||||||
for partition in sco_groups.get_partitions_list(context, formsemestre_id):
|
for partition in sco_groups.get_partitions_list(formsemestre_id):
|
||||||
if partition["partition_name"]:
|
if partition["partition_name"]:
|
||||||
H.append('<optgroup label="%s">' % partition["partition_name"])
|
H.append('<optgroup label="%s">' % partition["partition_name"])
|
||||||
groups = sco_groups.get_partition_groups(context, partition)
|
groups = sco_groups.get_partition_groups(partition)
|
||||||
for group in groups:
|
for group in groups:
|
||||||
if group["group_id"] == group_id:
|
if group["group_id"] == group_id:
|
||||||
selected = "selected"
|
selected = "selected"
|
||||||
else:
|
else:
|
||||||
selected = ""
|
selected = ""
|
||||||
name = group["group_name"] or "Tous"
|
name = group["group_name"] or "Tous"
|
||||||
n_members = len(sco_groups.get_group_members(context, group["group_id"]))
|
n_members = len(sco_groups.get_group_members(group["group_id"]))
|
||||||
H.append(
|
H.append(
|
||||||
'<option value="%s" %s>%s (%s)</option>'
|
'<option value="%s" %s>%s (%s)</option>'
|
||||||
% (group["group_id"], selected, name, n_members)
|
% (group["group_id"], selected, name, n_members)
|
||||||
@ -334,9 +334,9 @@ class DisplayedGroupsInfos(object):
|
|||||||
else:
|
else:
|
||||||
# selectionne le premier groupe trouvé, s'il y en a un
|
# selectionne le premier groupe trouvé, s'il y en a un
|
||||||
partition = sco_groups.get_partitions_list(
|
partition = sco_groups.get_partitions_list(
|
||||||
context, formsemestre_id, with_default=True
|
formsemestre_id, with_default=True
|
||||||
)[0]
|
)[0]
|
||||||
groups = sco_groups.get_partition_groups(context, partition)
|
groups = sco_groups.get_partition_groups(partition)
|
||||||
if groups:
|
if groups:
|
||||||
group_ids = [groups[0]["group_id"]]
|
group_ids = [groups[0]["group_id"]]
|
||||||
else:
|
else:
|
||||||
@ -362,7 +362,7 @@ class DisplayedGroupsInfos(object):
|
|||||||
selected_partitions = set()
|
selected_partitions = set()
|
||||||
for group_id in group_ids:
|
for group_id in group_ids:
|
||||||
group_members, group, group_tit, sem, nbdem = sco_groups.get_group_infos(
|
group_members, group, group_tit, sem, nbdem = sco_groups.get_group_infos(
|
||||||
context, group_id, etat=etat
|
group_id, etat=etat
|
||||||
)
|
)
|
||||||
self.groups.append(group)
|
self.groups.append(group)
|
||||||
self.nbdem += nbdem
|
self.nbdem += nbdem
|
||||||
@ -383,9 +383,7 @@ class DisplayedGroupsInfos(object):
|
|||||||
] # -> [ partition_id ]
|
] # -> [ partition_id ]
|
||||||
|
|
||||||
if not self.formsemestre: # aucun groupe selectionne
|
if not self.formsemestre: # aucun groupe selectionne
|
||||||
self.formsemestre = sco_formsemestre.get_formsemestre(
|
self.formsemestre = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
context, formsemestre_id
|
|
||||||
)
|
|
||||||
|
|
||||||
self.sortuniq()
|
self.sortuniq()
|
||||||
|
|
||||||
@ -407,7 +405,7 @@ class DisplayedGroupsInfos(object):
|
|||||||
# gère le cas où les étudiants appartiennent à des semestres différents
|
# gère le cas où les étudiants appartiennent à des semestres différents
|
||||||
self.partitions = [] # les partitions, sans celle par defaut
|
self.partitions = [] # les partitions, sans celle par defaut
|
||||||
for formsemestre_id in self.sems:
|
for formsemestre_id in self.sems:
|
||||||
for partition in sco_groups.get_partitions_list(context, formsemestre_id):
|
for partition in sco_groups.get_partitions_list(formsemestre_id):
|
||||||
if partition["partition_name"]:
|
if partition["partition_name"]:
|
||||||
self.partitions.append(partition)
|
self.partitions.append(partition)
|
||||||
|
|
||||||
@ -723,7 +721,7 @@ def groups_table(
|
|||||||
):
|
):
|
||||||
if format == "moodlecsv":
|
if format == "moodlecsv":
|
||||||
format = "csv"
|
format = "csv"
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
elif format == "xlsappel":
|
elif format == "xlsappel":
|
||||||
xls = sco_excel.excel_feuille_listeappel(
|
xls = sco_excel.excel_feuille_listeappel(
|
||||||
@ -779,9 +777,7 @@ def groups_table(
|
|||||||
"codeparcours",
|
"codeparcours",
|
||||||
]
|
]
|
||||||
titles = keys[:]
|
titles = keys[:]
|
||||||
other_partitions = sco_groups.get_group_other_partitions(
|
other_partitions = sco_groups.get_group_other_partitions(groups_infos.groups[0])
|
||||||
context, groups_infos.groups[0]
|
|
||||||
)
|
|
||||||
keys += [p["partition_id"] for p in other_partitions]
|
keys += [p["partition_id"] for p in other_partitions]
|
||||||
titles += [p["partition_name"] for p in other_partitions]
|
titles += [p["partition_name"] for p in other_partitions]
|
||||||
# remplis infos lycee si on a que le code lycée
|
# remplis infos lycee si on a que le code lycée
|
||||||
@ -792,7 +788,7 @@ def groups_table(
|
|||||||
sco_etud.etud_add_lycee_infos(etud)
|
sco_etud.etud_add_lycee_infos(etud)
|
||||||
# et ajoute le parcours
|
# et ajoute le parcours
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(
|
Se = sco_parcours_dut.SituationEtudParcours(
|
||||||
context, etud, groups_infos.formsemestre_id
|
etud, groups_infos.formsemestre_id
|
||||||
)
|
)
|
||||||
m["parcours"] = Se.get_parcours_descr()
|
m["parcours"] = Se.get_parcours_descr()
|
||||||
m["codeparcours"], _ = sco_report.get_codeparcoursetud(context, etud)
|
m["codeparcours"], _ = sco_report.get_codeparcoursetud(context, etud)
|
||||||
@ -970,15 +966,15 @@ def export_groups_as_moodle_csv(context, formsemestre_id=None, REQUEST=None):
|
|||||||
if not formsemestre_id:
|
if not formsemestre_id:
|
||||||
raise ScoValueError("missing parameter: formsemestre_id")
|
raise ScoValueError("missing parameter: formsemestre_id")
|
||||||
_, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
_, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
||||||
context, formsemestre_id, with_default=True
|
formsemestre_id, with_default=True
|
||||||
)
|
)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
moodle_sem_name = sem["session_id"]
|
moodle_sem_name = sem["session_id"]
|
||||||
|
|
||||||
columns_ids = ("email", "semestre_groupe")
|
columns_ids = ("email", "semestre_groupe")
|
||||||
T = []
|
T = []
|
||||||
for partition_id in partitions_etud_groups:
|
for partition_id in partitions_etud_groups:
|
||||||
partition = sco_groups.get_partition(context, partition_id)
|
partition = sco_groups.get_partition(partition_id)
|
||||||
members = partitions_etud_groups[partition_id]
|
members = partitions_etud_groups[partition_id]
|
||||||
for etudid in members:
|
for etudid in members:
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
@ -1000,4 +996,4 @@ def export_groups_as_moodle_csv(context, formsemestre_id=None, REQUEST=None):
|
|||||||
text_with_titles=prefs["moodle_csv_with_headerline"],
|
text_with_titles=prefs["moodle_csv_with_headerline"],
|
||||||
preferences=prefs,
|
preferences=prefs,
|
||||||
)
|
)
|
||||||
return tab.make_page(context, format="csv", REQUEST=REQUEST)
|
return tab.make_page(format="csv", REQUEST=REQUEST)
|
||||||
|
@ -207,7 +207,7 @@ def sco_import_generate_excel_sample(
|
|||||||
for field in titles:
|
for field in titles:
|
||||||
if field == "groupes":
|
if field == "groupes":
|
||||||
sco_groups.etud_add_group_infos(
|
sco_groups.etud_add_group_infos(
|
||||||
context, etud, groups_infos.formsemestre, sep=";"
|
etud, groups_infos.formsemestre, sep=";"
|
||||||
)
|
)
|
||||||
l.append(etud["partitionsgroupes"])
|
l.append(etud["partitionsgroupes"])
|
||||||
else:
|
else:
|
||||||
@ -563,9 +563,7 @@ def _import_one_student(
|
|||||||
formsemestre_id = values["codesemestre"]
|
formsemestre_id = values["codesemestre"]
|
||||||
# recupere liste des groupes:
|
# recupere liste des groupes:
|
||||||
if formsemestre_id not in GroupIdInferers:
|
if formsemestre_id not in GroupIdInferers:
|
||||||
GroupIdInferers[formsemestre_id] = sco_groups.GroupIdInferer(
|
GroupIdInferers[formsemestre_id] = sco_groups.GroupIdInferer(formsemestre_id)
|
||||||
context, formsemestre_id
|
|
||||||
)
|
|
||||||
gi = GroupIdInferers[formsemestre_id]
|
gi = GroupIdInferers[formsemestre_id]
|
||||||
if args["groupes"]:
|
if args["groupes"]:
|
||||||
groupes = args["groupes"].split(";")
|
groupes = args["groupes"].split(";")
|
||||||
@ -621,7 +619,7 @@ def scolars_import_admission(
|
|||||||
|
|
||||||
log("scolars_import_admission: formsemestre_id=%s" % formsemestre_id)
|
log("scolars_import_admission: formsemestre_id=%s" % formsemestre_id)
|
||||||
members = sco_groups.get_group_members(
|
members = sco_groups.get_group_members(
|
||||||
context, sco_groups.get_default_group(formsemestre_id)
|
sco_groups.get_default_group(formsemestre_id)
|
||||||
)
|
)
|
||||||
etuds_by_nomprenom = {} # { nomprenom : etud }
|
etuds_by_nomprenom = {} # { nomprenom : etud }
|
||||||
diag = []
|
diag = []
|
||||||
@ -716,7 +714,7 @@ def scolars_import_admission(
|
|||||||
# log('import_adm: %s' % args )
|
# log('import_adm: %s' % args )
|
||||||
# Change les groupes si nécessaire:
|
# Change les groupes si nécessaire:
|
||||||
if args["groupes"]:
|
if args["groupes"]:
|
||||||
gi = sco_groups.GroupIdInferer(context, formsemestre_id)
|
gi = sco_groups.GroupIdInferer(formsemestre_id)
|
||||||
groupes = args["groupes"].split(";")
|
groupes = args["groupes"].split(";")
|
||||||
group_ids = [gi[group_name] for group_name in groupes]
|
group_ids = [gi[group_name] for group_name in groupes]
|
||||||
group_ids = list({}.fromkeys(group_ids).keys()) # uniq
|
group_ids = list({}.fromkeys(group_ids).keys()) # uniq
|
||||||
@ -728,7 +726,7 @@ def scolars_import_admission(
|
|||||||
|
|
||||||
for group_id in group_ids:
|
for group_id in group_ids:
|
||||||
sco_groups.change_etud_group_in_partition(
|
sco_groups.change_etud_group_in_partition(
|
||||||
context, args["etudid"], group_id, REQUEST=REQUEST
|
args["etudid"], group_id, REQUEST=REQUEST
|
||||||
)
|
)
|
||||||
#
|
#
|
||||||
diag.append("import de %s" % (etud["nomprenom"]))
|
diag.append("import de %s" % (etud["nomprenom"]))
|
||||||
|
@ -111,13 +111,11 @@ def list_inscrits(context, formsemestre_id, with_dems=False):
|
|||||||
"""
|
"""
|
||||||
if not with_dems:
|
if not with_dems:
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
) # optimized
|
) # optimized
|
||||||
else:
|
else:
|
||||||
args = {"formsemestre_id": formsemestre_id}
|
args = {"formsemestre_id": formsemestre_id}
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(args=args)
|
||||||
context, args=args
|
|
||||||
)
|
|
||||||
inscr = {}
|
inscr = {}
|
||||||
for i in ins:
|
for i in ins:
|
||||||
etudid = i["etudid"]
|
etudid = i["etudid"]
|
||||||
@ -186,12 +184,12 @@ def do_inscrit(context, sem, etudids, REQUEST=None, inscrit_groupes=False):
|
|||||||
if len(etud["sems"]) < 2:
|
if len(etud["sems"]) < 2:
|
||||||
continue
|
continue
|
||||||
prev_formsemestre = etud["sems"][1]
|
prev_formsemestre = etud["sems"][1]
|
||||||
sco_groups.etud_add_group_infos(context, etud, prev_formsemestre)
|
sco_groups.etud_add_group_infos(etud, prev_formsemestre)
|
||||||
|
|
||||||
cursem_groups_by_name = dict(
|
cursem_groups_by_name = dict(
|
||||||
[
|
[
|
||||||
(g["group_name"], g)
|
(g["group_name"], g)
|
||||||
for g in sco_groups.get_sem_groups(context, sem["formsemestre_id"])
|
for g in sco_groups.get_sem_groups(sem["formsemestre_id"])
|
||||||
if g["group_name"]
|
if g["group_name"]
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@ -207,7 +205,6 @@ def do_inscrit(context, sem, etudids, REQUEST=None, inscrit_groupes=False):
|
|||||||
# inscrit aux groupes
|
# inscrit aux groupes
|
||||||
for partition_group in partition_groups:
|
for partition_group in partition_groups:
|
||||||
sco_groups.change_etud_group_in_partition(
|
sco_groups.change_etud_group_in_partition(
|
||||||
context,
|
|
||||||
etudid,
|
etudid,
|
||||||
partition_group["group_id"],
|
partition_group["group_id"],
|
||||||
partition_group,
|
partition_group,
|
||||||
@ -229,7 +226,7 @@ def list_source_sems(context, sem, delai=None):
|
|||||||
"""
|
"""
|
||||||
# liste des semestres débutant a moins
|
# liste des semestres débutant a moins
|
||||||
# de delai (en jours) de la date de fin du semestre d'origine.
|
# de delai (en jours) de la date de fin du semestre d'origine.
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context)
|
sems = sco_formsemestre.do_formsemestre_list()
|
||||||
othersems = []
|
othersems = []
|
||||||
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_dst = datetime.date(y, m, d)
|
date_debut_dst = datetime.date(y, m, d)
|
||||||
@ -249,9 +246,7 @@ def list_source_sems(context, sem, delai=None):
|
|||||||
if s["semestre_id"] == sco_codes_parcours.NO_SEMESTRE_ID:
|
if s["semestre_id"] == sco_codes_parcours.NO_SEMESTRE_ID:
|
||||||
continue
|
continue
|
||||||
#
|
#
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": s["formation_id"]})[0]
|
||||||
context, args={"formation_id": s["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"])
|
||||||
if not parcours.ALLOW_SEM_SKIP:
|
if not parcours.ALLOW_SEM_SKIP:
|
||||||
if s["semestre_id"] < (sem["semestre_id"] - 1):
|
if s["semestre_id"] < (sem["semestre_id"] - 1):
|
||||||
@ -283,7 +278,7 @@ def formsemestre_inscr_passage(
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
inscrit_groupes = int(inscrit_groupes)
|
inscrit_groupes = int(inscrit_groupes)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# -- check lock
|
# -- check lock
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("opération impossible: semestre verrouille")
|
raise ScoValueError("opération impossible: semestre verrouille")
|
||||||
@ -382,12 +377,10 @@ def formsemestre_inscr_passage(
|
|||||||
<li><a class="stdlink" href="formsemestre_status?formsemestre_id=%s">Tableau de bord du semestre</a></li>"""
|
<li><a class="stdlink" href="formsemestre_status?formsemestre_id=%s">Tableau de bord du semestre</a></li>"""
|
||||||
% (formsemestre_id, formsemestre_id)
|
% (formsemestre_id, formsemestre_id)
|
||||||
)
|
)
|
||||||
partition = sco_groups.formsemestre_get_main_partition(
|
partition = sco_groups.formsemestre_get_main_partition(formsemestre_id)
|
||||||
context, formsemestre_id
|
|
||||||
)
|
|
||||||
if (
|
if (
|
||||||
partition["partition_id"]
|
partition["partition_id"]
|
||||||
!= sco_groups.formsemestre_get_main_partition(context, formsemestre_id)[
|
!= sco_groups.formsemestre_get_main_partition(formsemestre_id)[
|
||||||
"partition_id"
|
"partition_id"
|
||||||
]
|
]
|
||||||
): # il y a au moins une vraie partition
|
): # il y a au moins une vraie partition
|
||||||
|
@ -89,7 +89,7 @@ def do_evaluation_listenotes(context, REQUEST):
|
|||||||
H = []
|
H = []
|
||||||
# groupes
|
# groupes
|
||||||
groups = sco_groups.do_evaluation_listegroupes(
|
groups = sco_groups.do_evaluation_listegroupes(
|
||||||
context, E["evaluation_id"], include_default=True
|
E["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
|
||||||
grnams = [str(g["group_id"]) for g in groups] # noms des checkbox
|
grnams = [str(g["group_id"]) for g in groups] # noms des checkbox
|
||||||
@ -236,7 +236,7 @@ def _make_table_notes(
|
|||||||
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(context, 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(context, args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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:
|
||||||
if e["moduleimpl_id"] != moduleimpl_id:
|
if e["moduleimpl_id"] != moduleimpl_id:
|
||||||
@ -249,7 +249,7 @@ def _make_table_notes(
|
|||||||
# Si pas de groupe, affiche tout
|
# Si pas de groupe, affiche tout
|
||||||
if not group_ids:
|
if not group_ids:
|
||||||
group_ids = [sco_groups.get_default_group(M["formsemestre_id"])]
|
group_ids = [sco_groups.get_default_group(M["formsemestre_id"])]
|
||||||
groups = sco_groups.listgroups(context, group_ids)
|
groups = sco_groups.listgroups(group_ids)
|
||||||
|
|
||||||
gr_title = sco_groups.listgroups_abbrev(groups)
|
gr_title = sco_groups.listgroups_abbrev(groups)
|
||||||
gr_title_filename = sco_groups.listgroups_filename(groups)
|
gr_title_filename = sco_groups.listgroups_filename(groups)
|
||||||
@ -298,11 +298,11 @@ def _make_table_notes(
|
|||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
||||||
# infos inscription
|
# infos inscription
|
||||||
inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid, "formsemestre_id": M["formsemestre_id"]}
|
{"etudid": etudid, "formsemestre_id": M["formsemestre_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
|
|
||||||
if inscr["etat"] == "I": # si inscrit, indique groupe
|
if inscr["etat"] == "I": # si inscrit, indique groupe
|
||||||
groups = sco_groups.get_etud_groups(context, etudid, sem)
|
groups = sco_groups.get_etud_groups(etudid, sem)
|
||||||
grc = sco_groups.listgroups_abbrev(groups)
|
grc = sco_groups.listgroups_abbrev(groups)
|
||||||
else:
|
else:
|
||||||
if inscr["etat"] == "D":
|
if inscr["etat"] == "D":
|
||||||
@ -487,7 +487,7 @@ def _make_table_notes(
|
|||||||
# html_generate_cells=False # la derniere ligne (moyennes) est incomplete
|
# html_generate_cells=False # la derniere ligne (moyennes) est incomplete
|
||||||
)
|
)
|
||||||
|
|
||||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
t = tab.make_page(format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return t
|
return t
|
||||||
|
|
||||||
@ -873,7 +873,7 @@ def evaluation_check_absences_html(
|
|||||||
|
|
||||||
def formsemestre_check_absences_html(context, formsemestre_id, REQUEST=None):
|
def formsemestre_check_absences_html(context, formsemestre_id, REQUEST=None):
|
||||||
"""Affiche etat verification absences pour toutes les evaluations du semestre !"""
|
"""Affiche etat verification absences pour toutes les evaluations du semestre !"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context,
|
context,
|
||||||
|
@ -48,7 +48,7 @@ def formsemestre_table_etuds_lycees(
|
|||||||
context, formsemestre_id, group_lycees=True, only_primo=False
|
context, formsemestre_id, group_lycees=True, only_primo=False
|
||||||
):
|
):
|
||||||
"""Récupère liste d'etudiants avec etat et decision."""
|
"""Récupère liste d'etudiants avec etat et decision."""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etuds = sco_report.tsp_etud_list(context, formsemestre_id, only_primo=only_primo)[0]
|
etuds = sco_report.tsp_etud_list(context, formsemestre_id, only_primo=only_primo)[0]
|
||||||
if only_primo:
|
if only_primo:
|
||||||
primostr = "primo-entrants du "
|
primostr = "primo-entrants du "
|
||||||
@ -87,7 +87,7 @@ def scodoc_table_etuds_lycees(context, format="html", REQUEST=None):
|
|||||||
no_links=True,
|
no_links=True,
|
||||||
)
|
)
|
||||||
tab.base_url = REQUEST.URL0
|
tab.base_url = REQUEST.URL0
|
||||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
t = tab.make_page(format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return t
|
return t
|
||||||
H = [
|
H = [
|
||||||
@ -195,7 +195,7 @@ def formsemestre_etuds_lycees(
|
|||||||
tab.base_url += "&only_primo=1"
|
tab.base_url += "&only_primo=1"
|
||||||
if no_grouping:
|
if no_grouping:
|
||||||
tab.base_url += "&no_grouping=1"
|
tab.base_url += "&no_grouping=1"
|
||||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
t = tab.make_page(format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return t
|
return t
|
||||||
F = [
|
F = [
|
||||||
|
@ -262,7 +262,7 @@ def do_moduleimpl_inscrit_etuds(
|
|||||||
# Verifie qu'ils sont tous bien inscrits au semestre
|
# Verifie qu'ils sont tous bien inscrits au semestre
|
||||||
for etudid in etudids:
|
for etudid in etudids:
|
||||||
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id, "etudid": etudid}
|
args={"formsemestre_id": formsemestre_id, "etudid": etudid}
|
||||||
)
|
)
|
||||||
if not insem:
|
if not insem:
|
||||||
raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid)
|
raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid)
|
||||||
@ -326,7 +326,7 @@ def can_change_module_resp(context, REQUEST, moduleimpl_id):
|
|||||||
"""
|
"""
|
||||||
M = do_moduleimpl_withmodule_list(context, moduleimpl_id=moduleimpl_id)[0]
|
M = do_moduleimpl_withmodule_list(context, moduleimpl_id=moduleimpl_id)[0]
|
||||||
# -- check lock
|
# -- check lock
|
||||||
sem = sco_formsemestre.get_formsemestre(context, M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
# -- check access
|
# -- check access
|
||||||
@ -344,7 +344,7 @@ def can_change_ens(context, 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(context, moduleimpl_id=moduleimpl_id)[0]
|
||||||
# -- check lock
|
# -- check lock
|
||||||
sem = sco_formsemestre.get_formsemestre(context, M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
if raise_exc:
|
if raise_exc:
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
|
@ -67,7 +67,7 @@ def moduleimpl_inscriptions_edit(
|
|||||||
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.do_moduleimpl_list(context, 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(context, args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# -- check lock
|
# -- check lock
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("opération impossible: semestre verrouille")
|
raise ScoValueError("opération impossible: semestre verrouille")
|
||||||
@ -93,7 +93,7 @@ def moduleimpl_inscriptions_edit(
|
|||||||
]
|
]
|
||||||
# Liste des inscrits à ce semestre
|
# Liste des inscrits à ce semestre
|
||||||
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
for ins in inscrits:
|
for ins in inscrits:
|
||||||
etuds_info = sco_etud.get_etud_info(etudid=ins["etudid"], filled=1)
|
etuds_info = sco_etud.get_etud_info(etudid=ins["etudid"], filled=1)
|
||||||
@ -112,7 +112,7 @@ def moduleimpl_inscriptions_edit(
|
|||||||
)
|
)
|
||||||
in_module = set([x["etudid"] for x in in_m])
|
in_module = set([x["etudid"] for x in in_m])
|
||||||
#
|
#
|
||||||
partitions = sco_groups.get_partitions_list(context, formsemestre_id)
|
partitions = sco_groups.get_partitions_list(formsemestre_id)
|
||||||
#
|
#
|
||||||
if not submitted:
|
if not submitted:
|
||||||
H.append(
|
H.append(
|
||||||
@ -185,7 +185,7 @@ def moduleimpl_inscriptions_edit(
|
|||||||
)
|
)
|
||||||
H.append("""</input></td>""")
|
H.append("""</input></td>""")
|
||||||
|
|
||||||
groups = sco_groups.get_etud_groups(context, etud["etudid"], sem)
|
groups = sco_groups.get_etud_groups(etud["etudid"], sem)
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
if partition["partition_name"]:
|
if partition["partition_name"]:
|
||||||
gr_name = ""
|
gr_name = ""
|
||||||
@ -214,7 +214,7 @@ def _make_menu(context, partitions, title="", check="true"):
|
|||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
if partition["partition_name"] != None:
|
if partition["partition_name"] != None:
|
||||||
p_idx += 1
|
p_idx += 1
|
||||||
for group in sco_groups.get_partition_groups(context, partition):
|
for group in sco_groups.get_partition_groups(partition):
|
||||||
items.append(
|
items.append(
|
||||||
{
|
{
|
||||||
"title": "%s %s"
|
"title": "%s %s"
|
||||||
@ -252,13 +252,13 @@ def moduleimpl_inscriptions_stats(context, formsemestre_id, REQUEST=None):
|
|||||||
"""
|
"""
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
set_all = set([x["etudid"] for x in inscrits])
|
set_all = set([x["etudid"] for x in inscrits])
|
||||||
partitions, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
partitions, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
|
|
||||||
can_change = authuser.has_permission(Permission.ScoEtudInscrit) and sem["etat"]
|
can_change = authuser.has_permission(Permission.ScoEtudInscrit) and sem["etat"]
|
||||||
@ -441,8 +441,8 @@ def descr_inscrs_module(
|
|||||||
gr = [] # [ ( partition_name , [ group_names ] ) ]
|
gr = [] # [ ( partition_name , [ group_names ] ) ]
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
grp = [] # groupe de cette partition
|
grp = [] # groupe de cette partition
|
||||||
for group in sco_groups.get_partition_groups(context, partition):
|
for group in sco_groups.get_partition_groups(partition):
|
||||||
members = sco_groups.get_group_members(context, group["group_id"])
|
members = sco_groups.get_group_members(group["group_id"])
|
||||||
set_g = set([m["etudid"] for m in members])
|
set_g = set([m["etudid"] for m in members])
|
||||||
if set_g.issubset(set_m):
|
if set_g.issubset(set_m):
|
||||||
grp.append(group["group_name"])
|
grp.append(group["group_name"])
|
||||||
@ -492,7 +492,7 @@ def get_etuds_with_capitalized_ue(context, formsemestre_id):
|
|||||||
UECaps = scu.DictDefault(defaultvalue=[])
|
UECaps = scu.DictDefault(defaultvalue=[])
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_ues, get_etud_ue_status
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_ues, get_etud_ue_status
|
||||||
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
ues = nt.get_ues()
|
ues = nt.get_ues()
|
||||||
for ue in ues:
|
for ue in ues:
|
||||||
@ -569,7 +569,7 @@ def do_etud_inscrit_ue(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
|||||||
"""Incrit l'etudiant de tous les modules de cette UE dans ce semestre."""
|
"""Incrit l'etudiant de tous les modules de cette UE dans ce semestre."""
|
||||||
# Verifie qu'il est bien inscrit au semestre
|
# Verifie qu'il est bien inscrit au semestre
|
||||||
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id, "etudid": etudid}
|
args={"formsemestre_id": formsemestre_id, "etudid": etudid}
|
||||||
)
|
)
|
||||||
if not insem:
|
if not insem:
|
||||||
raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid)
|
raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid)
|
||||||
|
@ -161,10 +161,8 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
|||||||
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.do_moduleimpl_list(context, 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(context, args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, 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"]
|
context, moduleimpl_id=M["moduleimpl_id"]
|
||||||
)
|
)
|
||||||
@ -312,7 +310,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
|||||||
)
|
)
|
||||||
#
|
#
|
||||||
# Liste les noms de partitions
|
# Liste les noms de partitions
|
||||||
partitions = sco_groups.get_partitions_list(context, sem["formsemestre_id"])
|
partitions = sco_groups.get_partitions_list(sem["formsemestre_id"])
|
||||||
H.append(
|
H.append(
|
||||||
"""Afficher les groupes de <select name="partition_id" onchange="document.f.submit();">"""
|
"""Afficher les groupes de <select name="partition_id" onchange="document.f.submit();">"""
|
||||||
)
|
)
|
||||||
|
@ -188,7 +188,7 @@ def _get_formsemestre_infos_from_news(context, n):
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
except:
|
except:
|
||||||
# semestre n'existe plus
|
# semestre n'existe plus
|
||||||
return {}
|
return {}
|
||||||
|
@ -209,7 +209,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
info["modifadresse"] = ""
|
info["modifadresse"] = ""
|
||||||
|
|
||||||
# Groupes:
|
# Groupes:
|
||||||
sco_groups.etud_add_group_infos(context, info, info["cursem"])
|
sco_groups.etud_add_group_infos(info, info["cursem"])
|
||||||
|
|
||||||
# Parcours de l'étudiant
|
# Parcours de l'étudiant
|
||||||
if info["sems"]:
|
if info["sems"]:
|
||||||
@ -228,7 +228,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
)
|
)
|
||||||
grlink = '<span class="fontred">%s</span>' % descr["situation"]
|
grlink = '<span class="fontred">%s</span>' % descr["situation"]
|
||||||
else:
|
else:
|
||||||
group = sco_groups.get_etud_main_group(context, etudid, sem)
|
group = sco_groups.get_etud_main_group(etudid, sem)
|
||||||
if group["partition_name"]:
|
if group["partition_name"]:
|
||||||
gr_name = group["group_name"]
|
gr_name = group["group_name"]
|
||||||
else:
|
else:
|
||||||
@ -247,9 +247,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
sem_info[sem["formsemestre_id"]] = grlink
|
sem_info[sem["formsemestre_id"]] = grlink
|
||||||
|
|
||||||
if info["sems"]:
|
if info["sems"]:
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(
|
Se = sco_parcours_dut.SituationEtudParcours(etud, info["last_formsemestre_id"])
|
||||||
context, etud, info["last_formsemestre_id"]
|
|
||||||
)
|
|
||||||
info["liste_inscriptions"] = formsemestre_recap_parcours_table(
|
info["liste_inscriptions"] = formsemestre_recap_parcours_table(
|
||||||
context,
|
context,
|
||||||
Se,
|
Se,
|
||||||
@ -571,11 +569,11 @@ def etud_info_html(context, etudid, with_photo="1", REQUEST=None, debug=False):
|
|||||||
# Informations sur l'etudiant dans le semestre courant:
|
# Informations sur l'etudiant dans le semestre courant:
|
||||||
sem = None
|
sem = None
|
||||||
if formsemestre_id: # un semestre est spécifié par la page
|
if formsemestre_id: # un semestre est spécifié par la page
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
elif etud["cursem"]: # le semestre "en cours" pour l'étudiant
|
elif etud["cursem"]: # le semestre "en cours" pour l'étudiant
|
||||||
sem = etud["cursem"]
|
sem = etud["cursem"]
|
||||||
if sem:
|
if sem:
|
||||||
groups = sco_groups.get_etud_groups(context, etudid, sem)
|
groups = sco_groups.get_etud_groups(etudid, sem)
|
||||||
grc = sco_groups.listgroups_abbrev(groups)
|
grc = sco_groups.listgroups_abbrev(groups)
|
||||||
H += '<div class="eid_info">En <b>S%d</b>: %s</div>' % (sem["semestre_id"], grc)
|
H += '<div class="eid_info">En <b>S%d</b>: %s</div>' % (sem["semestre_id"], grc)
|
||||||
H += "</div>" # fin partie gauche (eid_left)
|
H += "</div>" # fin partie gauche (eid_left)
|
||||||
|
@ -105,7 +105,7 @@ class DecisionSem(object):
|
|||||||
# log('%s: %s %s %s %s %s' % (self.codechoice,code_etat,new_code_prev,formsemestre_id_utilise_pour_compenser,devenir,assiduite) )
|
# log('%s: %s %s %s %s %s' % (self.codechoice,code_etat,new_code_prev,formsemestre_id_utilise_pour_compenser,devenir,assiduite) )
|
||||||
|
|
||||||
|
|
||||||
def SituationEtudParcours(context, etud, formsemestre_id):
|
def SituationEtudParcours(etud, formsemestre_id):
|
||||||
"""renvoie une instance de SituationEtudParcours (ou sous-classe spécialisée)"""
|
"""renvoie une instance de SituationEtudParcours (ou sous-classe spécialisée)"""
|
||||||
nt = sco_cache.NotesTableCache.get(
|
nt = sco_cache.NotesTableCache.get(
|
||||||
formsemestre_id
|
formsemestre_id
|
||||||
@ -113,23 +113,23 @@ def SituationEtudParcours(context, etud, formsemestre_id):
|
|||||||
parcours = nt.parcours
|
parcours = nt.parcours
|
||||||
#
|
#
|
||||||
if parcours.ECTS_ONLY:
|
if parcours.ECTS_ONLY:
|
||||||
return SituationEtudParcoursECTS(context, etud, formsemestre_id, nt)
|
return SituationEtudParcoursECTS(etud, formsemestre_id, nt)
|
||||||
else:
|
else:
|
||||||
return SituationEtudParcoursGeneric(context, etud, formsemestre_id, nt)
|
return SituationEtudParcoursGeneric(etud, formsemestre_id, nt)
|
||||||
|
|
||||||
|
|
||||||
class SituationEtudParcoursGeneric(object):
|
class SituationEtudParcoursGeneric(object):
|
||||||
"Semestre dans un parcours"
|
"Semestre dans un parcours"
|
||||||
|
|
||||||
def __init__(self, context, etud, formsemestre_id, nt):
|
def __init__(self, etud, formsemestre_id, nt):
|
||||||
"""
|
"""
|
||||||
etud: dict filled by fill_etuds_info()
|
etud: dict filled by fill_etuds_info()
|
||||||
"""
|
"""
|
||||||
self.context = context
|
self.context = None # #context
|
||||||
self.etud = etud
|
self.etud = etud
|
||||||
self.etudid = etud["etudid"]
|
self.etudid = etud["etudid"]
|
||||||
self.formsemestre_id = formsemestre_id
|
self.formsemestre_id = formsemestre_id
|
||||||
self.sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
self.sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
self.nt = nt
|
self.nt = nt
|
||||||
self.formation = self.nt.formation
|
self.formation = self.nt.formation
|
||||||
self.parcours = self.nt.parcours
|
self.parcours = self.nt.parcours
|
||||||
@ -672,8 +672,8 @@ class SituationEtudParcoursGeneric(object):
|
|||||||
class SituationEtudParcoursECTS(SituationEtudParcoursGeneric):
|
class SituationEtudParcoursECTS(SituationEtudParcoursGeneric):
|
||||||
"""Gestion parcours basés sur ECTS"""
|
"""Gestion parcours basés sur ECTS"""
|
||||||
|
|
||||||
def __init__(self, context, etud, formsemestre_id, nt):
|
def __init__(self, etud, formsemestre_id, nt):
|
||||||
SituationEtudParcoursGeneric.__init__(self, context, etud, formsemestre_id, nt)
|
SituationEtudParcoursGeneric.__init__(self, etud, formsemestre_id, nt)
|
||||||
|
|
||||||
def could_be_compensated(self):
|
def could_be_compensated(self):
|
||||||
return False # jamais de compensations dans ce parcours
|
return False # jamais de compensations dans ce parcours
|
||||||
@ -1098,10 +1098,8 @@ def list_formsemestre_utilisateurs_uecap(context, formsemestre_id):
|
|||||||
(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"""
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
|
||||||
)[0]
|
|
||||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""SELECT sem.id
|
"""SELECT sem.id
|
||||||
|
@ -166,7 +166,6 @@ class ScolarsPageTemplate(PageTemplate):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
document,
|
document,
|
||||||
context=None,
|
|
||||||
pagesbookmarks={},
|
pagesbookmarks={},
|
||||||
author=None,
|
author=None,
|
||||||
title=None,
|
title=None,
|
||||||
@ -304,7 +303,9 @@ def _makeTimeDict():
|
|||||||
|
|
||||||
|
|
||||||
def pdf_basic_page(
|
def pdf_basic_page(
|
||||||
objects, title="", preferences=None, context=None
|
objects,
|
||||||
|
title="",
|
||||||
|
preferences=None,
|
||||||
): # used by gen_table.make_page()
|
): # used by gen_table.make_page()
|
||||||
"""Simple convenience fonction: build a page from a list of platypus objects,
|
"""Simple convenience fonction: build a page from a list of platypus objects,
|
||||||
adding a title if specified.
|
adding a title if specified.
|
||||||
@ -315,7 +316,6 @@ def pdf_basic_page(
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
ScolarsPageTemplate(
|
ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context=context,
|
|
||||||
title=title,
|
title=title,
|
||||||
author="%s %s (E. Viennet)" % (SCONAME, SCOVERSION),
|
author="%s %s (E. Viennet)" % (SCONAME, SCOVERSION),
|
||||||
footer_template="Edité par %(scodoc_name)s le %(day)s/%(month)s/%(year)s à %(hour)sh%(minute)s",
|
footer_template="Edité par %(scodoc_name)s le %(day)s/%(month)s/%(year)s à %(hour)sh%(minute)s",
|
||||||
|
@ -27,7 +27,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(context, moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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é
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ def can_edit_evaluation(moduleimpl_id=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(context, moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
|
|
||||||
if (
|
if (
|
||||||
current_user.has_permission(Permission.ScoEditAllEvals)
|
current_user.has_permission(Permission.ScoEditAllEvals)
|
||||||
@ -110,7 +110,7 @@ def can_validate_sem(formsemestre_id):
|
|||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
context = None # XXX #context
|
context = None # XXX #context
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
return False # semestre verrouillé
|
return False # semestre verrouillé
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ def can_edit_pv(formsemestre_id):
|
|||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
context = None # XXX #context
|
context = None # XXX #context
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if is_chef_or_diretud(sem):
|
if is_chef_or_diretud(sem):
|
||||||
return True
|
return True
|
||||||
# Autorise les secrétariats, repérés via la permission ScoEtudChangeAdr
|
# Autorise les secrétariats, repérés via la permission ScoEtudChangeAdr
|
||||||
@ -148,7 +148,7 @@ def check_access_diretud(formsemestre_id, required_permission=Permission.ScoImpl
|
|||||||
|
|
||||||
context = None # XXX #context
|
context = None # XXX #context
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
header = html_sco_header.sco_header(page_title="Accès interdit")
|
header = html_sco_header.sco_header(page_title="Accès interdit")
|
||||||
footer = html_sco_header.sco_footer()
|
footer = html_sco_header.sco_footer()
|
||||||
if (
|
if (
|
||||||
@ -175,7 +175,7 @@ def can_change_groups(formsemestre_id):
|
|||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
|
|
||||||
context = None # XXX #context
|
context = None # XXX #context
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
return False # semestre verrouillé
|
return False # semestre verrouillé
|
||||||
if current_user.has_permission(Permission.ScoEtudChangeGroups):
|
if current_user.has_permission(Permission.ScoEtudChangeGroups):
|
||||||
|
@ -56,7 +56,7 @@ from app.scodoc.sco_excel import *
|
|||||||
from app.scodoc.TrivialFormulator import TrivialFormulator
|
from app.scodoc.TrivialFormulator import TrivialFormulator
|
||||||
|
|
||||||
|
|
||||||
def do_placement_selectetuds(context, REQUEST):
|
def do_placement_selectetuds(REQUEST):
|
||||||
"""
|
"""
|
||||||
Choisi les étudiants et les infos sur la salle pour leur placement.
|
Choisi les étudiants et les infos sur la salle pour leur placement.
|
||||||
"""
|
"""
|
||||||
@ -67,9 +67,7 @@ def do_placement_selectetuds(context, REQUEST):
|
|||||||
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(context, moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
# groupes
|
# groupes
|
||||||
groups = sco_groups.do_evaluation_listegroupes(
|
groups = sco_groups.do_evaluation_listegroupes(evaluation_id, include_default=True)
|
||||||
context, 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
|
||||||
grnams = [g["group_id"] for g in groups] # noms des checkbox
|
grnams = [g["group_id"] for g in groups] # noms des checkbox
|
||||||
no_groups = (len(groups) == 1) and groups[0]["group_name"] is None
|
no_groups = (len(groups) == 1) and groups[0]["group_name"] is None
|
||||||
@ -270,7 +268,7 @@ def do_placement(context, REQUEST):
|
|||||||
|
|
||||||
# Construit liste des etudiants
|
# Construit liste des etudiants
|
||||||
group_ids = REQUEST.form.get("group_ids", [])
|
group_ids = REQUEST.form.get("group_ids", [])
|
||||||
groups = sco_groups.listgroups(context, group_ids)
|
groups = sco_groups.listgroups(group_ids)
|
||||||
gr_title_filename = sco_groups.listgroups_filename(groups)
|
gr_title_filename = sco_groups.listgroups_filename(groups)
|
||||||
# gr_title = sco_groups.listgroups_abbrev(groups)
|
# gr_title = sco_groups.listgroups_abbrev(groups)
|
||||||
|
|
||||||
@ -287,7 +285,7 @@ def do_placement(context, REQUEST):
|
|||||||
|
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.do_moduleimpl_list(context, 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(context, args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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"]:
|
||||||
evaltitre = E["description"]
|
evaltitre = E["description"]
|
||||||
@ -309,7 +307,7 @@ def do_placement(context, REQUEST):
|
|||||||
] # XXX utiliser ZScolar (parent)
|
] # XXX utiliser ZScolar (parent)
|
||||||
# infos inscription
|
# infos inscription
|
||||||
inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid, "formsemestre_id": M["formsemestre_id"]}
|
{"etudid": etudid, "formsemestre_id": M["formsemestre_id"]}
|
||||||
)[0]
|
)[0]
|
||||||
if inscr["etat"] != "D":
|
if inscr["etat"] != "D":
|
||||||
nom = scu.strupper(ident["nom"])
|
nom = scu.strupper(ident["nom"])
|
||||||
@ -419,7 +417,7 @@ def placement_eval_selectetuds(context, evaluation_id, REQUEST=None):
|
|||||||
formid = "placementfile"
|
formid = "placementfile"
|
||||||
if not REQUEST.form.get("%s-submitted" % formid, False):
|
if not REQUEST.form.get("%s-submitted" % formid, False):
|
||||||
# not submitted, choix groupe
|
# not submitted, choix groupe
|
||||||
r = do_placement_selectetuds(context, REQUEST)
|
r = do_placement_selectetuds(REQUEST)
|
||||||
if r:
|
if r:
|
||||||
H.append(r)
|
H.append(r)
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ def _getEtudInfoGroupes(context, group_ids, etat=None):
|
|||||||
"""
|
"""
|
||||||
etuds = []
|
etuds = []
|
||||||
for group_id in group_ids:
|
for group_id in group_ids:
|
||||||
members = sco_groups.get_group_members(context, group_id, etat=etat)
|
members = sco_groups.get_group_members(group_id, etat=etat)
|
||||||
for m in members:
|
for m in members:
|
||||||
etud = sco_etud.get_etud_info(etudid=m["etudid"], filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=m["etudid"], filled=True)[0]
|
||||||
etuds.append(etud)
|
etuds.append(etud)
|
||||||
@ -168,7 +168,7 @@ def formsemestre_poursuite_report(
|
|||||||
context, formsemestre_id, format="html", REQUEST=None
|
context, formsemestre_id, format="html", REQUEST=None
|
||||||
):
|
):
|
||||||
"""Table avec informations "poursuite" """
|
"""Table avec informations "poursuite" """
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etuds = _getEtudInfoGroupes(
|
etuds = _getEtudInfoGroupes(
|
||||||
context, [sco_groups.get_default_group(formsemestre_id)]
|
context, [sco_groups.get_default_group(formsemestre_id)]
|
||||||
)
|
)
|
||||||
|
@ -2123,7 +2123,7 @@ class SemPreferences(object):
|
|||||||
"sem_preferences.edit doit etre appele sur un semestre !"
|
"sem_preferences.edit doit etre appele sur un semestre !"
|
||||||
) # a bug !
|
) # a bug !
|
||||||
context = None # XXX TO REMOVE
|
context = None # XXX TO REMOVE
|
||||||
sem = sco_formsemestre.get_formsemestre(context, self.formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(self.formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
context, REQUEST, "Préférences du semestre", sem
|
context, REQUEST, "Préférences du semestre", sem
|
||||||
|
@ -49,12 +49,12 @@ def feuille_preparation_jury(context, formsemestre_id, REQUEST):
|
|||||||
formsemestre_id
|
formsemestre_id
|
||||||
) # > get_etudids, get_etud_moy_gen, get_ues, get_etud_ue_status, get_etud_decision_sem, identdict,
|
) # > get_etudids, get_etud_moy_gen, get_ues, get_etud_ue_status, get_etud_decision_sem, identdict,
|
||||||
etudids = nt.get_etudids(sorted=True) # tri par moy gen
|
etudids = nt.get_etudids(sorted=True) # tri par moy gen
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
etud_groups = sco_groups.formsemestre_get_etud_groupnames(context, formsemestre_id)
|
etud_groups = sco_groups.formsemestre_get_etud_groupnames(formsemestre_id)
|
||||||
main_partition_id = sco_groups.formsemestre_get_main_partition(
|
main_partition_id = sco_groups.formsemestre_get_main_partition(formsemestre_id)[
|
||||||
context, formsemestre_id
|
"partition_id"
|
||||||
)["partition_id"]
|
]
|
||||||
|
|
||||||
prev_moy_ue = scu.DictDefault(defaultvalue={}) # ue_code_s : { etudid : moy ue }
|
prev_moy_ue = scu.DictDefault(defaultvalue={}) # ue_code_s : { etudid : moy ue }
|
||||||
prev_ue_acro = {} # ue_code_s : acronyme (à afficher)
|
prev_ue_acro = {} # ue_code_s : acronyme (à afficher)
|
||||||
@ -76,7 +76,7 @@ def feuille_preparation_jury(context, formsemestre_id, REQUEST):
|
|||||||
if not info:
|
if not info:
|
||||||
continue # should not occur...
|
continue # should not occur...
|
||||||
etud = info[0]
|
etud = info[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
if Se.prev:
|
if Se.prev:
|
||||||
ntp = sco_cache.NotesTableCache.get(
|
ntp = sco_cache.NotesTableCache.get(
|
||||||
Se.prev["formsemestre_id"]
|
Se.prev["formsemestre_id"]
|
||||||
|
@ -226,7 +226,7 @@ def dict_pvjury(
|
|||||||
if not etudids:
|
if not etudids:
|
||||||
return {}
|
return {}
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
max_date = "0000-01-01"
|
max_date = "0000-01-01"
|
||||||
has_prev = False # vrai si au moins un etudiant a un code prev
|
has_prev = False # vrai si au moins un etudiant a un code prev
|
||||||
semestre_non_terminal = False # True si au moins un etudiant a un devenir
|
semestre_non_terminal = False # True si au moins un etudiant a un devenir
|
||||||
@ -235,7 +235,7 @@ def dict_pvjury(
|
|||||||
D = {} # même chose que L, mais { etudid : dec }
|
D = {} # même chose que L, mais { etudid : dec }
|
||||||
for etudid in etudids:
|
for etudid in etudids:
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id)
|
Se = sco_parcours_dut.SituationEtudParcours(etud, formsemestre_id)
|
||||||
semestre_non_terminal = semestre_non_terminal or Se.semestre_non_terminal
|
semestre_non_terminal = semestre_non_terminal or Se.semestre_non_terminal
|
||||||
d = {}
|
d = {}
|
||||||
d["identite"] = nt.identdict[etudid]
|
d["identite"] = nt.identdict[etudid]
|
||||||
@ -299,9 +299,7 @@ def dict_pvjury(
|
|||||||
obs = []
|
obs = []
|
||||||
for compensator in compensators:
|
for compensator in compensators:
|
||||||
# nb: il ne devrait y en avoir qu'un !
|
# nb: il ne devrait y en avoir qu'un !
|
||||||
csem = sco_formsemestre.get_formsemestre(
|
csem = sco_formsemestre.get_formsemestre(compensator["formsemestre_id"])
|
||||||
context, compensator["formsemestre_id"]
|
|
||||||
)
|
|
||||||
obs.append(
|
obs.append(
|
||||||
"%s compensé par %s (%s)"
|
"%s compensé par %s (%s)"
|
||||||
% (sem["sem_id_txt"], csem["sem_id_txt"], csem["anneescolaire"])
|
% (sem["sem_id_txt"], csem["sem_id_txt"], csem["anneescolaire"])
|
||||||
@ -309,7 +307,7 @@ def dict_pvjury(
|
|||||||
|
|
||||||
if d["decision_sem"] and d["decision_sem"]["compense_formsemestre_id"]:
|
if d["decision_sem"] and d["decision_sem"]["compense_formsemestre_id"]:
|
||||||
compensed = sco_formsemestre.get_formsemestre(
|
compensed = sco_formsemestre.get_formsemestre(
|
||||||
context, d["decision_sem"]["compense_formsemestre_id"]
|
d["decision_sem"]["compense_formsemestre_id"]
|
||||||
)
|
)
|
||||||
obs.append(
|
obs.append(
|
||||||
"%s compense %s (%s)"
|
"%s compense %s (%s)"
|
||||||
@ -362,7 +360,7 @@ def dict_pvjury(
|
|||||||
"has_prev": has_prev,
|
"has_prev": has_prev,
|
||||||
"semestre_non_terminal": semestre_non_terminal,
|
"semestre_non_terminal": semestre_non_terminal,
|
||||||
"formation": sco_formations.formation_list(
|
"formation": sco_formations.formation_list(
|
||||||
context, args={"formation_id": sem["formation_id"]}
|
args={"formation_id": sem["formation_id"]}
|
||||||
)[0],
|
)[0],
|
||||||
"decisions": L,
|
"decisions": L,
|
||||||
"decisions_dict": D,
|
"decisions_dict": D,
|
||||||
@ -619,9 +617,9 @@ def formsemestre_pvjury_pdf(
|
|||||||
"""Generation PV jury en PDF: saisie des paramètres
|
"""Generation PV jury en PDF: saisie des paramètres
|
||||||
Si etudid, PV pour un seul etudiant. Sinon, tout les inscrits au groupe indiqué.
|
Si etudid, PV pour un seul etudiant. Sinon, tout les inscrits au groupe indiqué.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# Mise à jour des groupes d'étapes:
|
# Mise à jour des groupes d'étapes:
|
||||||
sco_groups.create_etapes_partition(context, formsemestre_id)
|
sco_groups.create_etapes_partition(formsemestre_id)
|
||||||
groups_infos = None
|
groups_infos = None
|
||||||
if etudid:
|
if etudid:
|
||||||
# PV pour ce seul étudiant:
|
# PV pour ce seul étudiant:
|
||||||
@ -719,7 +717,7 @@ def formsemestre_pvjury_pdf(
|
|||||||
)
|
)
|
||||||
finally:
|
finally:
|
||||||
PDFLOCK.release()
|
PDFLOCK.release()
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
dt = time.strftime("%Y-%m-%d")
|
dt = time.strftime("%Y-%m-%d")
|
||||||
if groups_infos:
|
if groups_infos:
|
||||||
groups_filename = "-" + groups_infos.groups_filename
|
groups_filename = "-" + groups_infos.groups_filename
|
||||||
@ -731,7 +729,7 @@ def formsemestre_pvjury_pdf(
|
|||||||
|
|
||||||
def descrform_pvjury(context, sem):
|
def descrform_pvjury(context, sem):
|
||||||
"""Définition de formulaire pour PV jury PDF"""
|
"""Définition de formulaire pour PV jury PDF"""
|
||||||
F = sco_formations.formation_list(context, formation_id=sem["formation_id"])[0]
|
F = sco_formations.formation_list(formation_id=sem["formation_id"])[0]
|
||||||
return [
|
return [
|
||||||
(
|
(
|
||||||
"date_commission",
|
"date_commission",
|
||||||
@ -816,7 +814,7 @@ def formsemestre_lettres_individuelles(
|
|||||||
context, formsemestre_id, group_ids=[], REQUEST=None
|
context, formsemestre_id, group_ids=[], REQUEST=None
|
||||||
):
|
):
|
||||||
"Lettres avis jury en PDF"
|
"Lettres avis jury en PDF"
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not group_ids:
|
if not group_ids:
|
||||||
# tous les inscrits du semestre
|
# tous les inscrits du semestre
|
||||||
group_ids = [sco_groups.get_default_group(formsemestre_id)]
|
group_ids = [sco_groups.get_default_group(formsemestre_id)]
|
||||||
@ -887,7 +885,7 @@ def formsemestre_lettres_individuelles(
|
|||||||
formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
dt = time.strftime("%Y-%m-%d")
|
dt = time.strftime("%Y-%m-%d")
|
||||||
groups_filename = "-" + groups_infos.groups_filename
|
groups_filename = "-" + groups_infos.groups_filename
|
||||||
filename = "lettres-%s%s-%s.pdf" % (sem["titre_num"], groups_filename, dt)
|
filename = "lettres-%s%s-%s.pdf" % (sem["titre_num"], groups_filename, dt)
|
||||||
|
@ -348,7 +348,7 @@ def pdf_lettres_individuelles(
|
|||||||
etuds = [x["identite"] for x in dpv["decisions"]]
|
etuds = [x["identite"] for x in dpv["decisions"]]
|
||||||
sco_etud.fill_etuds_info(etuds)
|
sco_etud.fill_etuds_info(etuds)
|
||||||
#
|
#
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
prefs = sco_preferences.SemPreferences(formsemestre_id)
|
prefs = sco_preferences.SemPreferences(formsemestre_id)
|
||||||
params = {
|
params = {
|
||||||
"date_jury": date_jury,
|
"date_jury": date_jury,
|
||||||
|
@ -73,10 +73,8 @@ def formsemestre_recapcomplet(
|
|||||||
pour tous les étudiants, les moyennes par UE et générale,
|
pour tous les étudiants, les moyennes par UE et générale,
|
||||||
trié par moyenne générale décroissante.
|
trié par moyenne générale décroissante.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
F = sco_formations.formation_list(
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, 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"])
|
||||||
# traduit du DTML
|
# traduit du DTML
|
||||||
modejury = int(modejury)
|
modejury = int(modejury)
|
||||||
@ -276,7 +274,7 @@ def make_formsemestre_recapcomplet(
|
|||||||
]
|
]
|
||||||
|
|
||||||
sem = sco_formsemestre.do_formsemestre_list(
|
sem = sco_formsemestre.do_formsemestre_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
nt = sco_cache.NotesTableCache.get(
|
nt = sco_cache.NotesTableCache.get(
|
||||||
formsemestre_id
|
formsemestre_id
|
||||||
@ -285,15 +283,15 @@ def make_formsemestre_recapcomplet(
|
|||||||
ues = nt.get_ues() # incluant le(s) UE de sport
|
ues = nt.get_ues() # incluant le(s) UE de sport
|
||||||
#
|
#
|
||||||
partitions, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
partitions, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
if rank_partition_id and format == "html":
|
if rank_partition_id and format == "html":
|
||||||
# Calcul rang sur une partition et non sur l'ensemble
|
# Calcul rang sur une partition et non sur l'ensemble
|
||||||
# seulement en format HTML (car colonnes rangs toujours presentes en xls)
|
# seulement en format HTML (car colonnes rangs toujours presentes en xls)
|
||||||
rank_partition = sco_groups.get_partition(context, rank_partition_id)
|
rank_partition = sco_groups.get_partition(rank_partition_id)
|
||||||
rank_label = "Rg (%s)" % rank_partition["partition_name"]
|
rank_label = "Rg (%s)" % rank_partition["partition_name"]
|
||||||
else:
|
else:
|
||||||
rank_partition = sco_groups.get_default_partition(context, formsemestre_id)
|
rank_partition = sco_groups.get_default_partition(formsemestre_id)
|
||||||
rank_label = "Rg"
|
rank_label = "Rg"
|
||||||
|
|
||||||
T = nt.get_table_moyennes_triees()
|
T = nt.get_table_moyennes_triees()
|
||||||
@ -380,7 +378,7 @@ def make_formsemestre_recapcomplet(
|
|||||||
gr_name = "Déf."
|
gr_name = "Déf."
|
||||||
is_dem[etudid] = False
|
is_dem[etudid] = False
|
||||||
else:
|
else:
|
||||||
group = sco_groups.get_etud_main_group(context, etudid, sem)
|
group = sco_groups.get_etud_main_group(etudid, sem)
|
||||||
gr_name = group["group_name"] or ""
|
gr_name = group["group_name"] or ""
|
||||||
is_dem[etudid] = False
|
is_dem[etudid] = False
|
||||||
if rank_partition_id:
|
if rank_partition_id:
|
||||||
@ -951,9 +949,7 @@ def formsemestres_bulletins(context, annee_scolaire, REQUEST=None):
|
|||||||
:returns: JSON
|
:returns: JSON
|
||||||
"""
|
"""
|
||||||
jslist = []
|
jslist = []
|
||||||
sems = sco_formsemestre.list_formsemestre_by_etape(
|
sems = sco_formsemestre.list_formsemestre_by_etape(annee_scolaire=annee_scolaire)
|
||||||
context, annee_scolaire=annee_scolaire
|
|
||||||
)
|
|
||||||
log("formsemestres_bulletins(%s): %d sems" % (annee_scolaire, len(sems)))
|
log("formsemestres_bulletins(%s): %d sems" % (annee_scolaire, len(sems)))
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
J, _, _ = _formsemestre_recapcomplet_json(
|
J, _, _ = _formsemestre_recapcomplet_json(
|
||||||
|
@ -223,7 +223,7 @@ def formsemestre_report(
|
|||||||
"""
|
"""
|
||||||
Tableau sur résultats (result) par type de category bac
|
Tableau sur résultats (result) par type de category bac
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not category_name:
|
if not category_name:
|
||||||
category_name = category
|
category_name = category
|
||||||
if not result_name:
|
if not result_name:
|
||||||
@ -258,7 +258,7 @@ def formsemestre_report(
|
|||||||
# """
|
# """
|
||||||
# Tableau sur résultats par type de bac
|
# Tableau sur résultats par type de bac
|
||||||
# """
|
# """
|
||||||
# sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
# sem = sco_formsemestre.get_formsemestre( formsemestre_id)
|
||||||
# title = 'Statistiques bacs ' + sem['titreannee']
|
# title = 'Statistiques bacs ' + sem['titreannee']
|
||||||
# etuds = formsemestre_etuds_stats(context, sem)
|
# etuds = formsemestre_etuds_stats(context, sem)
|
||||||
# tab = formsemestre_report(context, formsemestre_id, etuds, REQUEST=REQUEST,
|
# tab = formsemestre_report(context, formsemestre_id, etuds, REQUEST=REQUEST,
|
||||||
@ -284,7 +284,7 @@ def formsemestre_report_counts(
|
|||||||
"""
|
"""
|
||||||
Tableau comptage avec choix des categories
|
Tableau comptage avec choix des categories
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
category_name = scu.strcapitalize(category)
|
category_name = scu.strcapitalize(category)
|
||||||
title = "Comptages " + category_name
|
title = "Comptages " + category_name
|
||||||
etuds = formsemestre_etuds_stats(context, sem, only_primo=only_primo)
|
etuds = formsemestre_etuds_stats(context, sem, only_primo=only_primo)
|
||||||
@ -405,7 +405,7 @@ def table_suivi_cohorte(
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(
|
sem = sco_formsemestre.get_formsemestre(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
) # sem est le semestre origine
|
) # sem est le semestre origine
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
|
|
||||||
@ -465,7 +465,7 @@ def table_suivi_cohorte(
|
|||||||
sem["members"] = orig_set
|
sem["members"] = orig_set
|
||||||
for s in sems:
|
for s in sems:
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": s["formsemestre_id"]}
|
args={"formsemestre_id": s["formsemestre_id"]}
|
||||||
) # sans dems
|
) # sans dems
|
||||||
inset = set([i["etudid"] for i in ins])
|
inset = set([i["etudid"] for i in ins])
|
||||||
s["members"] = orig_set.intersection(inset)
|
s["members"] = orig_set.intersection(inset)
|
||||||
@ -727,7 +727,7 @@ def formsemestre_suivi_cohorte(
|
|||||||
)
|
)
|
||||||
if only_primo:
|
if only_primo:
|
||||||
tab.base_url += "&only_primo=on"
|
tab.base_url += "&only_primo=on"
|
||||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
t = tab.make_page(format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return t
|
return t
|
||||||
|
|
||||||
@ -1033,7 +1033,7 @@ def tsp_etud_list(
|
|||||||
ramene aussi ensembles des bacs, genres, statuts de (tous) les etudiants
|
ramene aussi ensembles des bacs, genres, statuts de (tous) les etudiants
|
||||||
"""
|
"""
|
||||||
# log('tsp_etud_list(%s, bac="%s")' % (formsemestre_id,bac))
|
# log('tsp_etud_list(%s, bac="%s")' % (formsemestre_id,bac))
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etudids,
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etudids,
|
||||||
etudids = nt.get_etudids()
|
etudids = nt.get_etudids()
|
||||||
etuds = []
|
etuds = []
|
||||||
@ -1088,7 +1088,7 @@ def table_suivi_parcours(
|
|||||||
context, formsemestre_id, only_primo=False, grouped_parcours=True
|
context, formsemestre_id, only_primo=False, grouped_parcours=True
|
||||||
):
|
):
|
||||||
"""Tableau recapitulant tous les parcours"""
|
"""Tableau recapitulant tous les parcours"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etuds, bacs, bacspecialites, annee_bacs, civilites, statuts = tsp_etud_list(
|
etuds, bacs, bacspecialites, annee_bacs, civilites, statuts = tsp_etud_list(
|
||||||
context, formsemestre_id, only_primo=only_primo
|
context, formsemestre_id, only_primo=only_primo
|
||||||
)
|
)
|
||||||
@ -1221,7 +1221,7 @@ def formsemestre_suivi_parcours(
|
|||||||
tab.base_url += "&only_primo=1"
|
tab.base_url += "&only_primo=1"
|
||||||
if no_grouping:
|
if no_grouping:
|
||||||
tab.base_url += "&no_grouping=1"
|
tab.base_url += "&no_grouping=1"
|
||||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
t = tab.make_page(format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return t
|
return t
|
||||||
F = [
|
F = [
|
||||||
@ -1484,7 +1484,7 @@ def formsemestre_graph_parcours(
|
|||||||
):
|
):
|
||||||
"""Graphe suivi cohortes"""
|
"""Graphe suivi cohortes"""
|
||||||
# log("formsemestre_graph_parcours")
|
# log("formsemestre_graph_parcours")
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if format == "pdf":
|
if format == "pdf":
|
||||||
(
|
(
|
||||||
doc,
|
doc,
|
||||||
|
@ -763,7 +763,7 @@ def feuille_saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
|
|||||||
M = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.do_moduleimpl_list(context, 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(context, args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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"]:
|
||||||
indication_date = ndb.DateDMYtoISO(E["jour"])
|
indication_date = ndb.DateDMYtoISO(E["jour"])
|
||||||
@ -790,7 +790,7 @@ def feuille_saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
|
|||||||
etat=None,
|
etat=None,
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
groups = sco_groups.listgroups(context, groups_infos.group_ids)
|
groups = sco_groups.listgroups(groups_infos.group_ids)
|
||||||
gr_title_filename = sco_groups.listgroups_filename(groups)
|
gr_title_filename = sco_groups.listgroups_filename(groups)
|
||||||
# gr_title = sco_groups.listgroups_abbrev(groups)
|
# gr_title = sco_groups.listgroups_abbrev(groups)
|
||||||
if None in [g["group_name"] for g in groups]: # tous les etudiants
|
if None in [g["group_name"] for g in groups]: # tous les etudiants
|
||||||
@ -809,7 +809,7 @@ def feuille_saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
|
|||||||
etuds = _get_sorted_etuds(context, E, etudids, formsemestre_id)
|
etuds = _get_sorted_etuds(context, E, etudids, formsemestre_id)
|
||||||
for e in etuds:
|
for e in etuds:
|
||||||
etudid = e["etudid"]
|
etudid = e["etudid"]
|
||||||
groups = sco_groups.get_etud_groups(context, etudid, sem)
|
groups = sco_groups.get_etud_groups(etudid, sem)
|
||||||
grc = sco_groups.listgroups_abbrev(groups)
|
grc = sco_groups.listgroups_abbrev(groups)
|
||||||
|
|
||||||
L.append(
|
L.append(
|
||||||
@ -972,7 +972,7 @@ def saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
|
|||||||
|
|
||||||
|
|
||||||
def _get_sorted_etuds(context, E, etudids, formsemestre_id):
|
def _get_sorted_etuds(context, E, etudids, formsemestre_id):
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
NotesDB = sco_evaluations.do_evaluation_get_all_notes(
|
NotesDB = sco_evaluations.do_evaluation_get_all_notes(
|
||||||
E["evaluation_id"]
|
E["evaluation_id"]
|
||||||
) # Notes existantes
|
) # Notes existantes
|
||||||
@ -985,10 +985,10 @@ def _get_sorted_etuds(context, E, etudids, formsemestre_id):
|
|||||||
etuds.append(e)
|
etuds.append(e)
|
||||||
# infos inscription dans ce semestre
|
# infos inscription dans ce semestre
|
||||||
e["inscr"] = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
e["inscr"] = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid, "formsemestre_id": formsemestre_id}
|
{"etudid": etudid, "formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
# Groupes auxquels appartient cet étudiant:
|
# Groupes auxquels appartient cet étudiant:
|
||||||
e["groups"] = sco_groups.get_etud_groups(context, etudid, sem)
|
e["groups"] = sco_groups.get_etud_groups(etudid, sem)
|
||||||
|
|
||||||
# Information sur absence (tenant compte de la demi-journée)
|
# Information sur absence (tenant compte de la demi-journée)
|
||||||
jour_iso = ndb.DateDMYtoISO(E["jour"])
|
jour_iso = ndb.DateDMYtoISO(E["jour"])
|
||||||
|
@ -232,7 +232,6 @@ class SemSet(dict):
|
|||||||
sem
|
sem
|
||||||
for sem in sems
|
for sem in sems
|
||||||
if sco_formsemestre.sem_in_semestre_scolaire(
|
if sco_formsemestre.sem_in_semestre_scolaire(
|
||||||
self.context,
|
|
||||||
sem,
|
sem,
|
||||||
year=self["annee_scolaire"],
|
year=self["annee_scolaire"],
|
||||||
saison=self["sem_id"],
|
saison=self["sem_id"],
|
||||||
@ -403,7 +402,7 @@ def do_semset_add_sem(context, semset_id, formsemestre_id, REQUEST=None):
|
|||||||
raise ScoValueError("empty semset_id")
|
raise ScoValueError("empty semset_id")
|
||||||
s = SemSet(context, semset_id=semset_id)
|
s = SemSet(context, semset_id=semset_id)
|
||||||
# check for valid formsemestre_id
|
# check for valid formsemestre_id
|
||||||
_ = sco_formsemestre.get_formsemestre(context, formsemestre_id) # raise exc
|
_ = sco_formsemestre.get_formsemestre(formsemestre_id) # raise exc
|
||||||
|
|
||||||
s.add(formsemestre_id)
|
s.add(formsemestre_id)
|
||||||
|
|
||||||
@ -474,7 +473,7 @@ def semset_page(context, format="html", REQUEST=None):
|
|||||||
preferences=sco_preferences.SemPreferences(),
|
preferences=sco_preferences.SemPreferences(),
|
||||||
)
|
)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
page_title = "Ensembles de semestres"
|
page_title = "Ensembles de semestres"
|
||||||
H = [
|
H = [
|
||||||
|
@ -90,7 +90,7 @@ def formsemestre_synchro_etuds(
|
|||||||
que l'on va importer/inscrire
|
que l'on va importer/inscrire
|
||||||
"""
|
"""
|
||||||
log("formsemestre_synchro_etuds: formsemestre_id=%s" % formsemestre_id)
|
log("formsemestre_synchro_etuds: formsemestre_id=%s" % formsemestre_id)
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
||||||
# Write access ?
|
# Write access ?
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
@ -252,7 +252,7 @@ def formsemestre_synchro_etuds(
|
|||||||
)
|
)
|
||||||
#
|
#
|
||||||
partitions = sco_groups.get_partitions_list(
|
partitions = sco_groups.get_partitions_list(
|
||||||
context, formsemestre_id, with_default=False
|
formsemestre_id, with_default=False
|
||||||
)
|
)
|
||||||
if partitions: # il y a au moins une vraie partition
|
if partitions: # il y a au moins une vraie partition
|
||||||
H.append(
|
H.append(
|
||||||
@ -782,9 +782,9 @@ def formsemestre_import_etud_admission(
|
|||||||
de chaque étudiant depuis le portail.
|
de chaque étudiant depuis le portail.
|
||||||
N'affecte pas les etudiants inconnus sur le portail.
|
N'affecte pas les etudiants inconnus sur le portail.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"formsemestre_id": formsemestre_id}
|
{"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
log(
|
log(
|
||||||
"formsemestre_import_etud_admission: %s (%d etuds)"
|
"formsemestre_import_etud_admission: %s (%d etuds)"
|
||||||
|
@ -385,7 +385,6 @@ def _trombino_pdf(context, groups_infos, REQUEST):
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
sco_pdf.ScolarsPageTemplate(
|
sco_pdf.ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context=context,
|
|
||||||
preferences=sco_preferences.SemPreferences(sem["formsemestre_id"]),
|
preferences=sco_preferences.SemPreferences(sem["formsemestre_id"]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -462,7 +461,6 @@ def _listeappel_photos_pdf(context, groups_infos, REQUEST):
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
sco_pdf.ScolarsPageTemplate(
|
sco_pdf.ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context,
|
|
||||||
preferences=sco_preferences.SemPreferences(sem["formsemestre_id"]),
|
preferences=sco_preferences.SemPreferences(sem["formsemestre_id"]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -141,7 +141,7 @@ def pdf_trombino_tours(
|
|||||||
for group_id in groups_infos.group_ids:
|
for group_id in groups_infos.group_ids:
|
||||||
if group_id != "None":
|
if group_id != "None":
|
||||||
members, group, group_tit, sem, nbdem = sco_groups.get_group_infos(
|
members, group, group_tit, sem, nbdem = sco_groups.get_group_infos(
|
||||||
context, group_id, "I"
|
group_id, "I"
|
||||||
)
|
)
|
||||||
groups += " %s" % group_tit
|
groups += " %s" % group_tit
|
||||||
L = []
|
L = []
|
||||||
@ -179,9 +179,7 @@ def pdf_trombino_tours(
|
|||||||
img = sco_trombino._get_etud_platypus_image(
|
img = sco_trombino._get_etud_platypus_image(
|
||||||
context, m, image_width=PHOTOWIDTH
|
context, m, image_width=PHOTOWIDTH
|
||||||
)
|
)
|
||||||
etud_main_group = sco_groups.get_etud_main_group(
|
etud_main_group = sco_groups.get_etud_main_group(m["etudid"], sem)
|
||||||
context, m["etudid"], sem
|
|
||||||
)
|
|
||||||
if group_id != etud_main_group["group_id"]:
|
if group_id != etud_main_group["group_id"]:
|
||||||
text_group = " (" + etud_main_group["group_name"] + ")"
|
text_group = " (" + etud_main_group["group_name"] + ")"
|
||||||
else:
|
else:
|
||||||
@ -271,7 +269,6 @@ def pdf_trombino_tours(
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
ScolarsPageTemplate(
|
ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context=context,
|
|
||||||
preferences=sco_preferences.SemPreferences(),
|
preferences=sco_preferences.SemPreferences(),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -391,7 +388,7 @@ def pdf_feuille_releve_absences(
|
|||||||
|
|
||||||
for group_id in groups_infos.group_ids:
|
for group_id in groups_infos.group_ids:
|
||||||
members, group, group_tit, sem, nbdem = sco_groups.get_group_infos(
|
members, group, group_tit, sem, nbdem = sco_groups.get_group_infos(
|
||||||
context, group_id, "I"
|
group_id, "I"
|
||||||
)
|
)
|
||||||
L = []
|
L = []
|
||||||
|
|
||||||
@ -467,7 +464,6 @@ def pdf_feuille_releve_absences(
|
|||||||
document.addPageTemplates(
|
document.addPageTemplates(
|
||||||
ScolarsPageTemplate(
|
ScolarsPageTemplate(
|
||||||
document,
|
document,
|
||||||
context=context,
|
|
||||||
preferences=sco_preferences.SemPreferences(),
|
preferences=sco_preferences.SemPreferences(),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -86,7 +86,7 @@ def external_ue_create(
|
|||||||
):
|
):
|
||||||
"""Crée UE/matiere/module/evaluation puis saisie les notes"""
|
"""Crée UE/matiere/module/evaluation puis saisie les notes"""
|
||||||
log("external_ue_create( formsemestre_id=%s, titre=%s )" % (formsemestre_id, titre))
|
log("external_ue_create( formsemestre_id=%s, titre=%s )" % (formsemestre_id, titre))
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# Contrôle d'accès:
|
# Contrôle d'accès:
|
||||||
if not current_user.has_permission(Permission.ScoImplement):
|
if not current_user.has_permission(Permission.ScoImplement):
|
||||||
if not sem["resp_can_edit"] or (current_user.id not in sem["responsables"]):
|
if not sem["resp_can_edit"] or (current_user.id not in sem["responsables"]):
|
||||||
@ -219,7 +219,7 @@ def external_ue_create_form(context, formsemestre_id, etudid, REQUEST=None):
|
|||||||
Note: pour l'édition éventuelle de ces informations, on utilisera les
|
Note: pour l'édition éventuelle de ces informations, on utilisera les
|
||||||
fonctions standards sur les UE/modules/notes
|
fonctions standards sur les UE/modules/notes
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# Contrôle d'accès:
|
# Contrôle d'accès:
|
||||||
if not current_user.has_permission(Permission.ScoImplement):
|
if not current_user.has_permission(Permission.ScoImplement):
|
||||||
if not sem["resp_can_edit"] or (current_user.id not in sem["responsables"]):
|
if not sem["resp_can_edit"] or (current_user.id not in sem["responsables"]):
|
||||||
@ -246,9 +246,7 @@ def external_ue_create_form(context, formsemestre_id, etudid, REQUEST=None):
|
|||||||
""",
|
""",
|
||||||
]
|
]
|
||||||
html_footer = html_sco_header.sco_footer()
|
html_footer = html_sco_header.sco_footer()
|
||||||
Fo = sco_formations.formation_list(
|
Fo = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
context, args={"formation_id": sem["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"])
|
||||||
ue_types = parcours.ALLOWED_UE_TYPES
|
ue_types = parcours.ALLOWED_UE_TYPES
|
||||||
ue_types.sort()
|
ue_types.sort()
|
||||||
|
@ -167,7 +167,7 @@ def evaluation_list_operations(context, REQUEST, evaluation_id):
|
|||||||
% (E["description"], E["jour"]),
|
% (E["description"], E["jour"]),
|
||||||
preferences=sco_preferences.SemPreferences(M["formsemestre_id"]),
|
preferences=sco_preferences.SemPreferences(M["formsemestre_id"]),
|
||||||
)
|
)
|
||||||
return tab.make_page(context, REQUEST=REQUEST)
|
return tab.make_page(REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_list_saisies_notes(
|
def formsemestre_list_saisies_notes(
|
||||||
@ -176,7 +176,7 @@ def formsemestre_list_saisies_notes(
|
|||||||
"""Table listant toutes les opérations de saisies de notes, dans toutes
|
"""Table listant toutes les opérations de saisies de notes, dans toutes
|
||||||
les évaluations du semestre.
|
les évaluations du semestre.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
r = ndb.SimpleDictFetch(
|
r = ndb.SimpleDictFetch(
|
||||||
"""SELECT i.nom, n.*, mod.titre, e.description, e.jour
|
"""SELECT i.nom, n.*, mod.titre, e.description, e.jour
|
||||||
FROM notes_notes n, notes_evaluation e, notes_moduleimpl mi,
|
FROM notes_notes n, notes_evaluation e, notes_moduleimpl mi,
|
||||||
@ -222,7 +222,7 @@ def formsemestre_list_saisies_notes(
|
|||||||
base_url="%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id),
|
base_url="%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id),
|
||||||
origin="Généré par %s le " % VERSION.SCONAME + scu.timedate_human_repr() + "",
|
origin="Généré par %s le " % VERSION.SCONAME + scu.timedate_human_repr() + "",
|
||||||
)
|
)
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
def get_note_history(context, evaluation_id, etudid, REQUEST=None, fmt=""):
|
def get_note_history(context, evaluation_id, etudid, REQUEST=None, fmt=""):
|
||||||
|
@ -134,7 +134,7 @@ def _toboolean(x):
|
|||||||
def index_html(context, REQUEST=None):
|
def index_html(context, REQUEST=None):
|
||||||
"""Gestionnaire absences, page principale"""
|
"""Gestionnaire absences, page principale"""
|
||||||
# crude portage from 1999 DTML
|
# crude portage from 1999 DTML
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context)
|
sems = sco_formsemestre.do_formsemestre_list()
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
|
|
||||||
H = [
|
H = [
|
||||||
@ -194,7 +194,7 @@ def cal_select_week(context, year=None):
|
|||||||
"display calendar allowing week selection"
|
"display calendar allowing week selection"
|
||||||
if not year:
|
if not year:
|
||||||
year = scu.AnneeScolaire()
|
year = scu.AnneeScolaire()
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context)
|
sems = sco_formsemestre.do_formsemestre_list()
|
||||||
if not sems:
|
if not sems:
|
||||||
js = ""
|
js = ""
|
||||||
else:
|
else:
|
||||||
@ -364,9 +364,7 @@ def SignaleAbsenceGrHebdo(
|
|||||||
# Si aucun etudiant n'est inscrit au module choisi...
|
# Si aucun etudiant n'est inscrit au module choisi...
|
||||||
moduleimpl_id = None
|
moduleimpl_id = None
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id)
|
nt = sco_cache.NotesTableCache.get(formsemestre_id)
|
||||||
sem = sco_formsemestre.do_formsemestre_list(
|
sem = sco_formsemestre.do_formsemestre_list({"formsemestre_id": formsemestre_id})[0]
|
||||||
context, {"formsemestre_id": formsemestre_id}
|
|
||||||
)[0]
|
|
||||||
|
|
||||||
# calcule dates jours de cette semaine
|
# calcule dates jours de cette semaine
|
||||||
# liste de dates iso "yyyy-mm-dd"
|
# liste de dates iso "yyyy-mm-dd"
|
||||||
@ -535,7 +533,7 @@ def SignaleAbsenceGrSemestre(
|
|||||||
if etuds:
|
if etuds:
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id)
|
nt = sco_cache.NotesTableCache.get(formsemestre_id)
|
||||||
sem = sco_formsemestre.do_formsemestre_list(
|
sem = sco_formsemestre.do_formsemestre_list(
|
||||||
context, {"formsemestre_id": formsemestre_id}
|
{"formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
work_saturday = sco_abs.is_work_saturday(context)
|
work_saturday = sco_abs.is_work_saturday(context)
|
||||||
jourdebut = sco_abs.ddmmyyyy(datedebut, work_saturday=work_saturday)
|
jourdebut = sco_abs.ddmmyyyy(datedebut, work_saturday=work_saturday)
|
||||||
@ -986,7 +984,7 @@ ou entrez une date pour visualiser les absents un jour donné :
|
|||||||
"""
|
"""
|
||||||
% (REQUEST.URL0, formsemestre_id, groups_infos.get_form_elem()),
|
% (REQUEST.URL0, formsemestre_id, groups_infos.get_form_elem()),
|
||||||
)
|
)
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/EtatAbsencesDate")
|
@bp.route("/EtatAbsencesDate")
|
||||||
@ -1129,7 +1127,7 @@ def AddBilletAbsence(
|
|||||||
billets = sco_abs.billet_absence_list(cnx, {"billet_id": billet_id})
|
billets = sco_abs.billet_absence_list(cnx, {"billet_id": billet_id})
|
||||||
tab = _tableBillets(context, billets, etud=etud)
|
tab = _tableBillets(context, billets, etud=etud)
|
||||||
log("AddBilletAbsence: new billet_id=%s (%gs)" % (billet_id, time.time() - t0))
|
log("AddBilletAbsence: new billet_id=%s (%gs)" % (billet_id, time.time() - t0))
|
||||||
return tab.make_page(context, REQUEST=REQUEST, format="xml")
|
return tab.make_page(REQUEST=REQUEST, format="xml")
|
||||||
else:
|
else:
|
||||||
return billet_id
|
return billet_id
|
||||||
|
|
||||||
@ -1261,7 +1259,7 @@ def listeBilletsEtud(context, etudid=False, REQUEST=None, format="html"):
|
|||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
billets = sco_abs.billet_absence_list(cnx, {"etudid": etud["etudid"]})
|
billets = sco_abs.billet_absence_list(cnx, {"etudid": etud["etudid"]})
|
||||||
tab = _tableBillets(context, billets, etud=etud)
|
tab = _tableBillets(context, billets, etud=etud)
|
||||||
return tab.make_page(context, REQUEST=REQUEST, format=format)
|
return tab.make_page(REQUEST=REQUEST, format=format)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/XMLgetBilletsEtud")
|
@bp.route("/XMLgetBilletsEtud")
|
||||||
|
@ -236,7 +236,7 @@ def index_html(
|
|||||||
preferences=context.get_preferences(),
|
preferences=context.get_preferences(),
|
||||||
)
|
)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page( format=format, REQUEST=REQUEST)
|
||||||
else:
|
else:
|
||||||
H = [
|
H = [
|
||||||
entreprise_header(context, REQUEST=REQUEST, page_title="Suivi entreprises"),
|
entreprise_header(context, REQUEST=REQUEST, page_title="Suivi entreprises"),
|
||||||
@ -311,7 +311,7 @@ def entreprise_contact_list(context, entreprise_id=None, format="html", REQUEST=
|
|||||||
preferences=context.get_preferences(),
|
preferences=context.get_preferences(),
|
||||||
)
|
)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page( format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
H.append(tab.html())
|
H.append(tab.html())
|
||||||
|
|
||||||
@ -422,7 +422,7 @@ def entreprise_correspondant_list(
|
|||||||
preferences=context.get_preferences(),
|
preferences=context.get_preferences(),
|
||||||
)
|
)
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page( format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
H.append(tab.html())
|
H.append(tab.html())
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ def formation_list(context, 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).
|
||||||
"""
|
"""
|
||||||
r = sco_formations.formation_list(context, formation_id=formation_id, args=args)
|
r = sco_formations.formation_list(formation_id=formation_id, args=args)
|
||||||
return scu.sendResult(REQUEST, r, name="formation", format=format)
|
return scu.sendResult(REQUEST, r, name="formation", format=format)
|
||||||
|
|
||||||
|
|
||||||
@ -557,9 +557,7 @@ sco_publish(
|
|||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def formation_count_sems(context, formation_id):
|
def formation_count_sems(context, formation_id):
|
||||||
"Number of formsemestre in this formation (locked or not)"
|
"Number of formsemestre in this formation (locked or not)"
|
||||||
sems = sco_formsemestre.do_formsemestre_list(
|
sems = sco_formsemestre.do_formsemestre_list(args={"formation_id": formation_id})
|
||||||
context, args={"formation_id": formation_id}
|
|
||||||
)
|
|
||||||
return len(sems)
|
return len(sems)
|
||||||
|
|
||||||
|
|
||||||
@ -606,7 +604,7 @@ def formsemestre_list(
|
|||||||
for argname in ("formsemestre_id", "formation_id", "etape_apo"):
|
for argname in ("formsemestre_id", "formation_id", "etape_apo"):
|
||||||
if L[argname] is not None:
|
if L[argname] is not None:
|
||||||
args[argname] = L[argname]
|
args[argname] = L[argname]
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context, args=args)
|
sems = sco_formsemestre.do_formsemestre_list(args=args)
|
||||||
# log('formsemestre_list: format="%s", %s semestres found' % (format,len(sems)))
|
# log('formsemestre_list: format="%s", %s semestres found' % (format,len(sems)))
|
||||||
return scu.sendResult(REQUEST, sems, name="formsemestre", format=format)
|
return scu.sendResult(REQUEST, sems, name="formsemestre", format=format)
|
||||||
|
|
||||||
@ -628,7 +626,7 @@ def XMLgetFormsemestres(context, etape_apo=None, formsemestre_id=None, REQUEST=N
|
|||||||
if REQUEST:
|
if REQUEST:
|
||||||
REQUEST.RESPONSE.setHeader("content-type", scu.XML_MIMETYPE)
|
REQUEST.RESPONSE.setHeader("content-type", scu.XML_MIMETYPE)
|
||||||
doc = ElementTree.Element("formsemestrelist")
|
doc = ElementTree.Element("formsemestrelist")
|
||||||
for sem in sco_formsemestre.do_formsemestre_list(context, args=args):
|
for sem in sco_formsemestre.do_formsemestre_list(args=args):
|
||||||
doc.append("formsemestre", **sem)
|
doc.append("formsemestre", **sem)
|
||||||
|
|
||||||
return sco_xml.XML_HEADER + ElementTree.tostring(doc).decode(scu.SCO_ENCODING)
|
return sco_xml.XML_HEADER + ElementTree.tostring(doc).decode(scu.SCO_ENCODING)
|
||||||
@ -974,7 +972,7 @@ def view_module_abs(context, REQUEST, moduleimpl_id, format="html"):
|
|||||||
M = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
M = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
||||||
context, moduleimpl_id=moduleimpl_id
|
context, moduleimpl_id=moduleimpl_id
|
||||||
)[0]
|
)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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(context, moduleimpl_id)
|
||||||
@ -1041,7 +1039,7 @@ def view_module_abs(context, REQUEST, moduleimpl_id, format="html"):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if format != "html":
|
if format != "html":
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
return "\n".join(H) + tab.html() + html_sco_header.sco_footer()
|
return "\n".join(H) + tab.html() + html_sco_header.sco_footer()
|
||||||
|
|
||||||
@ -1129,7 +1127,7 @@ def formsemestre_enseignants_list(context, REQUEST, formsemestre_id, format="htm
|
|||||||
"""Liste les enseignants intervenants dans le semestre (resp. modules et chargés de TD)
|
"""Liste les enseignants intervenants dans le semestre (resp. modules et chargés de TD)
|
||||||
et indique les absences saisies par chacun.
|
et indique les absences saisies par chacun.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, 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(
|
||||||
context, formsemestre_id=formsemestre_id
|
context, formsemestre_id=formsemestre_id
|
||||||
@ -1274,7 +1272,7 @@ def do_formsemestre_inscription_listinscrits(
|
|||||||
):
|
):
|
||||||
"""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(
|
||||||
context, formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
return scu.sendResult(REQUEST, r, format=format, name="inscrits")
|
return scu.sendResult(REQUEST, r, format=format, name="inscrits")
|
||||||
|
|
||||||
@ -1291,7 +1289,7 @@ def formsemestre_desinscription(
|
|||||||
S'il s'agit d'un semestre extérieur et qu'il n'y a plus d'inscrit,
|
S'il s'agit d'un semestre extérieur et qu'il n'y a plus d'inscrit,
|
||||||
le semestre sera supprimé.
|
le semestre sera supprimé.
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# -- check lock
|
# -- check lock
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("desinscription impossible: semestre verrouille")
|
raise ScoValueError("desinscription impossible: semestre verrouille")
|
||||||
@ -1332,7 +1330,7 @@ def formsemestre_desinscription(
|
|||||||
sem["date_fin"],
|
sem["date_fin"],
|
||||||
)
|
)
|
||||||
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
nbinscrits = len(inscrits)
|
nbinscrits = len(inscrits)
|
||||||
if nbinscrits <= 1:
|
if nbinscrits <= 1:
|
||||||
@ -1722,7 +1720,7 @@ def formsemestre_bulletins_choice(
|
|||||||
context, REQUEST, formsemestre_id, title="", explanation="", choose_mail=False
|
context, REQUEST, formsemestre_id, title="", explanation="", choose_mail=False
|
||||||
):
|
):
|
||||||
"""Choix d'une version de bulletin"""
|
"""Choix d'une version de bulletin"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(context, REQUEST, title, sem),
|
html_sco_header.html_sem_header(context, REQUEST, title, sem),
|
||||||
"""
|
"""
|
||||||
@ -1841,7 +1839,7 @@ def appreciation_add_form(
|
|||||||
edit = 1
|
edit = 1
|
||||||
else:
|
else:
|
||||||
edit = 0
|
edit = 0
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# check custom access permission
|
# check custom access permission
|
||||||
can_edit_app = (current_user.id in sem["responsables"]) or (
|
can_edit_app = (current_user.id in sem["responsables"]) or (
|
||||||
current_user.has_permission(Permission.ScoEtudInscrit)
|
current_user.has_permission(Permission.ScoEtudInscrit)
|
||||||
@ -2144,7 +2142,7 @@ def formsemestre_validation_suppress_etud(
|
|||||||
dest_url=scu.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
)
|
)
|
||||||
if not dialog_confirmed:
|
if not dialog_confirmed:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0]
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etud_decision_sem
|
nt = sco_cache.NotesTableCache.get(formsemestre_id) # > get_etud_decision_sem
|
||||||
decision_jury = nt.get_etud_decision_sem(etudid)
|
decision_jury = nt.get_etud_decision_sem(etudid)
|
||||||
@ -2378,7 +2376,7 @@ def check_sem_integrity(context, formsemestre_id, REQUEST, fix=False):
|
|||||||
"""Debug.
|
"""Debug.
|
||||||
Check that ue and module formations are consistents
|
Check that ue and module formations are consistents
|
||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
modimpls = sco_moduleimpl.do_moduleimpl_list(
|
modimpls = sco_moduleimpl.do_moduleimpl_list(
|
||||||
context, formsemestre_id=formsemestre_id
|
context, formsemestre_id=formsemestre_id
|
||||||
@ -2427,7 +2425,7 @@ def check_sem_integrity(context, formsemestre_id, REQUEST, fix=False):
|
|||||||
formation_id = formations_set.pop()
|
formation_id = formations_set.pop()
|
||||||
if sem["formation_id"] != formation_id:
|
if sem["formation_id"] != formation_id:
|
||||||
sem["formation_id"] = formation_id
|
sem["formation_id"] = formation_id
|
||||||
sco_formsemestre.do_formsemestre_edit(context, sem)
|
sco_formsemestre.do_formsemestre_edit(sem)
|
||||||
H.append("""<p class="alert">Problème réparé: vérifiez</p>""")
|
H.append("""<p class="alert">Problème réparé: vérifiez</p>""")
|
||||||
else:
|
else:
|
||||||
H.append(
|
H.append(
|
||||||
@ -2541,12 +2539,10 @@ def check_formsemestre_integrity(context, formsemestre_id, REQUEST=None):
|
|||||||
def check_integrity_all(context, REQUEST=None):
|
def check_integrity_all(context, REQUEST=None):
|
||||||
"debug: verifie tous les semestres et tt les formations"
|
"debug: verifie tous les semestres et tt les formations"
|
||||||
# formations
|
# formations
|
||||||
for F in sco_formations.formation_list(
|
for F in sco_formations.formation_list():
|
||||||
context,
|
|
||||||
):
|
|
||||||
check_form_integrity(context, F["formation_id"], REQUEST=REQUEST)
|
check_form_integrity(context, F["formation_id"], REQUEST=REQUEST)
|
||||||
# semestres
|
# semestres
|
||||||
for sem in sco_formsemestre.do_formsemestre_list(context):
|
for sem in sco_formsemestre.do_formsemestre_list():
|
||||||
check_formsemestre_integrity(context, sem["formsemestre_id"], REQUEST=REQUEST)
|
check_formsemestre_integrity(context, sem["formsemestre_id"], REQUEST=REQUEST)
|
||||||
return (
|
return (
|
||||||
html_sco_header.sco_header()
|
html_sco_header.sco_header()
|
||||||
|
@ -185,7 +185,7 @@ def edit_preferences(context, REQUEST):
|
|||||||
def formsemestre_edit_preferences(context, formsemestre_id, REQUEST):
|
def formsemestre_edit_preferences(context, formsemestre_id, REQUEST):
|
||||||
"""Edit preferences for a semestre"""
|
"""Edit preferences for a semestre"""
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
ok = (
|
ok = (
|
||||||
authuser.has_permission(Permission.ScoImplement)
|
authuser.has_permission(Permission.ScoImplement)
|
||||||
or ((str(authuser) in sem["responsables"]) and sem["resp_can_edit"])
|
or ((str(authuser) in sem["responsables"]) and sem["resp_can_edit"])
|
||||||
@ -249,7 +249,7 @@ def showEtudLog(context, etudid, format="html", REQUEST=None):
|
|||||||
preferences=sco_preferences.SemPreferences(),
|
preferences=sco_preferences.SemPreferences(),
|
||||||
)
|
)
|
||||||
|
|
||||||
return tab.make_page(context, format=format, REQUEST=REQUEST)
|
return tab.make_page(format=format, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
|
||||||
# ---------- PAGE ACCUEIL (listes) --------------
|
# ---------- PAGE ACCUEIL (listes) --------------
|
||||||
@ -403,7 +403,7 @@ def etud_info(context, etudid=None, format="xml", REQUEST=None):
|
|||||||
|
|
||||||
sem = etud["cursem"]
|
sem = etud["cursem"]
|
||||||
if sem:
|
if sem:
|
||||||
sco_groups.etud_add_group_infos(context, etud, sem)
|
sco_groups.etud_add_group_infos(etud, sem)
|
||||||
d["insemestre"] = [
|
d["insemestre"] = [
|
||||||
{
|
{
|
||||||
"current": "1",
|
"current": "1",
|
||||||
@ -736,7 +736,7 @@ sco_publish(
|
|||||||
# default=False,
|
# default=False,
|
||||||
# numero=None,
|
# numero=None,
|
||||||
# redirect=1):
|
# redirect=1):
|
||||||
# return sco_groups.partition_create(context, formsemestre_id,
|
# return sco_groups.partition_create( formsemestre_id,
|
||||||
|
|
||||||
|
|
||||||
sco_publish("/etud_info_html", sco_page_etud.etud_info_html, Permission.ScoView)
|
sco_publish("/etud_info_html", sco_page_etud.etud_info_html, Permission.ScoView)
|
||||||
@ -893,7 +893,7 @@ def _formDem_of_Def(
|
|||||||
):
|
):
|
||||||
"Formulaire démission ou défaillance Etudiant"
|
"Formulaire démission ou défaillance Etudiant"
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=1, REQUEST=REQUEST)[0]
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=1, REQUEST=REQUEST)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
|
|
||||||
@ -980,12 +980,12 @@ def _do_dem_or_def_etud(
|
|||||||
# un "evenement" scolarite
|
# un "evenement" scolarite
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
# check lock
|
# check lock
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
#
|
#
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid, "formsemestre_id": formsemestre_id}
|
{"etudid": etudid, "formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
if not ins:
|
if not ins:
|
||||||
raise ScoException("etudiant non inscrit ?!")
|
raise ScoException("etudiant non inscrit ?!")
|
||||||
@ -1070,7 +1070,7 @@ def _do_cancel_dem_or_def(
|
|||||||
):
|
):
|
||||||
"Annule une demission ou une défaillance"
|
"Annule une demission ou une défaillance"
|
||||||
# check lock
|
# check lock
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
# verif
|
# verif
|
||||||
@ -1095,7 +1095,7 @@ def _do_cancel_dem_or_def(
|
|||||||
)
|
)
|
||||||
#
|
#
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, {"etudid": etudid, "formsemestre_id": formsemestre_id}
|
{"etudid": etudid, "formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
if ins["etat"] != etat_current:
|
if ins["etat"] != etat_current:
|
||||||
raise ScoException("etudiant non %s !!!" % etat_current) # obviously a bug
|
raise ScoException("etudiant non %s !!!" % etat_current) # obviously a bug
|
||||||
@ -1620,7 +1620,7 @@ def check_group_apogee(
|
|||||||
XXX A re-écrire pour API 2: prendre liste dans l'étape et vérifier à partir de cela.
|
XXX A re-écrire pour API 2: prendre liste dans l'étape et vérifier à partir de cela.
|
||||||
"""
|
"""
|
||||||
etat = etat or None
|
etat = etat or None
|
||||||
members, group, _, sem, _ = sco_groups.get_group_infos(context, group_id, etat=etat)
|
members, group, _, sem, _ = sco_groups.get_group_infos(group_id, etat=etat)
|
||||||
formsemestre_id = group["formsemestre_id"]
|
formsemestre_id = group["formsemestre_id"]
|
||||||
|
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
@ -1766,7 +1766,7 @@ def check_group_apogee(
|
|||||||
def form_students_import_excel(context, REQUEST, formsemestre_id=None):
|
def form_students_import_excel(context, REQUEST, formsemestre_id=None):
|
||||||
"formulaire import xls"
|
"formulaire import xls"
|
||||||
if formsemestre_id:
|
if formsemestre_id:
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
dest_url = (
|
dest_url = (
|
||||||
# scu.ScoURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id # TODO: Remplacer par for_url ?
|
# scu.ScoURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id # TODO: Remplacer par for_url ?
|
||||||
url_for(
|
url_for(
|
||||||
@ -1929,7 +1929,7 @@ def import_generate_excel_sample(context, REQUEST, with_codesemestre="1"):
|
|||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def import_generate_admission_sample(context, REQUEST, formsemestre_id):
|
def import_generate_admission_sample(context, REQUEST, formsemestre_id):
|
||||||
"une feuille excel pour importation données admissions"
|
"une feuille excel pour importation données admissions"
|
||||||
group = sco_groups.get_group(context, sco_groups.get_default_group(formsemestre_id))
|
group = sco_groups.get_group(sco_groups.get_default_group(formsemestre_id))
|
||||||
fmt = sco_import_etuds.sco_import_format()
|
fmt = sco_import_etuds.sco_import_format()
|
||||||
data = sco_import_etuds.sco_import_generate_excel_sample(
|
data = sco_import_etuds.sco_import_generate_excel_sample(
|
||||||
fmt,
|
fmt,
|
||||||
@ -2110,7 +2110,7 @@ def stat_bac(context, formsemestre_id):
|
|||||||
"Renvoie statistisques sur nb d'etudiants par bac"
|
"Renvoie statistisques sur nb d'etudiants par bac"
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
context, args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)
|
)
|
||||||
Bacs = {} # type bac : nb etud
|
Bacs = {} # type bac : nb etud
|
||||||
for i in ins:
|
for i in ins:
|
||||||
|
191
refactor.py
191
refactor.py
@ -1,191 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: UTF-8 -*
|
|
||||||
|
|
||||||
|
|
||||||
"""Outil pour migration ScoDoc 7 => ScoDoc 8
|
|
||||||
|
|
||||||
- Liste des appels de la forme context.xxx
|
|
||||||
./refactor.py showcontextcalls app/scodoc/*.p
|
|
||||||
|
|
||||||
- remplace context.xxx par module.xxx
|
|
||||||
|
|
||||||
./refactor.py refactor module.method app/scodoc/*.py
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Pour chaque module dans views:
|
|
||||||
- construire la liste des fonctions définies dans ce module:
|
|
||||||
get_module_functions
|
|
||||||
|
|
||||||
Pour chaque module dans views et dans scodoc:
|
|
||||||
- remplacer context.xxx par app.views.M.xxx
|
|
||||||
où M est le module de views définissant xxx
|
|
||||||
Si xxx n'est pas trouvé, erreur !
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import re
|
|
||||||
from pprint import pprint as pp
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import types
|
|
||||||
import tempfile
|
|
||||||
import shutil
|
|
||||||
import click
|
|
||||||
|
|
||||||
TYPES_TO_SCAN = {
|
|
||||||
types.FunctionType,
|
|
||||||
# types.ClassType,
|
|
||||||
# types.DictionaryType,
|
|
||||||
# types.FloatType,
|
|
||||||
# types.IntType,
|
|
||||||
# types.ListType,
|
|
||||||
# types.StringType,
|
|
||||||
# types.TupleType,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_module_symbols(module):
|
|
||||||
"""returns list of symbols (functions and constants) defined in the given module"""
|
|
||||||
return [
|
|
||||||
f.__name__
|
|
||||||
for f in [getattr(module, name) for name in dir(module)]
|
|
||||||
if (type(f) in TYPES_TO_SCAN)
|
|
||||||
and ((type(f) != types.FunctionType) or (f.__module__ == module.__name__))
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# print("\n".join(f.__name__ for f in get_module_functions(notes)))
|
|
||||||
|
|
||||||
|
|
||||||
def scan_views_symbols():
|
|
||||||
"""Scan modules in app.views and returns
|
|
||||||
{ }
|
|
||||||
"""
|
|
||||||
import app
|
|
||||||
|
|
||||||
views_modules = [
|
|
||||||
getattr(app.views, mod_name)
|
|
||||||
for mod_name in dir(app.views)
|
|
||||||
if type(getattr(app.views, mod_name)) == types.ModuleType
|
|
||||||
]
|
|
||||||
sym2mod = {} # symbole_name : module
|
|
||||||
for module in views_modules:
|
|
||||||
start = "app.views."
|
|
||||||
assert module.__name__.startswith(start)
|
|
||||||
module_name = module.__name__[len(start) :]
|
|
||||||
symbols = set(get_module_symbols(module))
|
|
||||||
print("%d symbols defined in %s" % (len(symbols), module))
|
|
||||||
dups = symbols.intersection(sym2mod)
|
|
||||||
if len(dups):
|
|
||||||
print("duplicated symbols !")
|
|
||||||
for dup in dups:
|
|
||||||
print("%s:\t%s\t%s" % (dup, sym2mod[dup], module_name))
|
|
||||||
|
|
||||||
sym2mod.update({s: module_name for s in symbols})
|
|
||||||
return sym2mod
|
|
||||||
|
|
||||||
|
|
||||||
def replace_context_calls(sourcefilename, sym2mod):
|
|
||||||
undefined_list = [] # noms de fonctions non présents dans les modules "views"
|
|
||||||
|
|
||||||
def repl(m):
|
|
||||||
funcname = m.group(1)
|
|
||||||
module = sym2mod.get(funcname, False)
|
|
||||||
if module:
|
|
||||||
return module + "." + funcname
|
|
||||||
else:
|
|
||||||
undefined_list.append((sourcefilename, funcname))
|
|
||||||
return m.group(0) # leave unchanged
|
|
||||||
|
|
||||||
print("reading %s" % sourcefilename)
|
|
||||||
source = open(sourcefilename).read()
|
|
||||||
exp = re.compile(r"context\.([a-zA-Z0-9_]+)")
|
|
||||||
source2 = exp.sub(repl, source)
|
|
||||||
return source2, undefined_list
|
|
||||||
|
|
||||||
|
|
||||||
# sym2mod = scan_views_symbols()
|
|
||||||
|
|
||||||
# source2, undefined_list = replace_context_calls("app/scodoc/sco_core.py", sym2mod)
|
|
||||||
|
|
||||||
|
|
||||||
def list_context_calls(sourcefilename):
|
|
||||||
"""List of methods called on context in this file"""
|
|
||||||
source = open(sourcefilename).read()
|
|
||||||
exp = re.compile(r"context\.([a-zA-Z0-9_]+)")
|
|
||||||
return sorted(set(exp.findall(source)))
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_calls(src_filenames):
|
|
||||||
"""returns { method_name : [ list of module names in which it is called ] }"""
|
|
||||||
S = {}
|
|
||||||
for sourcefilename in src_filenames:
|
|
||||||
l = list_context_calls(sourcefilename)
|
|
||||||
module_name = os.path.splitext(os.path.split(sourcefilename)[1])[0]
|
|
||||||
for m in l:
|
|
||||||
if m in S:
|
|
||||||
S[m].append(module_name)
|
|
||||||
else:
|
|
||||||
S[m] = [module_name]
|
|
||||||
return S
|
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
|
||||||
def cli():
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
|
||||||
@click.argument("src_filenames", nargs=-1)
|
|
||||||
def showcontextcalls(src_filenames):
|
|
||||||
click.echo("Appels de méthodes sur l'object context")
|
|
||||||
S = get_context_calls(src_filenames)
|
|
||||||
#
|
|
||||||
for method in sorted(S.keys()):
|
|
||||||
print(method + ":\t" + ", ".join(S[method]))
|
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
|
||||||
@click.argument("modulemethod", nargs=1)
|
|
||||||
@click.argument("src_filenames", nargs=-1)
|
|
||||||
def refactor(modulemethod, src_filenames):
|
|
||||||
"""Replace call context.method(...)
|
|
||||||
by module.method(context, ...)
|
|
||||||
in all given source filenames
|
|
||||||
"""
|
|
||||||
modulemethod = str(modulemethod) # avoid unicode in Python2
|
|
||||||
frags = modulemethod.split(".")
|
|
||||||
if len(frags) < 2:
|
|
||||||
raise click.BadParameter("must be module.method", param_hint="modulemethod")
|
|
||||||
module = ".".join(frags[:-1])
|
|
||||||
method = frags[-1]
|
|
||||||
backup = tempfile.mkdtemp(dir="/tmp")
|
|
||||||
for sourcefilename in src_filenames:
|
|
||||||
source_module_name = os.path.splitext(os.path.split(sourcefilename)[1])[0]
|
|
||||||
is_local = source_module_name == module
|
|
||||||
source = open(sourcefilename).read()
|
|
||||||
if not is_local:
|
|
||||||
source2 = source.replace(
|
|
||||||
"context." + method + "(", module + "." + method + "(context, "
|
|
||||||
)
|
|
||||||
source2 = source2.replace(
|
|
||||||
"context.Notes." + method + "(", module + "." + method + "(context, "
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
# call in the same module:
|
|
||||||
source2 = source.replace("context." + method + "(", method + "(context, ")
|
|
||||||
if source2 != source:
|
|
||||||
print("changed %s" % sourcefilename)
|
|
||||||
shutil.move(sourcefilename, backup)
|
|
||||||
open(sourcefilename, "w").write(source2)
|
|
||||||
print("Done.\noriginal files saved in %s\n" % backup)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
try:
|
|
||||||
cli(obj={})
|
|
||||||
except SystemExit as e:
|
|
||||||
if e.code != 0:
|
|
||||||
raise
|
|
@ -292,12 +292,8 @@ for etud in etuds[10:]:
|
|||||||
|
|
||||||
# --- Liste des groupes présents aux évaluation
|
# --- Liste des groupes présents aux évaluation
|
||||||
|
|
||||||
lig1 = sco_groups.do_evaluation_listegroupes(
|
lig1 = sco_groups.do_evaluation_listegroupes(e1["evaluation_id"], include_default=False)
|
||||||
context.Scolarite, e1["evaluation_id"], include_default=False
|
lig2 = sco_groups.do_evaluation_listegroupes(e2["evaluation_id"], include_default=False)
|
||||||
)
|
|
||||||
lig2 = sco_groups.do_evaluation_listegroupes(
|
|
||||||
context.Scolarite, e2["evaluation_id"], include_default=False
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
assert len(lig1) == 2
|
assert len(lig1) == 2
|
||||||
|
@ -73,7 +73,7 @@ modele = "un_avis.tex" # Modele à actualiser au regard des résultats de l'ét
|
|||||||
# Calcul du Jury PE
|
# Calcul du Jury PE
|
||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
# semsDUT = [sem for sem in sems if 1 <= sem['semestre_id'] <= 4 ]
|
# semsDUT = [sem for sem in sems if 1 <= sem['semestre_id'] <= 4 ]
|
||||||
semBase = sco_formsemestre.get_formsemestre(context, fid)
|
semBase = sco_formsemestre.get_formsemestre(fid)
|
||||||
jury = pe_jurype.JuryPE(context, semBase)
|
jury = pe_jurype.JuryPE(context, semBase)
|
||||||
|
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ class ScoFake(object):
|
|||||||
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(context, locals())
|
||||||
oids = sco_formations.formation_list(context, 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 !")
|
||||||
return oids[0]
|
return oids[0]
|
||||||
@ -241,7 +241,7 @@ class ScoFake(object):
|
|||||||
responsables = (self.default_user.id,)
|
responsables = (self.default_user.id,)
|
||||||
oid = sco_formsemestre.do_formsemestre_create(locals())
|
oid = sco_formsemestre.do_formsemestre_create(locals())
|
||||||
oids = sco_formsemestre.do_formsemestre_list(
|
oids = sco_formsemestre.do_formsemestre_list(
|
||||||
context, args={"formsemestre_id": oid}
|
args={"formsemestre_id": oid}
|
||||||
) # API inconsistency
|
) # API inconsistency
|
||||||
if not oids:
|
if not oids:
|
||||||
raise ScoValueError("formsemestre not created !")
|
raise ScoValueError("formsemestre not created !")
|
||||||
|
@ -280,18 +280,17 @@ def test_abs_basic(test_client):
|
|||||||
# --- Création d'un groupe
|
# --- Création d'un groupe
|
||||||
|
|
||||||
_ = sco_groups.partition_create(
|
_ = sco_groups.partition_create(
|
||||||
context,
|
|
||||||
formsemestre_id=sem["formsemestre_id"],
|
formsemestre_id=sem["formsemestre_id"],
|
||||||
partition_name="Eleve",
|
partition_name="Eleve",
|
||||||
)
|
)
|
||||||
li1 = sco_groups.get_partitions_list(context, sem["formsemestre_id"])
|
li1 = sco_groups.get_partitions_list(sem["formsemestre_id"])
|
||||||
_ = sco_groups.createGroup(context, li1[0]["partition_id"], "Groupe 1")
|
_ = sco_groups.createGroup(li1[0]["partition_id"], "Groupe 1")
|
||||||
|
|
||||||
# --- Affectation des élèves dans des groupes
|
# --- Affectation des élèves dans des groupes
|
||||||
|
|
||||||
li_grp1 = sco_groups.get_partition_groups(context, li1[0])
|
li_grp1 = sco_groups.get_partition_groups(li1[0])
|
||||||
for etud in etuds:
|
for etud in etuds:
|
||||||
sco_groups.set_group(context, etud["etudid"], li_grp1[0]["group_id"])
|
sco_groups.set_group(etud["etudid"], li_grp1[0]["group_id"])
|
||||||
|
|
||||||
# --- Test de EtatAbsencesGroupes
|
# --- Test de EtatAbsencesGroupes
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ def test_notes_table(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(context)
|
sems = sco_formsemestre.do_formsemestre_list()
|
||||||
assert len(sems)
|
assert len(sems)
|
||||||
sem = sems[0]
|
sem = sems[0]
|
||||||
formsemestre_id = sem["formsemestre_id"]
|
formsemestre_id = sem["formsemestre_id"]
|
||||||
|
Loading…
Reference in New Issue
Block a user