Fix: tri noms étudiants accentués sur form saisie notes

This commit is contained in:
Emmanuel Viennet 2023-01-24 09:22:31 -03:00
parent 3e285659f2
commit 8c95b9458b
3 changed files with 42 additions and 31 deletions

View File

@ -1560,11 +1560,14 @@ def create_etapes_partition(formsemestre_id, partition_name="apo_etapes"):
def do_evaluation_listeetuds_groups( def do_evaluation_listeetuds_groups(
evaluation_id, groups=None, getallstudents=False, include_demdef=False evaluation_id: int,
): groups=None,
"""Donne la liste des etudids inscrits a cette evaluation dans les 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. groupes indiqués.
Si getallstudents==True, donne tous les etudiants inscrits a cette Si getallstudents==True, donne tous les étudiants inscrits à cette
evaluation. evaluation.
Si include_demdef, compte aussi les etudiants démissionnaires et défaillants Si include_demdef, compte aussi les etudiants démissionnaires et défaillants
(sinon, par défaut, seulement les 'I') (sinon, par défaut, seulement les 'I')

View File

@ -967,31 +967,35 @@ def has_existing_decision(M, E, etudid):
# Nouveau formulaire saisie notes (2016) # 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""" """Formulaire saisie notes d'une évaluation pour un groupe"""
if not isinstance(evaluation_id, int): if not isinstance(evaluation_id, int):
raise ScoInvalidParamError() 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}) evals = sco_evaluation_db.do_evaluation_list({"evaluation_id": evaluation_id})
if not evals: if not evals:
raise ScoValueError("évaluation inexistante") raise ScoValueError("évaluation inexistante")
E = evals[0] E = evals[0]
M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[0] M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[0]
formsemestre_id = M["formsemestre_id"] 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 # Check access
# (admin, respformation, and responsable_id) # (admin, respformation, and responsable_id)
if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]): if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]):
return ( return f"""
html_sco_header.sco_header() {html_sco_header.sco_header()}
+ "<h2>Modification des notes impossible pour %s</h2>" <h2>Modification des notes impossible pour {current_user.user_name}</h2>
% current_user.user_name
+ """<p>(vérifiez que le semestre n'est pas verrouillé et que vous <p>(vérifiez que le semestre n'est pas verrouillé et que vous
avez l'autorisation d'effectuer cette opération)</p> avez l'autorisation d'effectuer cette opération)</p>
<p><a href="moduleimpl_status?moduleimpl_id=%s">Continuer</a></p> <p><a href="{ moduleimpl_status_url }">Continuer</a>
""" </p>
% E["moduleimpl_id"] {html_sco_header.sco_footer()}
+ html_sco_header.sco_footer() """
)
# Informations sur les groupes à afficher: # Informations sur les groupes à afficher:
groups_infos = sco_groups_view.DisplayedGroupsInfos( groups_infos = sco_groups_view.DisplayedGroupsInfos(
@ -1049,8 +1053,14 @@ def saisie_notes(evaluation_id, group_ids=[]):
alone=True, alone=True,
) )
) )
H.append("""</td><td style="padding-left: 35px;"><button class="btn_masquer_DEM">Masquer les DEM</button></td></tr></table></div>""") H.append(
H.append("""<style> """
</td>
<td style="padding-left: 35px;"><button class="btn_masquer_DEM">Masquer les DEM</button></td>
</tr>
</table>
</div>
<style>
.btn_masquer_DEM{ .btn_masquer_DEM{
font-size: 12px; font-size: 12px;
} }
@ -1061,19 +1071,14 @@ def saisie_notes(evaluation_id, group_ids=[]):
body.masquer_DEM .etud_dem{ body.masquer_DEM .etud_dem{
display: none !important; display: none !important;
} }
</style>""") </style>
"""
# 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: if form is None:
log(f"redirecting to {destination}") return flask.redirect(moduleimpl_status_url)
return flask.redirect(destination)
H.append(form) H.append(form)
# #
H.append("</div>") # /saisie_notes H.append("</div>") # /saisie_notes
@ -1104,6 +1109,9 @@ def _get_sorted_etuds(eval_dict: dict, etudids: list, formsemestre_id: int):
for etudid in etudids: for etudid in etudids:
# infos identite etudiant # infos identite etudiant
e = sco_etud.etudident_list(cnx, {"etudid": etudid})[0] 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) sco_etud.format_etud_ident(e)
etuds.append(e) etuds.append(e)
# infos inscription dans ce semestre # 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["val"] = "DEM"
e["explanation"] = "Démission" e["explanation"] = "Démission"
etuds.sort(key=lambda x: (x["nom"], x["prenom"])) etuds.sort(key=lambda x: x["etud"].sort_key)
return etuds return etuds

View File

@ -129,7 +129,7 @@ FormSemestres:
Etudiants: Etudiants:
Aaaaa: Aïaaa: # avec un i trema
prenom: Étudiant_SEE prenom: Étudiant_SEE
civilite: M civilite: M
formsemestres: formsemestres:
@ -196,7 +196,7 @@ Etudiants:
S3: S3:
parcours: SEE parcours: SEE
Bbbbb: Azbbbb: # Az devrait être trié après Aï.
prenom: Étudiante_BMB prenom: Étudiante_BMB
civilite: F civilite: F
formsemestres: formsemestres: