correction erreur notes

This commit is contained in:
nicoboy
2026-01-03 10:01:19 +01:00
parent bbb5fdec3a
commit 21ea13fed3

View File

@ -32,6 +32,7 @@ if ($isEleveLibre) {
$queryEvals = "SELECT DISTINCT e.*, $queryEvals = "SELECT DISTINCT e.*,
COALESCE(t.statut, 'non_commence') as statut_tentative, COALESCE(t.statut, 'non_commence') as statut_tentative,
t.note as note_obtenue, t.note as note_obtenue,
t.note_sur as note_sur_obtenue,
t.date_debut as date_tentative t.date_debut as date_tentative
FROM evaluations e FROM evaluations e
INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation
@ -53,6 +54,7 @@ if ($isEleveLibre) {
ae.date_fin as fin_acces, ae.date_fin as fin_acces,
COALESCE(t.statut, 'non_commence') as statut_tentative, COALESCE(t.statut, 'non_commence') as statut_tentative,
t.note as note_obtenue, t.note as note_obtenue,
t.note_sur as note_sur_obtenue,
t.date_debut as date_tentative t.date_debut as date_tentative
FROM evaluations e FROM evaluations e
INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation
@ -95,7 +97,7 @@ $moyenne4Dernieres = 0;
if (!empty($dernieresEvals)) { if (!empty($dernieresEvals)) {
$somme_notes_sur_20 = 0; $somme_notes_sur_20 = 0;
foreach ($dernieresEvals as $eval) { foreach ($dernieresEvals as $eval) {
$note_sur_20 = $eval['nb_questions'] > 0 ? ($eval['note'] / $eval['nb_questions']) * 20 : 0; $note_sur_20 = $eval['note_sur'] > 0 ? ($eval['note'] / $eval['note_sur']) * 20 : 0;
$somme_notes_sur_20 += $note_sur_20; $somme_notes_sur_20 += $note_sur_20;
} }
$moyenne_brute = $somme_notes_sur_20 / count($dernieresEvals); $moyenne_brute = $somme_notes_sur_20 / count($dernieresEvals);
@ -108,6 +110,7 @@ $queryToutesEvals = "SELECT
e.titre, e.titre,
e.description, e.description,
te.note, te.note,
te.note_sur,
te.pourcentage, te.pourcentage,
te.date_fin te.date_fin
FROM tentatives_eleves te FROM tentatives_eleves te
@ -122,8 +125,8 @@ $toutesEvals = $db->fetchAll($queryToutesEvals, [$user['id_utilisateur']]);
$queryStats = "SELECT $queryStats = "SELECT
COUNT(DISTINCT t.id_evaluation) as nb_evaluations_passees, COUNT(DISTINCT t.id_evaluation) as nb_evaluations_passees,
COUNT(CASE WHEN t.statut = 'terminee' THEN 1 END) as nb_evaluations_terminees, COUNT(CASE WHEN t.statut = 'terminee' THEN 1 END) as nb_evaluations_terminees,
AVG(CASE WHEN t.statut = 'terminee' AVG(CASE WHEN t.statut = 'terminee' AND t.note_sur > 0
THEN (t.note / (SELECT COUNT(*) FROM questions WHERE id_evaluation = t.id_evaluation)) * 20 THEN (t.note / t.note_sur) * 20
ELSE NULL END) as moyenne_generale ELSE NULL END) as moyenne_generale
FROM tentatives_eleves t FROM tentatives_eleves t
WHERE t.id_eleve = ?"; WHERE t.id_eleve = ?";
@ -555,8 +558,9 @@ if ($stats['moyenne_generale'] !== null) {
<div class="dernieres-evals-grid"> <div class="dernieres-evals-grid">
<?php foreach ($dernieresEvals as $eval): <?php foreach ($dernieresEvals as $eval):
// Convertir la note brute en note sur 20 // Convertir la note brute en note sur 20 en utilisant le barème réel
$note_sur_20 = $eval['nb_questions'] > 0 ? ($eval['note'] / $eval['nb_questions']) * 20 : 0; // note_sur = barème total (80, 50, 20, etc.)
$note_sur_20 = $eval['note_sur'] > 0 ? ($eval['note'] / $eval['note_sur']) * 20 : 0;
// Arrondir au demi-point supérieur // Arrondir au demi-point supérieur
$note_arrondie = ceil($note_sur_20 * 2) / 2; $note_arrondie = ceil($note_sur_20 * 2) / 2;
@ -575,7 +579,7 @@ if ($stats['moyenne_generale'] !== null) {
<div class="note-display-large"> <div class="note-display-large">
<div> <div>
<div class="note-fraction"> <div class="note-fraction">
<?= number_format($questions_reussies, 1) ?>/<?= $eval['nb_questions'] ?> questions <?= number_format($questions_reussies, 1) ?>/<?= number_format($eval['note_sur'], 0) ?> points
</div> </div>
<div class="note-sur-20"> <div class="note-sur-20">
<?= number_format($note_arrondie, 1) ?>/20 <?= number_format($note_arrondie, 1) ?>/20
@ -654,13 +658,16 @@ if ($stats['moyenne_generale'] !== null) {
<?php if ($statut === 'terminee'): ?> <?php if ($statut === 'terminee'): ?>
<?php <?php
// Récupérer le nombre de questions pour cette évaluation // Utiliser note_sur si disponible, sinon calculer avec nb questions
$queryNbQ = "SELECT COUNT(*) as nb FROM questions WHERE id_evaluation = ?"; if (isset($eval['note_sur_obtenue']) && $eval['note_sur_obtenue'] > 0) {
$resultNbQ = $db->fetchOne($queryNbQ, [$eval['id_evaluation']]); $note_sur_20 = ($eval['note_obtenue'] / $eval['note_sur_obtenue']) * 20;
$nb_q = $resultNbQ['nb'] ?? 1; } else {
// Fallback : calculer avec nb questions
// Calculer la note sur 20 $queryNbQ = "SELECT COUNT(*) as nb FROM questions WHERE id_evaluation = ?";
$note_sur_20 = ($eval['note_obtenue'] / $nb_q) * 20; $resultNbQ = $db->fetchOne($queryNbQ, [$eval['id_evaluation']]);
$nb_q = $resultNbQ['nb'] ?? 1;
$note_sur_20 = ($eval['note_obtenue'] / $nb_q) * 20;
}
$note_affichee = ceil($note_sur_20 * 2) / 2; $note_affichee = ceil($note_sur_20 * 2) / 2;
?> ?>
<span class="note-display"> <span class="note-display">
@ -705,13 +712,11 @@ if ($stats['moyenne_generale'] !== null) {
return `Eval ${index + 1}\n${date.getDate()}/${date.getMonth() + 1}`; return `Eval ${index + 1}\n${date.getDate()}/${date.getMonth() + 1}`;
}); });
// Récupérer le nombre de questions pour chaque évaluation (via AJAX) // Récupérer le nombre de questions pour chaque évaluation
// Pour simplifier, on utilise le pourcentage pour recalculer // Utiliser note_sur (barème total) pour calculer la note sur 20
const notes = toutesEvaluations.map(e => { const notes = toutesEvaluations.map(e => {
// note brute → note sur 20 via le pourcentage // note / note_sur * 20
// pourcentage = (note / nb_questions) * 100 const note_sur_20 = (parseFloat(e.note) / parseFloat(e.note_sur)) * 20;
// donc note_sur_20 = (pourcentage / 100) * 20 = pourcentage / 5
const note_sur_20 = parseFloat(e.pourcentage) / 5;
return Math.ceil(note_sur_20 * 2) / 2; // Arrondir demi-point sup return Math.ceil(note_sur_20 * 2) / 2; // Arrondir demi-point sup
}); });