mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Ajout des frais d'inscription lors de la création d'un RF [#18]
This commit is contained in:
@ -96,7 +96,6 @@ class Fee(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
base_amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)
|
||||
description = models.TextField(blank=True)
|
||||
discounts = models.ManyToManyField('Discount', blank=True)
|
||||
is_active = models.BooleanField(default=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
type = models.IntegerField(choices=FeeType.choices, default=FeeType.REGISTRATION_FEE)
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Teacher, Speciality, SchoolClass, Planning, LEVEL_CHOICES, Discount, Fee
|
||||
from Subscriptions.models import RegistrationForm
|
||||
from Subscriptions.serializers import StudentSerializer
|
||||
from Auth.serializers import ProfileSerializer
|
||||
from Auth.models import Profile
|
||||
from N3wtSchool import settings, bdd
|
||||
from django.utils import timezone
|
||||
@ -187,41 +184,12 @@ class DiscountSerializer(serializers.ModelSerializer):
|
||||
return local_time.strftime("%d-%m-%Y %H:%M")
|
||||
|
||||
class FeeSerializer(serializers.ModelSerializer):
|
||||
discounts = serializers.PrimaryKeyRelatedField(queryset=Discount.objects.all(), many=True)
|
||||
updated_at_formatted = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Fee
|
||||
fields = '__all__'
|
||||
|
||||
def create(self, validated_data):
|
||||
discounts_data = validated_data.pop('discounts', [])
|
||||
|
||||
# Create the Fee instance
|
||||
fee = Fee.objects.create(**validated_data)
|
||||
|
||||
# Add discounts if provided
|
||||
fee.discounts.set(discounts_data)
|
||||
|
||||
return fee
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
discounts_data = validated_data.pop('discounts', [])
|
||||
|
||||
# Update the Fee instance
|
||||
instance.name = validated_data.get('name', instance.name)
|
||||
instance.description = validated_data.get('description', instance.description)
|
||||
instance.base_amount = validated_data.get('base_amount', instance.base_amount)
|
||||
instance.is_active = validated_data.get('is_active', instance.is_active)
|
||||
instance.updated_at = validated_data.get('updated_at', instance.updated_at)
|
||||
instance.type = validated_data.get('type', instance.type)
|
||||
instance.save()
|
||||
|
||||
# Update discounts if provided
|
||||
instance.discounts.set(discounts_data)
|
||||
|
||||
return instance
|
||||
|
||||
def get_updated_at_formatted(self, obj):
|
||||
utc_time = timezone.localtime(obj.updated_at)
|
||||
local_tz = pytz.timezone(settings.TZ_APPLI)
|
||||
|
||||
@ -4,7 +4,7 @@ from django.conf import settings
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from Auth.models import Profile
|
||||
from School.models import SchoolClass
|
||||
from School.models import SchoolClass, Fee, Discount
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
@ -204,6 +204,12 @@ class RegistrationForm(models.Model):
|
||||
registration_file = models.FileField(upload_to=settings.DOCUMENT_DIR, default="", blank=True)
|
||||
associated_rf = models.CharField(max_length=200, default="", blank=True)
|
||||
|
||||
# Many-to-Many Relationship
|
||||
fees = models.ManyToManyField(Fee, blank=True, related_name='register_forms')
|
||||
|
||||
# Many-to-Many Relationship
|
||||
discounts = models.ManyToManyField(Discount, blank=True, related_name='register_forms')
|
||||
|
||||
def __str__(self):
|
||||
return "RF_" + self.student.last_name + "_" + self.student.first_name
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
from .models import RegistrationFileTemplate, RegistrationFile, RegistrationForm, Student, Guardian, Sibling, Language, RegistrationFee
|
||||
from School.models import SchoolClass
|
||||
from School.models import SchoolClass, Fee, Discount
|
||||
from School.serializers import FeeSerializer, DiscountSerializer
|
||||
from Auth.models import Profile
|
||||
from Auth.serializers import ProfileSerializer
|
||||
from GestionMessagerie.models import Messagerie
|
||||
@ -133,6 +134,9 @@ class RegistrationFormSerializer(serializers.ModelSerializer):
|
||||
status_label = serializers.SerializerMethodField()
|
||||
formatted_last_update = serializers.SerializerMethodField()
|
||||
registration_files = RegistrationFileSerializer(many=True, required=False)
|
||||
fees = serializers.PrimaryKeyRelatedField(queryset=Fee.objects.all(), many=True, required=False)
|
||||
discounts = serializers.PrimaryKeyRelatedField(queryset=Discount.objects.all(), many=True, required=False)
|
||||
|
||||
class Meta:
|
||||
model = RegistrationForm
|
||||
fields = '__all__'
|
||||
@ -140,11 +144,19 @@ class RegistrationFormSerializer(serializers.ModelSerializer):
|
||||
def create(self, validated_data):
|
||||
student_data = validated_data.pop('student')
|
||||
student = StudentSerializer.create(StudentSerializer(), student_data)
|
||||
fees_data = validated_data.pop('fees', [])
|
||||
discounts_data = validated_data.pop('discounts', [])
|
||||
registrationForm = RegistrationForm.objects.create(student=student, **validated_data)
|
||||
|
||||
# Associer les IDs des objets Fee et Discount au RegistrationForm
|
||||
registrationForm.fees.set([fee.id for fee in fees_data])
|
||||
registrationForm.discounts.set([discount.id for discount in discounts_data])
|
||||
return registrationForm
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
student_data = validated_data.pop('student', None)
|
||||
fees_data = validated_data.pop('fees', [])
|
||||
discounts_data = validated_data.pop('discounts', [])
|
||||
if student_data:
|
||||
student = instance.student
|
||||
StudentSerializer.update(StudentSerializer(), student, student_data)
|
||||
@ -156,6 +168,10 @@ class RegistrationFormSerializer(serializers.ModelSerializer):
|
||||
pass
|
||||
instance.save()
|
||||
|
||||
# Associer les IDs des objets Fee et Discount au RegistrationForm
|
||||
instance.fees.set([fee.id for fee in fees_data])
|
||||
instance.discounts.set([discount.id for discount in discounts_data])
|
||||
|
||||
return instance
|
||||
|
||||
def get_status_label(self, obj):
|
||||
|
||||
Reference in New Issue
Block a user