From 4d66fb13eed24d68a54abaab618a6ff74eb7b323 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 24 Jan 2023 09:22:31 -0300 Subject: [PATCH] =?UTF-8?q?Fix:=20tri=20noms=20=C3=A9tudiants=20accentu?= =?UTF-8?q?=C3=A9s=20sur=20form=20saisie=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_groups.py | 11 ++++--- app/scodoc/sco_saisie_notes.py | 58 +++++++++++++++++++--------------- tests/unit/cursus_but_gb.yaml | 4 +-- 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/app/scodoc/sco_groups.py b/app/scodoc/sco_groups.py index 607369217..de16785ce 100644 --- a/app/scodoc/sco_groups.py +++ b/app/scodoc/sco_groups.py @@ -1560,11 +1560,14 @@ def create_etapes_partition(formsemestre_id, partition_name="apo_etapes"): def do_evaluation_listeetuds_groups( - evaluation_id, groups=None, getallstudents=False, include_demdef=False -): - """Donne la liste des etudids inscrits a cette evaluation dans les + evaluation_id: int, + groups=None, + getallstudents: bool = False, + include_demdef: bool = False, +) -> list[tuple[int, str]]: + """Donne la liste non triée des etudids inscrits à cette évaluation dans les groupes indiqués. - Si getallstudents==True, donne tous les etudiants inscrits a cette + Si getallstudents==True, donne tous les étudiants inscrits à cette evaluation. Si include_demdef, compte aussi les etudiants démissionnaires et défaillants (sinon, par défaut, seulement les 'I') diff --git a/app/scodoc/sco_saisie_notes.py b/app/scodoc/sco_saisie_notes.py index 4583adce8..c7eb2cc28 100644 --- a/app/scodoc/sco_saisie_notes.py +++ b/app/scodoc/sco_saisie_notes.py @@ -967,31 +967,35 @@ def has_existing_decision(M, E, etudid): # Nouveau formulaire saisie notes (2016) -def saisie_notes(evaluation_id, group_ids=[]): +def saisie_notes(evaluation_id: int, group_ids: list = None): """Formulaire saisie notes d'une évaluation pour un groupe""" if not isinstance(evaluation_id, int): raise ScoInvalidParamError() - group_ids = [int(group_id) for group_id in group_ids] + group_ids = [int(group_id) for group_id in (group_ids or [])] evals = sco_evaluation_db.do_evaluation_list({"evaluation_id": evaluation_id}) if not evals: raise ScoValueError("évaluation inexistante") E = evals[0] M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[0] formsemestre_id = M["formsemestre_id"] + moduleimpl_status_url = url_for( + "notes.moduleimpl_status", + scodoc_dept=g.scodoc_dept, + moduleimpl_id=E["moduleimpl_id"], + ) # Check access # (admin, respformation, and responsable_id) if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]): - return ( - html_sco_header.sco_header() - + "

Modification des notes impossible pour %s

" - % current_user.user_name - + """

(vérifiez que le semestre n'est pas verrouillé et que vous + return f""" + {html_sco_header.sco_header()} +

Modification des notes impossible pour {current_user.user_name}

+ +

(vérifiez que le semestre n'est pas verrouillé et que vous avez l'autorisation d'effectuer cette opération)

-

Continuer

- """ - % E["moduleimpl_id"] - + html_sco_header.sco_footer() - ) +

Continuer +

+ {html_sco_header.sco_footer()} + """ # Informations sur les groupes à afficher: groups_infos = sco_groups_view.DisplayedGroupsInfos( @@ -1049,8 +1053,14 @@ def saisie_notes(evaluation_id, group_ids=[]): alone=True, ) ) - H.append("""""") - H.append("""""") - - # Le formulaire de saisie des notes: - destination = url_for( - "notes.moduleimpl_status", - scodoc_dept=g.scodoc_dept, - moduleimpl_id=E["moduleimpl_id"], + + """ ) - form = _form_saisie_notes(E, M, groups_infos, destination=destination) + # Le formulaire de saisie des notes: + form = _form_saisie_notes(E, M, groups_infos, destination=moduleimpl_status_url) if form is None: - log(f"redirecting to {destination}") - return flask.redirect(destination) + return flask.redirect(moduleimpl_status_url) H.append(form) # H.append("") # /saisie_notes @@ -1104,6 +1109,9 @@ def _get_sorted_etuds(eval_dict: dict, etudids: list, formsemestre_id: int): for etudid in etudids: # infos identite etudiant e = sco_etud.etudident_list(cnx, {"etudid": etudid})[0] + etud: Identite = Identite.query.get(etudid) + # TODO: refactor et eliminer etudident_list. + e["etud"] = etud # utilisé seulement pour le tri -- a refactorer sco_etud.format_etud_ident(e) etuds.append(e) # infos inscription dans ce semestre @@ -1155,7 +1163,7 @@ def _get_sorted_etuds(eval_dict: dict, etudids: list, formsemestre_id: int): e["val"] = "DEM" e["explanation"] = "Démission" - etuds.sort(key=lambda x: (x["nom"], x["prenom"])) + etuds.sort(key=lambda x: x["etud"].sort_key) return etuds diff --git a/tests/unit/cursus_but_gb.yaml b/tests/unit/cursus_but_gb.yaml index 30b1d6a27..0b3588a66 100644 --- a/tests/unit/cursus_but_gb.yaml +++ b/tests/unit/cursus_but_gb.yaml @@ -129,7 +129,7 @@ FormSemestres: Etudiants: - Aaaaa: + Aïaaa: # avec un i trema prenom: Étudiant_SEE civilite: M formsemestres: @@ -196,7 +196,7 @@ Etudiants: S3: parcours: SEE - Bbbbb: + Azbbbb: # Az devrait être trié après Aï. prenom: Étudiante_BMB civilite: F formsemestres: