feat: add csv import

This commit is contained in:
2025-09-02 06:16:14 +02:00
parent 87ff0d22c8
commit f1ae9faef8
6 changed files with 795 additions and 17 deletions

View File

@@ -95,6 +95,27 @@ Grade (Note attribuée à chaque élève)
- **Indicateurs de progression de correction** : Visualisation immédiate avec cercles de progression et actions intégrées
- **Interface cohérente** : Design system unifié avec espacements, couleurs et animations harmonieux
### **Gestion des Élèves et Import CSV (Nouvelle Fonctionnalité - 2025)**
**Gestion Individuelle des Élèves :**
- **Inscription manuelle** : Création d'élèves un par un avec prénom, nom, email optionnel
- **Système d'inscription temporel** : Historique complet avec dates d'arrivée/départ
- **Gestion des mouvements** : Transferts entre classes, départs, réintégrations
- **Interface moderne** : Modal avec onglets (nouvel élève / élève existant)
**Import en Lot depuis CSV :**
- **Format CSV supporté** : Séparateur `;`, première colonne "NOM Prénoms"
- **Extraction intelligente** : Reconnaissance automatique nom/prénom ("DUPONT Marie Claire" → nom: "DUPONT", prénom: "Marie Claire")
- **Gestion des doublons** : Option pour ignorer ou échouer en cas d'élève existant
- **Rapport détaillé** : Statistiques complètes (importés, ignorés, erreurs) avec détail ligne par ligne
- **Validation robuste** : Contrôle format CSV, taille fichier, types de données
- **Interface intuitive** : Modal avec drag & drop, instructions du format attendu
**Points d'Accès Multiples :**
- **Dashboard de classe** : Carte d'action violette "Import CSV"
- **Page gestion élèves** : Bouton "Import CSV" dans la barre d'actions
- **Navigation cohérente** : Accès contextuel selon le workflow utilisateur
### **Analyse des Résultats Avancée**
- **Page de résultats complète** : Vue d'ensemble des performances de l'évaluation
@@ -132,10 +153,13 @@ app_config_classes.py # Classes de configuration Flask (dev/prod/test)
├── assessments.py # CRUD évaluations (création unifiée)
├── exercises.py # Gestion des exercices
├── grading.py # Saisie et gestion des notes
├── classes.py # Gestion classes + import CSV élèves
└── config.py # Interface configuration système
forms.py # Formulaires WTForms pour validation
services.py # Logique métier (AssessmentService)
forms.py # Formulaires WTForms pour validation (+ CSVImportForm)
📋 services/ # Services métier modulaires
├── csv_import_service.py # Service d'import CSV élèves
└── assessment_services.py # Logique métier évaluations
utils.py # Utilitaires existants
commands.py # Commandes CLI Flask (init-db)
templates/ # Templates Jinja2 avec indicateurs UX intégrés
@@ -176,8 +200,9 @@ tail -f logs/notytex.log
- **Validation robuste** : WTForms + Pydantic + services métier
- **Séparation des responsabilités** : Modèles/Repositories/Services/Controllers
## 📝 **Cas d'Usage Typique**
## 📝 **Cas d'Usage Typiques**
### **Scénario A : Évaluation Complète**
1. **Professeur crée une évaluation** : "Contrôle Chapitre 3 - Fonctions" pour le 2ème trimestre
2. **Définit les paramètres** : Date, trimestre (obligatoire), classe, coefficient
3. **Ajoute des exercices** : "Exercice 1: Calculs", "Exercice 2: Graphiques"
@@ -188,6 +213,16 @@ tail -f logs/notytex.log
8. **Consulte les résultats détaillés** : Accès direct à la page de résultats avec statistiques et histogramme
9. **Analyse les performances** : Statistiques descriptives, distribution des notes et classement alphabétique
### **Scénario B : Import d'Élèves en Masse (Nouveau)**
1. **Professeur accède au dashboard** de la classe "6ème A"
2. **Clique sur "Import CSV"** depuis la carte d'action violette ou la page des élèves
3. **Prépare le fichier CSV** : Export depuis le logiciel administratif avec colonnes séparées par `;`
4. **Glisse le fichier** dans la zone de drag & drop ou sélectionne via le bouton
5. **Configure l'import** : Date d'inscription, option "ignorer doublons" activée
6. **Lance l'import** : Validation automatique format + extraction intelligente des noms
7. **Consulte le rapport** : "15 élèves importés, 2 ignorés (doublons), 0 erreur"
8. **Vérifie la liste** : Redirection automatique vers la page des élèves mise à jour
## Volumétrie de milieu d'année (milieu du 2e trimestre)
- 5 classes d'entre 25 et 35 élèves
@@ -436,6 +471,13 @@ uv run pytest
# Tests avec couverture
uv run pytest --cov=. --cov-report=html
# Test spécifique de l'import CSV
uv run python -c "
from services.csv_import_service import CSVImportService
service = CSVImportService()
print('✅ Test extraction:', service.extract_name_parts('DUPONT Marie Claire'))
"
# Tests spécifiques
uv run pytest tests/test_models.py -v
```
@@ -726,6 +768,7 @@ def assessments_list():
- Validation centralisée avec Pydantic
- Cache layer pour optimiser les performances
- Pagination des listes longues
- **Import CSV d'élèves** ✅ **NOUVEAU** - Fonctionnalité complète avec extraction intelligente des noms
- Métriques et monitoring avancés
**Phase 3 - Finalisation**
@@ -736,5 +779,35 @@ def assessments_list():
---
**Notytex v2.0** est maintenant une application **moderne, robuste et sécurisée**, respectant les meilleures pratiques de l'industrie et prête pour un déploiement professionnel ! 🎓✨
**Notytex v2.1** est maintenant une application **moderne, robuste et sécurisée**, respectant les meilleures pratiques de l'industrie et prête pour un déploiement professionnel ! 🎓✨
---
## 🚀 **Dernières Améliorations - Janvier 2025**
### **✨ Import CSV d'Élèves - Fonctionnalité Complète**
**Architecture Technique :**
```
📋 services/csv_import_service.py # Service d'import avec extraction intelligente
📁 routes/classes.py # Route POST /classes/<id>/import-students-csv
📝 forms.py # CSVImportForm avec validation fichier
🖥️ templates/ # Modals d'import dans dashboard et page élèves
```
**Logique d'Extraction Avancée :**
- **Reconnaissance patterns** : "MARTIN Marie" → (nom: "MARTIN", prénom: "Marie")
- **Noms composés** : "AABIDA LAHDILI Fatima Zahra" → (nom: "AABIDA LAHDILI", prénom: "Fatima Zahra")
- **Validation robuste** : Format CSV, taille fichier, encodage UTF-8 avec BOM
- **Rapport d'import détaillé** : Ligne par ligne avec gestion des erreurs et doublons
**Interface Utilisateur :**
- **Accès contextuel** : Dashboard classe (carte violette) + page élèves (bouton navigation)
- **Modal moderne** : Drag & drop, instructions claires, paramétrage flexible
- **UX optimisée** : Messages de succès/erreur, redirection intelligente, state management
**Impact :**
- **Gain de temps considérable** : Import de 30 élèves en 1 action vs 30 saisies manuelles
- **Réduction d'erreurs** : Extraction automatisée vs saisie manuelle sujette aux fautes de frappe
- **Compatibilité exports scolaires** : Supporte le format standard des logiciels administratifs