feat: improve scale configuration

This commit is contained in:
2025-08-09 16:19:01 +02:00
parent feadac12b4
commit 096dcebd80
4 changed files with 720 additions and 52 deletions

View File

@@ -179,7 +179,17 @@ def scale():
"""Page de configuration de l'échelle de réussite."""
try:
competence_scale = config_manager.get_competence_scale_values()
return render_template('config/scale.html', competence_scale=competence_scale)
# Récupérer la configuration du dégradé des notes
notes_gradient = {
'min_color': config_manager.get('grading.notes_gradient.min_color', '#dc2626'),
'max_color': config_manager.get('grading.notes_gradient.max_color', '#059669'),
'enabled': config_manager.get('grading.notes_gradient.enabled', False)
}
return render_template('config/scale.html',
competence_scale=competence_scale,
notes_gradient=notes_gradient)
except Exception as e:
return handle_error(e, "Erreur lors du chargement de l'échelle")
@@ -205,8 +215,19 @@ def update_scale():
scale_data[value][field] = form_value
# Récupérer aussi les paramètres du dégradé de couleurs des notes
notes_gradient_min = request.form.get('notes_gradient_color_min')
notes_gradient_max = request.form.get('notes_gradient_color_max')
# Validation des données
import re
# Validation des couleurs du dégradé si présentes
if notes_gradient_min and notes_gradient_max:
if not re.match(r'^#[0-9a-fA-F]{6}$', notes_gradient_min) or not re.match(r'^#[0-9a-fA-F]{6}$', notes_gradient_max):
flash('Format de couleur invalide pour le dégradé', 'error')
return redirect(url_for('config.scale'))
for value, config in scale_data.items():
# Vérifier que tous les champs requis sont présents
if not all(field in config for field in ['label', 'color', 'included_in_total']):
@@ -234,8 +255,22 @@ def update_scale():
):
success_count += 1
if success_count == len(scale_data):
flash('Échelle de réussite mise à jour avec succès', 'success')
# Sauvegarder le dégradé des notes si présent
gradient_saved = True
if notes_gradient_min and notes_gradient_max:
config_manager.set('grading.notes_gradient.min_color', notes_gradient_min)
config_manager.set('grading.notes_gradient.max_color', notes_gradient_max)
config_manager.set('grading.notes_gradient.enabled', True)
gradient_saved = config_manager.save()
# Messages de succès
if success_count == len(scale_data) and gradient_saved:
if notes_gradient_min and notes_gradient_max:
flash('Paramètres mis à jour avec succès (échelle et dégradé)', 'success')
else:
flash('Échelle de réussite mise à jour avec succès', 'success')
elif success_count == len(scale_data) and not gradient_saved:
flash('Échelle mise à jour mais erreur sauvegarde dégradé', 'warning')
else:
flash(f'Mise à jour partielle : {success_count}/{len(scale_data)} valeurs mises à jour', 'warning')
@@ -337,6 +372,36 @@ def reset_scale():
return redirect(url_for('config.scale'))
@bp.route('/scale/notes-gradient', methods=['POST'])
def save_notes_gradient():
"""Sauvegarder la configuration du dégradé de couleurs pour les notes."""
try:
min_color = request.form.get('notes_gradient_min_color', '#dc2626')
max_color = request.form.get('notes_gradient_max_color', '#059669')
# Validation des couleurs hexadécimales
import re
if not re.match(r'^#[0-9a-fA-F]{6}$', min_color) or not re.match(r'^#[0-9a-fA-F]{6}$', max_color):
flash('Format de couleur invalide', 'error')
return redirect(url_for('config.scale'))
# Sauvegarder dans la configuration
config_manager.set('grading.notes_gradient.min_color', min_color)
config_manager.set('grading.notes_gradient.max_color', max_color)
config_manager.set('grading.notes_gradient.enabled', True)
if config_manager.save():
flash('Configuration du dégradé de couleurs des notes sauvegardée avec succès', 'success')
else:
flash('Erreur lors de la sauvegarde', 'error')
except Exception as e:
logging.error(f"Erreur sauvegarde dégradé notes: {e}")
flash('Erreur lors de la sauvegarde du dégradé', 'error')
return redirect(url_for('config.scale'))
@bp.route('/general')
def general():
"""Page de configuration générale."""