diff --git a/misc/change_etudid.py b/misc/change_etudid.py old mode 100755 new mode 100644 diff --git a/sco_report.py b/sco_report.py index 1f21f1098..09669127f 100644 --- a/sco_report.py +++ b/sco_report.py @@ -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) + "") expl.append("") 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('%s' % (b, selected, b)) F.append("") + # + if annee_bac: + selected = "" + else: + selected = 'selected="selected"' + F.append( + """ Année bac: + tous + """ + % selected + ) + for b in annee_bacs: + if str(annee_bac) == str(b): + selected = 'selected="selected"' + else: + selected = "" + F.append('%s' % (b, selected, b)) + F.append("") + # F.append( """ Genre: tous @@ -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 = ["""""" % 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&%sbac=%s&bacspecialite=%s&sexe=%s&statut=%s&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( ), """Parcours des étudiants de ce semestre""", doc, + "%d étudiants sélectionnés" % 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,
%d étudiants sélectionnés