mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Gestion multi-profil multi-école
This commit is contained in:
@ -1,48 +1,97 @@
|
||||
from rest_framework import serializers
|
||||
from Auth.models import Profile
|
||||
from Auth.models import Profile, ProfileRole
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
class ProfileRoleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProfileRole
|
||||
fields = ['role_type', 'establishment', 'is_active', 'profile']
|
||||
|
||||
class ProfileSerializer(serializers.ModelSerializer):
|
||||
id = serializers.IntegerField(required=False)
|
||||
password = serializers.CharField(write_only=True)
|
||||
roles = ProfileRoleSerializer(many=True, required=False)
|
||||
|
||||
class Meta:
|
||||
model = Profile
|
||||
fields = ['id', 'password', 'email', 'code', 'datePeremption', 'estConnecte', 'droit', 'username', 'is_active', 'establishment']
|
||||
fields = ['id', 'password', 'email', 'code', 'datePeremption', 'username', 'roles']
|
||||
extra_kwargs = {'password': {'write_only': True}}
|
||||
|
||||
def create(self, validated_data):
|
||||
roles_data = validated_data.pop('roles', [])
|
||||
user = Profile(
|
||||
username=validated_data['username'],
|
||||
email=validated_data['email'],
|
||||
is_active=validated_data['is_active'],
|
||||
droit=validated_data['droit'],
|
||||
establishment=validated_data.get('establishment')
|
||||
code=validated_data.get('code', ''),
|
||||
datePeremption=validated_data.get('datePeremption', '')
|
||||
)
|
||||
user.set_password(validated_data['password'])
|
||||
user.full_clean()
|
||||
user.save()
|
||||
|
||||
for role_data in roles_data:
|
||||
ProfileRole.objects.create(profile=user, **role_data)
|
||||
|
||||
return user
|
||||
|
||||
def to_representation(self, instance):
|
||||
ret = super().to_representation(instance)
|
||||
ret['password'] = '********'
|
||||
return ret
|
||||
|
||||
class ProfilUpdateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Profile
|
||||
fields = ['id', 'password', 'email', 'code', 'datePeremption', 'estConnecte', 'droit', 'username', 'is_active']
|
||||
extra_kwargs = {
|
||||
'password': {'write_only': True, 'required': False}
|
||||
}
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
roles_data = validated_data.pop('roles', [])
|
||||
password = validated_data.pop('password', None)
|
||||
instance = super().update(instance, validated_data)
|
||||
|
||||
if password:
|
||||
instance.set_password(password)
|
||||
instance.save()
|
||||
|
||||
instance.full_clean()
|
||||
instance.save()
|
||||
|
||||
for role_data in roles_data:
|
||||
ProfileRole.objects.update_or_create(
|
||||
profile=instance,
|
||||
establishment_id=role_data.get('establishment_id'),
|
||||
defaults={
|
||||
'role_type': role_data.get('role_type'),
|
||||
'is_active': role_data.get('is_active', True)
|
||||
}
|
||||
)
|
||||
|
||||
return instance
|
||||
|
||||
def to_representation(self, instance):
|
||||
ret = super().to_representation(instance)
|
||||
ret['password'] = '********'
|
||||
return ret
|
||||
|
||||
class ProfilUpdateSerializer(serializers.ModelSerializer):
|
||||
roles = ProfileRoleSerializer(many=True, required=False)
|
||||
|
||||
class Meta:
|
||||
model = Profile
|
||||
fields = ['id', 'password', 'email', 'code', 'datePeremption', 'username', 'roles']
|
||||
extra_kwargs = {
|
||||
'password': {'write_only': True, 'required': False}
|
||||
}
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
roles_data = validated_data.pop('roles', [])
|
||||
password = validated_data.pop('password', None)
|
||||
instance = super().update(instance, validated_data)
|
||||
|
||||
if password:
|
||||
instance.set_password(password)
|
||||
|
||||
instance.full_clean()
|
||||
instance.save()
|
||||
|
||||
for role_data in roles_data:
|
||||
ProfileRole.objects.update_or_create(
|
||||
profile=instance,
|
||||
establishment_id=role_data.get('establishment_id'),
|
||||
defaults={
|
||||
'role_type': role_data.get('role_type'),
|
||||
'is_active': role_data.get('is_active', True)
|
||||
}
|
||||
)
|
||||
|
||||
return instance
|
||||
|
||||
|
||||
Reference in New Issue
Block a user