feat: Gestion multi-profil multi-école

This commit is contained in:
N3WT DE COMPET
2025-03-09 16:22:28 +01:00
parent 95c154a4a2
commit 16178296ec
51 changed files with 1621 additions and 802 deletions

View File

@ -1,7 +1,8 @@
from rest_framework import serializers
from .models import Teacher, Speciality, SchoolClass, Planning, LEVEL_CHOICES, Discount, Fee, PaymentPlan, PaymentMode, Establishment
from Auth.models import Profile
from .models import Teacher, Speciality, SchoolClass, Planning, LEVEL_CHOICES, Discount, Fee, PaymentPlan, PaymentMode
from Auth.models import Profile, ProfileRole
from Subscriptions.models import Student
from Establishment.models import Establishment
from N3wtSchool import settings, bdd
from django.utils import timezone
import pytz
@ -30,9 +31,10 @@ class TeacherDetailSerializer(serializers.ModelSerializer):
class TeacherSerializer(serializers.ModelSerializer):
specialities = serializers.PrimaryKeyRelatedField(queryset=Speciality.objects.all(), many=True, required=False)
specialities_details = serializers.SerializerMethodField()
associated_profile = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), required=True)
profile_role = serializers.PrimaryKeyRelatedField(queryset=ProfileRole.objects.all(), required=True)
updated_date_formatted = serializers.SerializerMethodField()
droit = serializers.SerializerMethodField()
role_type = serializers.SerializerMethodField()
associated_profile_email = serializers.SerializerMethodField()
class Meta:
model = Teacher
@ -40,12 +42,12 @@ class TeacherSerializer(serializers.ModelSerializer):
def create(self, validated_data):
specialities_data = validated_data.pop('specialities', None)
associated_profile = validated_data.pop('associated_profile', None)
profile_role = validated_data.pop('profile_role', None)
teacher = Teacher.objects.create(**validated_data)
if specialities_data:
teacher.specialities.set(specialities_data)
if associated_profile:
teacher.associated_profile = associated_profile
if profile_role:
teacher.profile_role = profile_role
teacher.save()
return teacher
@ -54,7 +56,7 @@ class TeacherSerializer(serializers.ModelSerializer):
instance.last_name = validated_data.get('last_name', instance.last_name)
instance.first_name = validated_data.get('first_name', instance.first_name)
instance.email = validated_data.get('email', instance.email)
instance.associated_profile = validated_data.get('associated_profile', instance.associated_profile)
instance.profile_role = validated_data.get('profile_role', instance.profile_role)
instance.save()
if specialities_data:
instance.specialities.set(specialities_data)
@ -64,17 +66,18 @@ class TeacherSerializer(serializers.ModelSerializer):
utc_time = timezone.localtime(obj.updated_date) # Convert to local time
local_tz = pytz.timezone(settings.TZ_APPLI)
local_time = utc_time.astimezone(local_tz)
return local_time.strftime("%d-%m-%Y %H:%M")
def get_droit(self, obj):
if obj.associated_profile:
return obj.associated_profile.droit
return None
def get_role_type(self, obj):
profile_role = obj.profile_role
return {'role_type': profile_role.role_type, 'establishment': profile_role.establishment.name}
def get_specialities_details(self, obj):
return [{'id': speciality.id, 'name': speciality.name, 'color_code': speciality.color_code} for speciality in obj.specialities.all()]
def get_associated_profile_email(self, obj):
return obj.profile_role.profile.email
class PlanningSerializer(serializers.ModelSerializer):
class Meta:
model = Planning
@ -207,9 +210,4 @@ class PaymentPlanSerializer(serializers.ModelSerializer):
class PaymentModeSerializer(serializers.ModelSerializer):
class Meta:
model = PaymentMode
fields = '__all__'
class EstablishmentSerializer(serializers.ModelSerializer):
class Meta:
model = Establishment
fields = '__all__'