mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Sauvegarde des compétences d'un élève [#16]
This commit is contained in:
@ -13,7 +13,8 @@ from .models import (
|
||||
Fee,
|
||||
PaymentPlan,
|
||||
PaymentMode,
|
||||
EstablishmentCompetency
|
||||
EstablishmentCompetency,
|
||||
Competency
|
||||
)
|
||||
from .serializers import (
|
||||
TeacherSerializer,
|
||||
@ -24,12 +25,14 @@ from .serializers import (
|
||||
FeeSerializer,
|
||||
PaymentPlanSerializer,
|
||||
PaymentModeSerializer,
|
||||
EstablishmentCompetencySerializer
|
||||
EstablishmentCompetencySerializer,
|
||||
CompetencySerializer
|
||||
)
|
||||
from Common.models import Domain, Category, Competency
|
||||
from Common.models import Domain, Category
|
||||
from N3wtSchool.bdd import delete_object, getAllObjects, getObject
|
||||
from django.db.models import Q
|
||||
from collections import defaultdict
|
||||
from Subscriptions.models import Student, StudentCompetency
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@method_decorator(ensure_csrf_cookie, name='dispatch')
|
||||
@ -417,6 +420,60 @@ class PaymentModeDetailView(APIView):
|
||||
def delete(self, request, id):
|
||||
return delete_object(PaymentMode, id)
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@method_decorator(ensure_csrf_cookie, name='dispatch')
|
||||
class CompetencyListCreateView(APIView):
|
||||
def get(self, request):
|
||||
cycle = request.GET.get('cycle')
|
||||
if cycle is None:
|
||||
return JsonResponse({'error': 'cycle est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
competencies_list = getAllObjects(Competency)
|
||||
competencies_list = competencies_list.filter(
|
||||
category__domain__cycle=cycle
|
||||
).distinct()
|
||||
serializer = CompetencySerializer(competencies_list, many=True)
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
|
||||
def post(self, request):
|
||||
data = JSONParser().parse(request)
|
||||
serializer = CompetencySerializer(data=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 CompetencyDetailView(APIView):
|
||||
def get(self, request, id):
|
||||
try:
|
||||
competency = Competency.objects.get(id=id)
|
||||
serializer = CompetencySerializer(competency)
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
except Competency.DoesNotExist:
|
||||
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def put(self, request, id):
|
||||
try:
|
||||
competency = Competency.objects.get(id=id)
|
||||
except Competency.DoesNotExist:
|
||||
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
|
||||
data = JSONParser().parse(request)
|
||||
serializer = CompetencySerializer(competency, data=data, partial=True)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
return JsonResponse(serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def delete(self, request, id):
|
||||
try:
|
||||
competency = Competency.objects.get(id=id)
|
||||
competency.delete()
|
||||
return JsonResponse({'message': 'Deleted'}, safe=False)
|
||||
except Competency.DoesNotExist:
|
||||
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@method_decorator(ensure_csrf_cookie, name='dispatch')
|
||||
class EstablishmentCompetencyListCreateView(APIView):
|
||||
@ -541,6 +598,14 @@ class EstablishmentCompetencyListCreateView(APIView):
|
||||
custom_category=category,
|
||||
is_required=False
|
||||
)
|
||||
# Associer à tous les élèves de l'établissement
|
||||
students = Student.objects.filter(associated_class__establishment_id=establishment_id)
|
||||
for student in students:
|
||||
StudentCompetency.objects.get_or_create(
|
||||
student=student,
|
||||
establishment_competency=ec
|
||||
)
|
||||
|
||||
created.append({
|
||||
"competence_id": ec.id,
|
||||
"nom": ec.custom_name,
|
||||
@ -558,6 +623,7 @@ class EstablishmentCompetencyListCreateView(APIView):
|
||||
def delete(self, request):
|
||||
"""
|
||||
Supprime une ou plusieurs compétences custom (EstablishmentCompetency) à partir d'une liste d'IDs.
|
||||
Supprime aussi les StudentCompetency associés.
|
||||
Attendu dans le body :
|
||||
{
|
||||
"ids": [1, 2, 3, ...]
|
||||
@ -571,6 +637,8 @@ class EstablishmentCompetencyListCreateView(APIView):
|
||||
for ec_id in ids:
|
||||
try:
|
||||
ec = EstablishmentCompetency.objects.get(id=ec_id)
|
||||
# Supprimer les StudentCompetency associés
|
||||
StudentCompetency.objects.filter(establishment_competency=ec).delete()
|
||||
ec.delete()
|
||||
deleted.append(ec_id)
|
||||
except EstablishmentCompetency.DoesNotExist:
|
||||
|
||||
Reference in New Issue
Block a user