Statistiques: selection par annee de bac

This commit is contained in:
viennet 2020-11-30 00:11:39 +01:00
parent 0db128759f
commit 072f8b09de
2 changed files with 69 additions and 31 deletions

0
misc/change_etudid.py Executable file → Normal file
View File

View File

@ -50,8 +50,7 @@ MAX_ETUD_IN_DESCR = 20
def formsemestre_etuds_stats(context, sem, only_primo=False):
"""Récupère liste d'etudiants avec etat et decision.
"""
"""Récupère liste d'etudiants avec etat et decision."""
nt = context._getNotesCache().get_NotesTable(
context, sem["formsemestre_id"]
) # > get_table_moyennes_triees, identdict, get_etud_decision_sem, get_etud_etat,
@ -361,12 +360,13 @@ def table_suivi_cohorte(
percent=False,
bac="", # selection sur type de bac
bacspecialite="",
annee_bac="",
sexe="",
statut="",
only_primo=False,
):
"""
Tableau indicant le nombre d'etudiants de la cohorte dans chaque état:
Tableau indiquant le nombre d'etudiants de la cohorte dans chaque état:
Etat date_debut_Sn date1 date2 ...
S_n #inscrits en Sn
S_n+1
@ -399,6 +399,7 @@ def table_suivi_cohorte(
orig_set = Set() # ensemble d'etudid du semestre d'origine
bacs = Set()
bacspecialites = Set()
annee_bacs = Set()
sexes = Set()
statuts = Set()
for etudid in etudids:
@ -408,6 +409,7 @@ def table_suivi_cohorte(
if (
(not bac or (bac == etud["bac"]))
and (not bacspecialite or (bacspecialite == bacspe))
and (not annee_bac or (annee_bac == str(etud["annee_bac"])))
and (not sexe or (sexe == etud["sexe"]))
and (not statut or (statut == etud["statut"]))
and (not only_primo or context.isPrimoEtud(etud, sem))
@ -419,6 +421,7 @@ def table_suivi_cohorte(
S[s["formsemestre_id"]] = s
bacs.add(etud["bac"])
bacspecialites.add(bacspe)
annee_bacs.add(etud["annee_bac"])
sexes.add(etud["sexe"])
if etud["statut"]: # ne montre pas les statuts non renseignés
statuts.add(etud["statut"])
@ -608,6 +611,8 @@ def table_suivi_cohorte(
dbac = ""
if bacspecialite:
dbac += " (spécialité %s)" % bacspecialite
if annee_bac:
dbac += " (année bac %s)" % annee_bac
if sexe:
dbac += " genre: %s" % sexe
if statut:
@ -643,7 +648,7 @@ def table_suivi_cohorte(
expl.append(", ".join(ls) + "</li>")
expl.append("</ul>")
logt("Z: table_suivi_cohorte done")
return tab, "\n".join(expl), bacs, bacspecialites, sexes, statuts
return tab, "\n".join(expl), bacs, bacspecialites, annee_bacs, sexes, statuts
def formsemestre_suivi_cohorte(
@ -653,21 +658,22 @@ def formsemestre_suivi_cohorte(
percent=1,
bac="",
bacspecialite="",
annee_bac="",
sexe="",
statut="",
only_primo=False,
REQUEST=None,
):
"""Affiche suivi cohortes par numero de semestre
"""
"""Affiche suivi cohortes par numero de semestre"""
percent = int(percent)
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
tab, expl, bacs, bacspecialites, sexes, statuts = table_suivi_cohorte(
tab, expl, bacs, bacspecialites, annee_bacs, sexes, statuts = table_suivi_cohorte(
context,
formsemestre_id,
percent=percent,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
only_primo=only_primo,
@ -714,10 +720,12 @@ def formsemestre_suivi_cohorte(
only_primo=only_primo,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
bacs=bacs,
bacspecialites=bacspecialites,
annee_bacs=annee_bacs,
sexes=sexes,
statuts=statuts,
percent=percent,
@ -737,10 +745,12 @@ def _gen_form_selectetuds(
only_primo=None,
bac=None,
bacspecialite=None,
annee_bac=None,
sexe=None,
statut=None,
bacs=None,
bacspecialites=None,
annee_bacs=None,
sexes=None,
statuts=None,
):
@ -749,6 +759,8 @@ def _gen_form_selectetuds(
bacs.sort()
bacspecialites = list(bacspecialites)
bacspecialites.sort()
annee_bacs = list(annee_bacs)
annee_bacs.sort()
sexes = list(sexes)
sexes.sort()
statuts = list(statuts)
@ -789,6 +801,25 @@ def _gen_form_selectetuds(
selected = ""
F.append('<option value="%s" %s>%s</option>' % (b, selected, b))
F.append("</select>")
#
if annee_bac:
selected = ""
else:
selected = 'selected="selected"'
F.append(
"""&nbsp; Année bac: <select name="annee_bac" onchange="javascript: submit(this);">
<option value="" %s>tous</option>
"""
% selected
)
for b in annee_bacs:
if str(annee_bac) == str(b):
selected = 'selected="selected"'
else:
selected = ""
F.append('<option value="%s" %s>%s</option>' % (b, selected, b))
F.append("</select>")
#
F.append(
"""&nbsp; Genre: <select name="sexe" onchange="javascript: submit(this);">
<option value="" %s>tous</option>
@ -902,7 +933,7 @@ def get_codeparcoursetud(context, etud, prefix="", separator=""):
1234A pour un etudiant ayant effectué S1, S2, S3, S4 puis diplome
12D pour un étudiant en S1, S2 puis démission en S2
12R pour un etudiant en S1, S2 réorienté en fin de S2
Construit aussi un dict: { semestre_id : decision_jury | None }
Construit aussi un dict: { semestre_id : decision_jury | None }
"""
p = []
decisions_jury = {}
@ -949,11 +980,12 @@ def tsp_etud_list(
only_primo=False,
bac="", # selection sur type de bac
bacspecialite="",
annee_bac="",
sexe="",
statut="",
):
"""Liste des etuds a considerer dans table suivi parcours
ramene aussi ensembles des bacs, genres, statuts de (tous) les etudiants
"""Liste des etuds a considerer dans table suivi parcours
ramene aussi ensembles des bacs, genres, statuts de (tous) les etudiants
"""
# log('tsp_etud_list(%s, bac="%s")' % (formsemestre_id,bac))
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
@ -964,6 +996,7 @@ def tsp_etud_list(
etuds = []
bacs = Set()
bacspecialites = Set()
annee_bacs = Set()
sexes = Set()
statuts = Set()
for etudid in etudids:
@ -973,6 +1006,7 @@ def tsp_etud_list(
if (
(not bac or (bac == etud["bac"]))
and (not bacspecialite or (bacspecialite == bacspe))
and (not annee_bac or (annee_bac == str(etud["annee_bac"])))
and (not sexe or (sexe == etud["sexe"]))
and (not statut or (statut == etud["statut"]))
and (not only_primo or context.isPrimoEtud(etud, sem))
@ -981,16 +1015,16 @@ def tsp_etud_list(
bacs.add(etud["bac"])
bacspecialites.add(bacspe)
annee_bacs.add(etud["annee_bac"])
sexes.add(etud["sexe"])
if etud["statut"]: # ne montre pas les statuts non renseignés
statuts.add(etud["statut"])
# log('tsp_etud_list: %s etuds' % len(etuds))
return etuds, bacs, bacspecialites, sexes, statuts
return etuds, bacs, bacspecialites, annee_bacs, sexes, statuts
def tsp_grouped_list(context, codes_etuds):
"""Liste pour table regroupant le nombre d'étudiants (+ bulle avec les noms) de chaque parcours
"""
"""Liste pour table regroupant le nombre d'étudiants (+ bulle avec les noms) de chaque parcours"""
L = []
parcours = codes_etuds.keys()
parcours.sort()
@ -1010,10 +1044,9 @@ def tsp_grouped_list(context, codes_etuds):
def table_suivi_parcours(
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)
etuds, bacs, bacspecialites, sexes, statuts = tsp_etud_list(
etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = tsp_etud_list(
context, formsemestre_id, only_primo=only_primo
)
codes_etuds = DictDefault(defaultvalue=[])
@ -1096,8 +1129,7 @@ def table_suivi_parcours(
def tsp_form_primo_group(REQUEST, only_primo, no_grouping, formsemestre_id, format):
"""Element de formulaire pour choisir si restriction aux primos entrants et groupement par lycees
"""
"""Element de formulaire pour choisir si restriction aux primos entrants et groupement par lycees"""
F = ["""<form name="f" method="get" action="%s">""" % REQUEST.URL0]
if only_primo:
checked = 'checked="1"'
@ -1131,8 +1163,7 @@ def formsemestre_suivi_parcours(
no_grouping=False,
REQUEST=None,
):
"""Effectifs dans les differents parcours possibles.
"""
"""Effectifs dans les differents parcours possibles."""
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
tab = table_suivi_parcours(
context,
@ -1175,26 +1206,27 @@ def graph_parcours(
only_primo=False,
bac="", # selection sur type de bac
bacspecialite="",
annee_bac="",
sexe="",
statut="",
):
"""
"""
""""""
if not WITH_PYDOT:
raise ScoValueError("pydot module is not installed")
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
etuds, bacs, bacspecialites, sexes, statuts = tsp_etud_list(
etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = tsp_etud_list(
context,
formsemestre_id,
only_primo=only_primo,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
)
# log('graph_parcours: %s etuds (only_primo=%s)' % (len(etuds), only_primo))
if not etuds:
return "", bacs, bacspecialites, sexes, statuts
return "", etuds, bacs, bacspecialites, annee_bacs, sexes, statuts
edges = DictDefault(
defaultvalue=Set()
) # {(formsemestre_id_origin, formsemestre_id_dest) : etud_set}
@ -1380,7 +1412,7 @@ def graph_parcours(
# cf http://groups.google.com/group/pydot/browse_thread/thread/b3704c53e331e2ec
data = data.replace("font-family:Arial", "font-family:Helvetica")
return data, bacs, bacspecialites, sexes, statuts
return data, etuds, bacs, bacspecialites, annee_bacs, sexes, statuts
def formsemestre_graph_parcours(
@ -1390,23 +1422,24 @@ def formsemestre_graph_parcours(
only_primo=False,
bac="", # selection sur type de bac
bacspecialite="",
annee_bac="",
sexe="",
statut="",
allkeys=False,
allkeys=False, # unused
REQUEST=None,
):
"""Graphe suivi cohortes
"""
"""Graphe suivi cohortes"""
# log("formsemestre_graph_parcours")
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
if format == "pdf":
doc, bacs, bacspecialites, sexes, statuts = graph_parcours(
doc, etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = graph_parcours(
context,
formsemestre_id,
format="pdf",
only_primo=only_primo,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
)
@ -1414,13 +1447,14 @@ def formsemestre_graph_parcours(
return sco_pdf.sendPDFFile(REQUEST, doc, filename + ".pdf")
elif format == "png":
#
doc, bacs, bacspecialites, sexes, statuts = graph_parcours(
doc, etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = graph_parcours(
context,
formsemestre_id,
format="png",
only_primo=only_primo,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
)
@ -1439,12 +1473,13 @@ def formsemestre_graph_parcours(
"formsemestre_graph_parcours?formsemestre_id=%s&amp;%sbac=%s&amp;bacspecialite=%s&amp;sexe=%s&amp;statut=%s&amp;format="
% (formsemestre_id, op, bac, bacspecialite, sexe, statut)
)
doc, bacs, bacspecialites, sexes, statuts = graph_parcours(
doc, etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = graph_parcours(
context,
formsemestre_id,
only_primo=only_primo,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
)
@ -1457,16 +1492,19 @@ def formsemestre_graph_parcours(
),
"""<h2 class="formsemestre">Parcours des étudiants de ce semestre</h2>""",
doc,
"<p>%d étudiants sélectionnés</p>" % len(etuds),
_gen_form_selectetuds(
formsemestre_id,
REQUEST=REQUEST,
only_primo=only_primo,
bac=bac,
bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe,
statut=statut,
bacs=bacs,
bacspecialites=bacspecialites,
annee_bacs=annee_bacs,
sexes=sexes,
statuts=statuts,
percent=0,