From 95fc21fd5a920cfa6e2ac8f96fc747375474fbd4 Mon Sep 17 00:00:00 2001 From: leonard_montalbano Date: Wed, 1 Jun 2022 15:53:25 +0200 Subject: [PATCH] =?UTF-8?q?route=20etat=5Fevals=20fini,=20reste=20=C3=A0?= =?UTF-8?q?=20faire=20tests=20unitaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/formsemestres.py | 41 ++++++++++++++++++++++++++++++++++++---- app/api/tools.py | 13 +++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/app/api/formsemestres.py b/app/api/formsemestres.py index c89f0835..15d31491 100644 --- a/app/api/formsemestres.py +++ b/app/api/formsemestres.py @@ -1,14 +1,18 @@ ########################################## Formsemestres ############################################################## +import statistics + from flask import jsonify import app from app import models from app.api import bp from app.api.auth import token_auth, token_permission_required +from app.api.tools import calculate_median from app.comp import res_sem from app.comp.moy_mod import ModuleImplResults from app.comp.res_compat import NotesTableCompat from app.models import Departement, FormSemestre, FormSemestreEtape, Module, ModuleImpl +from app.scodoc import sco_evaluation_db from app.scodoc.sco_bulletins import get_formsemestre_bulletin_etud_json from app.scodoc.sco_evaluation_recap import evaluations_recap_table from app.scodoc.sco_evaluations import do_evaluation_etat_in_sem, do_evaluation_etat @@ -481,12 +485,14 @@ def etat_evals(formsemestre_id: int): Exemple de résultat : """ + # Récupération du semestre formsemestre = FormSemestre.query.get_or_404(formsemestre_id) + # Set du dept dept = Departement.query.get(formsemestre.dept_id) - app.set_sco_dept(dept.acronym) + # Récupération des Ues list_ues = formsemestre.query_ues() nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) @@ -527,10 +533,37 @@ def etat_evals(formsemestre_id: int): eval["EXC"] = sum( modimpl_results.evals_notes[evaluation.id] == scu.NOTES_NEUTRALISE ) + + # Récupération de toutes les notes de l'évaluation + notes = models.NotesNotes.query.filter_by( + evaluation_id=evaluation.id + ).all() + + # Si il y a plus d'une note saisie pour l'évaluation + if len(notes) > 1: + # Trie des notes en fonction de leurs dates + notes_sorted = sorted(notes, key=lambda note: note.date) + + date_debut = notes_sorted[0].date + date_fin = notes_sorted[-1].date + + # Récupération de l'id de la note médiane + list_id_notes_sorted = [note.id for note in notes_sorted] + id_mediane = calculate_median(list_id_notes_sorted) + + date_mediane = "" + for n in notes_sorted: + if n.id == id_mediane: + date_mediane = n.date + else: + date_debut = None + date_fin = None + date_mediane = None + eval["saisie_notes"] = { - "datetime_debut": "", - "datetime_fin": "", - "datetime_mediane": "", + "datetime_debut": date_debut, + "datetime_fin": date_fin, + "datetime_mediane": date_mediane, } list_eval.append(eval) diff --git a/app/api/tools.py b/app/api/tools.py index 75b8cad4..517a51f4 100644 --- a/app/api/tools.py +++ b/app/api/tools.py @@ -39,3 +39,16 @@ def get_last_instance_etud_from_etudid_or_nip_or_ine( etud = query.first() return etud + + +def calculate_median_list_notes(list): + """ + Retourne la mediane d'une liste de notes + list : une liste préalablement sorted de préférence + """ + list_len = len(list) + if list_len < 1: + return None + + # Ici si la longueur est paire on prend, on prend le +1 car un indice ne peux pas avoir de nombre floatant + return list[int((list_len) / 2)]