route etat_evals fini, reste à faire tests unitaires

This commit is contained in:
leonard_montalbano 2022-06-01 15:53:25 +02:00
parent 73fd6bfde5
commit 95fc21fd5a
2 changed files with 50 additions and 4 deletions

View File

@ -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)

View File

@ -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)]