feat: uniform competence management
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from flask import Blueprint, render_template, redirect, url_for, flash, request
|
||||
from models import db, Assessment, Student, Grade, GradingElement, Exercise
|
||||
from app_config import config_manager
|
||||
|
||||
bp = Blueprint('grading', __name__)
|
||||
|
||||
@@ -20,11 +21,16 @@ def assessment_grading(assessment_id):
|
||||
key = f"{grade.student_id}_{grade.grading_element_id}"
|
||||
existing_grades[key] = grade
|
||||
|
||||
# Préparer les informations d'affichage pour les scores
|
||||
scale_values = config_manager.get_competence_scale_values()
|
||||
|
||||
return render_template('assessment_grading.html',
|
||||
assessment=assessment,
|
||||
students=students,
|
||||
grading_elements=grading_elements,
|
||||
existing_grades=existing_grades)
|
||||
existing_grades=existing_grades,
|
||||
scale_values=scale_values,
|
||||
config_manager=config_manager)
|
||||
|
||||
@bp.route('/assessments/<int:assessment_id>/grading/save', methods=['POST'])
|
||||
def save_grades(assessment_id):
|
||||
@@ -45,15 +51,31 @@ def save_grades(assessment_id):
|
||||
).first()
|
||||
|
||||
if value.strip(): # If value is not empty
|
||||
if not grade:
|
||||
grade = Grade(
|
||||
student_id=student_id,
|
||||
grading_element_id=element_id,
|
||||
value=value
|
||||
)
|
||||
db.session.add(grade)
|
||||
# Validation unifiée selon le nouveau système
|
||||
grading_element = GradingElement.query.get(element_id)
|
||||
if grading_element:
|
||||
# Passer max_points pour la validation des notes
|
||||
max_points = grading_element.max_points if grading_element.grading_type == 'notes' else None
|
||||
|
||||
# Normaliser virgule en point pour les notes avant sauvegarde
|
||||
normalized_value = value.strip()
|
||||
if grading_element.grading_type == 'notes' and ',' in normalized_value:
|
||||
normalized_value = normalized_value.replace(',', '.')
|
||||
|
||||
if config_manager.validate_grade_value(normalized_value, grading_element.grading_type, max_points):
|
||||
if not grade:
|
||||
grade = Grade(
|
||||
student_id=student_id,
|
||||
grading_element_id=element_id,
|
||||
value=normalized_value
|
||||
)
|
||||
db.session.add(grade)
|
||||
else:
|
||||
grade.value = normalized_value
|
||||
else:
|
||||
flash(f'Valeur invalide pour {grading_element.label if grading_element else "cet élément"}: {value}', 'warning')
|
||||
else:
|
||||
grade.value = value
|
||||
flash(f'Élément de notation non trouvé: {element_id}', 'error')
|
||||
elif grade: # If value is empty but grade exists, delete it
|
||||
db.session.delete(grade)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user