refactor: Mise à jour de la doc swagger / URL

This commit is contained in:
N3WT DE COMPET
2025-02-13 21:59:25 +01:00
parent cce78355a3
commit 4c95b6a83f
13 changed files with 326 additions and 359 deletions

View File

@ -40,8 +40,8 @@ class SessionView(APIView):
try: try:
decoded_token = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256']) decoded_token = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256'])
print(f'decode : {decoded_token}') print(f'decode : {decoded_token}')
user_id = decoded_token.get('id') userid = decoded_token.get('id')
user = Profile.objects.get(id=user_id) user = Profile.objects.get(id=userid)
response_data = { response_data = {
'user': { 'user': {
@ -84,7 +84,7 @@ class ProfileSimpleView(APIView):
def put(self, request, id): def put(self, request, id):
data=JSONParser().parse(request) data=JSONParser().parse(request)
profil = Profile.objects.get(id=_id) profil = Profile.objects.get(id=id)
profil_serializer = ProfilUpdateSerializer(profil, data=data) profil_serializer = ProfilUpdateSerializer(profil, data=data)
if profil_serializer.is_valid(): if profil_serializer.is_valid():
profil_serializer.save() profil_serializer.save()
@ -108,7 +108,7 @@ class LoginView(APIView):
def post(self, request): def post(self, request):
data=JSONParser().parse(request) data=JSONParser().parse(request)
validatorAuthentication = validator.ValidatorAuthentication(data=data) validatorAuthentication = validator.ValidatorAuthentication(data=data)
retour = error.returnMessage[error.WRONG_ID] retour = error.returnMessage[error.WRONGid]
validationOk, errorFields = validatorAuthentication.validate() validationOk, errorFields = validatorAuthentication.validate()
user = None user = None
if validationOk: if validationOk:
@ -133,7 +133,7 @@ class LoginView(APIView):
# 'role': "admin" # 'role': "admin"
# }, settings.SECRET_KEY, algorithm='HS256') # }, settings.SECRET_KEY, algorithm='HS256')
else: else:
retour = error.returnMessage[error.WRONG_ID] retour = error.returnMessage[error.WRONGid]
return JsonResponse({ return JsonResponse({

View File

@ -87,6 +87,7 @@ class PlanningSerializer(serializers.ModelSerializer):
class SchoolClassSerializer(serializers.ModelSerializer): class SchoolClassSerializer(serializers.ModelSerializer):
updated_date_formatted = serializers.SerializerMethodField() updated_date_formatted = serializers.SerializerMethodField()
teachers = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, required=False) teachers = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, required=False)
establishment = serializers.PrimaryKeyRelatedField(queryset=Establishment.objects.all(), required=False)
teachers_details = serializers.SerializerMethodField() teachers_details = serializers.SerializerMethodField()
class Meta: class Meta:
@ -105,9 +106,10 @@ class SchoolClassSerializer(serializers.ModelSerializer):
teaching_language=validated_data.get('teaching_language', ''), teaching_language=validated_data.get('teaching_language', ''),
school_year=validated_data.get('school_year', ''), school_year=validated_data.get('school_year', ''),
levels=levels_data, levels=levels_data,
type=validated_data.get('type', 1), # Added here type=validated_data.get('type', 1),
time_range=validated_data.get('time_range', ['08:30', '17:30']), # Added here time_range=validated_data.get('time_range', ['08:30', '17:30']),
opening_days=validated_data.get('opening_days', [1, 2, 4, 5]) # Added here opening_days=validated_data.get('opening_days', [1, 2, 4, 5]),
establishment=validated_data.get('establishment', None)
) )
school_class.teachers.set(teachers_data) school_class.teachers.set(teachers_data)
@ -132,9 +134,10 @@ class SchoolClassSerializer(serializers.ModelSerializer):
instance.teaching_language = validated_data.get('teaching_language', instance.teaching_language) instance.teaching_language = validated_data.get('teaching_language', instance.teaching_language)
instance.school_year = validated_data.get('school_year', instance.school_year) instance.school_year = validated_data.get('school_year', instance.school_year)
instance.levels = levels_data instance.levels = levels_data
instance.type = validated_data.get('type', instance.type) # Added here instance.type = validated_data.get('type', instance.type)
instance.time_range = validated_data.get('time_range', instance.time_range) # Added here instance.time_range = validated_data.get('time_range', instance.time_range)
instance.opening_days = validated_data.get('opening_days', instance.opening_days) # Added here instance.opening_days = validated_data.get('opening_days', instance.opening_days)
instance.establishment = validated_data.get('establishment', instance.establishment)
instance.save() instance.save()
instance.teachers.set(teachers_data) instance.teachers.set(teachers_data)
@ -169,6 +172,7 @@ class SchoolClassSerializer(serializers.ModelSerializer):
class DiscountSerializer(serializers.ModelSerializer): class DiscountSerializer(serializers.ModelSerializer):
updated_at_formatted = serializers.SerializerMethodField() updated_at_formatted = serializers.SerializerMethodField()
establishment = serializers.PrimaryKeyRelatedField(queryset=Establishment.objects.all(), required=False)
class Meta: class Meta:
model = Discount model = Discount
fields = '__all__' fields = '__all__'
@ -181,6 +185,7 @@ class DiscountSerializer(serializers.ModelSerializer):
class FeeSerializer(serializers.ModelSerializer): class FeeSerializer(serializers.ModelSerializer):
updated_at_formatted = serializers.SerializerMethodField() updated_at_formatted = serializers.SerializerMethodField()
establishment = serializers.PrimaryKeyRelatedField(queryset=Establishment.objects.all(), required=False)
class Meta: class Meta:
model = Fee model = Fee

View File

@ -1,61 +1,51 @@
from django.urls import path, re_path from django.urls import path, re_path
from School.views import ( from .views import (
TeachersView, TeacherListCreateView,
TeacherView, TeacherDetailView,
SpecialitiesView, SpecialityListCreateView,
SpecialityView, SpecialityDetailView,
ClassesView, SchoolClassListCreateView,
ClasseView, SchoolClassDetailView,
PlanningsView, PlanningListCreateView,
PlanningView, PlanningDetailView,
FeesView, FeeListCreateView,
FeeView, FeeDetailView,
DiscountsView, DiscountListCreateView,
DiscountView, DiscountDetailView,
PaymentPlansView, PaymentPlanListCreateView,
PaymentPlanView, PaymentPlanDetailView,
PaymentModesView, PaymentModeListCreateView,
PaymentModeView, PaymentModeDetailView,
EstablishmentsView, EstablishmentListCreateView,
EstablishmentView EstablishmentDetailView
) )
urlpatterns = [ urlpatterns = [
re_path(r'^specialities$', SpecialitiesView.as_view(), name="specialities"), re_path(r'^specialities$', SpecialityListCreateView.as_view(), name="speciality_list_create"),
re_path(r'^speciality$', SpecialityView.as_view(), name="speciality"), re_path(r'^specialities/(?P<id>[0-9]+)$', SpecialityDetailView.as_view(), name="speciality_detail"),
re_path(r'^speciality/([0-9]+)$', SpecialityView.as_view(), name="speciality"),
re_path(r'^teachers$', TeachersView.as_view(), name="teachers"), re_path(r'^teachers$', TeacherListCreateView.as_view(), name="teacher_list_create"),
re_path(r'^teacher$', TeacherView.as_view(), name="teacher"), re_path(r'^teachers/(?P<id>[0-9]+)', TeacherDetailView.as_view(), name="teacher_detail"),
re_path(r'^teacher/([0-9]+)$', TeacherView.as_view(), name="teacher"),
re_path(r'^schoolClasses$', ClassesView.as_view(), name="schoolClasses"), re_path(r'^schoolClasses$', SchoolClassListCreateView.as_view(), name="school_class_list_create"),
re_path(r'^schoolClass$', ClasseView.as_view(), name="schoolClass"), re_path(r'^schoolClasses/(?P<id>[0-9]+)', SchoolClassDetailView.as_view(), name="school_class_detail"),
re_path(r'^schoolClass/([0-9]+)$', ClasseView.as_view(), name="schoolClass"),
re_path(r'^plannings$', PlanningsView.as_view(), name="plannings"), re_path(r'^plannings$', PlanningListCreateView.as_view(), name="planninglist_create"),
re_path(r'^planning$', PlanningView.as_view(), name="planning"), re_path(r'^plannings/(?P<id>[0-9]+)$', PlanningDetailView.as_view(), name="planning_detail"),
re_path(r'^planning/([0-9]+)$', PlanningView.as_view(), name="planning"),
re_path(r'^fees/(?P<_filter>[a-zA-z]+)$', FeesView.as_view(), name="fees"), re_path(r'^fees$', FeeListCreateView.as_view(), name="fee_list_create"),
re_path(r'^fee$', FeeView.as_view(), name="fee"), re_path(r'^fees/(?P<id>[0-9]+)$', FeeDetailView.as_view(), name="fee_detail"),
re_path(r'^fee/([0-9]+)$', FeeView.as_view(), name="fee"),
re_path(r'^discounts/(?P<_filter>[a-zA-z]+)$$', DiscountsView.as_view(), name="discounts"), re_path(r'^discounts$', DiscountListCreateView.as_view(), name="discount_list_create"),
re_path(r'^discount$', DiscountView.as_view(), name="discount"), re_path(r'^discounts/(?P<id>[0-9]+)$', DiscountDetailView.as_view(), name="discount_detail"),
re_path(r'^discount/([0-9]+)$', DiscountView.as_view(), name="discount"),
re_path(r'^paymentPlans/(?P<_filter>[a-zA-z]+)$', PaymentPlansView.as_view(), name="paymentPlans"), re_path(r'^paymentPlans$', PaymentPlanListCreateView.as_view(), name="payment_plan_list_create"),
re_path(r'^paymentPlan$', PaymentPlanView.as_view(), name="paymentPlan"), re_path(r'^paymentPlans/(?P<id>[0-9]+)$', PaymentPlanDetailView.as_view(), name="payment_plan_detail"),
re_path(r'^paymentPlan/([0-9]+)$', PaymentPlanView.as_view(), name="paymentPlan"),
re_path(r'^paymentModes/(?P<_filter>[a-zA-z]+)$', PaymentModesView.as_view(), name="paymentModes"), re_path(r'^paymentModes$', PaymentModeListCreateView.as_view(), name="payment_mode_list_create"),
re_path(r'^paymentMode$', PaymentModeView.as_view(), name="paymentMode"), re_path(r'^paymentModes/(?P<id>[0-9]+)$', PaymentModeDetailView.as_view(), name="payment_mode_detail"),
re_path(r'^paymentMode/([0-9]+)$', PaymentModeView.as_view(), name="paymentMode"),
re_path(r'^establishments$', EstablishmentsView.as_view(), name="establishments"),
re_path(r'^establishment$', EstablishmentView.as_view(), name='establishment'),
re_path(r'^establishment/([0-9]+)$', EstablishmentView.as_view(), name='establishment')
re_path(r'^establishments$', EstablishmentListCreateView.as_view(), name='establishment_list_create'),
re_path(r'^establishments/(?P<id>[0-9]+)$', EstablishmentDetailView.as_view(), name="establishment_detail"),
] ]

View File

@ -3,58 +3,60 @@ from django.views.decorators.csrf import ensure_csrf_cookie, csrf_protect
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from rest_framework.parsers import JSONParser from rest_framework.parsers import JSONParser
from rest_framework.views import APIView from rest_framework.views import APIView
from django.core.cache import cache from rest_framework import status
from django.core.exceptions import ObjectDoesNotExist from .models import (
from .models import Teacher, Speciality, SchoolClass, Planning, Discount, Fee, PaymentPlan, PaymentMode, Establishment Teacher,
from .serializers import TeacherSerializer, SpecialitySerializer, SchoolClassSerializer, PlanningSerializer, DiscountSerializer, FeeSerializer, PaymentPlanSerializer, PaymentModeSerializer, EstablishmentSerializer Speciality,
from N3wtSchool import bdd SchoolClass,
Planning,
Discount,
Fee,
PaymentPlan,
PaymentMode,
Establishment
)
from .serializers import (
TeacherSerializer,
SpecialitySerializer,
SchoolClassSerializer,
PlanningSerializer,
DiscountSerializer,
FeeSerializer,
PaymentPlanSerializer,
PaymentModeSerializer,
EstablishmentSerializer
)
from N3wtSchool.bdd import delete_object, getAllObjects, getObject from N3wtSchool.bdd import delete_object, getAllObjects, getObject
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialitiesView(APIView): class SpecialityListCreateView(APIView):
def get(self, request): def get(self, request):
specialitiesList = getAllObjects(Speciality) specialitiesList = getAllObjects(Speciality)
specialities_serializer = SpecialitySerializer(specialitiesList, many=True) specialities_serializer = SpecialitySerializer(specialitiesList, many=True)
return JsonResponse(specialities_serializer.data, safe=False) return JsonResponse(specialities_serializer.data, safe=False)
def post(self, request):
specialities_data = JSONParser().parse(request)
all_valid = True
for speciality_data in specialities_data:
speciality_serializer = SpecialitySerializer(data=speciality_data)
if speciality_serializer.is_valid():
speciality_serializer.save()
else:
all_valid = False
break
if all_valid:
specialitiesList = getAllObjects(Speciality)
specialities_serializer = SpecialitySerializer(specialitiesList, many=True)
return JsonResponse(specialities_serializer.data, safe=False)
return JsonResponse(speciality_serializer.errors, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialityView(APIView):
def get(self, request, _id):
speciality = getObject(_objectName=Speciality, _columnName='id', _value=_id)
speciality_serializer = SpecialitySerializer(speciality)
return JsonResponse(speciality_serializer.data, safe=False)
def post(self, request): def post(self, request):
speciality_data=JSONParser().parse(request) speciality_data=JSONParser().parse(request)
speciality_serializer = SpecialitySerializer(data=speciality_data) speciality_serializer = SpecialitySerializer(data=speciality_data)
if speciality_serializer.is_valid(): if speciality_serializer.is_valid():
speciality_serializer.save() speciality_serializer.save()
return JsonResponse(speciality_serializer.data, safe=False, status=201) return JsonResponse(speciality_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(speciality_serializer.errors, safe=False, status=400) return JsonResponse(speciality_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialityDetailView(APIView):
def get(self, request, id):
speciality = getObject(_objectName=Speciality, _columnName='id', _value=id)
speciality_serializer = SpecialitySerializer(speciality)
return JsonResponse(speciality_serializer.data, safe=False)
def put(self, request, id):
speciality_data=JSONParser().parse(request) speciality_data=JSONParser().parse(request)
speciality = getObject(_objectName=Speciality, _columnName='id', _value=_id) speciality = getObject(_objectName=Speciality, _columnName='id', _value=id)
speciality_serializer = SpecialitySerializer(speciality, data=speciality_data) speciality_serializer = SpecialitySerializer(speciality, data=speciality_data)
if speciality_serializer.is_valid(): if speciality_serializer.is_valid():
speciality_serializer.save() speciality_serializer.save()
@ -62,25 +64,18 @@ class SpecialityView(APIView):
return JsonResponse(speciality_serializer.errors, safe=False) return JsonResponse(speciality_serializer.errors, safe=False)
def delete(self, request, _id): def delete(self, request, id):
return delete_object(Speciality, _id) return delete_object(Speciality, id)
class TeachersView(APIView): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class TeacherListCreateView(APIView):
def get(self, request): def get(self, request):
teachersList=getAllObjects(Teacher) teachersList=getAllObjects(Teacher)
teachers_serializer=TeacherSerializer(teachersList, many=True) teachers_serializer=TeacherSerializer(teachersList, many=True)
return JsonResponse(teachers_serializer.data, safe=False) return JsonResponse(teachers_serializer.data, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class TeacherView(APIView):
def get (self, request, _id):
teacher = getObject(_objectName=Teacher, _columnName='id', _value=_id)
teacher_serializer=TeacherSerializer(teacher)
return JsonResponse(teacher_serializer.data, safe=False)
def post(self, request): def post(self, request):
teacher_data=JSONParser().parse(request) teacher_data=JSONParser().parse(request)
teacher_serializer = TeacherSerializer(data=teacher_data) teacher_serializer = TeacherSerializer(data=teacher_data)
@ -92,9 +87,18 @@ class TeacherView(APIView):
return JsonResponse(teacher_serializer.errors, safe=False) return JsonResponse(teacher_serializer.errors, safe=False)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class TeacherDetailView(APIView):
def get (self, request, id):
teacher = getObject(_objectName=Teacher, _columnName='id', _value=id)
teacher_serializer=TeacherSerializer(teacher)
return JsonResponse(teacher_serializer.data, safe=False)
def put(self, request, id):
teacher_data=JSONParser().parse(request) teacher_data=JSONParser().parse(request)
teacher = getObject(_objectName=Teacher, _columnName='id', _value=_id) teacher = getObject(_objectName=Teacher, _columnName='id', _value=id)
teacher_serializer = TeacherSerializer(teacher, data=teacher_data) teacher_serializer = TeacherSerializer(teacher, data=teacher_data)
if teacher_serializer.is_valid(): if teacher_serializer.is_valid():
teacher_serializer.save() teacher_serializer.save()
@ -102,46 +106,17 @@ class TeacherView(APIView):
return JsonResponse(teacher_serializer.errors, safe=False) return JsonResponse(teacher_serializer.errors, safe=False)
def delete(self, request, _id): def delete(self, request, id):
return delete_object(Teacher, _id, related_field='associated_profile') return delete_object(Teacher, id, related_field='associated_profile')
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class ClassesView(APIView): class SchoolClassListCreateView(APIView):
def get(self, request): def get(self, request):
classesList=getAllObjects(SchoolClass) classesList=getAllObjects(SchoolClass)
classes_serializer=SchoolClassSerializer(classesList, many=True) classes_serializer=SchoolClassSerializer(classesList, many=True)
return JsonResponse(classes_serializer.data, safe=False) return JsonResponse(classes_serializer.data, safe=False)
def post(self, request):
all_valid = True
classes_data=JSONParser().parse(request)
for classe_data in classes_data:
classe_serializer = SchoolClassSerializer(data=classe_data)
if classe_serializer.is_valid():
classe_serializer.save()
else:
all_valid = False
break
if all_valid:
classesList = getAllObjects(SchoolClass)
classes_serializer = SchoolClassSerializer(classesList, many=True)
return JsonResponse(classes_serializer.data, safe=False)
return JsonResponse(classe_serializer.errors, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class ClasseView(APIView):
def get (self, request, _id):
schoolClass = getObject(_objectName=SchoolClass, _columnName='id', _value=_id)
classe_serializer=SchoolClassSerializer(schoolClass)
return JsonResponse(classe_serializer.data, safe=False)
def post(self, request): def post(self, request):
classe_data=JSONParser().parse(request) classe_data=JSONParser().parse(request)
classe_serializer = SchoolClassSerializer(data=classe_data) classe_serializer = SchoolClassSerializer(data=classe_data)
@ -152,9 +127,18 @@ class ClasseView(APIView):
return JsonResponse(classe_serializer.errors, safe=False) return JsonResponse(classe_serializer.errors, safe=False)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SchoolClassDetailView(APIView):
def get (self, request, id):
schoolClass = getObject(_objectName=SchoolClass, _columnName='id', _value=id)
classe_serializer=SchoolClassSerializer(schoolClass)
return JsonResponse(classe_serializer.data, safe=False)
def put(self, request, id):
classe_data=JSONParser().parse(request) classe_data=JSONParser().parse(request)
schoolClass = getObject(_objectName=SchoolClass, _columnName='id', _value=_id) schoolClass = getObject(_objectName=SchoolClass, _columnName='id', _value=id)
classe_serializer = SchoolClassSerializer(schoolClass, data=classe_data) classe_serializer = SchoolClassSerializer(schoolClass, data=classe_data)
if classe_serializer.is_valid(): if classe_serializer.is_valid():
classe_serializer.save() classe_serializer.save()
@ -162,27 +146,17 @@ class ClasseView(APIView):
return JsonResponse(classe_serializer.errors, safe=False) return JsonResponse(classe_serializer.errors, safe=False)
def delete(self, request, _id): def delete(self, request, id):
return delete_object(SchoolClass, _id) return delete_object(SchoolClass, id)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class PlanningsView(APIView): class PlanningListCreateView(APIView):
def get(self, request): def get(self, request):
schedulesList=getAllObjects(Planning) schedulesList=getAllObjects(Planning)
schedules_serializer=PlanningSerializer(schedulesList, many=True) schedules_serializer=PlanningSerializer(schedulesList, many=True)
return JsonResponse(schedules_serializer.data, safe=False) return JsonResponse(schedules_serializer.data, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PlanningView(APIView):
def get (self, request, _id):
planning = getObject(_objectName=Planning, _columnName='classe__id', _value=_id)
planning_serializer=PlanningSerializer(planning)
return JsonResponse(planning_serializer.data, safe=False)
def post(self, request): def post(self, request):
planning_data=JSONParser().parse(request) planning_data=JSONParser().parse(request)
planning_serializer = PlanningSerializer(data=planning_data) planning_serializer = PlanningSerializer(data=planning_data)
@ -193,15 +167,24 @@ class PlanningView(APIView):
return JsonResponse(planning_serializer.errors, safe=False) return JsonResponse(planning_serializer.errors, safe=False)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PlanningDetailView(APIView):
def get (self, request, id):
planning = getObject(_objectName=Planning, _columnName='classe_id', _value=id)
planning_serializer=PlanningSerializer(planning)
return JsonResponse(planning_serializer.data, safe=False)
def put(self, request, id):
planning_data = JSONParser().parse(request) planning_data = JSONParser().parse(request)
try: try:
planning = Planning.objects.get(id=_id) planning = Planning.objects.get(id=id)
except Planning.DoesNotExist: except Planning.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404) return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
except Planning.MultipleObjectsReturned: except Planning.MultipleObjectsReturned:
return JsonResponse({'error': 'Multiple objects found'}, status=400) return JsonResponse({'error': 'Multiple objects found'}, status=status.HTTP_400_BAD_REQUEST)
planning_serializer = PlanningSerializer(planning, data=planning_data) planning_serializer = PlanningSerializer(planning, data=planning_data)
@ -210,236 +193,228 @@ class PlanningView(APIView):
return JsonResponse(planning_serializer.data, safe=False) return JsonResponse(planning_serializer.data, safe=False)
return JsonResponse(planning_serializer.errors, safe=False) return JsonResponse(planning_serializer.errors, safe=False)
def delete(self, request, id):
# Vues pour les réductions (Discount) return delete_object(Planning, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class DiscountsView(APIView):
def get(self, request, _filter, *args, **kwargs):
if _filter not in ['registration', 'tuition']:
return JsonResponse({"error": "Invalid type parameter. Must be 'registration' or 'tuition'."}, safe=False, status=400)
discount_type_value = 0 if _filter == 'registration' else 1
discounts = Discount.objects.filter(type=discount_type_value)
discounts_serializer = DiscountSerializer(discounts, many=True)
return JsonResponse(discounts_serializer.data, safe=False, status=200)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class DiscountView(APIView): class FeeListCreateView(APIView):
def get(self, request, _id): def get(self, request, *args, **kwargs):
try: filter = request.GET.get('filter', '').strip()
discount = Discount.objects.get(id=_id) fee_type_value = 0 if filter == 'registration' else 1
discount_serializer = DiscountSerializer(discount)
return JsonResponse(discount_serializer.data, safe=False)
except Discount.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404)
def post(self, request):
discount_data = JSONParser().parse(request)
discount_serializer = DiscountSerializer(data=discount_data)
if discount_serializer.is_valid():
discount_serializer.save()
return JsonResponse(discount_serializer.data, safe=False, status=201)
return JsonResponse(discount_serializer.errors, safe=False, status=400)
def put(self, request, _id):
discount_data = JSONParser().parse(request)
try:
discount = Discount.objects.get(id=_id)
except Discount.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404)
discount_serializer = DiscountSerializer(discount, data=discount_data, partial=True) # Utilisation de partial=True
if discount_serializer.is_valid():
discount_serializer.save()
return JsonResponse(discount_serializer.data, safe=False)
return JsonResponse(discount_serializer.errors, safe=False, status=400)
def delete(self, request, _id):
return delete_object(Discount, _id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class FeesView(APIView):
def get(self, request, _filter, *args, **kwargs):
if _filter not in ['registration', 'tuition']:
return JsonResponse({"error": "Invalid type parameter. Must be 'registration' or 'tuition'."}, safe=False, status=400)
fee_type_value = 0 if _filter == 'registration' else 1
fees = Fee.objects.filter(type=fee_type_value) fees = Fee.objects.filter(type=fee_type_value)
fee_serializer = FeeSerializer(fees, many=True) fee_serializer = FeeSerializer(fees, many=True)
return JsonResponse(fee_serializer.data, safe=False, status=200) return JsonResponse(fee_serializer.data, safe=False, status=status.HTTP_200_OK)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class FeeView(APIView):
def get(self, request, _id):
try:
fee = Fee.objects.get(id=_id)
fee_serializer = FeeSerializer(fee)
return JsonResponse(fee_serializer.data, safe=False)
except Fee.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404)
def post(self, request): def post(self, request):
fee_data = JSONParser().parse(request) fee_data = JSONParser().parse(request)
fee_serializer = FeeSerializer(data=fee_data) fee_serializer = FeeSerializer(data=fee_data)
if fee_serializer.is_valid(): if fee_serializer.is_valid():
fee_serializer.save() fee_serializer.save()
return JsonResponse(fee_serializer.data, safe=False, status=201) return JsonResponse(fee_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(fee_serializer.errors, safe=False, status=400) return JsonResponse(fee_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class FeeDetailView(APIView):
def get(self, request, id):
try:
fee = Fee.objects.get(id=id)
fee_serializer = FeeSerializer(fee)
return JsonResponse(fee_serializer.data, safe=False)
except Fee.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
fee_data = JSONParser().parse(request) fee_data = JSONParser().parse(request)
try: try:
fee = Fee.objects.get(id=_id) fee = Fee.objects.get(id=id)
except Fee.DoesNotExist: except Fee.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404) return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
fee_serializer = FeeSerializer(fee, data=fee_data, partial=True) fee_serializer = FeeSerializer(fee, data=fee_data, partial=True)
if fee_serializer.is_valid(): if fee_serializer.is_valid():
fee_serializer.save() fee_serializer.save()
return JsonResponse(fee_serializer.data, safe=False) return JsonResponse(fee_serializer.data, safe=False)
return JsonResponse(fee_serializer.errors, safe=False, status=400) return JsonResponse(fee_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, _id): def delete(self, request, id):
return delete_object(Fee, _id) return delete_object(Fee, id)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlansView(APIView): class DiscountListCreateView(APIView):
def get(self, request, _filter, *args, **kwargs): def get(self, request, *args, **kwargs):
filter = request.GET.get('filter', '').strip()
discount_type_value = 0 if filter == 'registration' else 1
discounts = Discount.objects.filter(type=discount_type_value)
discounts_serializer = DiscountSerializer(discounts, many=True)
return JsonResponse(discounts_serializer.data, safe=False, status=status.HTTP_200_OK)
if _filter not in ['registration', 'tuition']: def post(self, request):
return JsonResponse({"error": "Invalid type parameter. Must be 'registration' or 'tuition'."}, safe=False, status=400) discount_data = JSONParser().parse(request)
discount_serializer = DiscountSerializer(data=discount_data)
type_value = 0 if _filter == 'registration' else 1 if discount_serializer.is_valid():
discount_serializer.save()
return JsonResponse(discount_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(discount_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class DiscountDetailView(APIView):
def get(self, request, id):
try:
discount = Discount.objects.get(id=id)
discount_serializer = DiscountSerializer(discount)
return JsonResponse(discount_serializer.data, safe=False)
except Discount.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
discount_data = JSONParser().parse(request)
try:
discount = Discount.objects.get(id=id)
except Discount.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
discount_serializer = DiscountSerializer(discount, data=discount_data, partial=True) # Utilisation de partial=True
if discount_serializer.is_valid():
discount_serializer.save()
return JsonResponse(discount_serializer.data, safe=False)
return JsonResponse(discount_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
return delete_object(Discount, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlanListCreateView(APIView):
def get(self, request, *args, **kwargs):
filter = request.GET.get('filter', '').strip()
type_value = 0 if filter == 'registration' else 1
paymentPlans = PaymentPlan.objects.filter(type=type_value) paymentPlans = PaymentPlan.objects.filter(type=type_value)
payment_plans_serializer = PaymentPlanSerializer(paymentPlans, many=True) payment_plans_serializer = PaymentPlanSerializer(paymentPlans, many=True)
return JsonResponse(payment_plans_serializer.data, safe=False, status=200) return JsonResponse(payment_plans_serializer.data, safe=False, status=status.HTTP_200_OK)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlanView(APIView):
def get(self, request, _id):
try:
payment_plan = PaymentPlan.objects.get(id=_id)
payment_plan_serializer = PaymentPlanSerializer(payment_plan)
return JsonResponse(payment_plan_serializer.data, safe=False)
except PaymentPlan.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404)
def post(self, request): def post(self, request):
payment_plan_data = JSONParser().parse(request) payment_plan_data = JSONParser().parse(request)
payment_plan_serializer = PaymentPlanSerializer(data=payment_plan_data) payment_plan_serializer = PaymentPlanSerializer(data=payment_plan_data)
if payment_plan_serializer.is_valid(): if payment_plan_serializer.is_valid():
payment_plan_serializer.save() payment_plan_serializer.save()
return JsonResponse(payment_plan_serializer.data, safe=False, status=201) return JsonResponse(payment_plan_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(payment_plan_serializer.errors, safe=False, status=400) return JsonResponse(payment_plan_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlanDetailView(APIView):
def get(self, request, id):
try:
payment_plan = PaymentPlan.objects.get(id=id)
payment_plan_serializer = PaymentPlanSerializer(payment_plan)
return JsonResponse(payment_plan_serializer.data, safe=False)
except PaymentPlan.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
payment_plan_data = JSONParser().parse(request) payment_plan_data = JSONParser().parse(request)
try: try:
payment_plan = PaymentPlan.objects.get(id=_id) payment_plan = PaymentPlan.objects.get(id=id)
except PaymentPlan.DoesNotExist: except PaymentPlan.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404) return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
payment_plan_serializer = PaymentPlanSerializer(payment_plan, data=payment_plan_data, partial=True) payment_plan_serializer = PaymentPlanSerializer(payment_plan, data=payment_plan_data, partial=True)
if payment_plan_serializer.is_valid(): if payment_plan_serializer.is_valid():
payment_plan_serializer.save() payment_plan_serializer.save()
return JsonResponse(payment_plan_serializer.data, safe=False) return JsonResponse(payment_plan_serializer.data, safe=False)
return JsonResponse(payment_plan_serializer.errors, safe=False, status=400) return JsonResponse(payment_plan_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, _id): def delete(self, request, id):
return delete_object(PaymentPlan, _id) return delete_object(PaymentPlan, id)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentModesView(APIView): class PaymentModeListCreateView(APIView):
def get(self, request, _filter, *args, **kwargs): def get(self, request):
filter = request.GET.get('filter', '').strip()
if _filter not in ['registration', 'tuition']: type_value = 0 if filter == 'registration' else 1
return JsonResponse({"error": "Invalid type parameter. Must be 'registration' or 'tuition'."}, safe=False, status=400)
type_value = 0 if _filter == 'registration' else 1
paymentModes = PaymentMode.objects.filter(type=type_value) paymentModes = PaymentMode.objects.filter(type=type_value)
payment_modes_serializer = PaymentModeSerializer(paymentModes, many=True) payment_modes_serializer = PaymentModeSerializer(paymentModes, many=True)
return JsonResponse(payment_modes_serializer.data, safe=False, status=200) return JsonResponse(payment_modes_serializer.data, safe=False, status=status.HTTP_200_OK)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentModeView(APIView):
def get(self, request, _id):
try:
payment_mode = PaymentMode.objects.get(id=_id)
payment_mode_serializer = PaymentModeSerializer(payment_mode)
return JsonResponse(payment_mode_serializer.data, safe=False)
except PaymentMode.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404)
def post(self, request): def post(self, request):
payment_mode_data = JSONParser().parse(request) payment_mode_data = JSONParser().parse(request)
payment_mode_serializer = PaymentModeSerializer(data=payment_mode_data) payment_mode_serializer = PaymentModeSerializer(data=payment_mode_data)
if payment_mode_serializer.is_valid(): if payment_mode_serializer.is_valid():
payment_mode_serializer.save() payment_mode_serializer.save()
return JsonResponse(payment_mode_serializer.data, safe=False, status=201) return JsonResponse(payment_mode_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(payment_mode_serializer.errors, safe=False, status=400) return JsonResponse(payment_mode_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentModeDetailView(APIView):
def get(self, request, id):
try:
payment_mode = PaymentMode.objects.get(id=id)
payment_mode_serializer = PaymentModeSerializer(payment_mode)
return JsonResponse(payment_mode_serializer.data, safe=False)
except PaymentMode.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
payment_mode_data = JSONParser().parse(request) payment_mode_data = JSONParser().parse(request)
try: try:
payment_mode = PaymentMode.objects.get(id=_id) payment_mode = PaymentMode.objects.get(id=id)
except PaymentMode.DoesNotExist: except PaymentMode.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404) return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
payment_mode_serializer = PaymentModeSerializer(payment_mode, data=payment_mode_data, partial=True) payment_mode_serializer = PaymentModeSerializer(payment_mode, data=payment_mode_data, partial=True)
if payment_mode_serializer.is_valid(): if payment_mode_serializer.is_valid():
payment_mode_serializer.save() payment_mode_serializer.save()
return JsonResponse(payment_mode_serializer.data, safe=False) return JsonResponse(payment_mode_serializer.data, safe=False)
return JsonResponse(payment_mode_serializer.errors, safe=False, status=400) return JsonResponse(payment_mode_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
return delete_object(PaymentMode, id)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class EstablishmentsView(APIView): class EstablishmentListCreateView(APIView):
def get(self, request): def get(self, request):
establishments=getAllObjects(Establishment) establishments=getAllObjects(Establishment)
establishments_serializer=EstablishmentSerializer(establishments, many=True) establishments_serializer=EstablishmentSerializer(establishments, many=True)
return JsonResponse(establishments_serializer.data, safe=False, status=200) return JsonResponse(establishments_serializer.data, safe=False, status=status.HTTP_200_OK)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class EstablishmentView(APIView):
def get(self, request, _id):
try:
establishment = Establishment.objects.get(id=_id)
establishment_serializer = EstablishmentSerializer(establishment)
return JsonResponse(establishment_serializer.data, safe=False)
except Establishment.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404)
def post(self, request): def post(self, request):
establishment_data = JSONParser().parse(request) establishment_data = JSONParser().parse(request)
establishment_serializer = EstablishmentSerializer(data=establishment_data) establishment_serializer = EstablishmentSerializer(data=establishment_data)
if establishment_serializer.is_valid(): if establishment_serializer.is_valid():
establishment_serializer.save() establishment_serializer.save()
return JsonResponse(establishment_serializer.data, safe=False, status=201) return JsonResponse(establishment_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(establishment_serializer.errors, safe=False, status=400) return JsonResponse(establishment_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, _id): @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class EstablishmentDetailView(APIView):
def get(self, request, id=None):
try:
establishment = Establishment.objects.get(id=id)
establishment_serializer = EstablishmentSerializer(establishment)
return JsonResponse(establishment_serializer.data, safe=False)
except Establishment.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
establishment_data = JSONParser().parse(request) establishment_data = JSONParser().parse(request)
try: try:
establishment = Establishment.objects.get(id=_id) establishment = Establishment.objects.get(id=id)
except Establishment.DoesNotExist: except Establishment.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=404) return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
establishment_serializer = EstablishmentSerializer(establishment, data=establishment_data, partial=True) establishment_serializer = EstablishmentSerializer(establishment, data=establishment_data, partial=True)
if establishment_serializer.is_valid(): if establishment_serializer.is_valid():
establishment_serializer.save() establishment_serializer.save()
return JsonResponse(establishment_serializer.data, safe=False) return JsonResponse(establishment_serializer.data, safe=False)
return JsonResponse(establishment_serializer.errors, safe=False, status=400) return JsonResponse(establishment_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, _id): def delete(self, request, id):
return delete_object(Establishment, _id) return delete_object(Establishment, id)

View File

@ -45,42 +45,42 @@ export const fetchSchedules = () => {
}; };
export const fetchRegistrationDiscounts = () => { export const fetchRegistrationDiscounts = () => {
return fetch(`${BE_SCHOOL_DISCOUNTS_URL}/registration`) return fetch(`${BE_SCHOOL_DISCOUNTS_URL}?filter=registration`)
.then(requestResponseHandler) .then(requestResponseHandler)
}; };
export const fetchTuitionDiscounts = () => { export const fetchTuitionDiscounts = () => {
return fetch(`${BE_SCHOOL_DISCOUNTS_URL}/tuition`) return fetch(`${BE_SCHOOL_DISCOUNTS_URL}?filter=tuition`)
.then(requestResponseHandler) .then(requestResponseHandler)
}; };
export const fetchRegistrationFees = () => { export const fetchRegistrationFees = () => {
return fetch(`${BE_SCHOOL_FEES_URL}/registration`) return fetch(`${BE_SCHOOL_FEES_URL}?filter=registration`)
.then(requestResponseHandler) .then(requestResponseHandler)
}; };
export const fetchTuitionFees = () => { export const fetchTuitionFees = () => {
return fetch(`${BE_SCHOOL_FEES_URL}/tuition`) return fetch(`${BE_SCHOOL_FEES_URL}?filter=tuition`)
.then(requestResponseHandler) .then(requestResponseHandler)
}; };
export const fetchRegistrationPaymentPlans = () => { export const fetchRegistrationPaymentPlans = () => {
return fetch(`${BE_SCHOOL_PAYMENT_PLANS_URL}/registration`) return fetch(`${BE_SCHOOL_PAYMENT_PLANS_URL}?filter=registration`)
.then(requestResponseHandler) .then(requestResponseHandler)
} }
export const fetchTuitionPaymentPlans = () => { export const fetchTuitionPaymentPlans = () => {
return fetch(`${BE_SCHOOL_PAYMENT_PLANS_URL}/tuition`) return fetch(`${BE_SCHOOL_PAYMENT_PLANS_URL}?filter=tuition`)
.then(requestResponseHandler) .then(requestResponseHandler)
} }
export const fetchRegistrationPaymentModes = () => { export const fetchRegistrationPaymentModes = () => {
return fetch(`${BE_SCHOOL_PAYMENT_MODES_URL}/registration`) return fetch(`${BE_SCHOOL_PAYMENT_MODES_URL}?filter=registration`)
.then(requestResponseHandler) .then(requestResponseHandler)
} }
export const fetchTuitionPaymentModes = () => { export const fetchTuitionPaymentModes = () => {
return fetch(`${BE_SCHOOL_PAYMENT_MODES_URL}/tuition`) return fetch(`${BE_SCHOOL_PAYMENT_MODES_URL}?filter=tuition`)
.then(requestResponseHandler) .then(requestResponseHandler)
} }

View File

@ -8,6 +8,7 @@ import TeacherItem from '@/components/Structure/Configuration/TeacherItem';
import MultiSelect from '@/components/MultiSelect'; import MultiSelect from '@/components/MultiSelect';
import LevelLabel from '@/components/CustomLabels/LevelLabel'; import LevelLabel from '@/components/CustomLabels/LevelLabel';
import { DndProvider, HTML5Backend, useDrop } from 'react-dnd'; import { DndProvider, HTML5Backend, useDrop } from 'react-dnd';
import { ESTABLISHMENT_ID } from '@/utils/Url';
const ItemTypes = { const ItemTypes = {
TEACHER: 'teacher', TEACHER: 'teacher',
@ -148,8 +149,8 @@ const ClassesSection = ({ classes, setClasses, teachers, handleCreate, handleEdi
}; };
const handleAddClass = () => { const handleAddClass = () => {
setNewClass({ id: Date.now(), atmosphere_name: '', age_range: '', levels: [], number_of_students: '', school_year: '', teachers: [] }); setNewClass({ id: Date.now(), atmosphere_name: '', age_range: '', levels: [], number_of_students: '', school_year: '', teachers: [], establishment: ESTABLISHMENT_ID });
setFormData({ atmosphere_name: '', age_range: '', levels: [], number_of_students: '', school_year: '', teachers: [] }); setFormData({ atmosphere_name: '', age_range: '', levels: [], number_of_students: '', school_year: '', teachers: [], establishment: ESTABLISHMENT_ID });
}; };
const handleChange = (e) => { const handleChange = (e) => {

View File

@ -3,7 +3,7 @@ import SpecialitiesSection from '@/components/Structure/Configuration/Specialiti
import TeachersSection from '@/components/Structure/Configuration/TeachersSection'; import TeachersSection from '@/components/Structure/Configuration/TeachersSection';
import ClassesSection from '@/components/Structure/Configuration/ClassesSection'; import ClassesSection from '@/components/Structure/Configuration/ClassesSection';
import { ClassesProvider } from '@/context/ClassesContext'; import { ClassesProvider } from '@/context/ClassesContext';
import { BE_SCHOOL_SPECIALITY_URL, BE_SCHOOL_TEACHER_URL, BE_SCHOOL_SCHOOLCLASS_URL } from '@/utils/Url'; import { BE_SCHOOL_SPECIALITIES_URL, BE_SCHOOL_TEACHERS_URL, BE_SCHOOL_SCHOOLCLASSES_URL } from '@/utils/Url';
const StructureManagement = ({ specialities, setSpecialities, teachers, setTeachers, classes, setClasses, handleCreate, handleEdit, handleDelete }) => { const StructureManagement = ({ specialities, setSpecialities, teachers, setTeachers, classes, setClasses, handleCreate, handleEdit, handleDelete }) => {
return ( return (
@ -13,9 +13,9 @@ const StructureManagement = ({ specialities, setSpecialities, teachers, setTeach
<SpecialitiesSection <SpecialitiesSection
specialities={specialities} specialities={specialities}
setSpecialities={setSpecialities} setSpecialities={setSpecialities}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_SPECIALITY_URL}`, newData, setSpecialities)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_SPECIALITIES_URL}`, newData, setSpecialities)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_SPECIALITY_URL}`, id, updatedData, setSpecialities)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_SPECIALITIES_URL}`, id, updatedData, setSpecialities)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_SPECIALITY_URL}`, id, setSpecialities)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_SPECIALITIES_URL}`, id, setSpecialities)}
/> />
</div> </div>
<div className="w-4/5 p-4 bg-white rounded-lg shadow-md"> <div className="w-4/5 p-4 bg-white rounded-lg shadow-md">
@ -23,9 +23,9 @@ const StructureManagement = ({ specialities, setSpecialities, teachers, setTeach
teachers={teachers} teachers={teachers}
setTeachers={setTeachers} setTeachers={setTeachers}
specialities={specialities} specialities={specialities}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_TEACHER_URL}`, newData, setTeachers)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_TEACHERS_URL}`, newData, setTeachers)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_TEACHER_URL}`, id, updatedData, setTeachers)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_TEACHERS_URL}`, id, updatedData, setTeachers)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_TEACHER_URL}`, id, setTeachers)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_TEACHERS_URL}`, id, setTeachers)}
/> />
</div> </div>
<div className="w-full p-4 bg-white rounded-lg shadow-md"> <div className="w-full p-4 bg-white rounded-lg shadow-md">
@ -33,9 +33,9 @@ const StructureManagement = ({ specialities, setSpecialities, teachers, setTeach
classes={classes} classes={classes}
setClasses={setClasses} setClasses={setClasses}
teachers={teachers} teachers={teachers}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_SCHOOLCLASS_URL}`, newData, setClasses)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_SCHOOLCLASSES_URL}`, newData, setClasses)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_SCHOOLCLASS_URL}`, id, updatedData, setClasses)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_SCHOOLCLASSES_URL}`, id, updatedData, setClasses)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_SCHOOLCLASS_URL}`, id, setClasses)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_SCHOOLCLASSES_URL}`, id, setClasses)}
/> />
</div> </div>
</ClassesProvider> </ClassesProvider>

View File

@ -6,7 +6,7 @@ import { DndProvider } from 'react-dnd';
import { AnimatePresence, motion } from 'framer-motion'; import { AnimatePresence, motion } from 'framer-motion';
import PlanningClassView from '@/components/Structure/Planning/PlanningClassView'; import PlanningClassView from '@/components/Structure/Planning/PlanningClassView';
import SpecialitiesList from '@/components/Structure/Planning/SpecialitiesList'; import SpecialitiesList from '@/components/Structure/Planning/SpecialitiesList';
import { BE_SCHOOL_PLANNING_URL } from '@/utils/Url'; import { BE_SCHOOL_PLANNINGS_URL } from '@/utils/Url';
import { useClasses } from '@/context/ClassesContext'; import { useClasses } from '@/context/ClassesContext';
import { ClasseFormProvider } from '@/context/ClasseFormContext'; import { ClasseFormProvider } from '@/context/ClasseFormContext';
import TabsStructure from '@/components/Structure/Configuration/TabsStructure'; import TabsStructure from '@/components/Structure/Configuration/TabsStructure';
@ -89,7 +89,7 @@ const ScheduleManagement = ({ handleUpdatePlanning, classes }) => {
const planningId = selectedClass.plannings_read.find(planning => planning.niveau === selectedLevel)?.planning.id; const planningId = selectedClass.plannings_read.find(planning => planning.niveau === selectedLevel)?.planning.id;
if (planningId) { if (planningId) {
console.log('newSchedule : ', newSchedule) console.log('newSchedule : ', newSchedule)
handleUpdatePlanning(BE_SCHOOL_PLANNING_URL, planningId, newSchedule); handleUpdatePlanning(BE_SCHOOL_PLANNINGS_URL, planningId, newSchedule);
} }
}; };

View File

@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import SelectChoice from '@/components/SelectChoice'; import SelectChoice from '@/components/SelectChoice';
import { useClasses } from '@/context/ClassesContext'; import { useClasses } from '@/context/ClassesContext';
import { useClasseForm } from '@/context/ClasseFormContext'; import { useClasseForm } from '@/context/ClasseFormContext';
import { BE_SCHOOL_PLANNING_URL } from '@/utils/Url'; import { BE_SCHOOL_PLANNINGS_URL } from '@/utils/Url';
import { BookOpen, Users } from 'lucide-react'; import { BookOpen, Users } from 'lucide-react';
const SpecialityEventModal = ({ isOpen, onClose, selectedCell, existingEvent, handleUpdatePlanning, classe }) => { const SpecialityEventModal = ({ isOpen, onClose, selectedCell, existingEvent, handleUpdatePlanning, classe }) => {
@ -114,7 +114,7 @@ const SpecialityEventModal = ({ isOpen, onClose, selectedCell, existingEvent, ha
const planningId = updatedPlanning ? updatedPlanning.planning.id : null; const planningId = updatedPlanning ? updatedPlanning.planning.id : null;
console.log("id : ", planningId) console.log("id : ", planningId)
if (planningId) { if (planningId) {
handleUpdatePlanning(BE_SCHOOL_PLANNING_URL, planningId, updatedPlanning.emploiDuTemps); handleUpdatePlanning(BE_SCHOOL_PLANNINGS_URL, planningId, updatedPlanning.emploiDuTemps);
} }
onClose(); onClose();

View File

@ -5,6 +5,8 @@ import Popup from '@/components/Popup';
import CheckBox from '@/components/CheckBox'; import CheckBox from '@/components/CheckBox';
import InputText from '@/components/InputText'; import InputText from '@/components/InputText';
import { ESTABLISHMENT_ID } from '@/utils/Url';
const DiscountsSection = ({ discounts, setDiscounts, handleCreate, handleEdit, handleDelete, type, subscriptionMode = false, selectedDiscounts, handleDiscountSelection }) => { const DiscountsSection = ({ discounts, setDiscounts, handleCreate, handleEdit, handleDelete, type, subscriptionMode = false, selectedDiscounts, handleDiscountSelection }) => {
const [editingDiscount, setEditingDiscount] = useState(null); const [editingDiscount, setEditingDiscount] = useState(null);
const [newDiscount, setNewDiscount] = useState(null); const [newDiscount, setNewDiscount] = useState(null);
@ -17,7 +19,7 @@ const DiscountsSection = ({ discounts, setDiscounts, handleCreate, handleEdit, h
const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {}); const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {});
const handleAddDiscount = () => { const handleAddDiscount = () => {
setNewDiscount({ id: Date.now(), name: '', amount: '', description: '', discount_type: 0, type: type }); setNewDiscount({ id: Date.now(), name: '', amount: '', description: '', discount_type: 0, type: type, establishment: ESTABLISHMENT_ID });
}; };
const handleRemoveDiscount = (id) => { const handleRemoveDiscount = (id) => {

View File

@ -3,7 +3,7 @@ import FeesSection from '@/components/Structure/Tarification/FeesSection';
import DiscountsSection from '@/components/Structure/Tarification/DiscountsSection'; import DiscountsSection from '@/components/Structure/Tarification/DiscountsSection';
import PaymentPlanSelector from '@/components/PaymentPlanSelector'; import PaymentPlanSelector from '@/components/PaymentPlanSelector';
import PaymentModeSelector from '@/components/PaymentModeSelector'; import PaymentModeSelector from '@/components/PaymentModeSelector';
import { BE_SCHOOL_FEE_URL, BE_SCHOOL_DISCOUNT_URL, BE_SCHOOL_PAYMENT_PLAN_URL, BE_SCHOOL_PAYMENT_MODE_URL } from '@/utils/Url'; import { BE_SCHOOL_FEES_URL, BE_SCHOOL_DISCOUNTS_URL, BE_SCHOOL_PAYMENT_PLANS_URL, BE_SCHOOL_PAYMENT_MODES_URL } from '@/utils/Url';
import { set } from 'lodash'; import { set } from 'lodash';
const FeesManagement = ({ registrationDiscounts, const FeesManagement = ({ registrationDiscounts,
@ -54,9 +54,9 @@ const FeesManagement = ({ registrationDiscounts,
fees={registrationFees} fees={registrationFees}
setFees={setRegistrationFees} setFees={setRegistrationFees}
discounts={registrationDiscounts} discounts={registrationDiscounts}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_FEE_URL}`, newData, setRegistrationFees)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_FEES_URL}`, newData, setRegistrationFees)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_FEE_URL}`, id, updatedData, setRegistrationFees)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_FEES_URL}`, id, updatedData, setRegistrationFees)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_FEE_URL}`, id, setRegistrationFees)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_FEES_URL}`, id, setRegistrationFees)}
type={0} type={0}
/> />
</div> </div>
@ -64,9 +64,9 @@ const FeesManagement = ({ registrationDiscounts,
<DiscountsSection <DiscountsSection
discounts={registrationDiscounts} discounts={registrationDiscounts}
setDiscounts={setRegistrationDiscounts} setDiscounts={setRegistrationDiscounts}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_DISCOUNT_URL}`, newData, setRegistrationDiscounts)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_DISCOUNTS_URL}`, newData, setRegistrationDiscounts)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_DISCOUNT_URL}`, id, updatedData, setRegistrationDiscounts)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_DISCOUNTS_URL}`, id, updatedData, setRegistrationDiscounts)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_DISCOUNT_URL}`, id, setRegistrationDiscounts)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_DISCOUNTS_URL}`, id, setRegistrationDiscounts)}
onDiscountDelete={(id) => handleDiscountDelete(id, 0)} onDiscountDelete={(id) => handleDiscountDelete(id, 0)}
type={0} type={0}
/> />
@ -75,7 +75,7 @@ const FeesManagement = ({ registrationDiscounts,
<PaymentPlanSelector <PaymentPlanSelector
paymentPlans={registrationPaymentPlans} paymentPlans={registrationPaymentPlans}
setPaymentPlans={setRegistrationPaymentPlans} setPaymentPlans={setRegistrationPaymentPlans}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_PLAN_URL}`, id, updatedData, setRegistrationPaymentPlans)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_PLANS_URL}`, id, updatedData, setRegistrationPaymentPlans)}
type={0} type={0}
/> />
</div> </div>
@ -83,7 +83,7 @@ const FeesManagement = ({ registrationDiscounts,
<PaymentModeSelector <PaymentModeSelector
paymentModes={registrationPaymentModes} paymentModes={registrationPaymentModes}
setPaymentModes={setRegistrationPaymentModes} setPaymentModes={setRegistrationPaymentModes}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_MODE_URL}`, id, updatedData, setRegistrationPaymentModes)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_MODES_URL}`, id, updatedData, setRegistrationPaymentModes)}
type={0} type={0}
/> />
</div> </div>
@ -97,9 +97,9 @@ const FeesManagement = ({ registrationDiscounts,
fees={tuitionFees} fees={tuitionFees}
setFees={setTuitionFees} setFees={setTuitionFees}
discounts={tuitionDiscounts} discounts={tuitionDiscounts}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_FEE_URL}`, newData, setTuitionFees)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_FEES_URL}`, newData, setTuitionFees)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_FEE_URL}`, id, updatedData, setTuitionFees)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_FEES_URL}`, id, updatedData, setTuitionFees)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_FEE_URL}`, id, setTuitionFees)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_FEES_URL}`, id, setTuitionFees)}
type={1} type={1}
/> />
</div> </div>
@ -107,9 +107,9 @@ const FeesManagement = ({ registrationDiscounts,
<DiscountsSection <DiscountsSection
discounts={tuitionDiscounts} discounts={tuitionDiscounts}
setDiscounts={setTuitionDiscounts} setDiscounts={setTuitionDiscounts}
handleCreate={(newData) => handleCreate(`${BE_SCHOOL_DISCOUNT_URL}`, newData, setTuitionDiscounts)} handleCreate={(newData) => handleCreate(`${BE_SCHOOL_DISCOUNTS_URL}`, newData, setTuitionDiscounts)}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_DISCOUNT_URL}`, id, updatedData, setTuitionDiscounts)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_DISCOUNTS_URL}`, id, updatedData, setTuitionDiscounts)}
handleDelete={(id) => handleDelete(`${BE_SCHOOL_DISCOUNT_URL}`, id, setTuitionDiscounts)} handleDelete={(id) => handleDelete(`${BE_SCHOOL_DISCOUNTS_URL}`, id, setTuitionDiscounts)}
onDiscountDelete={(id) => handleDiscountDelete(id, 1)} onDiscountDelete={(id) => handleDiscountDelete(id, 1)}
type={1} type={1}
/> />
@ -118,7 +118,7 @@ const FeesManagement = ({ registrationDiscounts,
<PaymentPlanSelector <PaymentPlanSelector
paymentPlans={tuitionPaymentPlans} paymentPlans={tuitionPaymentPlans}
setPaymentPlans={setTuitionPaymentPlans} setPaymentPlans={setTuitionPaymentPlans}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_PLAN_URL}`, id, updatedData, setRegistrationPaymentPlans)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_PLANS_URL}`, id, updatedData, setRegistrationPaymentPlans)}
type={1} type={1}
/> />
</div> </div>
@ -126,7 +126,7 @@ const FeesManagement = ({ registrationDiscounts,
<PaymentModeSelector <PaymentModeSelector
paymentModes={tuitionPaymentModes} paymentModes={tuitionPaymentModes}
setPaymentModes={setTuitionPaymentModes} setPaymentModes={setTuitionPaymentModes}
handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_MODE_URL}`, id, updatedData, setTuitionPaymentModes)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_PAYMENT_MODES_URL}`, id, updatedData, setTuitionPaymentModes)}
type={1} type={1}
/> />
</div> </div>

View File

@ -5,6 +5,8 @@ import Popup from '@/components/Popup';
import CheckBox from '@/components/CheckBox'; import CheckBox from '@/components/CheckBox';
import InputText from '@/components/InputText'; import InputText from '@/components/InputText';
import { ESTABLISHMENT_ID } from '@/utils/Url';
const FeesSection = ({ fees, setFees, discounts, handleCreate, handleEdit, handleDelete, type, subscriptionMode = false, selectedFees, handleFeeSelection }) => { const FeesSection = ({ fees, setFees, discounts, handleCreate, handleEdit, handleDelete, type, subscriptionMode = false, selectedFees, handleFeeSelection }) => {
const [editingFee, setEditingFee] = useState(null); const [editingFee, setEditingFee] = useState(null);
const [newFee, setNewFee] = useState(null); const [newFee, setNewFee] = useState(null);
@ -23,7 +25,7 @@ const FeesSection = ({ fees, setFees, discounts, handleCreate, handleEdit, handl
}; };
const handleAddFee = () => { const handleAddFee = () => {
setNewFee({ id: Date.now(), name: '', base_amount: '', description: '', validity_start_date: '', validity_end_date: '', discounts: [], type: type }); setNewFee({ id: Date.now(), name: '', base_amount: '', description: '', validity_start_date: '', validity_end_date: '', discounts: [], type: type, establishment: ESTABLISHMENT_ID });
}; };
const handleRemoveFee = (id) => { const handleRemoveFee = (id) => {

View File

@ -25,23 +25,15 @@ export const BE_SUBSCRIPTION_LAST_GUARDIAN_ID_URL = `${BASE_URL}/Subscriptions/l
//GESTION ECOLE //GESTION ECOLE
export const BE_SCHOOL_SPECIALITY_URL = `${BASE_URL}/School/speciality`
export const BE_SCHOOL_SPECIALITIES_URL = `${BASE_URL}/School/specialities` export const BE_SCHOOL_SPECIALITIES_URL = `${BASE_URL}/School/specialities`
export const BE_SCHOOL_SCHOOLCLASS_URL = `${BASE_URL}/School/schoolClass`
export const BE_SCHOOL_SCHOOLCLASSES_URL = `${BASE_URL}/School/schoolClasses` export const BE_SCHOOL_SCHOOLCLASSES_URL = `${BASE_URL}/School/schoolClasses`
export const BE_SCHOOL_TEACHER_URL = `${BASE_URL}/School/teacher`
export const BE_SCHOOL_TEACHERS_URL = `${BASE_URL}/School/teachers` export const BE_SCHOOL_TEACHERS_URL = `${BASE_URL}/School/teachers`
export const BE_SCHOOL_PLANNING_URL = `${BASE_URL}/School/planning`
export const BE_SCHOOL_PLANNINGS_URL = `${BASE_URL}/School/plannings` export const BE_SCHOOL_PLANNINGS_URL = `${BASE_URL}/School/plannings`
export const BE_SCHOOL_FEE_URL = `${BASE_URL}/School/fee`;
export const BE_SCHOOL_FEES_URL = `${BASE_URL}/School/fees`; export const BE_SCHOOL_FEES_URL = `${BASE_URL}/School/fees`;
export const BE_SCHOOL_DISCOUNT_URL = `${BASE_URL}/School/discount`;
export const BE_SCHOOL_DISCOUNTS_URL = `${BASE_URL}/School/discounts`; export const BE_SCHOOL_DISCOUNTS_URL = `${BASE_URL}/School/discounts`;
export const BE_SCHOOL_PAYMENT_PLAN_URL = `${BASE_URL}/School/paymentPlan`;
export const BE_SCHOOL_PAYMENT_PLANS_URL = `${BASE_URL}/School/paymentPlans`; export const BE_SCHOOL_PAYMENT_PLANS_URL = `${BASE_URL}/School/paymentPlans`;
export const BE_SCHOOL_PAYMENT_MODE_URL = `${BASE_URL}/School/paymentMode`;
export const BE_SCHOOL_PAYMENT_MODES_URL = `${BASE_URL}/School/paymentModes`; export const BE_SCHOOL_PAYMENT_MODES_URL = `${BASE_URL}/School/paymentModes`;
export const BE_SCHOOL_ESTABLISHMENT_URL = `${BASE_URL}/School/establishment`; export const BE_SCHOOL_ESTABLISHMENT_URL = `${BASE_URL}/School/establishments`;
// En attendant la gestion des sessions // En attendant la gestion des sessions
export const ESTABLISHMENT_ID = 1; export const ESTABLISHMENT_ID = 1;