mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
refactor: Partie "School"
This commit is contained in:
@ -9,14 +9,14 @@ from django.utils import timezone
|
||||
import pytz
|
||||
|
||||
class SpecialitySerializer(serializers.ModelSerializer):
|
||||
creationDateFormatted = serializers.SerializerMethodField()
|
||||
updated_date_formatted = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Speciality
|
||||
fields = '__all__'
|
||||
|
||||
def get_creationDateFormatted(self, obj):
|
||||
utc_time = timezone.localtime(obj.updatedDate) # Convert to local time
|
||||
def get_updated_date_formatted(self, obj):
|
||||
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)
|
||||
|
||||
@ -27,52 +27,44 @@ class TeacherDetailSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Teacher
|
||||
fields = ['id', 'lastName', 'firstName', 'email', 'specialities']
|
||||
fields = ['id', 'last_name', 'first_name', 'email', 'specialities']
|
||||
|
||||
class TeacherSerializer(serializers.ModelSerializer):
|
||||
specialities = SpecialitySerializer(many=True, read_only=True)
|
||||
specialties_ids = serializers.PrimaryKeyRelatedField(queryset=Speciality.objects.all(), many=True, source='specialities')
|
||||
associatedProfile_id = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), source='associatedProfile', write_only=False, read_only=False)
|
||||
mainClasses = serializers.PrimaryKeyRelatedField(many=True, read_only=True, source='schoolClasses')
|
||||
associatedProfile = ProfileSerializer(read_only=True)
|
||||
rightLabel = serializers.SerializerMethodField()
|
||||
rightValue = serializers.SerializerMethodField()
|
||||
creationDateFormatted = serializers.SerializerMethodField()
|
||||
specialities = serializers.PrimaryKeyRelatedField(queryset=Speciality.objects.all(), many=True, required=False)
|
||||
associated_profile = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), required=True)
|
||||
updated_date_formatted = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Teacher
|
||||
fields = ['id', 'lastName', 'firstName', 'email', 'specialities', 'specialties_ids', 'mainClasses', 'associatedProfile', 'associatedProfile_id', 'rightLabel', 'rightValue', 'updatedDate', 'creationDateFormatted']
|
||||
fields = '__all__'
|
||||
|
||||
def create(self, validated_data):
|
||||
specialties_data = validated_data.pop('specialities', None)
|
||||
associatedProfile = validated_data.pop('associatedProfile', None)
|
||||
specialities_data = validated_data.pop('specialities', None)
|
||||
associated_profile = validated_data.pop('associated_profile', None)
|
||||
teacher = Teacher.objects.create(**validated_data)
|
||||
teacher.specialities.set(specialties_data)
|
||||
if associatedProfile:
|
||||
teacher.associatedProfile = associatedProfile
|
||||
if specialities_data:
|
||||
teacher.specialities.set(specialities_data)
|
||||
if associated_profile:
|
||||
teacher.associated_profile = associated_profile
|
||||
teacher.save()
|
||||
return teacher
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
specialties_data = validated_data.pop('specialities', [])
|
||||
instance.lastName = validated_data.get('lastName', instance.lastName)
|
||||
instance.firstName = validated_data.get('firstName', instance.firstName)
|
||||
specialities_data = validated_data.pop('specialities', [])
|
||||
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.associatedProfile = validated_data.get('associatedProfile', instance.associatedProfile)
|
||||
instance.associated_profile = validated_data.get('associated_profile', instance.associated_profile)
|
||||
instance.save()
|
||||
instance.specialities.set(specialties_data)
|
||||
if specialities_data:
|
||||
instance.specialities.set(specialities_data)
|
||||
return instance
|
||||
|
||||
def get_rightLabel(self, obj):
|
||||
return obj.associatedProfile.get_right_display() if obj.associatedProfile else None
|
||||
|
||||
def get_rightValue(self, obj):
|
||||
return obj.associatedProfile.right if obj.associatedProfile else None
|
||||
|
||||
def get_creationDateFormatted(self, obj):
|
||||
utc_time = timezone.localtime(obj.updatedDate) # Convert to local time
|
||||
def get_updated_date_formatted(self, obj):
|
||||
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")
|
||||
|
||||
class PlanningSerializer(serializers.ModelSerializer):
|
||||
@ -86,65 +78,55 @@ class PlanningSerializer(serializers.ModelSerializer):
|
||||
return internal_value
|
||||
|
||||
class SchoolClassSerializer(serializers.ModelSerializer):
|
||||
creationDateFormatted = serializers.SerializerMethodField()
|
||||
teachers = TeacherSerializer(many=True, read_only=True)
|
||||
teachers_ids = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, source='teachers')
|
||||
students = serializers.SerializerMethodField()
|
||||
levels = serializers.ListField(child=serializers.ChoiceField(choices=LEVEL_CHOICES))
|
||||
plannings_read = serializers.SerializerMethodField()
|
||||
plannings = PlanningSerializer(many=True, write_only=True)
|
||||
updated_date_formatted = serializers.SerializerMethodField()
|
||||
teachers = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, required=False)
|
||||
|
||||
class Meta:
|
||||
model = SchoolClass
|
||||
fields = [
|
||||
'id', 'atmosphereName', 'ageGroup', 'numberOfStudents', 'teachingLanguage',
|
||||
'teachers', 'teachers_ids', 'schoolYear', 'updatedDate',
|
||||
'creationDateFormatted', 'students', 'levels', 'type', 'schedule',
|
||||
'openingDays', 'plannings', 'plannings_read'
|
||||
]
|
||||
fields = '__all__'
|
||||
|
||||
def create(self, validated_data):
|
||||
teachers_data = validated_data.pop('teachers', [])
|
||||
levels_data = validated_data.pop('levels', [])
|
||||
plannings_data = validated_data.pop('plannings', [])
|
||||
|
||||
classModel = SchoolClass.objects.create(
|
||||
atmosphereName=validated_data.get('atmosphereName', ''),
|
||||
ageGroup=validated_data.get('ageGroup', []),
|
||||
numberOfStudents=validated_data.get('numberOfStudents', 0),
|
||||
teachingLanguage=validated_data.get('teachingLanguage', ''),
|
||||
schoolYear=validated_data.get('schoolYear', ''),
|
||||
school_class = SchoolClass.objects.create(
|
||||
atmosphere_name=validated_data.get('atmosphere_name', ''),
|
||||
age_range=validated_data.get('age_range', []),
|
||||
number_of_students=validated_data.get('number_of_students', 0),
|
||||
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
|
||||
schedule=validated_data.get('schedule', ['08:30', '17:30']), # Added here
|
||||
openingDays=validated_data.get('openingDays', [1, 2, 4, 5]) # 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
|
||||
)
|
||||
|
||||
classModel.teachers.set(teachers_data)
|
||||
school_class.teachers.set(teachers_data)
|
||||
|
||||
for planning_data in plannings_data:
|
||||
Planning.objects.create(
|
||||
classModel=classModel,
|
||||
school_class=school_class,
|
||||
level=planning_data['level'],
|
||||
schedule=planning_data.get('schedule', {})
|
||||
)
|
||||
|
||||
return classModel
|
||||
return school_class
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
teachers_data = validated_data.pop('teachers', [])
|
||||
levels_data = validated_data.pop('levels', [])
|
||||
plannings_data = validated_data.pop('plannings', [])
|
||||
|
||||
instance.atmosphereName = validated_data.get('atmosphereName', instance.atmosphereName)
|
||||
instance.ageGroup = validated_data.get('ageGroup', instance.ageGroup)
|
||||
instance.numberOfStudents = validated_data.get('numberOfStudents', instance.numberOfStudents)
|
||||
instance.teachingLanguage = validated_data.get('teachingLanguage', instance.teachingLanguage)
|
||||
instance.schoolYear = validated_data.get('schoolYear', instance.schoolYear)
|
||||
instance.atmosphere_name = validated_data.get('atmosphere_name', instance.atmosphere_name)
|
||||
instance.age_range = validated_data.get('age_range', instance.age_range)
|
||||
instance.number_of_students = validated_data.get('number_of_students', instance.number_of_students)
|
||||
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.schedule = validated_data.get('schedule', instance.schedule) # Added here
|
||||
instance.openingDays = validated_data.get('openingDays', instance.openingDays) # 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.save()
|
||||
instance.teachers.set(teachers_data)
|
||||
@ -161,34 +143,15 @@ class SchoolClassSerializer(serializers.ModelSerializer):
|
||||
else:
|
||||
# Create new planning if level not existing
|
||||
Planning.objects.create(
|
||||
classModel=instance,
|
||||
school_class=instance,
|
||||
level=level,
|
||||
schedule=planning_data.get('schedule', {})
|
||||
)
|
||||
|
||||
return instance
|
||||
|
||||
def get_creationDateFormatted(self, obj):
|
||||
utc_time = timezone.localtime(obj.updatedDate)
|
||||
def get_updated_date_formatted(self, obj):
|
||||
utc_time = timezone.localtime(obj.updated_date)
|
||||
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_students(self, obj):
|
||||
studentsList = obj.students.all()
|
||||
filtered_students = []
|
||||
for student in studentsList:
|
||||
registrationForm = bdd.getObject(RegistrationForm, "student__id", student.id)
|
||||
if registrationForm.status == registrationForm.RegistrationFormStatus.RF_VALIDATED:
|
||||
filtered_students.append(student)
|
||||
return StudentSerializer(filtered_students, many=True, read_only=True).data
|
||||
|
||||
def get_plannings_read(self, obj):
|
||||
plannings = obj.plannings.all()
|
||||
levels_dict = {level: {'level': level, 'planning': None} for level in obj.levels}
|
||||
|
||||
for planning in plannings:
|
||||
if planning.level in levels_dict:
|
||||
levels_dict[planning.level]['planning'] = PlanningSerializer(planning).data
|
||||
|
||||
return list(levels_dict.values())
|
||||
return local_time.strftime("%d-%m-%Y %H:%M")
|
||||
Reference in New Issue
Block a user