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

View File

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

View File

@ -1,61 +1,51 @@
from django.urls import path, re_path
from School.views import (
TeachersView,
TeacherView,
SpecialitiesView,
SpecialityView,
ClassesView,
ClasseView,
PlanningsView,
PlanningView,
FeesView,
FeeView,
DiscountsView,
DiscountView,
PaymentPlansView,
PaymentPlanView,
PaymentModesView,
PaymentModeView,
EstablishmentsView,
EstablishmentView
from .views import (
TeacherListCreateView,
TeacherDetailView,
SpecialityListCreateView,
SpecialityDetailView,
SchoolClassListCreateView,
SchoolClassDetailView,
PlanningListCreateView,
PlanningDetailView,
FeeListCreateView,
FeeDetailView,
DiscountListCreateView,
DiscountDetailView,
PaymentPlanListCreateView,
PaymentPlanDetailView,
PaymentModeListCreateView,
PaymentModeDetailView,
EstablishmentListCreateView,
EstablishmentDetailView
)
urlpatterns = [
re_path(r'^specialities$', SpecialitiesView.as_view(), name="specialities"),
re_path(r'^speciality$', SpecialityView.as_view(), name="speciality"),
re_path(r'^speciality/([0-9]+)$', SpecialityView.as_view(), name="speciality"),
re_path(r'^specialities$', SpecialityListCreateView.as_view(), name="speciality_list_create"),
re_path(r'^specialities/(?P<id>[0-9]+)$', SpecialityDetailView.as_view(), name="speciality_detail"),
re_path(r'^teachers$', TeachersView.as_view(), name="teachers"),
re_path(r'^teacher$', TeacherView.as_view(), name="teacher"),
re_path(r'^teacher/([0-9]+)$', TeacherView.as_view(), name="teacher"),
re_path(r'^teachers$', TeacherListCreateView.as_view(), name="teacher_list_create"),
re_path(r'^teachers/(?P<id>[0-9]+)', TeacherDetailView.as_view(), name="teacher_detail"),
re_path(r'^schoolClasses$', ClassesView.as_view(), name="schoolClasses"),
re_path(r'^schoolClass$', ClasseView.as_view(), name="schoolClass"),
re_path(r'^schoolClass/([0-9]+)$', ClasseView.as_view(), name="schoolClass"),
re_path(r'^schoolClasses$', SchoolClassListCreateView.as_view(), name="school_class_list_create"),
re_path(r'^schoolClasses/(?P<id>[0-9]+)', SchoolClassDetailView.as_view(), name="school_class_detail"),
re_path(r'^plannings$', PlanningsView.as_view(), name="plannings"),
re_path(r'^planning$', PlanningView.as_view(), name="planning"),
re_path(r'^planning/([0-9]+)$', PlanningView.as_view(), name="planning"),
re_path(r'^plannings$', PlanningListCreateView.as_view(), name="planninglist_create"),
re_path(r'^plannings/(?P<id>[0-9]+)$', PlanningDetailView.as_view(), name="planning_detail"),
re_path(r'^fees/(?P<_filter>[a-zA-z]+)$', FeesView.as_view(), name="fees"),
re_path(r'^fee$', FeeView.as_view(), name="fee"),
re_path(r'^fee/([0-9]+)$', FeeView.as_view(), name="fee"),
re_path(r'^fees$', FeeListCreateView.as_view(), name="fee_list_create"),
re_path(r'^fees/(?P<id>[0-9]+)$', FeeDetailView.as_view(), name="fee_detail"),
re_path(r'^discounts/(?P<_filter>[a-zA-z]+)$$', DiscountsView.as_view(), name="discounts"),
re_path(r'^discount$', DiscountView.as_view(), name="discount"),
re_path(r'^discount/([0-9]+)$', DiscountView.as_view(), name="discount"),
re_path(r'^discounts$', DiscountListCreateView.as_view(), name="discount_list_create"),
re_path(r'^discounts/(?P<id>[0-9]+)$', DiscountDetailView.as_view(), name="discount_detail"),
re_path(r'^paymentPlans/(?P<_filter>[a-zA-z]+)$', PaymentPlansView.as_view(), name="paymentPlans"),
re_path(r'^paymentPlan$', PaymentPlanView.as_view(), name="paymentPlan"),
re_path(r'^paymentPlan/([0-9]+)$', PaymentPlanView.as_view(), name="paymentPlan"),
re_path(r'^paymentPlans$', PaymentPlanListCreateView.as_view(), name="payment_plan_list_create"),
re_path(r'^paymentPlans/(?P<id>[0-9]+)$', PaymentPlanDetailView.as_view(), name="payment_plan_detail"),
re_path(r'^paymentModes/(?P<_filter>[a-zA-z]+)$', PaymentModesView.as_view(), name="paymentModes"),
re_path(r'^paymentMode$', PaymentModeView.as_view(), name="paymentMode"),
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'^paymentModes$', PaymentModeListCreateView.as_view(), name="payment_mode_list_create"),
re_path(r'^paymentModes/(?P<id>[0-9]+)$', PaymentModeDetailView.as_view(), name="payment_mode_detail"),
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 rest_framework.parsers import JSONParser
from rest_framework.views import APIView
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from .models import Teacher, Speciality, SchoolClass, Planning, Discount, Fee, PaymentPlan, PaymentMode, Establishment
from .serializers import TeacherSerializer, SpecialitySerializer, SchoolClassSerializer, PlanningSerializer, DiscountSerializer, FeeSerializer, PaymentPlanSerializer, PaymentModeSerializer, EstablishmentSerializer
from N3wtSchool import bdd
from rest_framework import status
from .models import (
Teacher,
Speciality,
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
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialitiesView(APIView):
class SpecialityListCreateView(APIView):
def get(self, request):
specialitiesList = getAllObjects(Speciality)
specialities_serializer = SpecialitySerializer(specialitiesList, many=True)
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_data=JSONParser().parse(request)
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)
return JsonResponse(speciality_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(speciality_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@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)
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 post(self, request):
def put(self, request, id):
speciality_data=JSONParser().parse(request)
speciality_serializer = SpecialitySerializer(data=speciality_data)
if speciality_serializer.is_valid():
speciality_serializer.save()
return JsonResponse(speciality_serializer.data, safe=False, status=201)
return JsonResponse(speciality_serializer.errors, safe=False, status=400)
def put(self, request, _id):
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)
if speciality_serializer.is_valid():
speciality_serializer.save()
@ -62,25 +64,18 @@ class SpecialityView(APIView):
return JsonResponse(speciality_serializer.errors, safe=False)
def delete(self, request, _id):
return delete_object(Speciality, _id)
def delete(self, request, 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):
teachersList=getAllObjects(Teacher)
teachers_serializer=TeacherSerializer(teachersList, many=True)
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):
teacher_data=JSONParser().parse(request)
teacher_serializer = TeacherSerializer(data=teacher_data)
@ -92,9 +87,18 @@ class TeacherView(APIView):
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 = getObject(_objectName=Teacher, _columnName='id', _value=_id)
teacher = getObject(_objectName=Teacher, _columnName='id', _value=id)
teacher_serializer = TeacherSerializer(teacher, data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
@ -102,59 +106,39 @@ class TeacherView(APIView):
return JsonResponse(teacher_serializer.errors, safe=False)
def delete(self, request, _id):
return delete_object(Teacher, _id, related_field='associated_profile')
def delete(self, request, id):
return delete_object(Teacher, id, related_field='associated_profile')
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class ClassesView(APIView):
class SchoolClassListCreateView(APIView):
def get(self, request):
classesList=getAllObjects(SchoolClass)
classes_serializer=SchoolClassSerializer(classesList, many=True)
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_data=JSONParser().parse(request)
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.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)
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 post(self, request):
def put(self, request, id):
classe_data=JSONParser().parse(request)
classe_serializer = SchoolClassSerializer(data=classe_data)
if classe_serializer.is_valid():
classe_serializer.save()
return JsonResponse(classe_serializer.data, safe=False)
return JsonResponse(classe_serializer.errors, safe=False)
def put(self, request, _id):
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)
if classe_serializer.is_valid():
classe_serializer.save()
@ -162,27 +146,17 @@ class ClasseView(APIView):
return JsonResponse(classe_serializer.errors, safe=False)
def delete(self, request, _id):
return delete_object(SchoolClass, _id)
def delete(self, request, id):
return delete_object(SchoolClass, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PlanningsView(APIView):
class PlanningListCreateView(APIView):
def get(self, request):
schedulesList=getAllObjects(Planning)
schedules_serializer=PlanningSerializer(schedulesList, many=True)
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):
planning_data=JSONParser().parse(request)
planning_serializer = PlanningSerializer(data=planning_data)
@ -193,15 +167,24 @@ class PlanningView(APIView):
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)
try:
planning = Planning.objects.get(id=_id)
planning = Planning.objects.get(id=id)
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:
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)
@ -211,235 +194,227 @@ class PlanningView(APIView):
return JsonResponse(planning_serializer.errors, safe=False)
# Vues pour les réductions (Discount)
@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)
def delete(self, request, id):
return delete_object(Planning, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class DiscountView(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=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
class FeeListCreateView(APIView):
def get(self, request, *args, **kwargs):
filter = request.GET.get('filter', '').strip()
fee_type_value = 0 if filter == 'registration' else 1
fees = Fee.objects.filter(type=fee_type_value)
fee_serializer = FeeSerializer(fees, many=True)
return JsonResponse(fee_serializer.data, safe=False, status=200)
@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)
return JsonResponse(fee_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
fee_data = JSONParser().parse(request)
fee_serializer = FeeSerializer(data=fee_data)
if fee_serializer.is_valid():
fee_serializer.save()
return JsonResponse(fee_serializer.data, safe=False, status=201)
return JsonResponse(fee_serializer.errors, safe=False, status=400)
return JsonResponse(fee_serializer.data, safe=False, status=status.HTTP_201_CREATED)
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)
try:
fee = Fee.objects.get(id=_id)
fee = Fee.objects.get(id=id)
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)
if fee_serializer.is_valid():
fee_serializer.save()
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):
return delete_object(Fee, _id)
def delete(self, request, id):
return delete_object(Fee, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlansView(APIView):
def get(self, request, _filter, *args, **kwargs):
class DiscountListCreateView(APIView):
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)
if _filter not in ['registration', 'tuition']:
return JsonResponse({"error": "Invalid type parameter. Must be 'registration' or 'tuition'."}, safe=False, status=400)
return JsonResponse(discounts_serializer.data, safe=False, status=status.HTTP_200_OK)
type_value = 0 if _filter == 'registration' else 1
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=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)
payment_plans_serializer = PaymentPlanSerializer(paymentPlans, many=True)
return JsonResponse(payment_plans_serializer.data, safe=False, status=200)
@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)
return JsonResponse(payment_plans_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
payment_plan_data = JSONParser().parse(request)
payment_plan_serializer = PaymentPlanSerializer(data=payment_plan_data)
if payment_plan_serializer.is_valid():
payment_plan_serializer.save()
return JsonResponse(payment_plan_serializer.data, safe=False, status=201)
return JsonResponse(payment_plan_serializer.errors, safe=False, status=400)
return JsonResponse(payment_plan_serializer.data, safe=False, status=status.HTTP_201_CREATED)
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)
try:
payment_plan = PaymentPlan.objects.get(id=_id)
payment_plan = PaymentPlan.objects.get(id=id)
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)
if payment_plan_serializer.is_valid():
payment_plan_serializer.save()
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):
return delete_object(PaymentPlan, _id)
def delete(self, request, id):
return delete_object(PaymentPlan, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentModesView(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)
type_value = 0 if _filter == 'registration' else 1
class PaymentModeListCreateView(APIView):
def get(self, request):
filter = request.GET.get('filter', '').strip()
type_value = 0 if filter == 'registration' else 1
paymentModes = PaymentMode.objects.filter(type=type_value)
payment_modes_serializer = PaymentModeSerializer(paymentModes, many=True)
return JsonResponse(payment_modes_serializer.data, safe=False, status=200)
@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)
return JsonResponse(payment_modes_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
payment_mode_data = JSONParser().parse(request)
payment_mode_serializer = PaymentModeSerializer(data=payment_mode_data)
if payment_mode_serializer.is_valid():
payment_mode_serializer.save()
return JsonResponse(payment_mode_serializer.data, safe=False, status=201)
return JsonResponse(payment_mode_serializer.errors, safe=False, status=400)
return JsonResponse(payment_mode_serializer.data, safe=False, status=status.HTTP_201_CREATED)
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)
try:
payment_mode = PaymentMode.objects.get(id=_id)
payment_mode = PaymentMode.objects.get(id=id)
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)
if payment_mode_serializer.is_valid():
payment_mode_serializer.save()
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(ensure_csrf_cookie, name='dispatch')
class EstablishmentsView(APIView):
class EstablishmentListCreateView(APIView):
def get(self, request):
establishments=getAllObjects(Establishment)
establishments_serializer=EstablishmentSerializer(establishments, many=True)
return JsonResponse(establishments_serializer.data, safe=False, status=200)
@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)
return JsonResponse(establishments_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
establishment_data = JSONParser().parse(request)
establishment_serializer = EstablishmentSerializer(data=establishment_data)
if establishment_serializer.is_valid():
establishment_serializer.save()
return JsonResponse(establishment_serializer.data, safe=False, status=201)
return JsonResponse(establishment_serializer.errors, safe=False, status=400)
return JsonResponse(establishment_serializer.data, safe=False, status=status.HTTP_201_CREATED)
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)
try:
establishment = Establishment.objects.get(id=_id)
establishment = Establishment.objects.get(id=id)
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)
if establishment_serializer.is_valid():
establishment_serializer.save()
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):
return delete_object(Establishment, _id)
def delete(self, request, id):
return delete_object(Establishment, id)

View File

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

View File

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

View File

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

View File

@ -6,7 +6,7 @@ import { DndProvider } from 'react-dnd';
import { AnimatePresence, motion } from 'framer-motion';
import PlanningClassView from '@/components/Structure/Planning/PlanningClassView';
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 { ClasseFormProvider } from '@/context/ClasseFormContext';
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;
if (planningId) {
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 { useClasses } from '@/context/ClassesContext';
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';
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;
console.log("id : ", planningId)
if (planningId) {
handleUpdatePlanning(BE_SCHOOL_PLANNING_URL, planningId, updatedPlanning.emploiDuTemps);
handleUpdatePlanning(BE_SCHOOL_PLANNINGS_URL, planningId, updatedPlanning.emploiDuTemps);
}
onClose();

View File

@ -5,6 +5,8 @@ import Popup from '@/components/Popup';
import CheckBox from '@/components/CheckBox';
import InputText from '@/components/InputText';
import { ESTABLISHMENT_ID } from '@/utils/Url';
const DiscountsSection = ({ discounts, setDiscounts, handleCreate, handleEdit, handleDelete, type, subscriptionMode = false, selectedDiscounts, handleDiscountSelection }) => {
const [editingDiscount, setEditingDiscount] = useState(null);
const [newDiscount, setNewDiscount] = useState(null);
@ -17,7 +19,7 @@ const DiscountsSection = ({ discounts, setDiscounts, handleCreate, handleEdit, h
const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {});
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) => {

View File

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

View File

@ -5,6 +5,8 @@ import Popup from '@/components/Popup';
import CheckBox from '@/components/CheckBox';
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 [editingFee, setEditingFee] = useState(null);
const [newFee, setNewFee] = useState(null);
@ -23,7 +25,7 @@ const FeesSection = ({ fees, setFees, discounts, handleCreate, handleEdit, handl
};
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) => {

View File

@ -25,23 +25,15 @@ export const BE_SUBSCRIPTION_LAST_GUARDIAN_ID_URL = `${BASE_URL}/Subscriptions/l
//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_SCHOOLCLASS_URL = `${BASE_URL}/School/schoolClass`
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_PLANNING_URL = `${BASE_URL}/School/planning`
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_DISCOUNT_URL = `${BASE_URL}/School/discount`;
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_MODE_URL = `${BASE_URL}/School/paymentMode`;
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
export const ESTABLISHMENT_ID = 1;