diff --git a/app/scodoc/sco_lycee.py b/app/scodoc/sco_lycee.py index e70a70d7806e9e816cadf2526e30757f0746534a..b6b0ebe8596e606b91ec2827e104ba44dce7357a 100644 --- a/app/scodoc/sco_lycee.py +++ b/app/scodoc/sco_lycee.py @@ -44,6 +44,7 @@ from app.scodoc import ( sco_report, sco_etud, ) +from app.scodoc.sco_exceptions import ScoValueError from app.models import FormSemestre from app.scodoc.gen_tables import GenTable import app.scodoc.sco_utils as scu @@ -180,13 +181,20 @@ def _table_etuds_lycees(etuds, group_lycees, title, preferences, no_links=False) def formsemestre_etuds_lycees( formsemestre_id, - group_ids: list[int] = None, # si indiqué, ne prend que ces groupes fmt="html", only_primo=False, no_grouping=False, ): """Table des lycées d'origine""" formsemestre = FormSemestre.get_formsemestre(formsemestre_id) + if request.method == "POST": + group_ids = request.form.getlist("group_ids") + else: + group_ids = request.args.getlist("group_ids") + try: + group_ids = [int(gid) for gid in group_ids] + except ValueError as exc: + raise ScoValueError("group_ids invalide") from exc groups_infos = sco_groups_view.DisplayedGroupsInfos( group_ids, formsemestre_id=formsemestre.id, @@ -195,11 +203,17 @@ def formsemestre_etuds_lycees( tab, etuds_by_lycee = formsemestre_table_etuds_lycees( formsemestre, groups_infos, only_primo=only_primo, group_lycees=not no_grouping ) - tab.base_url = "%s?formsemestre_id=%s" % (request.base_url, formsemestre_id) - if only_primo: - tab.base_url += "&only_primo=1" - if no_grouping: - tab.base_url += "&no_grouping=1" + tab.base_url = ( + scu.build_url_query( + request.base_url, + formsemestre_id=formsemestre.id, + no_grouping="1" if no_grouping else None, + only_primo="on" if only_primo else None, + ) + + ("&" + groups_infos.groups_query_args) + if groups_infos + else "" + ) table_html = tab.make_page(fmt=fmt, with_html_headers=False) if fmt != "html": return table_html diff --git a/app/scodoc/sco_report.py b/app/scodoc/sco_report.py index 05371480e6b884725a26e188dcc6553760bab993..1b77beeac33dc979b910ef98c0c0b0c83c16189d 100644 --- a/app/scodoc/sco_report.py +++ b/app/scodoc/sco_report.py @@ -800,11 +800,20 @@ def formsemestre_suivi_cohorte( only_primo=only_primo, ) tab.base_url = ( - "%s?formsemestre_id=%s&percent=%s&bac=%s&bacspecialite=%s&civilite=%s" - % (request.base_url, formsemestre.id, percent, bac, bacspecialite, civilite) + scu.build_url_query( + request.base_url, + bac=bac, + bacspecialite=bacspecialite, + civilite=civilite, + formsemestre_id=formsemestre.id, + percent=percent, + only_primo="on" if only_primo else None, + ) + + ("&" + groups_infos.groups_query_args) + if groups_infos + else "" ) - if only_primo: - tab.base_url += "&only_primo=on" + t = tab.make_page(fmt=fmt, with_html_headers=False) if fmt != "html": return t @@ -1806,9 +1815,16 @@ def formsemestre_graph_cursus( % sem, f"""(<a href="{ url_for("notes.formsemestre_graph_cursus", fmt="pdf", **url_kw) + + ("&" + groups_infos.groups_query_args) + if groups_infos + else "" }">version pdf</a>, <a href="{ - url_for("notes.formsemestre_graph_cursus", fmt="png", **url_kw)}">image PNG</a>) + url_for("notes.formsemestre_graph_cursus", fmt="png", **url_kw) + + ("&" + groups_infos.groups_query_args) + if groups_infos + else "" + }">image PNG</a>) </p> <p class="help">Le graphe permet de suivre les étudiants inscrits dans le semestre diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index 8cee570742507b0b4f371b4b5c0071f45531147e..71bc7e4ce41e8fb17e1e82c469e6097d99ebdbff 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -912,11 +912,11 @@ def unescape_html(s): def build_url_query(url: str, **params) -> str: - """Add parameters to existing url, as a query string""" + """Add parameters to existing url, as a query string. Eliminate None values.""" url_parse = urlparse(url) query = url_parse.query url_dict = dict(parse_qsl(query)) - url_dict.update(params) + url_dict.update({k: v for k, v in params.items() if v is not None}) url_new_query = urlencode(url_dict) url_parse = url_parse._replace(query=url_new_query) new_url = urlunparse(url_parse) diff --git a/app/templates/formsemestre/etuds_lycees.j2 b/app/templates/formsemestre/etuds_lycees.j2 index 441a1b279845d1e6be59d1da47c7c814eafc0883..b2c75f8048ce801f585b2a377747e206e887a7e8 100644 --- a/app/templates/formsemestre/etuds_lycees.j2 +++ b/app/templates/formsemestre/etuds_lycees.j2 @@ -29,4 +29,5 @@ Page non fonctionnelle dans cette version (modif. API Google) <script src="{{scu.STATIC_DIR}}/libjs/jquery.ui.map.full.min.js"></script> <script src="https://maps.google.com/maps/api/js"></script> <script src="{{scu.STATIC_DIR}}/js/map_lycees.js"></script> +<script src="{{scu.STATIC_DIR}}/js/groups_view.js"></script> {% endblock %} \ No newline at end of file