mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
feat: Sauvegarde des compétences d'un élève [#16]
This commit is contained in:
@ -6,7 +6,8 @@ from drf_yasg import openapi
|
||||
from django.views.decorators.csrf import ensure_csrf_cookie, csrf_protect
|
||||
from django.utils.decorators import method_decorator
|
||||
from Subscriptions.models import StudentCompetency, Student
|
||||
from Common.models import Domain, Competency
|
||||
from Common.models import Domain
|
||||
from School.models import Competency
|
||||
from N3wtSchool.bdd import delete_object
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@ -21,10 +22,14 @@ class StudentCompetencyListCreateView(APIView):
|
||||
except Student.DoesNotExist:
|
||||
return JsonResponse({'error': 'Élève introuvable'}, status=404)
|
||||
|
||||
student_competencies = StudentCompetency.objects.filter(student=student).select_related('competency', 'competency__category', 'competency__category__domain')
|
||||
|
||||
# On ne garde que les IDs des compétences de l'élève
|
||||
student_competency_ids = set(sc.competency_id for sc in student_competencies)
|
||||
student_competencies = StudentCompetency.objects.filter(student=student).select_related(
|
||||
'establishment_competency',
|
||||
'establishment_competency__competency',
|
||||
'establishment_competency__competency__category',
|
||||
'establishment_competency__competency__category__domain',
|
||||
'establishment_competency__custom_category',
|
||||
'establishment_competency__custom_category__domain',
|
||||
)
|
||||
|
||||
result = []
|
||||
total_competencies = 0
|
||||
@ -44,15 +49,26 @@ class StudentCompetencyListCreateView(APIView):
|
||||
}
|
||||
# On ne boucle que sur les compétences du student pour cette catégorie
|
||||
for sc in student_competencies:
|
||||
comp = sc.competency
|
||||
if comp.category_id == categorie.id:
|
||||
ec = sc.establishment_competency
|
||||
# Cas compétence de référence
|
||||
if ec.competency and ec.competency.category_id == categorie.id:
|
||||
comp = ec.competency
|
||||
categorie_dict["competences"].append({
|
||||
"competence_id": comp.id,
|
||||
"competence_id": ec.id, # <-- retourne l'id de l'EstablishmentCompetency
|
||||
"nom": comp.name,
|
||||
"score": sc.score,
|
||||
"comment": sc.comment or "",
|
||||
})
|
||||
total_competencies += 1
|
||||
# Cas compétence custom
|
||||
elif ec.competency is None and ec.custom_category_id == categorie.id:
|
||||
categorie_dict["competences"].append({
|
||||
"competence_id": ec.id, # <-- retourne l'id de l'EstablishmentCompetency
|
||||
"nom": ec.custom_name,
|
||||
"score": sc.score,
|
||||
"comment": sc.comment or "",
|
||||
})
|
||||
total_competencies += 1
|
||||
if categorie_dict["competences"]:
|
||||
domaine_dict["categories"].append(categorie_dict)
|
||||
if domaine_dict["categories"]:
|
||||
@ -77,14 +93,13 @@ class StudentCompetencyListCreateView(APIView):
|
||||
comp_id = item.get("competenceId")
|
||||
grade = item.get("grade")
|
||||
student_id = item.get('studentId')
|
||||
print(f'lecture des données : {comp_id} - {grade} - {student_id}')
|
||||
if comp_id is None or grade is None:
|
||||
errors.append({"competenceId": comp_id, "error": "champ manquant"})
|
||||
continue
|
||||
try:
|
||||
# Ajoute le filtre student_id
|
||||
sc = StudentCompetency.objects.get(
|
||||
competency_id=comp_id,
|
||||
establishment_competency_id=comp_id,
|
||||
student_id=student_id
|
||||
)
|
||||
sc.score = grade
|
||||
|
||||
Reference in New Issue
Block a user