From 18aed4464464df9cf9c231d21c3593c77e5ff4e7 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 24 Dec 2022 23:27:28 -0300 Subject: [PATCH] Remplissage notes manquantes par groupes. closes #534 --- app/scodoc/sco_saisie_notes.py | 62 +++++++++++++++++++++++----------- app/static/js/groups_view.js | 7 ++++ 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/app/scodoc/sco_saisie_notes.py b/app/scodoc/sco_saisie_notes.py index 81e92d517..ebef0ae78 100644 --- a/app/scodoc/sco_saisie_notes.py +++ b/app/scodoc/sco_saisie_notes.py @@ -321,20 +321,31 @@ def do_evaluation_set_etud_note(evaluation: Evaluation, etud: Identite, value) - return False # error -def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False): +def do_evaluation_set_missing( + evaluation_id, value, dialog_confirmed=False, group_ids_str: str = "" +): """Initialisation des notes manquantes""" evaluation = Evaluation.query.get_or_404(evaluation_id) modimpl = evaluation.moduleimpl - # Check access # (admin, respformation, and responsable_id) if not sco_permissions_check.can_edit_notes(current_user, modimpl.id): raise AccessDenied(f"Modification des notes impossible pour {current_user}") # notes_db = sco_evaluation_db.do_evaluation_get_all_notes(evaluation_id) + if not group_ids_str: + groups = None + else: + group_ids = [int(x) for x in str(group_ids_str).split(",")] + groups = sco_groups.listgroups(group_ids) + etudid_etats = sco_groups.do_evaluation_listeetuds_groups( - evaluation_id, getallstudents=True, include_demdef=False + evaluation_id, + getallstudents=groups is None, + groups=groups, + include_demdef=False, ) + notes = [] for etudid, _ in etudid_etats: # pour tous les inscrits if etudid not in notes_db: # pas de note @@ -360,17 +371,23 @@ def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False): """ # Confirm action if not dialog_confirmed: + plural = len(L) > 1 return scu.confirm_dialog( f"""

Mettre toutes les notes manquantes de l'évaluation à la valeur {value} ?

Seuls les étudiants pour lesquels aucune note (ni valeur, ni ABS, ni EXC) n'a été rentrée seront affectés.

-

{len(L)} étudiants concernés par ce changement de note.

-

Attention, les étudiants sans notes de tous les groupes de ce semestre seront affectés.

+

{len(L)} étudiant{"s" if plural else ""} concerné{"s" if plural else ""} + par ce changement de note. +

""", dest_url="", cancel_url=dest_url, - parameters={"evaluation_id": evaluation_id, "value": value}, + parameters={ + "evaluation_id": evaluation_id, + "value": value, + "group_ids_str": group_ids_str, + }, ) # ok comment = "Initialisation notes manquantes" @@ -792,7 +809,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()): H.append( f"""
  • -
    + Mettre toutes les notes manquantes à @@ -1041,7 +1058,7 @@ def saisie_notes(evaluation_id, group_ids=[]): moduleimpl_id=E["moduleimpl_id"], ) - form = _form_saisie_notes(E, M, groups_infos.group_ids, destination=destination) + form = _form_saisie_notes(E, M, groups_infos, destination=destination) if form is None: log(f"redirecting to {destination}") return flask.redirect(destination) @@ -1131,7 +1148,7 @@ def _get_sorted_etuds(eval_dict: dict, etudids: list, formsemestre_id: int): return etuds -def _form_saisie_notes(E, M, group_ids, destination=""): +def _form_saisie_notes(E, M, groups_infos, destination=""): """Formulaire HTML saisie des notes dans l'évaluation E du moduleimpl M pour les groupes indiqués. @@ -1161,7 +1178,10 @@ def _form_saisie_notes(E, M, group_ids, destination=""): descr = [ ("evaluation_id", {"default": evaluation_id, "input_type": "hidden"}), ("formsemestre_id", {"default": formsemestre_id, "input_type": "hidden"}), - ("group_ids", {"default": group_ids, "input_type": "hidden", "type": "list"}), + ( + "group_ids", + {"default": groups_infos.group_ids, "input_type": "hidden", "type": "list"}, + ), # ('note_method', { 'default' : note_method, 'input_type' : 'hidden'}), ("comment", {"size": 44, "title": "Commentaire", "return_focus_next": True}), ("changed", {"default": "0", "input_type": "hidden"}), # changed in JS @@ -1271,12 +1291,11 @@ def _form_saisie_notes(E, M, group_ids, destination=""): H.append( """
      -
    • Attention: il y a déjà des décisions de jury enregistrées pour %d étudiants. Après changement des notes, vérifiez la situation !
    • +
    • Attention: il y a déjà des décisions de jury enregistrées pour + {nb_decisions} étudiants. Après changement des notes, vérifiez la situation !
    """ - % nb_decisions ) - # H.append('''
    ''') tf = TF( destination, @@ -1299,17 +1318,20 @@ def _form_saisie_notes(E, M, group_ids, destination=""): elif (not tf.submitted()) or not tf.result: # ajout formulaire saisie notes manquantes H.append( - """ + f"""
    - - Mettre toutes les notes manquantes à - - - affecte tous les groupes. ABS indique "absent" (zéro), EXC "excusé" (neutralisées), ATT "attente" + + Mettre les notes manquantes à + + + + + ABS indique "absent" (zéro), EXC "excusé" (neutralisées), ATT "attente"
    """ - % evaluation_id ) # affiche formulaire return "\n".join(H) diff --git a/app/static/js/groups_view.js b/app/static/js/groups_view.js index 5c59018d6..8daabe574 100644 --- a/app/static/js/groups_view.js +++ b/app/static/js/groups_view.js @@ -99,6 +99,13 @@ function toggle_visible_etuds() { // lien feuille excel: $("#lnk_feuille_saisie").attr("href", "feuille_saisie_notes?evaluation_id=" + evaluation_id + qargs); } + // Update champs form group_ids_str + let group_ids_str = Array.from( + document.querySelectorAll("#group_ids_sel option:checked") + ).map( + function (elem) { return elem.value; } + ).join(); + document.querySelectorAll("input.group_ids_str").forEach(elem => elem.value = group_ids_str); } $().ready(function () {