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): 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( nt = context._getNotesCache().get_NotesTable(
context, sem["formsemestre_id"] context, sem["formsemestre_id"]
) # > get_table_moyennes_triees, identdict, get_etud_decision_sem, get_etud_etat, ) # > get_table_moyennes_triees, identdict, get_etud_decision_sem, get_etud_etat,
@ -361,12 +360,13 @@ def table_suivi_cohorte(
percent=False, percent=False,
bac="", # selection sur type de bac bac="", # selection sur type de bac
bacspecialite="", bacspecialite="",
annee_bac="",
sexe="", sexe="",
statut="", statut="",
only_primo=False, 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 ... Etat date_debut_Sn date1 date2 ...
S_n #inscrits en Sn S_n #inscrits en Sn
S_n+1 S_n+1
@ -399,6 +399,7 @@ def table_suivi_cohorte(
orig_set = Set() # ensemble d'etudid du semestre d'origine orig_set = Set() # ensemble d'etudid du semestre d'origine
bacs = Set() bacs = Set()
bacspecialites = Set() bacspecialites = Set()
annee_bacs = Set()
sexes = Set() sexes = Set()
statuts = Set() statuts = Set()
for etudid in etudids: for etudid in etudids:
@ -408,6 +409,7 @@ def table_suivi_cohorte(
if ( if (
(not bac or (bac == etud["bac"])) (not bac or (bac == etud["bac"]))
and (not bacspecialite or (bacspecialite == bacspe)) 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 sexe or (sexe == etud["sexe"]))
and (not statut or (statut == etud["statut"])) and (not statut or (statut == etud["statut"]))
and (not only_primo or context.isPrimoEtud(etud, sem)) and (not only_primo or context.isPrimoEtud(etud, sem))
@ -419,6 +421,7 @@ def table_suivi_cohorte(
S[s["formsemestre_id"]] = s S[s["formsemestre_id"]] = s
bacs.add(etud["bac"]) bacs.add(etud["bac"])
bacspecialites.add(bacspe) bacspecialites.add(bacspe)
annee_bacs.add(etud["annee_bac"])
sexes.add(etud["sexe"]) sexes.add(etud["sexe"])
if etud["statut"]: # ne montre pas les statuts non renseignés if etud["statut"]: # ne montre pas les statuts non renseignés
statuts.add(etud["statut"]) statuts.add(etud["statut"])
@ -608,6 +611,8 @@ def table_suivi_cohorte(
dbac = "" dbac = ""
if bacspecialite: if bacspecialite:
dbac += " (spécialité %s)" % bacspecialite dbac += " (spécialité %s)" % bacspecialite
if annee_bac:
dbac += " (année bac %s)" % annee_bac
if sexe: if sexe:
dbac += " genre: %s" % sexe dbac += " genre: %s" % sexe
if statut: if statut:
@ -643,7 +648,7 @@ def table_suivi_cohorte(
expl.append(", ".join(ls) + "</li>") expl.append(", ".join(ls) + "</li>")
expl.append("</ul>") expl.append("</ul>")
logt("Z: table_suivi_cohorte done") 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( def formsemestre_suivi_cohorte(
@ -653,21 +658,22 @@ def formsemestre_suivi_cohorte(
percent=1, percent=1,
bac="", bac="",
bacspecialite="", bacspecialite="",
annee_bac="",
sexe="", sexe="",
statut="", statut="",
only_primo=False, only_primo=False,
REQUEST=None, REQUEST=None,
): ):
"""Affiche suivi cohortes par numero de semestre """Affiche suivi cohortes par numero de semestre"""
"""
percent = int(percent) percent = int(percent)
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) 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, context,
formsemestre_id, formsemestre_id,
percent=percent, percent=percent,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, statut=statut,
only_primo=only_primo, only_primo=only_primo,
@ -714,10 +720,12 @@ def formsemestre_suivi_cohorte(
only_primo=only_primo, only_primo=only_primo,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, statut=statut,
bacs=bacs, bacs=bacs,
bacspecialites=bacspecialites, bacspecialites=bacspecialites,
annee_bacs=annee_bacs,
sexes=sexes, sexes=sexes,
statuts=statuts, statuts=statuts,
percent=percent, percent=percent,
@ -737,10 +745,12 @@ def _gen_form_selectetuds(
only_primo=None, only_primo=None,
bac=None, bac=None,
bacspecialite=None, bacspecialite=None,
annee_bac=None,
sexe=None, sexe=None,
statut=None, statut=None,
bacs=None, bacs=None,
bacspecialites=None, bacspecialites=None,
annee_bacs=None,
sexes=None, sexes=None,
statuts=None, statuts=None,
): ):
@ -749,6 +759,8 @@ def _gen_form_selectetuds(
bacs.sort() bacs.sort()
bacspecialites = list(bacspecialites) bacspecialites = list(bacspecialites)
bacspecialites.sort() bacspecialites.sort()
annee_bacs = list(annee_bacs)
annee_bacs.sort()
sexes = list(sexes) sexes = list(sexes)
sexes.sort() sexes.sort()
statuts = list(statuts) statuts = list(statuts)
@ -789,6 +801,25 @@ def _gen_form_selectetuds(
selected = "" selected = ""
F.append('<option value="%s" %s>%s</option>' % (b, selected, b)) F.append('<option value="%s" %s>%s</option>' % (b, selected, b))
F.append("</select>") 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( F.append(
"""&nbsp; Genre: <select name="sexe" onchange="javascript: submit(this);"> """&nbsp; Genre: <select name="sexe" onchange="javascript: submit(this);">
<option value="" %s>tous</option> <option value="" %s>tous</option>
@ -949,6 +980,7 @@ def tsp_etud_list(
only_primo=False, only_primo=False,
bac="", # selection sur type de bac bac="", # selection sur type de bac
bacspecialite="", bacspecialite="",
annee_bac="",
sexe="", sexe="",
statut="", statut="",
): ):
@ -964,6 +996,7 @@ def tsp_etud_list(
etuds = [] etuds = []
bacs = Set() bacs = Set()
bacspecialites = Set() bacspecialites = Set()
annee_bacs = Set()
sexes = Set() sexes = Set()
statuts = Set() statuts = Set()
for etudid in etudids: for etudid in etudids:
@ -973,6 +1006,7 @@ def tsp_etud_list(
if ( if (
(not bac or (bac == etud["bac"])) (not bac or (bac == etud["bac"]))
and (not bacspecialite or (bacspecialite == bacspe)) 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 sexe or (sexe == etud["sexe"]))
and (not statut or (statut == etud["statut"])) and (not statut or (statut == etud["statut"]))
and (not only_primo or context.isPrimoEtud(etud, sem)) and (not only_primo or context.isPrimoEtud(etud, sem))
@ -981,16 +1015,16 @@ def tsp_etud_list(
bacs.add(etud["bac"]) bacs.add(etud["bac"])
bacspecialites.add(bacspe) bacspecialites.add(bacspe)
annee_bacs.add(etud["annee_bac"])
sexes.add(etud["sexe"]) sexes.add(etud["sexe"])
if etud["statut"]: # ne montre pas les statuts non renseignés if etud["statut"]: # ne montre pas les statuts non renseignés
statuts.add(etud["statut"]) statuts.add(etud["statut"])
# log('tsp_etud_list: %s etuds' % len(etuds)) # 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): 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 = [] L = []
parcours = codes_etuds.keys() parcours = codes_etuds.keys()
parcours.sort() parcours.sort()
@ -1010,10 +1044,9 @@ def tsp_grouped_list(context, codes_etuds):
def table_suivi_parcours( 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(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 context, formsemestre_id, only_primo=only_primo
) )
codes_etuds = DictDefault(defaultvalue=[]) 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): 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] F = ["""<form name="f" method="get" action="%s">""" % REQUEST.URL0]
if only_primo: if only_primo:
checked = 'checked="1"' checked = 'checked="1"'
@ -1131,8 +1163,7 @@ def formsemestre_suivi_parcours(
no_grouping=False, no_grouping=False,
REQUEST=None, REQUEST=None,
): ):
"""Effectifs dans les differents parcours possibles. """Effectifs dans les differents parcours possibles."""
"""
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
tab = table_suivi_parcours( tab = table_suivi_parcours(
context, context,
@ -1175,26 +1206,27 @@ def graph_parcours(
only_primo=False, only_primo=False,
bac="", # selection sur type de bac bac="", # selection sur type de bac
bacspecialite="", bacspecialite="",
annee_bac="",
sexe="", sexe="",
statut="", statut="",
): ):
""" """"""
"""
if not WITH_PYDOT: if not WITH_PYDOT:
raise ScoValueError("pydot module is not installed") raise ScoValueError("pydot module is not installed")
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) 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, context,
formsemestre_id, formsemestre_id,
only_primo=only_primo, only_primo=only_primo,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, statut=statut,
) )
# log('graph_parcours: %s etuds (only_primo=%s)' % (len(etuds), only_primo)) # log('graph_parcours: %s etuds (only_primo=%s)' % (len(etuds), only_primo))
if not etuds: if not etuds:
return "", bacs, bacspecialites, sexes, statuts return "", etuds, bacs, bacspecialites, annee_bacs, sexes, statuts
edges = DictDefault( edges = DictDefault(
defaultvalue=Set() defaultvalue=Set()
) # {(formsemestre_id_origin, formsemestre_id_dest) : etud_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 # cf http://groups.google.com/group/pydot/browse_thread/thread/b3704c53e331e2ec
data = data.replace("font-family:Arial", "font-family:Helvetica") 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( def formsemestre_graph_parcours(
@ -1390,23 +1422,24 @@ def formsemestre_graph_parcours(
only_primo=False, only_primo=False,
bac="", # selection sur type de bac bac="", # selection sur type de bac
bacspecialite="", bacspecialite="",
annee_bac="",
sexe="", sexe="",
statut="", statut="",
allkeys=False, allkeys=False, # unused
REQUEST=None, REQUEST=None,
): ):
"""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(context, formsemestre_id)
if format == "pdf": if format == "pdf":
doc, bacs, bacspecialites, sexes, statuts = graph_parcours( doc, etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = graph_parcours(
context, context,
formsemestre_id, formsemestre_id,
format="pdf", format="pdf",
only_primo=only_primo, only_primo=only_primo,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, statut=statut,
) )
@ -1414,13 +1447,14 @@ def formsemestre_graph_parcours(
return sco_pdf.sendPDFFile(REQUEST, doc, filename + ".pdf") return sco_pdf.sendPDFFile(REQUEST, doc, filename + ".pdf")
elif format == "png": elif format == "png":
# #
doc, bacs, bacspecialites, sexes, statuts = graph_parcours( doc, etuds, bacs, bacspecialites, annee_bacs, sexes, statuts = graph_parcours(
context, context,
formsemestre_id, formsemestre_id,
format="png", format="png",
only_primo=only_primo, only_primo=only_primo,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, 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_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) % (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, context,
formsemestre_id, formsemestre_id,
only_primo=only_primo, only_primo=only_primo,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, statut=statut,
) )
@ -1457,16 +1492,19 @@ def formsemestre_graph_parcours(
), ),
"""<h2 class="formsemestre">Parcours des étudiants de ce semestre</h2>""", """<h2 class="formsemestre">Parcours des étudiants de ce semestre</h2>""",
doc, doc,
"<p>%d étudiants sélectionnés</p>" % len(etuds),
_gen_form_selectetuds( _gen_form_selectetuds(
formsemestre_id, formsemestre_id,
REQUEST=REQUEST, REQUEST=REQUEST,
only_primo=only_primo, only_primo=only_primo,
bac=bac, bac=bac,
bacspecialite=bacspecialite, bacspecialite=bacspecialite,
annee_bac=annee_bac,
sexe=sexe, sexe=sexe,
statut=statut, statut=statut,
bacs=bacs, bacs=bacs,
bacspecialites=bacspecialites, bacspecialites=bacspecialites,
annee_bacs=annee_bacs,
sexes=sexes, sexes=sexes,
statuts=statuts, statuts=statuts,
percent=0, percent=0,