mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
refactor: Utilisation d'une application "Common" pour tous les modèles
de référence
This commit is contained in:
@ -13,6 +13,7 @@ from .registration_file_group_views import RegistrationFileGroupView, Registrati
|
||||
from .student_views import StudentView, StudentListView, ChildrenListView
|
||||
from .guardian_views import GuardianView, DissociateGuardianView
|
||||
from .absences_views import AbsenceManagementDetailView, AbsenceManagementListCreateView
|
||||
from .student_competencies_views import StudentCompetencyListCreateView, StudentCompetencySimpleView
|
||||
|
||||
__all__ = [
|
||||
'RegisterFormView',
|
||||
@ -39,5 +40,7 @@ __all__ = [
|
||||
'GuardianView',
|
||||
'DissociateGuardianView',
|
||||
'AbsenceManagementDetailView',
|
||||
'AbsenceManagementListCreateView'
|
||||
'AbsenceManagementListCreateView',
|
||||
'StudentCompetencyListCreateView',
|
||||
'StudentCompetencySimpleView'
|
||||
]
|
||||
|
||||
@ -16,10 +16,22 @@ import Subscriptions.util as util
|
||||
|
||||
from Subscriptions.serializers import RegistrationFormSerializer, RegistrationSchoolFileTemplateSerializer, RegistrationParentFileTemplateSerializer
|
||||
from Subscriptions.pagination import CustomSubscriptionPagination
|
||||
from Subscriptions.models import Student, Guardian, RegistrationForm, RegistrationSchoolFileTemplate, RegistrationFileGroup, RegistrationParentFileTemplate
|
||||
from Subscriptions.models import (
|
||||
Student,
|
||||
Guardian,
|
||||
RegistrationForm,
|
||||
RegistrationSchoolFileTemplate,
|
||||
RegistrationFileGroup,
|
||||
RegistrationParentFileTemplate,
|
||||
StudentCompetency
|
||||
)
|
||||
from Subscriptions.automate import updateStateMachine
|
||||
from Common.models import Competency
|
||||
|
||||
from N3wtSchool import settings, bdd
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -236,7 +248,6 @@ class RegisterFormWithIdView(APIView):
|
||||
studentForm_data = request.data.get('data', '{}')
|
||||
try:
|
||||
data = json.loads(studentForm_data)
|
||||
print(f'data : {data}')
|
||||
except json.JSONDecodeError:
|
||||
return JsonResponse({"error": "Invalid JSON format in 'data'"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@ -366,6 +377,26 @@ class RegisterFormWithIdView(APIView):
|
||||
save=True
|
||||
)
|
||||
|
||||
# Valorisation des StudentCompetency pour l'élève
|
||||
try:
|
||||
student = registerForm.student
|
||||
cycle = None
|
||||
if student.level:
|
||||
cycle = student.level.cycle.number
|
||||
if cycle:
|
||||
competencies = Competency.objects.filter(
|
||||
category__domain__cycle=cycle
|
||||
).filter(
|
||||
Q(end_of_cycle=True) | Q(level=student.level.name)
|
||||
)
|
||||
for comp in competencies:
|
||||
StudentCompetency.objects.get_or_create(
|
||||
student=student,
|
||||
competency=comp
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de la valorisation des StudentCompetency: {e}")
|
||||
|
||||
updateStateMachine(registerForm, 'EVENT_VALIDATE')
|
||||
|
||||
# Retourner les données mises à jour
|
||||
|
||||
91
Back-End/Subscriptions/views/student_competencies_views.py
Normal file
91
Back-End/Subscriptions/views/student_competencies_views.py
Normal file
@ -0,0 +1,91 @@
|
||||
from django.http.response import JsonResponse
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework import status
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
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 N3wtSchool.bdd import delete_object
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@method_decorator(ensure_csrf_cookie, name='dispatch')
|
||||
class StudentCompetencyListCreateView(APIView):
|
||||
def get(self, request):
|
||||
student_id = request.GET.get('student_id')
|
||||
if not student_id:
|
||||
return JsonResponse({'error': 'student_id requis'}, status=400)
|
||||
try:
|
||||
student = Student.objects.get(id=student_id)
|
||||
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)
|
||||
|
||||
result = []
|
||||
total_competencies = 0
|
||||
domaines = Domain.objects.all()
|
||||
for domaine in domaines:
|
||||
domaine_dict = {
|
||||
"domaine_id": domaine.id,
|
||||
"domaine_nom": domaine.name,
|
||||
"categories": []
|
||||
}
|
||||
categories = domaine.categories.all()
|
||||
for categorie in categories:
|
||||
categorie_dict = {
|
||||
"categorie_id": categorie.id,
|
||||
"categorie_nom": categorie.name,
|
||||
"competences": []
|
||||
}
|
||||
# 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:
|
||||
categorie_dict["competences"].append({
|
||||
"competence_id": comp.id,
|
||||
"nom": comp.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"]:
|
||||
result.append(domaine_dict)
|
||||
|
||||
return JsonResponse({
|
||||
"count": total_competencies,
|
||||
"data": result
|
||||
}, safe=False, status=200)
|
||||
|
||||
# def post(self, request):
|
||||
# serializer = AbsenceManagementSerializer(data=request.data)
|
||||
# if serializer.is_valid():
|
||||
# serializer.save()
|
||||
# return JsonResponse(serializer.data, safe=False, status=status.HTTP_201_CREATED)
|
||||
# return JsonResponse(serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@method_decorator(ensure_csrf_cookie, name='dispatch')
|
||||
class StudentCompetencySimpleView(APIView):
|
||||
def get(self, request, id):
|
||||
return JsonResponse("ok", safe=False, status=status.HTTP_200_OK)
|
||||
|
||||
# def put(self, request, id):
|
||||
# try:
|
||||
# absence = AbsenceManagement.objects.get(id=id)
|
||||
# serializer = AbsenceManagementSerializer(absence, data=request.data)
|
||||
# if serializer.is_valid():
|
||||
# serializer.save()
|
||||
# return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK)
|
||||
# return JsonResponse(serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
# except AbsenceManagement.DoesNotExist:
|
||||
# return JsonResponse({"error": "Absence not found"}, safe=False, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# def delete(self, request, id):
|
||||
# return delete_object(AbsenceManagement, id)
|
||||
Reference in New Issue
Block a user